From 003e86fe38ca1b809418f6282336e259862d0776 Mon Sep 17 00:00:00 2001 From: Soumadipta Roy Date: Thu, 18 Apr 2024 07:57:11 +0000 Subject: [PATCH 001/141] 8324755: Enable parallelism in vmTestbase/gc/gctests/LargeObjects tests Reviewed-by: shade, lmesnik --- .../LargeObjects/large001/TEST.properties | 23 ------------------- .../LargeObjects/large002/TEST.properties | 23 ------------------- .../LargeObjects/large003/TEST.properties | 23 ------------------- .../LargeObjects/large004/TEST.properties | 23 ------------------- .../LargeObjects/large005/TEST.properties | 23 ------------------- 5 files changed, 115 deletions(-) delete mode 100644 test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large001/TEST.properties delete mode 100644 test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large002/TEST.properties delete mode 100644 test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large003/TEST.properties delete mode 100644 test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large004/TEST.properties delete mode 100644 test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large005/TEST.properties diff --git a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large001/TEST.properties b/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large001/TEST.properties deleted file mode 100644 index 04b22a107ac61..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large001/TEST.properties +++ /dev/null @@ -1,23 +0,0 @@ -# -# 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 -# 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. -# -exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large002/TEST.properties b/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large002/TEST.properties deleted file mode 100644 index 04b22a107ac61..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large002/TEST.properties +++ /dev/null @@ -1,23 +0,0 @@ -# -# 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 -# 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. -# -exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large003/TEST.properties b/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large003/TEST.properties deleted file mode 100644 index 04b22a107ac61..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large003/TEST.properties +++ /dev/null @@ -1,23 +0,0 @@ -# -# 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 -# 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. -# -exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large004/TEST.properties b/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large004/TEST.properties deleted file mode 100644 index 04b22a107ac61..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large004/TEST.properties +++ /dev/null @@ -1,23 +0,0 @@ -# -# 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 -# 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. -# -exclusiveAccess.dirs=. diff --git a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large005/TEST.properties b/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large005/TEST.properties deleted file mode 100644 index 04b22a107ac61..0000000000000 --- a/test/hotspot/jtreg/vmTestbase/gc/gctests/LargeObjects/large005/TEST.properties +++ /dev/null @@ -1,23 +0,0 @@ -# -# 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 -# 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. -# -exclusiveAccess.dirs=. From 5eb2c596e2ca38025dfb9f8e37703036d0bcda19 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang Date: Thu, 18 Apr 2024 08:25:19 +0000 Subject: [PATCH 002/141] 8330475: Remove unused default value for ModRefBarrierSet::write_ref_array_pre Reviewed-by: gli, tschatzl --- src/hotspot/share/gc/shared/modRefBarrierSet.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp b/src/hotspot/share/gc/shared/modRefBarrierSet.hpp index 6c591e2b8b5e2..b490524feedb6 100644 --- a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp +++ b/src/hotspot/share/gc/shared/modRefBarrierSet.hpp @@ -61,9 +61,9 @@ class ModRefBarrierSet: public BarrierSet { // Below length is the # array elements being written virtual void write_ref_array_pre(oop* dst, size_t length, - bool dest_uninitialized = false) {} + bool dest_uninitialized) {} virtual void write_ref_array_pre(narrowOop* dst, size_t length, - bool dest_uninitialized = false) {} + bool dest_uninitialized) {} // Below count is the # array elements being written, starting // at the address "start", which may not necessarily be HeapWord-aligned inline void write_ref_array(HeapWord* start, size_t count); From 4b55fe577701317e6570f045ed9fe28aa97fc7ea Mon Sep 17 00:00:00 2001 From: Matthias Baesken Date: Thu, 18 Apr 2024 10:03:41 +0000 Subject: [PATCH 003/141] 8330520: linux clang build fails in os_linux.cpp with static_assert with no message is a C++17 extension Reviewed-by: stefank, mdoerr --- src/hotspot/os/linux/os_linux.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index 974ca7c8553b1..24e80accfdeb7 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -2972,7 +2972,7 @@ void os::pd_commit_memory_or_exit(char* addr, size_t size, bool exec, #define MADV_POPULATE_WRITE MADV_POPULATE_WRITE_value #else // Sanity-check our assumed default value if we build with a new enough libc. - static_assert(MADV_POPULATE_WRITE == MADV_POPULATE_WRITE_value); + STATIC_ASSERT(MADV_POPULATE_WRITE == MADV_POPULATE_WRITE_value); #endif // Note that the value for MAP_FIXED_NOREPLACE differs between architectures, but all architectures @@ -2982,7 +2982,7 @@ void os::pd_commit_memory_or_exit(char* addr, size_t size, bool exec, #define MAP_FIXED_NOREPLACE MAP_FIXED_NOREPLACE_value #else // Sanity-check our assumed default value if we build with a new enough libc. - static_assert(MAP_FIXED_NOREPLACE == MAP_FIXED_NOREPLACE_value, "MAP_FIXED_NOREPLACE != MAP_FIXED_NOREPLACE_value"); + STATIC_ASSERT(MAP_FIXED_NOREPLACE == MAP_FIXED_NOREPLACE_value); #endif int os::Linux::commit_memory_impl(char* addr, size_t size, From b0496096dc8d7dc7acf28aa006141a3ecea446de Mon Sep 17 00:00:00 2001 From: Hamlin Li Date: Thu, 18 Apr 2024 11:13:10 +0000 Subject: [PATCH 004/141] 8330094: RISC-V: Save and restore FRM in the call stub Reviewed-by: fyang, luhenry --- src/hotspot/cpu/riscv/frame_riscv.hpp | 2 +- src/hotspot/cpu/riscv/riscv_v.ad | 9 ------- src/hotspot/cpu/riscv/stubGenerator_riscv.cpp | 27 ++++++++++++++++--- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/hotspot/cpu/riscv/frame_riscv.hpp b/src/hotspot/cpu/riscv/frame_riscv.hpp index 15fe0e8f1f8aa..3692c99193e1a 100644 --- a/src/hotspot/cpu/riscv/frame_riscv.hpp +++ b/src/hotspot/cpu/riscv/frame_riscv.hpp @@ -131,7 +131,7 @@ // Entry frames // n.b. these values are determined by the layout defined in // stubGenerator for the Java call stub - entry_frame_after_call_words = 34, + entry_frame_after_call_words = 35, entry_frame_call_wrapper_offset = -10, // we don't need a save area diff --git a/src/hotspot/cpu/riscv/riscv_v.ad b/src/hotspot/cpu/riscv/riscv_v.ad index 36f4d499c38b4..86309ec912844 100644 --- a/src/hotspot/cpu/riscv/riscv_v.ad +++ b/src/hotspot/cpu/riscv/riscv_v.ad @@ -2986,7 +2986,6 @@ instruct vloadcon(vReg dst, immI0 src) %{ __ vsetvli_helper(bt, Matcher::vector_length(this)); __ vid_v(as_VectorRegister($dst$$reg)); if (is_floating_point_type(bt)) { - __ csrwi(CSR_FRM, C2_MacroAssembler::rne); __ vfcvt_f_x_v(as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg)); } %} @@ -3201,7 +3200,6 @@ instruct vcvtBtoX(vReg dst, vReg src) %{ __ integer_extend_v(as_VectorRegister($dst$$reg), bt == T_FLOAT ? T_INT : T_LONG, Matcher::vector_length(this), as_VectorRegister($src$$reg), T_BYTE, true /* is_signed */); - __ csrwi(CSR_FRM, C2_MacroAssembler::rne); __ vfcvt_f_x_v(as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg)); } else { __ integer_extend_v(as_VectorRegister($dst$$reg), bt, @@ -3267,7 +3265,6 @@ instruct vcvtStoX_fp(vReg dst, vReg src) %{ Matcher::vector_length(this), as_VectorRegister($src$$reg), T_SHORT, true /* is_signed */); __ vsetvli_helper(bt, Matcher::vector_length(this)); - __ csrwi(CSR_FRM, C2_MacroAssembler::rne); __ vfcvt_f_x_v(as_VectorRegister($dst$$reg), as_VectorRegister($dst$$reg)); %} ins_pipe(pipe_slow); @@ -3335,7 +3332,6 @@ instruct vcvtItoF(vReg dst, vReg src) %{ format %{ "vcvtItoF $dst, $src" %} ins_encode %{ __ vsetvli_helper(T_FLOAT, Matcher::vector_length(this)); - __ csrwi(CSR_FRM, C2_MacroAssembler::rne); __ vfcvt_f_x_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); %} ins_pipe(pipe_slow); @@ -3348,7 +3344,6 @@ instruct vcvtItoD(vReg dst, vReg src) %{ format %{ "vcvtItoD $dst, $src" %} ins_encode %{ __ vsetvli_helper(T_INT, Matcher::vector_length(this), Assembler::mf2); - __ csrwi(CSR_FRM, C2_MacroAssembler::rne); __ vfwcvt_f_x_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); %} ins_pipe(pipe_slow); @@ -3376,7 +3371,6 @@ instruct vcvtLtoF(vReg dst, vReg src) %{ format %{ "vcvtLtoF $dst, $src" %} ins_encode %{ __ vsetvli_helper(T_FLOAT, Matcher::vector_length(this), Assembler::mf2); - __ csrwi(CSR_FRM, C2_MacroAssembler::rne); __ vfncvt_f_x_w(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); %} ins_pipe(pipe_slow); @@ -3388,7 +3382,6 @@ instruct vcvtLtoD(vReg dst, vReg src) %{ format %{ "vcvtLtoD $dst, $src" %} ins_encode %{ __ vsetvli_helper(T_DOUBLE, Matcher::vector_length(this)); - __ csrwi(CSR_FRM, C2_MacroAssembler::rne); __ vfcvt_f_x_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); %} ins_pipe(pipe_slow); @@ -3446,7 +3439,6 @@ instruct vcvtFtoD(vReg dst, vReg src) %{ format %{ "vcvtFtoD $dst, $src" %} ins_encode %{ __ vsetvli_helper(T_FLOAT, Matcher::vector_length(this), Assembler::mf2); - __ csrwi(CSR_FRM, C2_MacroAssembler::rne); __ vfwcvt_f_f_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); %} ins_pipe(pipe_slow); @@ -3494,7 +3486,6 @@ instruct vcvtDtoF(vReg dst, vReg src) %{ format %{ "vcvtDtoF $dst, $src" %} ins_encode %{ __ vsetvli_helper(T_FLOAT, Matcher::vector_length(this), Assembler::mf2); - __ csrwi(CSR_FRM, C2_MacroAssembler::rne); __ vfncvt_f_f_w(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); %} ins_pipe(pipe_slow); diff --git a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp index df447abaa068a..7ee17438b284e 100644 --- a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp +++ b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp @@ -127,8 +127,9 @@ class StubGenerator: public StubCodeGenerator { // [ return_from_Java ] <--- sp // [ argument word n ] // ... - // -34 [ argument word 1 ] - // -33 [ saved f27 ] <--- sp_after_call + // -35 [ argument word 1 ] + // -34 [ saved FRM in Floating-point Control and Status Register ] <--- sp_after_call + // -33 [ saved f27 ] // -32 [ saved f26 ] // -31 [ saved f25 ] // -30 [ saved f24 ] @@ -165,8 +166,9 @@ class StubGenerator: public StubCodeGenerator { // Call stub stack layout word offsets from fp enum call_stub_layout { - sp_after_call_off = -33, + sp_after_call_off = -34, + frm_off = sp_after_call_off, f27_off = -33, f26_off = -32, f25_off = -31, @@ -214,6 +216,7 @@ class StubGenerator: public StubCodeGenerator { const Address sp_after_call (fp, sp_after_call_off * wordSize); + const Address frm_save (fp, frm_off * wordSize); const Address call_wrapper (fp, call_wrapper_off * wordSize); const Address result (fp, result_off * wordSize); const Address result_type (fp, result_type_off * wordSize); @@ -296,6 +299,16 @@ class StubGenerator: public StubCodeGenerator { __ fsd(f26, f26_save); __ fsd(f27, f27_save); + __ frrm(t0); + __ sd(t0, frm_save); + // Set frm to the state we need. We do want Round to Nearest. We + // don't want non-IEEE rounding modes. + Label skip_fsrmi; + guarantee(__ RoundingMode::rne == 0, "must be"); + __ beqz(t0, skip_fsrmi); + __ fsrmi(__ RoundingMode::rne); + __ bind(skip_fsrmi); + // install Java thread in global register now we have saved // whatever value it held __ mv(xthread, c_rarg7); @@ -415,6 +428,14 @@ class StubGenerator: public StubCodeGenerator { __ ld(x9, x9_save); + // restore frm + Label skip_fsrm; + __ ld(t0, frm_save); + __ frrm(t1); + __ beq(t0, t1, skip_fsrm); + __ fsrm(t0); + __ bind(skip_fsrm); + __ ld(c_rarg0, call_wrapper); __ ld(c_rarg1, result); __ ld(c_rarg2, result_type); From 60b65e60906026b3cd5e8829c464a31df5898bdc Mon Sep 17 00:00:00 2001 From: Coleen Phillimore Date: Thu, 18 Apr 2024 11:21:39 +0000 Subject: [PATCH 005/141] 8325872: Make GuaranteedSafepointInterval default 0 Reviewed-by: shade, eosterlund, dcubed --- src/hotspot/share/runtime/arguments.cpp | 5 +++ src/hotspot/share/runtime/globals.hpp | 7 ++- .../share/runtime/monitorDeflationThread.cpp | 9 +--- src/hotspot/share/runtime/vmThread.cpp | 43 ++++++------------- src/hotspot/share/runtime/vmThread.hpp | 5 +-- 5 files changed, 25 insertions(+), 44 deletions(-) diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index f8e9629d94a28..9ff8b87869236 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -3646,6 +3646,11 @@ jint Arguments::parse(const JavaVMInitArgs* initial_cmd_args) { apply_debugger_ergo(); + // The VMThread needs to stop now and then to execute these debug options. + if ((HandshakeALot || SafepointALot) && FLAG_IS_DEFAULT(GuaranteedSafepointInterval)) { + FLAG_SET_DEFAULT(GuaranteedSafepointInterval, 1000); + } + if (log_is_enabled(Info, arguments)) { LogStream st(Log(arguments)::info()); Arguments::print_on(&st); diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index ef6c0dcd9f619..d62403a29d53e 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -744,9 +744,8 @@ const int ObjectAlignmentInBytes = 8; \ product(int, MonitorUsedDeflationThreshold, 90, DIAGNOSTIC, \ "Percentage of used monitors before triggering deflation (0 is " \ - "off). The check is performed on GuaranteedSafepointInterval, " \ - "AsyncDeflationInterval or GuaranteedAsyncDeflationInterval, " \ - "whichever is lower.") \ + "off). The check is performed on AsyncDeflationInterval or " \ + "GuaranteedAsyncDeflationInterval, whichever is lower.") \ range(0, 100) \ \ product(uintx, NoAsyncDeflationProgressMax, 3, DIAGNOSTIC, \ @@ -1277,7 +1276,7 @@ const int ObjectAlignmentInBytes = 8; \ /* notice: the max range value here is max_jint, not max_intx */ \ /* because of overflow issue */ \ - product(intx, GuaranteedSafepointInterval, 1000, DIAGNOSTIC, \ + product(intx, GuaranteedSafepointInterval, 0, DIAGNOSTIC, \ "Guarantee a safepoint (at least) every so many milliseconds " \ "(0 means none)") \ range(0, max_jint) \ diff --git a/src/hotspot/share/runtime/monitorDeflationThread.cpp b/src/hotspot/share/runtime/monitorDeflationThread.cpp index d3109c07c167f..128e1dd1a7103 100644 --- a/src/hotspot/share/runtime/monitorDeflationThread.cpp +++ b/src/hotspot/share/runtime/monitorDeflationThread.cpp @@ -50,11 +50,7 @@ void MonitorDeflationThread::initialize() { void MonitorDeflationThread::monitor_deflation_thread_entry(JavaThread* jt, TRAPS) { - // We wait for the lowest of these three intervals: - // - GuaranteedSafepointInterval - // While deflation is not related to safepoint anymore, this keeps compatibility with - // the old behavior when deflation also happened at safepoints. Users who set this - // option to get more/less frequent deflations would be served with this option. + // We wait for the lowest of these two intervals: // - AsyncDeflationInterval // Normal threshold-based deflation heuristic checks the conditions at this interval. // See is_async_deflation_needed(). @@ -63,9 +59,6 @@ void MonitorDeflationThread::monitor_deflation_thread_entry(JavaThread* jt, TRAP // See is_async_deflation_needed(). // intx wait_time = max_intx; - if (GuaranteedSafepointInterval > 0) { - wait_time = MIN2(wait_time, GuaranteedSafepointInterval); - } if (AsyncDeflationInterval > 0) { wait_time = MIN2(wait_time, AsyncDeflationInterval); } diff --git a/src/hotspot/share/runtime/vmThread.cpp b/src/hotspot/share/runtime/vmThread.cpp index de0567ab0378f..8ed212d515a9c 100644 --- a/src/hotspot/share/runtime/vmThread.cpp +++ b/src/hotspot/share/runtime/vmThread.cpp @@ -308,40 +308,26 @@ class HandshakeALotClosure : public HandshakeClosure { } }; -bool VMThread::handshake_alot() { +bool VMThread::handshake_or_safepoint_alot() { assert(_cur_vm_operation == nullptr, "should not have an op yet"); assert(_next_vm_operation == nullptr, "should not have an op yet"); - if (!HandshakeALot) { + if (!HandshakeALot && !SafepointALot) { return false; } - static jlong last_halot_ms = 0; + static jlong last_alot_ms = 0; jlong now_ms = nanos_to_millis(os::javaTimeNanos()); - // If only HandshakeALot is set, but GuaranteedSafepointInterval is 0, - // we emit a handshake if it's been more than a second since the last one. + // If HandshakeALot or SafepointALot are set, but GuaranteedSafepointInterval is explicitly + // set to 0 on the command line, we emit the operation if it's been more than a second + // since the last one. jlong interval = GuaranteedSafepointInterval != 0 ? GuaranteedSafepointInterval : 1000; - jlong deadline_ms = interval + last_halot_ms; + jlong deadline_ms = interval + last_alot_ms; if (now_ms > deadline_ms) { - last_halot_ms = now_ms; + last_alot_ms = now_ms; return true; } return false; } -void VMThread::setup_periodic_safepoint_if_needed() { - assert(_cur_vm_operation == nullptr, "Already have an op"); - assert(_next_vm_operation == nullptr, "Already have an op"); - // Check for a cleanup before SafepointALot to keep stats correct. - jlong interval_ms = SafepointTracing::time_since_last_safepoint_ms(); - bool max_time_exceeded = GuaranteedSafepointInterval != 0 && - (interval_ms >= GuaranteedSafepointInterval); - if (!max_time_exceeded) { - return; - } - if (SafepointALot) { - _next_vm_operation = &safepointALot_op; - } -} - bool VMThread::set_next_operation(VM_Operation *op) { if (_next_vm_operation != nullptr) { return false; @@ -465,8 +451,8 @@ void VMThread::wait_for_operation() { if (_next_vm_operation != nullptr) { return; } - if (handshake_alot()) { - { + if (handshake_or_safepoint_alot()) { + if (HandshakeALot) { MutexUnlocker mul(VMOperation_lock); HandshakeALotClosure hal_cl; Handshake::execute(&hal_cl); @@ -475,15 +461,14 @@ void VMThread::wait_for_operation() { if (_next_vm_operation != nullptr) { return; } + if (SafepointALot) { + _next_vm_operation = &safepointALot_op; + return; + } } assert(_next_vm_operation == nullptr, "Must be"); assert(_cur_vm_operation == nullptr, "Must be"); - setup_periodic_safepoint_if_needed(); - if (_next_vm_operation != nullptr) { - return; - } - // We didn't find anything to execute, notify any waiter so they can install an op. ml_op_lock.notify_all(); ml_op_lock.wait(GuaranteedSafepointInterval); diff --git a/src/hotspot/share/runtime/vmThread.hpp b/src/hotspot/share/runtime/vmThread.hpp index 6c87544acab9e..668ea4ce4e2d1 100644 --- a/src/hotspot/share/runtime/vmThread.hpp +++ b/src/hotspot/share/runtime/vmThread.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, 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 @@ -70,8 +70,7 @@ class VMThread: public NamedThread { static VMOperationTimeoutTask* _timeout_task; - static bool handshake_alot(); - static void setup_periodic_safepoint_if_needed(); + static bool handshake_or_safepoint_alot(); void evaluate_operation(VM_Operation* op); void inner_execute(VM_Operation* op); From b648ed0a08b5ed47c1a7d7cbca89d8f389b17013 Mon Sep 17 00:00:00 2001 From: Per Minborg Date: Thu, 18 Apr 2024 11:22:47 +0000 Subject: [PATCH 006/141] 8329997: Add provisions for checking memory segment alignment constraints Reviewed-by: jvernee, mcimadamore --- .../java/lang/foreign/MemorySegment.java | 39 ++++++++- .../foreign/HeapMemorySegmentImpl.java | 9 +- .../foreign/NativeMemorySegmentImpl.java | 9 +- .../jdk/java/foreign/TestMemoryAlignment.java | 82 ++++++++++++++++++- 4 files changed, 133 insertions(+), 6 deletions(-) diff --git a/src/java.base/share/classes/java/lang/foreign/MemorySegment.java b/src/java.base/share/classes/java/lang/foreign/MemorySegment.java index a58595cb5416b..95195ef81bfe1 100644 --- a/src/java.base/share/classes/java/lang/foreign/MemorySegment.java +++ b/src/java.base/share/classes/java/lang/foreign/MemorySegment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,7 +44,6 @@ import jdk.internal.foreign.AbstractMemorySegmentImpl; import jdk.internal.foreign.MemorySessionImpl; import jdk.internal.foreign.SegmentFactories; -import jdk.internal.foreign.Utils; import jdk.internal.javac.Restricted; import jdk.internal.reflect.CallerSensitive; import jdk.internal.vm.annotation.ForceInline; @@ -95,6 +94,11 @@ * address of the region of memory which backs the segment. * *

+ * Every memory segment has a {@linkplain #maxByteAlignment() maximum byte alignment}, + * expressed as a {@code long} value. The maximum alignment is always a power of two, + * derived from the segment address, and the segment type, as explained in more detail + * below. + *

* Every memory segment has a {@linkplain #byteSize() size}. The size of a heap segment * is derived from the Java array from which it is obtained. This size is predictable * across Java runtimes. The size of a native segment is either passed explicitly @@ -394,6 +398,14 @@ * byteSegment.get(ValueLayout.JAVA_INT_UNALIGNED, 0); // ok: ValueLayout.JAVA_INT_UNALIGNED.byteAlignment() == ValueLayout.JAVA_BYTE.byteAlignment() * } * + * Clients can use the {@linkplain MemorySegment#maxByteAlignment()} method to check if + * a memory segment supports the alignment constraint of a memory layout, as follows: + * {@snippet lang=java: + * MemoryLayout layout = ... + * MemorySegment segment = ... + * boolean isAligned = segment.maxByteAlignment() >= layout.byteAlignment(); + * } + * *

Zero-length memory segments

* * When interacting with foreign functions, it is @@ -589,6 +601,26 @@ public sealed interface MemorySegment permits AbstractMemorySegmentImpl { */ long byteSize(); + /** + * {@return the maximum byte alignment + * associated with this memory segment} + *

+ * The returned alignment is always a power of two and is derived from + * the segment {@linkplain #address() address()} and, if it is a heap segment, + * the type of the {@linkplain #heapBase() backing heap storage}. + *

+ * This method can be used to ensure that a segment is sufficiently aligned + * with a layout: + * {@snippet lang=java: + * MemoryLayout layout = ... + * MemorySegment segment = ... + * if (segment.maxByteAlignment() < layout.byteAlignment()) { + * // Take action (e.g. throw an Exception) + * } + * } + */ + long maxByteAlignment(); + /** * Returns a slice of this memory segment, at the given offset. The returned * segment's address is the address of this segment plus the given offset; @@ -1424,6 +1456,9 @@ static MemorySegment ofArray(double[] doubleArray) { /** * A zero-length native segment modelling the {@code NULL} address. Equivalent to * {@code MemorySegment.ofAddress(0L)}. + *

+ * The {@linkplain MemorySegment#maxByteAlignment() maximum byte alignment} for + * the {@code NULL} segment is of 262. */ MemorySegment NULL = MemorySegment.ofAddress(0L); diff --git a/src/java.base/share/classes/jdk/internal/foreign/HeapMemorySegmentImpl.java b/src/java.base/share/classes/jdk/internal/foreign/HeapMemorySegmentImpl.java index 0b95c43b44040..2512b9e54a47d 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/HeapMemorySegmentImpl.java +++ b/src/java.base/share/classes/jdk/internal/foreign/HeapMemorySegmentImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -77,6 +77,13 @@ public long unsafeGetOffset() { return offset; } + @Override + public final long maxByteAlignment() { + return address() == 0 + ? maxAlignMask() + : Math.min(maxAlignMask(), Long.lowestOneBit(address())); + } + @Override abstract HeapMemorySegmentImpl dup(long offset, long size, boolean readOnly, MemorySessionImpl scope); diff --git a/src/java.base/share/classes/jdk/internal/foreign/NativeMemorySegmentImpl.java b/src/java.base/share/classes/jdk/internal/foreign/NativeMemorySegmentImpl.java index 5427c9f810f8c..c2043cf4267af 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/NativeMemorySegmentImpl.java +++ b/src/java.base/share/classes/jdk/internal/foreign/NativeMemorySegmentImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ package jdk.internal.foreign; -import java.lang.foreign.MemorySegment; import java.nio.ByteBuffer; import java.util.Optional; @@ -61,6 +60,12 @@ public Optional heapBase() { return Optional.empty(); } + public final long maxByteAlignment() { + return address() == 0 + ? 1L << 62 + : Long.lowestOneBit(address()); + } + @ForceInline @Override NativeMemorySegmentImpl dup(long offset, long size, boolean readOnly, MemorySessionImpl scope) { diff --git a/test/jdk/java/foreign/TestMemoryAlignment.java b/test/jdk/java/foreign/TestMemoryAlignment.java index 4d59ba9e4d73b..44d28a07b05e3 100644 --- a/test/jdk/java/foreign/TestMemoryAlignment.java +++ b/test/jdk/java/foreign/TestMemoryAlignment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,11 +26,25 @@ * @run testng TestMemoryAlignment */ +import java.io.File; +import java.io.IOException; import java.lang.foreign.*; import java.lang.foreign.MemoryLayout.PathElement; import java.lang.invoke.VarHandle; +import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; +import java.nio.channels.FileChannel; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.util.stream.LongStream; +import java.util.stream.Stream; import org.testng.annotations.*; import static org.testng.Assert.*; @@ -124,10 +138,76 @@ public void testPackedAccess() { } } + @Test(dataProvider = "alignments") + public void testActualByteAlignment(long align) { + if (align > (1L << 10)) { + return; + } + try (Arena arena = Arena.ofConfined()) { + var segment = arena.allocate(4, align); + assertTrue(segment.maxByteAlignment() >= align); + // Power of two? + assertEquals(Long.bitCount(segment.maxByteAlignment()), 1); + assertEquals(segment.asSlice(1).maxByteAlignment(), 1); + } + } + + public void testActualByteAlignmentMappedSegment() throws IOException { + File tmp = File.createTempFile("tmp", "txt"); + try (FileChannel channel = FileChannel.open(tmp.toPath(), StandardOpenOption.READ, StandardOpenOption.WRITE); + Arena arena = Arena.ofConfined()) { + var segment =channel.map(FileChannel.MapMode.READ_WRITE, 0L, 32L, arena); + // We do not know anything about mapping alignment other than it should + // be positive. + assertTrue(segment.maxByteAlignment() >= Byte.BYTES); + // Power of two? + assertEquals(Long.bitCount(segment.maxByteAlignment()), 1); + assertEquals(segment.asSlice(1).maxByteAlignment(), 1); + } finally { + tmp.delete(); + } + } + + @Test() + public void testActualByteAlignmentNull() { + long alignment = MemorySegment.NULL.maxByteAlignment(); + assertEquals(1L << 62, alignment); + } + + @Test(dataProvider = "heapSegments") + public void testActualByteAlignmentHeap(MemorySegment segment, int bytes) { + assertEquals(segment.maxByteAlignment(), bytes); + // A slice at offset 1 should always have an alignment of 1 + var segmentSlice = segment.asSlice(1); + assertEquals(segmentSlice.maxByteAlignment(), 1); + } + @DataProvider(name = "alignments") public Object[][] createAlignments() { return LongStream.range(1, 20) .mapToObj(v -> new Object[] { 1L << v }) .toArray(Object[][]::new); } + + @DataProvider(name = "heapSegments") + public Object[][] heapSegments() { + return Stream.of( + new Object[]{MemorySegment.ofArray(new byte[]{1}), Byte.BYTES}, + new Object[]{MemorySegment.ofArray(new short[]{1}), Short.BYTES}, + new Object[]{MemorySegment.ofArray(new char[]{1}), Character.BYTES}, + new Object[]{MemorySegment.ofArray(new int[]{1}), Integer.BYTES}, + new Object[]{MemorySegment.ofArray(new long[]{1}), Long.BYTES}, + new Object[]{MemorySegment.ofArray(new float[]{1}), Float.BYTES}, + new Object[]{MemorySegment.ofArray(new double[]{1}), Double.BYTES}, + new Object[]{MemorySegment.ofBuffer(ByteBuffer.allocate(8)), Byte.BYTES}, + new Object[]{MemorySegment.ofBuffer(CharBuffer.allocate(8)), Character.BYTES}, + new Object[]{MemorySegment.ofBuffer(ShortBuffer.allocate(8)), Short.BYTES}, + new Object[]{MemorySegment.ofBuffer(IntBuffer.allocate(8)), Integer.BYTES}, + new Object[]{MemorySegment.ofBuffer(LongBuffer.allocate(8)), Long.BYTES}, + new Object[]{MemorySegment.ofBuffer(FloatBuffer.allocate(8)), Float.BYTES}, + new Object[]{MemorySegment.ofBuffer(DoubleBuffer.allocate(8)), Double.BYTES} + ) + .toArray(Object[][]::new); + } + } From 5853a2c00983028bab684241f428820587186a4e Mon Sep 17 00:00:00 2001 From: Erik Gahlin Date: Thu, 18 Apr 2024 11:59:57 +0000 Subject: [PATCH 007/141] 8330533: JFR: LocalDateTime should not use milliseconds since epoch Reviewed-by: aturbanov, mgronlun --- src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java index 5fe95d179e47d..ff09d58a9c059 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/Repository.java @@ -109,7 +109,7 @@ private static LocalDateTime timestamp() { return LocalDateTime.now(); } catch (DateTimeException d) { Logger.log(LogTag.JFR, LogLevel.INFO, "Could not create LocalDateTime with the default time zone. Using UTC time zone for chunk filename."); - return LocalDateTime.ofEpochSecond(System.currentTimeMillis(), 0, ZoneOffset.UTC); + return LocalDateTime.now(ZoneOffset.UTC); } } From 571e6bc3f7d521d3be7ee1c6c32705c768645b75 Mon Sep 17 00:00:00 2001 From: Fei Yang Date: Thu, 18 Apr 2024 12:48:24 +0000 Subject: [PATCH 008/141] 8330419: Unused code in ConnectionGraph::specialize_castpp Reviewed-by: chagedorn --- src/hotspot/share/opto/escape.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/hotspot/share/opto/escape.cpp b/src/hotspot/share/opto/escape.cpp index 8e08cde686143..2fb5e6b13b392 100644 --- a/src/hotspot/share/opto/escape.cpp +++ b/src/hotspot/share/opto/escape.cpp @@ -697,10 +697,9 @@ Node* ConnectionGraph::specialize_cmp(Node* base, Node* curr_ctrl) { // Node* ConnectionGraph::specialize_castpp(Node* castpp, Node* base, Node* current_control) { Node* control_successor = current_control->unique_ctrl_out(); - Node* minus_one = _igvn->transform(ConINode::make(-1)); Node* cmp = _igvn->transform(specialize_cmp(base, castpp->in(0))); - Node* boll = _igvn->transform(new BoolNode(cmp, BoolTest::ne)); - IfNode* if_ne = _igvn->transform(new IfNode(current_control, boll, PROB_MIN, COUNT_UNKNOWN))->as_If(); + Node* bol = _igvn->transform(new BoolNode(cmp, BoolTest::ne)); + IfNode* if_ne = _igvn->transform(new IfNode(current_control, bol, PROB_MIN, COUNT_UNKNOWN))->as_If(); Node* not_eq_control = _igvn->transform(new IfTrueNode(if_ne)); Node* yes_eq_control = _igvn->transform(new IfFalseNode(if_ne)); Node* end_region = _igvn->transform(new RegionNode(3)); @@ -964,8 +963,8 @@ void ConnectionGraph::reduce_phi_on_cmp(Node* cmp) { Node* ncmp = _igvn->transform(cmp->clone()); ncmp->set_req(1, ophi_input); ncmp->set_req(2, other); - Node* boll = _igvn->transform(new BoolNode(ncmp, mask)); - res_phi_input = boll->as_Bool()->as_int_value(_igvn); + Node* bol = _igvn->transform(new BoolNode(ncmp, mask)); + res_phi_input = bol->as_Bool()->as_int_value(_igvn); } res_phi->set_req(i, res_phi_input); From ec180d4782d39d50d2db3dfbe78e62a215c0a414 Mon Sep 17 00:00:00 2001 From: Tobias Holenstein Date: Thu, 18 Apr 2024 12:53:47 +0000 Subject: [PATCH 009/141] 8324950: IGV: save the state to a file Reviewed-by: rcastanedalo, chagedorn --- .../IdealGraphVisualizer/Coordinator/pom.xml | 5 + .../igv/coordinator/OutlineTopComponent.java | 448 ++++++++++--- .../igv/coordinator/actions/ImportAction.java | 110 +--- .../igv/coordinator/actions/OpenAction.java | 68 ++ .../igv/coordinator/actions/RemoveAction.java | 12 +- .../coordinator/actions/RemoveAllAction.java | 8 +- .../{SaveAllAction.java => SaveAction.java} | 29 +- .../igv/coordinator/actions/SaveAsAction.java | 81 +-- .../hotspot/igv/coordinator/Bundle.properties | 7 +- .../igv/coordinator/actions/Bundle.properties | 11 +- .../hotspot/igv/coordinator/images/import.png | Bin 3497 -> 1294 bytes .../hotspot/igv/coordinator/images/open.png | Bin 0 -> 1143 bytes .../images/{saveall.gif => save_as.gif} | Bin .../com/sun/hotspot/igv/coordinator/layer.xml | 19 +- .../java/com/sun/hotspot/igv/data/Folder.java | 5 +- .../sun/hotspot/igv/data/FolderElement.java | 5 +- .../sun/hotspot/igv/data/GraphDocument.java | 4 +- .../java/com/sun/hotspot/igv/data/Group.java | 13 +- .../igv/data/serialization/Parser.java | 611 ++++++++++-------- .../igv/data/serialization/Printer.java | 151 +++-- .../igv/data/services/GraphViewer.java | 6 +- .../igv/data/services/GroupCallback.java | 36 -- .../igv/data/serialization/ParserTest.java | 13 +- .../sun/hotspot/igv/connection/Client.java | 60 -- .../sun/hotspot/igv/connection/Server.java | 93 +-- .../sun/hotspot/igv/view/DiagramScene.java | 34 +- .../hotspot/igv/view/DiagramViewModel.java | 8 + .../hotspot/igv/view/EditorTopComponent.java | 35 +- .../igv/view/GraphViewerImplementation.java | 26 +- 29 files changed, 1060 insertions(+), 838 deletions(-) create mode 100644 src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/OpenAction.java rename src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/{SaveAllAction.java => SaveAction.java} (77%) create mode 100644 src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/images/open.png rename src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/images/{saveall.gif => save_as.gif} (100%) delete mode 100644 src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/services/GroupCallback.java delete mode 100644 src/utils/IdealGraphVisualizer/NetworkConnection/src/main/java/com/sun/hotspot/igv/connection/Client.java diff --git a/src/utils/IdealGraphVisualizer/Coordinator/pom.xml b/src/utils/IdealGraphVisualizer/Coordinator/pom.xml index 4d773f0d8b344..fcfad0ba23369 100644 --- a/src/utils/IdealGraphVisualizer/Coordinator/pom.xml +++ b/src/utils/IdealGraphVisualizer/Coordinator/pom.xml @@ -88,6 +88,11 @@ org-openide-util-lookup ${netbeans.version} + + org.netbeans.api + org-openide-modules + ${netbeans.version} + org.netbeans.api org-openide-util-ui diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/OutlineTopComponent.java b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/OutlineTopComponent.java index d4764648adf9e..c66c40810c086 100644 --- a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/OutlineTopComponent.java +++ b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/OutlineTopComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -28,21 +28,32 @@ import com.sun.hotspot.igv.data.ChangedListener; import com.sun.hotspot.igv.data.GraphDocument; import com.sun.hotspot.igv.data.InputGraph; -import com.sun.hotspot.igv.data.services.GroupCallback; +import com.sun.hotspot.igv.data.serialization.ParseMonitor; +import com.sun.hotspot.igv.data.serialization.Parser; +import com.sun.hotspot.igv.data.serialization.Printer; +import com.sun.hotspot.igv.data.serialization.Printer.GraphContext; +import com.sun.hotspot.igv.data.services.GraphViewer; import com.sun.hotspot.igv.data.services.InputGraphProvider; +import com.sun.hotspot.igv.settings.Settings; import com.sun.hotspot.igv.util.LookupHistory; import com.sun.hotspot.igv.view.EditorTopComponent; import java.awt.BorderLayout; import java.awt.Dimension; -import java.io.IOException; -import java.io.ObjectInput; -import java.io.ObjectOutput; -import java.util.HashSet; -import java.util.Set; -import javax.swing.UIManager; +import java.io.*; +import java.nio.channels.FileChannel; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import javax.swing.*; import javax.swing.border.Border; +import javax.swing.filechooser.FileFilter; +import org.netbeans.api.progress.ProgressHandle; +import org.netbeans.api.progress.ProgressHandleFactory; import org.openide.ErrorManager; -import org.openide.actions.GarbageCollectAction; import org.openide.awt.Toolbar; import org.openide.awt.ToolbarPool; import org.openide.explorer.ExplorerManager; @@ -50,7 +61,9 @@ import org.openide.explorer.view.BeanTreeView; import org.openide.nodes.Node; import org.openide.util.Exceptions; +import org.openide.util.Lookup; import org.openide.util.NbBundle; +import org.openide.windows.Mode; import org.openide.windows.TopComponent; import org.openide.windows.WindowManager; @@ -60,59 +73,145 @@ */ public final class OutlineTopComponent extends TopComponent implements ExplorerManager.Provider, ChangedListener { - public static OutlineTopComponent instance; public static final String PREFERRED_ID = "OutlineTopComponent"; + private static final GraphDocument document = new GraphDocument(); + private static final int WORK_UNITS = 10000; + private static final FileFilter xmlFileFilter = new FileFilter() { + @Override + public boolean accept(File f) { + return f.getName().toLowerCase().endsWith(".xml") || f.isDirectory(); + } + + @Override + public String getDescription() { + return "Graph files (*.xml)"; + } + }; + private static final Server server = new Server(document, OutlineTopComponent::loadContext); + public static OutlineTopComponent instance; + private final Set selectedFolders = new HashSet<>(); private ExplorerManager manager; - private final GraphDocument document; private FolderNode root; - private SaveAllAction saveAllAction; + private SaveAction saveAction; + private SaveAsAction saveAsAction; private RemoveAllAction removeAllAction; private GraphNode[] selectedGraphs = new GraphNode[0]; - private final Set selectedFolders = new HashSet<>(); + private Path documentPath = null; private OutlineTopComponent() { initComponents(); setName(NbBundle.getMessage(OutlineTopComponent.class, "CTL_OutlineTopComponent")); setToolTipText(NbBundle.getMessage(OutlineTopComponent.class, "HINT_OutlineTopComponent")); - - document = new GraphDocument(); initListView(); initToolbar(); - initReceivers(); + server.startServer(); + } + + public static GraphDocument getDocument() { + return document; + } + + /** + * Gets default instance. Do not use directly: reserved for *.settings files only, + * i.e. deserialization routines; otherwise you could get a non-deserialized instance. + * To obtain the singleton instance, use {@link #findInstance()}. + */ + private static synchronized OutlineTopComponent getDefault() { + if (instance == null) { + instance = new OutlineTopComponent(); + } + return instance; + } + + /** + * Obtain the OutlineTopComponent instance. Never call {@link #getDefault} directly! + */ + public static synchronized OutlineTopComponent findInstance() { + TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID); + if (win == null) { + ErrorManager.getDefault().log(ErrorManager.WARNING, "Cannot find Outline component. It will not be located properly in the window system."); + return getDefault(); + } + if (win instanceof OutlineTopComponent) { + return (OutlineTopComponent) win; + } + ErrorManager.getDefault().log(ErrorManager.WARNING, "There seem to be multiple components with the '" + PREFERRED_ID + "' ID. That is a potential source of errors and unexpected behavior."); + return getDefault(); + } + + /** + * Stores the provided graph document to the designated file path with associated contexts. + */ + private static void saveGraphDocument(GraphDocument doc, String path) throws IOException { + List saveContexts = new ArrayList<>(); + WindowManager manager = WindowManager.getDefault(); + for (Mode mode : manager.getModes()) { + List compList = new ArrayList<>(Arrays.asList(manager.getOpenedTopComponents(mode))); + for (TopComponent comp : compList) { + if (comp instanceof EditorTopComponent etc) { + InputGraph graph = etc.getModel().getGraph(); + if (graph.isDiffGraph() && graph.getFirstGraph().getGroup() != graph.getSecondGraph().getGroup()) { + // don't save diff graphs comparing graphs from different groups + continue; + } + GraphContext graphContext = getGraphContext(etc); + saveContexts.add(graphContext); + } + } + } + + try (Writer writer = new OutputStreamWriter(new FileOutputStream(path))) { + Printer.exportGraphDocument(writer, doc, saveContexts); + } + } + + private static GraphContext getGraphContext(EditorTopComponent etc) { + InputGraph openedGraph = etc.getModel().getFirstGraph(); + int posDiff = etc.getModel().getSecondPosition() - etc.getModel().getFirstPosition(); + if (etc.getModel().getHiddenNodes().isEmpty()) { + return new GraphContext(openedGraph, new AtomicInteger(posDiff), new HashSet<>(), new AtomicBoolean(true)); + } else { + Set visibleNodes = new HashSet<>(etc.getModel().getVisibleNodes()); + return new GraphContext(openedGraph, new AtomicInteger(posDiff), visibleNodes, new AtomicBoolean(false)); + } } private void initListView() { - manager = new ExplorerManager(); + setDocumentPath(null); + FolderNode.clearGraphNodeMap(); + document.clear(); root = new FolderNode(document); + manager = new ExplorerManager(); manager.setRootContext(root); ((BeanTreeView) this.treeView).setRootVisible(false); - associateLookup(ExplorerUtils.createLookup(manager, getActionMap())); } private void initToolbar() { Toolbar toolbar = new Toolbar(); toolbar.setBorder((Border) UIManager.get("Nb.Editor.Toolbar.border")); //NOI18N - toolbar.setMinimumSize(new Dimension(0,0)); // MacOS BUG with ToolbarWithOverflow + toolbar.setMinimumSize(new Dimension(0, 0)); // MacOS BUG with ToolbarWithOverflow this.add(toolbar, BorderLayout.NORTH); + toolbar.add(OpenAction.get(OpenAction.class)); toolbar.add(ImportAction.get(ImportAction.class)); - toolbar.add(SaveAsAction.get(SaveAsAction.class).createContextAwareInstance(this.getLookup())); + toolbar.addSeparator(); - saveAllAction = SaveAllAction.get(SaveAllAction.class); - saveAllAction.setEnabled(false); - toolbar.add(saveAllAction); + saveAction = SaveAction.get(SaveAction.class); + saveAction.setEnabled(false); + toolbar.add(saveAction); + saveAsAction = SaveAsAction.get(SaveAsAction.class); + saveAsAction.setEnabled(false); + toolbar.add(saveAsAction); + toolbar.addSeparator(); toolbar.add(RemoveAction.get(RemoveAction.class).createContextAwareInstance(this.getLookup())); - removeAllAction = RemoveAllAction.get(RemoveAllAction.class); removeAllAction.setEnabled(false); toolbar.add(removeAllAction); - toolbar.add(GarbageCollectAction.get(GarbageCollectAction.class).getToolbarPresenter()); - for (Toolbar tb : ToolbarPool.getDefault().getToolbars()) { tb.setVisible(false); } @@ -122,66 +221,16 @@ private void initToolbar() { private void documentChanged() { boolean enableButton = !document.getElements().isEmpty(); - saveAllAction.setEnabled(enableButton); + saveAction.setEnabled(enableButton); + saveAsAction.setEnabled(enableButton); removeAllAction.setEnabled(enableButton); } - private void initReceivers() { - - final GroupCallback callback = g -> { - synchronized(OutlineTopComponent.this) { - g.setParent(getDocument()); - getDocument().addElement(g); - } - }; - - new Server(callback); - } - - public void clear() { - document.clear(); - FolderNode.clearGraphNodeMap(); - root = new FolderNode(document); - manager.setRootContext(root); - } - @Override public ExplorerManager getExplorerManager() { return manager; } - public GraphDocument getDocument() { - return document; - } - - /** - * Gets default instance. Do not use directly: reserved for *.settings files only, - * i.e. deserialization routines; otherwise you could get a non-deserialized instance. - * To obtain the singleton instance, use {@link #findInstance()}. - */ - public static synchronized OutlineTopComponent getDefault() { - if (instance == null) { - instance = new OutlineTopComponent(); - } - return instance; - } - - /** - * Obtain the OutlineTopComponent instance. Never call {@link #getDefault} directly! - */ - public static synchronized OutlineTopComponent findInstance() { - TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID); - if (win == null) { - ErrorManager.getDefault().log(ErrorManager.WARNING, "Cannot find Outline component. It will not be located properly in the window system."); - return getDefault(); - } - if (win instanceof OutlineTopComponent) { - return (OutlineTopComponent) win; - } - ErrorManager.getDefault().log(ErrorManager.WARNING, "There seem to be multiple components with the '" + PREFERRED_ID + "' ID. That is a potential source of errors and unexpected behavior."); - return getDefault(); - } - @Override public int getPersistenceType() { return TopComponent.PERSISTENCE_ALWAYS; @@ -236,15 +285,12 @@ public void changed(InputGraphProvider lastProvider) { InputGraph graph = lastProvider.getGraph(); if (graph != null) { if (graph.isDiffGraph()) { - EditorTopComponent editor = EditorTopComponent.getActive(); - if (editor != null) { - InputGraph firstGraph = editor.getModel().getFirstGraph(); - GraphNode firstNode = FolderNode.getGraphNode(firstGraph); - InputGraph secondGraph = editor.getModel().getSecondGraph(); - GraphNode secondNode = FolderNode.getGraphNode(secondGraph); - if (firstNode != null && secondNode != null) { - selectedGraphs = new GraphNode[]{firstNode, secondNode}; - } + InputGraph firstGraph = graph.getFirstGraph(); + GraphNode firstNode = FolderNode.getGraphNode(firstGraph); + InputGraph secondGraph = graph.getSecondGraph(); + GraphNode secondNode = FolderNode.getGraphNode(secondGraph); + if (firstNode != null && secondNode != null) { + selectedGraphs = new GraphNode[]{firstNode, secondNode}; } } else { GraphNode graphNode = FolderNode.getGraphNode(graph); @@ -271,15 +317,229 @@ public void changed(InputGraphProvider lastProvider) { } @Override - public void readExternal(ObjectInput objectInput) throws IOException, ClassNotFoundException { - // Not called when user starts application for the first time - super.readExternal(objectInput); - ((BeanTreeView) this.treeView).setRootVisible(false); + public boolean canClose() { + SwingUtilities.invokeLater(() -> { + clearWorkspace(); + open(); // Reopen the OutlineTopComponent + requestActive(); + }); + return true; } - @Override - public void writeExternal(ObjectOutput objectOutput) throws IOException { - super.writeExternal(objectOutput); + private void setDocumentPath(String path) { + if (path != null) { + documentPath = Paths.get(path); + setHtmlDisplayName("" + documentPath.getFileName().toString() + ""); + setToolTipText("File: " + path); + } else { + documentPath = null; + setHtmlDisplayName("untitled"); + setToolTipText("No file"); + } + + } + + /** + * Clears the workspace by resetting the document path, clearing the document, and resetting the folder structure. + * After clearing the workspace, it will be ready for new documents. + */ + public void clearWorkspace() { + setDocumentPath(null); + document.clear(); + FolderNode.clearGraphNodeMap(); + root = new FolderNode(document); + manager.setRootContext(root); + EditorTopComponent.closeAllInstances(); + } + + /** + * Opens a file dialog to select and load a graph document. + * Clears the workspace and adds the loaded document to the workspace. + **/ + public void openFile() { + JFileChooser fc = new JFileChooser(Settings.get().get(Settings.DIRECTORY, Settings.DIRECTORY_DEFAULT)); + fc.setFileFilter(xmlFileFilter); + if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { + clearWorkspace(); + String path = fc.getSelectedFile().getAbsolutePath(); + Settings.get().put(Settings.DIRECTORY, path); + setDocumentPath(path); + try { + loadGraphDocument(path, true); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + private boolean overwriteDialog(String filename) { + JFrame frame = new JFrame(); + String message = "Do you want to overwrite " + filename + "?"; + int result = JOptionPane.showConfirmDialog(frame, message, "Confirm Overwrite", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); + frame.dispose(); + return result == JOptionPane.YES_OPTION; + } + + /** + * Saves the current graph document. + * If the document has no location, let the user specify the file location. + */ + public void save() { + if (documentPath == null) { + saveAs(); + return; + } + + String filePath = documentPath.toAbsolutePath().toString(); + if (Files.exists(Paths.get(filePath)) && overwriteDialog(documentPath.getFileName().toString())) { + try { + saveGraphDocument(getDocument(), filePath); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + saveAs(); + } + } + + public void saveAs() { + JFileChooser fc = new JFileChooser(); + fc.setDialogTitle("Save As..."); + fc.setFileFilter(xmlFileFilter); + fc.setCurrentDirectory(new File(Settings.get().get(Settings.DIRECTORY, Settings.DIRECTORY_DEFAULT))); + if (fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { + String path = fc.getSelectedFile().getAbsolutePath(); + + // Ask if the user wants to overwrite the file if it already exists + if (Files.exists(Paths.get(path)) && !overwriteDialog(fc.getSelectedFile().getName())) { + return; // user does not want to overwrite + } + + Settings.get().put(Settings.DIRECTORY, path); + setDocumentPath(path); + try { + saveGraphDocument(getDocument(), path); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + /** + * Imports graph documents from one or more XML files. + * Displays a file chooser dialog to select one or multiple XML files for import. + * Each selected file is added to the workspace. + **/ + public void importFromXML() { + JFileChooser fc = new JFileChooser(); + fc.setFileFilter(xmlFileFilter); + fc.setCurrentDirectory(new File(Settings.get().get(Settings.DIRECTORY, Settings.DIRECTORY_DEFAULT))); + fc.setMultiSelectionEnabled(true); + if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { + for (final File file : fc.getSelectedFiles()) { + String path = file.getAbsolutePath(); + Settings.get().put(Settings.DIRECTORY, path); + try { + loadGraphDocument(path, false); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + } + + /** + * Loads and opens the given graph context (opened graphs and visible nodes). + */ + private static void loadContext(GraphContext context) { + final GraphViewer viewer = Lookup.getDefault().lookup(GraphViewer.class); + if (viewer != null) { + final int difference = context.posDiff().get(); + final InputGraph firstGraph = context.inputGraph(); + final Set visibleNodes = context.visibleNodes(); + final boolean showAll = context.showAll().get(); + + SwingUtilities.invokeLater(() -> { + InputGraph openedGraph = viewer.view(firstGraph, true); + if (openedGraph != null) { + EditorTopComponent etc = EditorTopComponent.findEditorForGraph(firstGraph); + if (etc != null) { + if (showAll) { + etc.getModel().setHiddenNodes(new HashSet<>()); + } else { + etc.getModel().showOnly(visibleNodes); + } + int firstGraphIdx = firstGraph.getIndex(); + if (difference > 0) { + etc.getModel().setPositions(firstGraphIdx, firstGraphIdx + difference); + } else if (difference < 0) { + etc.getModel().setPositions(firstGraphIdx + difference, firstGraphIdx); + } + } + } + }); + } + } + + /** + * Loads a graph document from the given file path, updating progress via a ProgressHandle. + * Parse the XML file, add the parsed document to the workspace, and load associated contexts if specified. + */ + private void loadGraphDocument(String path, boolean loadContext) throws IOException { + if (Files.notExists(Path.of(path))) { + return; + } + File file = new File(path); + final FileChannel channel; + final long start; + try { + channel = FileChannel.open(file.toPath(), StandardOpenOption.READ); + start = channel.size(); + } catch (Exception ex) { + Exceptions.printStackTrace(ex); + return; + } + + final ProgressHandle handle = ProgressHandleFactory.createHandle("Opening file " + file.getName()); + handle.start(WORK_UNITS); + + ParseMonitor monitor = new ParseMonitor() { + @Override + public void updateProgress() { + try { + int prog = (int) (WORK_UNITS * (double) channel.position() / (double) start); + handle.progress(prog); + } catch (IOException ignored) { + } + } + + @Override + public void setState(String state) { + updateProgress(); + handle.progress(state); + } + }; + try { + if (file.getName().endsWith(".xml")) { + ArrayList contexts = new ArrayList<>(); + final Parser parser = new Parser(channel, monitor, document, loadContext ? contexts::add : null); + parser.parse(); + SwingUtilities.invokeLater(() -> { + for (Node child : manager.getRootContext().getChildren().getNodes(true)) { + // Nodes are lazily created. By expanding and collapsing they are all initialized + ((BeanTreeView) this.treeView).expandNode(child); + ((BeanTreeView) this.treeView).collapseNode(child); + } + requestActive(); + }); + for (GraphContext ctx : contexts) { + loadContext(ctx); + } + } + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } + handle.finish(); } /** This method is called from within the constructor to diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/ImportAction.java b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/ImportAction.java index 03d062d804104..f503e6c2eb748 100644 --- a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/ImportAction.java +++ b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/ImportAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,24 +25,10 @@ package com.sun.hotspot.igv.coordinator.actions; import com.sun.hotspot.igv.coordinator.OutlineTopComponent; -import com.sun.hotspot.igv.data.GraphDocument; -import com.sun.hotspot.igv.data.serialization.GraphParser; -import com.sun.hotspot.igv.data.serialization.ParseMonitor; -import com.sun.hotspot.igv.data.serialization.Parser; -import com.sun.hotspot.igv.settings.Settings; -import java.io.File; -import java.io.IOException; -import java.nio.channels.FileChannel; -import java.nio.file.StandardOpenOption; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.swing.Action; -import javax.swing.JFileChooser; -import javax.swing.SwingUtilities; -import javax.swing.filechooser.FileFilter; -import org.netbeans.api.progress.ProgressHandle; -import org.netbeans.api.progress.ProgressHandleFactory; -import org.openide.util.*; +import org.openide.util.HelpCtx; +import org.openide.util.ImageUtilities; +import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; /** @@ -51,89 +37,15 @@ */ public final class ImportAction extends CallableSystemAction { - private static final int WORKUNITS = 10000; - public static FileFilter getFileFilter() { - return new FileFilter() { - - @Override - public boolean accept(File f) { - return f.getName().toLowerCase().endsWith(".xml") || f.isDirectory(); - } - - @Override - public String getDescription() { - return "Graph files (*.xml)"; - } - }; + public ImportAction() { + putValue(Action.SHORT_DESCRIPTION, "Import from XML..."); + putValue(Action.SMALL_ICON, ImageUtilities.loadImageIcon(iconResource(), true)); } @Override public void performAction() { - JFileChooser fc = new JFileChooser(); - fc.setFileFilter(ImportAction.getFileFilter()); - fc.setCurrentDirectory(new File(Settings.get().get(Settings.DIRECTORY, Settings.DIRECTORY_DEFAULT))); - fc.setMultiSelectionEnabled(true); - - if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { - for (final File file : fc.getSelectedFiles()) { - File dir = file; - if (!dir.isDirectory()) { - dir = dir.getParentFile(); - } - - Settings.get().put(Settings.DIRECTORY, dir.getAbsolutePath()); - try { - final FileChannel channel = FileChannel.open(file.toPath(), StandardOpenOption.READ); - final ProgressHandle handle = ProgressHandleFactory.createHandle("Opening file " + file.getName()); - handle.start(WORKUNITS); - final long startTime = System.currentTimeMillis(); - final long start = channel.size(); - ParseMonitor monitor = new ParseMonitor() { - @Override - public void updateProgress() { - try { - int prog = (int) (WORKUNITS * (double) channel.position() / (double) start); - handle.progress(prog); - } catch (IOException ignored) {} - } - @Override - public void setState(String state) { - updateProgress(); - handle.progress(state); - } - }; - final GraphParser parser; - final OutlineTopComponent component = OutlineTopComponent.findInstance(); - if (file.getName().endsWith(".xml")) { - parser = new Parser(channel, monitor, null); - } else { - parser = null; - } - RequestProcessor.getDefault().post(new Runnable() { - @Override - public void run() { - try { - final GraphDocument document = parser.parse(); - if (document != null) { - SwingUtilities.invokeLater(() -> { - component.requestActive(); - component.getDocument().addGraphDocument(document); - }); - } - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - handle.finish(); - long stop = System.currentTimeMillis(); - Logger.getLogger(getClass().getName()).log(Level.INFO, "Loaded in " + file + " in " + ((stop - startTime) / 1000.0) + " seconds"); - } - }); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - } - } + OutlineTopComponent.findInstance().importFromXML(); } @Override @@ -141,12 +53,6 @@ public String getName() { return NbBundle.getMessage(ImportAction.class, "CTL_ImportAction"); } - public ImportAction() { - putValue(Action.SHORT_DESCRIPTION, "Open"); - // D is the Control key on most platforms, the Command (meta) key on Macintosh - putValue(Action.ACCELERATOR_KEY, Utilities.stringToKey("D-O")); - } - @Override public HelpCtx getHelpCtx() { return HelpCtx.DEFAULT_HELP; diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/OpenAction.java b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/OpenAction.java new file mode 100644 index 0000000000000..cd322efe61989 --- /dev/null +++ b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/OpenAction.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2024, 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 com.sun.hotspot.igv.coordinator.actions; + +import com.sun.hotspot.igv.coordinator.OutlineTopComponent; +import javax.swing.Action; +import org.openide.util.HelpCtx; +import org.openide.util.ImageUtilities; +import org.openide.util.NbBundle; +import org.openide.util.Utilities; +import org.openide.util.actions.CallableSystemAction; + +public final class OpenAction extends CallableSystemAction { + + public OpenAction() { + putValue(Action.SHORT_DESCRIPTION, "Open..."); + // D is the Control key on most platforms, the Command (meta) key on Macintosh + putValue(Action.ACCELERATOR_KEY, Utilities.stringToKey("D-O")); + putValue(Action.SMALL_ICON, ImageUtilities.loadImageIcon(iconResource(), true)); + } + + @Override + public void performAction() { + OutlineTopComponent.findInstance().openFile(); + } + + @Override + public String getName() { + return NbBundle.getMessage(OpenAction.class, "CTL_OpenAction"); + } + + @Override + public HelpCtx getHelpCtx() { + return HelpCtx.DEFAULT_HELP; + } + + @Override + protected boolean asynchronous() { + return false; + } + + @Override + protected String iconResource() { + return "com/sun/hotspot/igv/coordinator/images/open.png"; + } +} diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/RemoveAction.java b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/RemoveAction.java index e1b3a62f0eb86..9f2ac69aa641b 100644 --- a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/RemoveAction.java +++ b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/RemoveAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -28,6 +28,7 @@ import javax.swing.Action; import org.openide.nodes.Node; import org.openide.util.HelpCtx; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.actions.NodeAction; @@ -37,6 +38,11 @@ */ public final class RemoveAction extends NodeAction { + public RemoveAction() { + putValue(Action.SHORT_DESCRIPTION, getName()); + putValue(Action.SMALL_ICON, ImageUtilities.loadImageIcon(iconResource(), true)); + } + @Override protected void performAction(Node[] activatedNodes) { for (Node n : activatedNodes) { @@ -47,10 +53,6 @@ protected void performAction(Node[] activatedNodes) { } } - public RemoveAction() { - putValue(Action.SHORT_DESCRIPTION, getName()); - } - @Override public String getName() { return NbBundle.getMessage(RemoveAction.class, "CTL_RemoveAction"); diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/RemoveAllAction.java b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/RemoveAllAction.java index e95099d0f97fb..04158b23b5260 100644 --- a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/RemoveAllAction.java +++ b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/RemoveAllAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ import com.sun.hotspot.igv.coordinator.OutlineTopComponent; import javax.swing.Action; import org.openide.util.HelpCtx; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; @@ -42,7 +43,8 @@ public String getName() { } public RemoveAllAction() { - putValue(Action.SHORT_DESCRIPTION, "Remove all graphs and groups"); + putValue(Action.SHORT_DESCRIPTION, "Clear workspace"); + putValue(Action.SMALL_ICON, ImageUtilities.loadImageIcon(iconResource(), true)); } @Override @@ -62,6 +64,6 @@ protected boolean asynchronous() { @Override public void performAction() { - OutlineTopComponent.findInstance().clear(); + OutlineTopComponent.findInstance().clearWorkspace(); } } diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAllAction.java b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAction.java similarity index 77% rename from src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAllAction.java rename to src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAction.java index dde018f60e937..77ec88d0659b1 100644 --- a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAllAction.java +++ b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, 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,37 +27,34 @@ import com.sun.hotspot.igv.coordinator.OutlineTopComponent; import javax.swing.Action; import org.openide.util.HelpCtx; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.Utilities; import org.openide.util.actions.CallableSystemAction; -/** - * - * @author Thomas Wuerthinger - */ -public final class SaveAllAction extends CallableSystemAction { +public final class SaveAction extends CallableSystemAction { + + public SaveAction() { + putValue(Action.SHORT_DESCRIPTION, "Save"); + // D is the Control key on most platforms, the Command (meta) key on Macintosh + putValue(Action.ACCELERATOR_KEY, Utilities.stringToKey("D-S")); + putValue(Action.SMALL_ICON, ImageUtilities.loadImageIcon(iconResource(), true)); + } @Override public void performAction() { - final OutlineTopComponent component = OutlineTopComponent.findInstance(); - SaveAsAction.save(component.getDocument()); + OutlineTopComponent.findInstance().save(); } @Override public String getName() { - return NbBundle.getMessage(SaveAllAction.class, "CTL_SaveAllAction"); - } - - public SaveAllAction() { - putValue(Action.SHORT_DESCRIPTION, "Save all groups to XML file..."); - // D is the Control key on most platforms, the Command (meta) key on Macintosh - putValue(Action.ACCELERATOR_KEY, Utilities.stringToKey("D-S")); + return NbBundle.getMessage(SaveAction.class, "CTL_SaveAction"); } @Override protected String iconResource() { - return "com/sun/hotspot/igv/coordinator/images/saveall.gif"; + return "com/sun/hotspot/igv/coordinator/images/save.png"; } @Override diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAsAction.java b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAsAction.java index 4be57a51dba44..65b13dfbf0689 100644 --- a/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAsAction.java +++ b/src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/actions/SaveAsAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,75 +24,27 @@ package com.sun.hotspot.igv.coordinator.actions; -import com.sun.hotspot.igv.coordinator.FolderNode; -import com.sun.hotspot.igv.data.Folder; -import com.sun.hotspot.igv.data.GraphDocument; -import com.sun.hotspot.igv.data.Group; -import com.sun.hotspot.igv.data.serialization.Printer; -import com.sun.hotspot.igv.settings.Settings; -import java.io.File; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.nio.file.Files; +import com.sun.hotspot.igv.coordinator.OutlineTopComponent; import javax.swing.Action; -import javax.swing.JFileChooser; -import org.openide.nodes.Node; import org.openide.util.HelpCtx; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; -import org.openide.util.actions.NodeAction; +import org.openide.util.actions.CallableSystemAction; /** * * @author Thomas Wuerthinger */ -public final class SaveAsAction extends NodeAction { +public final class SaveAsAction extends CallableSystemAction { public SaveAsAction() { - putValue(Action.SHORT_DESCRIPTION, "Save selected groups to XML file..."); + putValue(Action.SHORT_DESCRIPTION, "Save as..."); + putValue(Action.SMALL_ICON, ImageUtilities.loadImageIcon(iconResource(), true)); } @Override - protected void performAction(Node[] activatedNodes) { - GraphDocument doc = new GraphDocument(); - for (Node node : activatedNodes) { - if (node instanceof FolderNode) { - FolderNode folderNode = (FolderNode) node; - Folder folder = folderNode.getFolder(); - if (folder instanceof Group) { - Group group = (Group) folder; - doc.addElement(group); - } - } - } - save(doc); - } - - public static void save(GraphDocument doc) { - JFileChooser fc = new JFileChooser(); - fc.setFileFilter(ImportAction.getFileFilter()); - fc.setCurrentDirectory(new File(Settings.get().get(Settings.DIRECTORY, Settings.DIRECTORY_DEFAULT))); - - if (fc.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) { - File file = fc.getSelectedFile(); - if (!file.getName().contains(".")) { - file = new File(file.getAbsolutePath() + ".xml"); - } - - File dir = file; - if (!dir.isDirectory()) { - dir = dir.getParentFile(); - } - Settings.get().put(Settings.DIRECTORY, dir.getAbsolutePath()); - try { - try (Writer writer = new OutputStreamWriter(Files.newOutputStream(file.toPath()))) { - Printer p = new Printer(); - p.export(writer, doc); - } - } catch (IOException e) { - e.printStackTrace(); - } - } + public void performAction() { + OutlineTopComponent.findInstance().saveAs(); } @Override @@ -102,7 +54,7 @@ public String getName() { @Override protected String iconResource() { - return "com/sun/hotspot/igv/coordinator/images/save.png"; + return "com/sun/hotspot/igv/coordinator/images/save_as.gif"; } @Override @@ -114,17 +66,4 @@ public HelpCtx getHelpCtx() { protected boolean asynchronous() { return false; } - - @Override - protected boolean enable(Node[] nodes) { - if (nodes.length > 0) { - for (Node n : nodes) { - if (!(n instanceof FolderNode) || ((FolderNode) n).isRootNode()) { - return false; - } - } - return true; - } - return false; - } } diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/Bundle.properties b/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/Bundle.properties index 1b17042508e6e..2bebc0e279781 100644 --- a/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/Bundle.properties +++ b/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/Bundle.properties @@ -1,6 +1,3 @@ -AdvancedOption_DisplayName_Coordinator=Settings -AdvancedOption_Tooltip_Coordinator=Visualization Tool Settings -CTL_OutlineTopComponent=Outline -CTL_SomeAction=test -HINT_OutlineTopComponent=Displays loaded groups of graphs. +CTL_OutlineTopComponent=Workspace +HINT_OutlineTopComponent=Opened groups of graphs. OpenIDE-Module-Name=Coordinator diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/actions/Bundle.properties b/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/actions/Bundle.properties index de3aa509a3111..f192e91fceb11 100644 --- a/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/actions/Bundle.properties +++ b/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/actions/Bundle.properties @@ -1,8 +1,9 @@ -CTL_ImportAction=Open... +CTL_ImportAction=Import... +CTL_OpenAction=Open... CTL_DiffGraphAction=Difference to current graph CTL_RemoveAction=Remove selected graphs and groups -CTL_RemoveAllAction=Remove all graphs and groups -CTL_OutlineAction=Outline -CTL_SaveAsAction=Save selected groups... -CTL_SaveAllAction=Save all groups... +CTL_RemoveAllAction=Clear workspace +CTL_OutlineAction=Workspace +CTL_SaveAction=Save +CTL_SaveAsAction=Save as... CTL_NewFilterAction=New filter... diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/images/import.png b/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/images/import.png index 7e4a6badcb151986e6f33e30a4e57445ccb5815c..d8c8c766b88fde6c301ed94cac05487b277e2db5 100644 GIT binary patch literal 1294 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBDAAG{;hE;^%b*2hb1<+n z3NbJPS&Tr)z$nE4G7ZRL@M4sPvx68lplX;H7}_%#SfFa6fHVkr05M1pgl1mAh%j*h z6I`{x0%imor0saV%ts)_S>O>_%)r1c48n{Iv*t)JFfg6S42dX-@b$4u&d=3LOvz75 z)vL%Y0O?||sjvbvb5lza6)JLb@`|l0Y?Z(&tblBgu)dN4SV>8?tx|+H?jfSfFg)+ zA4CH}eP~{0i5*M}nlQSq2!uSs8e~Cq4gN)$slb2)yUP&jEMzex^&sC_1!PvF=0vz; z=BDNqgZyG>W}}Z)0$rnXeolT-a6w{nsvXcCuofgCbk$&MB5_%RBmvcEqYsK}q_~G9 zEU+jrW!Z7r=)+T~9hY78;(5RvqTuP`7-AuqoZ`UTcb5I{zWw$41y%mMe$L(&KmUGn zXiQ{C22;u$*5U~qVk%}WCr_N6pa$vv^^lUCGzEDP>l#9Kd+_d@4ubwA@XGRyD8<}KT)eNgX$|6IRWX)_eB zot3`YyGeY)a>+D~*bKLbKmULKm(F>(Uw;1sG3Dp16CT{Rw^zt&c*)4(klDm3_CG<; kh(nD{=(61|S&`ig4CmXs>aY4otpMe6Pgg&ebxsLQ0G~vdNB{r; delta 3467 zcmV;64RrF33aJ~AEPsxC`%#ks017>6Lqkw$V`BgSc-oy)XH-+^7Crag^g>IBfRsyb zQWXdwQbLP>RB56Tk^rHE7!pA2h^WAbq9TG785D8A(GifbB8r7UvG)Oa2q@#=C^l5y z58fJmv*x`wZ}zXf_Bm&r@0@);07hW2M4E-F0c1)Q@`wN*JbyMW9w&DL3RED01Asu7 zEenbCj{*ST`|0tDdAZ9o73ZrB8d;W+$%P#4PN3IHSw0H%w?*+KxM5CAfA z6*2_?G713fq;#1A03`qbTOJ!14}fX`06S%pPXhpU(j@l+0JbPoDgr>G06-?n6o~-P z4ggq}qZEq(uzz3xD9VwDa{;iM0AP}#%#;9N?*M?EDHdb{5EuYpq7VyH0SNX0z>r5p z@Bj!i0Vs@=uXxf|Tp`X=008i^WQ*mJlvD+7A+*FDTwS?%pg1=}tWem5354kaxd`WF zWy%E7#Q>8t0|0eT?mp`w<0RaGn)AdFB zv%IVt0PYw7w(*OWv>l*j4S?4DFPh070M$Z(=Br=L!{Ph!@Kl9D=4NM?o11GZ5esdF zsbBT^p9y~fU-h%)`|TP6^SahpFL@!u}|^LI>( z5GRY}Vt=Vnj7Lkvxe{p#&dZXDBnnBE6qiW<^f{YXD%?eg^hJTTr{o2JDwE zAh76wCF}wKK@c*+L|BM6Vt|+;)`%m*MP?y>NH7wC#36}D z3L-_6$WmlAQi7BtRmfhX9{C7|KA|s2*yD+M!(38x2CE z(0}=83c3i*M+?ynXeC;M9zvVZv*;D{7TSwGN5?S0=okkx#B4Aw#=}Cfcq|!{W6QB( ztOBdS8nHI46T5-+Vk6jl0*SyP-~=0jJ0XxTmmnl8A}lAA5~>IX2+f2J!VN+nVU+Nh z$Rz3#t%+_#J~5VY?hH>ZR%j)qgLk4{4A!%ryKoL>h$}`!vpJ^s_LQF^k6%vR1Qd zS?5^;Y!cg?&1a{vOW5DByV;|f8k#dSqc!t1t2Iw*_Hr3E#Z!+=y|0VvTIojUF45hm+oe0Er>_^FC)3-mcTR6apQG=kpQgV>|CIi) z0n1>Pfy7{o!D)kMxF+t6XW*512R>@3YZz##G~8?0Z8&aZZZy}Zz^KXSkulAfYn*Jn z#kk#g)WpCf#AK;SgUNkUs(&fhG}UyQX{YI1Gjp>Tv$bX|W<%y$=6v&f^9J*W7EB9I zi$xYS7B?+PmR!qp%bk|jtWYZ_t5mCMtE<+iwX?OvdZ%^IG~zVZY0_ym)9%&1|ws*46u&=d$;Gp3!+o8ar&41xHM=M96W3}VW z>CEZ=(^pJyo&Iu$^$hWhT{G@Fv7ADj);hI2eR6hjmOD2(54)JSB)aTyxx;01!?>l~ zi>^dhAJ-MGCtTmVIlC#`j=25mZsVTre$ahrruj_q%-Wg#9!4GlkG&qfv+!Aov-ZsD z^)&Ppc-DA6@iO)jd4JV;4SHL8r+FXpe&J*9BlkJx^OonvTgE%%i}?ol7W;PlY52|c ztMYs7Z{(li-{3zQ;1sYV;7lMfFeq?S;2pjmU&ycLkIr_Py=-PtO-uz1obQWYRIJr=Dp1$?U@VEBv?FO$$P;c8 zJ{Nh3wupws9)IF;@nEt?a(VJlibu-kl;Kp*)QZ#*2~Scbd6^cNwma=@dT9Fo^ofj^ zjHXOVW@6@XsfILN+L5K7m6z2cvz8UfdKbAZ+PY{|9we{JMzZH;w<_2QnW9T+pr- z!gxjDih-2@D-W!qtx8|@Q-OU!dBN+|F{|4O^$J%O_OA(8(@>;RBrm$N)_v{nb%b@2 zb=~Wyuiw7@bFrxSa*2IOMajofVd>>>9KNaiW@1C~hVC-wvRxZV8>Jg>Z}Qx9pj^E? zzr25Q$baVME%=t=Ew8sO++@f7m10b9ZmR-sT#!nu>j-eL4G{)<)NMe#`x~zD}pEr0&yx z>HgjW5eGWzUFz!(>K-g>KpT_|!-o{`Q6K56;D&yV()m(S1JX{KX6Y7tVEhcb>lJaq+|@w@b$_ zbAK?fz6j&(bCH(zzR+Ir3PT3gS|o>SL7ub;i)d*i}Q{>>}5=G^MJ zJ@@wAI|+As?~3jY-OIT5@_x?!@dqm(5+4>nQhQYKSod+w&z3(o^*Z;S?DOsGdJ_5M zLBFv7`9HG%@o}K=Df4N?puu4MkmJyaVSoSOYtQCA8+a~zK0Z?Pi~27+URb>N;a9I; zyGCP22VTlwPW)E-O8eFR*E3$XkA;mrev|oT{B7|&?RN*>bKiG004R=004l4008;_004mL004C`03iVC zU;qF*m;eA5Z<1fdMgRZ+24YJ`L;(K){{a7>y{D6r?H7Ll33hNnX8-^I5C8xG5CB}p zt-}BS0!>LoK~y-)jm_UnQ(+v(@%M8)o290x5eh@u$UudLPSKIl59=mnSr8Om1rY^y zF`@sVn}V(iy^t;pOAt$lX#@))BP&v<8+9?;&Ss}gw~0HR?VQt%g(Aq_cV8YpuSZyx z#gmb-+gpE{{Unm?IbJaW20B*+-_oEwayY~!?%(>;^(TP--w-dt@7^b=NB=EGh^ag@+DP7M2 zpvO&`29~+!YvW2+BLJGFBUe>c;&eLE^X4Ai>2iPJa=HHBpT|FO>qIrZ-bS9yEYN?( zO>SF9HZ6;sVIYLq1LX1s0GTbF;ps(cYil@r%ERO5@0bdH;hfh^emjdS5C|dm0smV3 zxkg!8DV-f2M&EoS`eUAIYkleA(0Iera%f3LfOG(Wktdwc7jjMez6^_Qfn)-&~j3f#gYuT*c-PSyN@%-s6 zVY3&v+los%glsD<^!Gu(KXUn!?|sY3rpR9##H##vhIx#mZFfuwYFq)rbr diff --git a/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/images/open.png b/src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/images/open.png new file mode 100644 index 0000000000000000000000000000000000000000..212763d1263e3f719bcf76ddbd4138847e9699ba GIT binary patch literal 1143 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`)Ym%P6qN7l0AZa z85pWm85kOx85n;42huMY7)lKo7+xhXFj&oCU=Yur6o1qWsJ10F!ZXd+mq822=3roD z6k=covKWDofl-Qq70hN}@M4sPvx68lplX;H7}_%#SfFa6fHVkr05MQElxAMQh%j*h z6I`{x0%imor0saV%ts)_S>O>_%)r1c48n{Iv*t(uO^eJ7i71Ki^|4CM&(%vz$xlkv ztH>0+>{umUo3Q%e#RDspr3imfVamB1>jfNYSkzLEl1NlCV?QiN}Sf^&XRs)CuG zfu4bq9hZWFf=y9MnpKdC8&o@xXRDM^Qc_^0uU}qXu2*iXmtT~wZ)j<0sc&GUZ)Btk zRH0j3nOBlnp_^B%3^4>|j!SBBa#3bMNoIbY0?6FNr2NtnTO}osMQ{LdXGvxn!lt}p zsJDO~)CbAv8|oS8!_5Y2wE>A*`4?rT0&NDFZ)a!&R*518wZ}#uWI2*!AU*|)0=;U- zWup%dHajlKxQFb(K>p$B;uvBfn4H4Ul=(SqN$u~C#camL#vP|We19L$rpNcKXU&q1 z$OJ|kmeX%O-q#Y6(YX9)!`2!Ibtv>GWUCP=#rAMY~ zSGvEPp-s(~2@kKYzn}2&|Nno@vB%DyoY(ipNKDbuk-$IE6E0!Etz;eXk z!~6gC8yMUD`a&3qHEIMz%9O3XUiAn17qp#6z%k}RW{Q2E3HN&9Q;MdK~&w1A0-?#Nn^&1h_n!Xr?(J*+ocb9RGiJ + + - @@ -55,6 +56,10 @@ + + + + @@ -71,13 +76,13 @@ + + + + - - - - - + @@ -105,8 +110,8 @@ - + diff --git a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/Folder.java b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/Folder.java index 9ff7c32bd1f1d..3bd92a49cbfb3 100644 --- a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/Folder.java +++ b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/Folder.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,7 @@ import java.util.List; -public interface Folder { +public interface Folder extends Properties.Provider { void setName(String name); String getName(); String getDisplayName(); @@ -33,4 +33,5 @@ public interface Folder { void removeElement(FolderElement element); void addElement(FolderElement group); ChangedEvent getChangedEvent(); + Properties getProperties(); } diff --git a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/FolderElement.java b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/FolderElement.java index eb0a874278fab..2bf153674c739 100644 --- a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/FolderElement.java +++ b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/FolderElement.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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,11 +23,12 @@ */ package com.sun.hotspot.igv.data; -public interface FolderElement { +public interface FolderElement extends Properties.Provider { ChangedEvent getDisplayNameChangedEvent(); void setName(String name); String getName(); String getDisplayName(); void setParent(Folder parent); Folder getParent(); + Properties getProperties(); } diff --git a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/GraphDocument.java b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/GraphDocument.java index 1f13cb3b43374..4bf933d43c223 100644 --- a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/GraphDocument.java +++ b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/GraphDocument.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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,7 @@ public ChangedEvent getChangedEvent() { public void addGraphDocument(GraphDocument document) { if (document != this) { - for (FolderElement e : document.elements) { + for (FolderElement e : document.getElements()) { e.setParent(this); this.addElement(e); } diff --git a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/Group.java b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/Group.java index 01af950a0936d..e98164409b690 100644 --- a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/Group.java +++ b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/Group.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -126,13 +126,22 @@ public String getName() { @Override public String getDisplayName() { - String displayName = (getParent() == null ? "" : getParent().getElements().indexOf(this) + 1 + " - ") + getName(); + String displayName = (getParent() == null ? "" : getIndex() + 1 + " - ") + getName(); if (getProperties().get("osr") != null) { displayName += " [OSR]"; } return displayName; } + public int getIndex() { + Folder parent = getParent(); + if (parent != null) { + return parent.getElements().indexOf(this); + } else { + return -1; + } + } + public String getType() { return getProperties().get("type"); } diff --git a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/serialization/Parser.java b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/serialization/Parser.java index 26dc2c6cfb2da..9db0d83e0ebf7 100644 --- a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/serialization/Parser.java +++ b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/serialization/Parser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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,18 +23,19 @@ */ package com.sun.hotspot.igv.data.serialization; +import com.sun.hotspot.igv.data.Properties; import com.sun.hotspot.igv.data.*; +import com.sun.hotspot.igv.data.serialization.Printer.GraphContext; +import com.sun.hotspot.igv.data.serialization.Printer.GraphContextAction; import com.sun.hotspot.igv.data.serialization.XMLParser.ElementHandler; import com.sun.hotspot.igv.data.serialization.XMLParser.HandoverElementHandler; import com.sun.hotspot.igv.data.serialization.XMLParser.TopElementHandler; -import com.sun.hotspot.igv.data.services.GroupCallback; import java.io.IOException; import java.nio.channels.Channels; import java.nio.channels.ReadableByteChannel; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; +import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; import javax.swing.SwingUtilities; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParserFactory; @@ -49,10 +50,13 @@ */ public class Parser implements GraphParser { - public static final String INDENT = " "; public static final String TOP_ELEMENT = "graphDocument"; public static final String GROUP_ELEMENT = "group"; public static final String GRAPH_ELEMENT = "graph"; + public static final String GRAPH_STATES_ELEMENT = "graphStates"; + public static final String STATE_ELEMENT = "state"; + public static final String STATE_POSITION_DIFFERENCE = "difference"; + public static final String POSITION_DIFFERENCE_PROPERTY = "value"; public static final String ROOT_ELEMENT = "graphDocument"; public static final String PROPERTIES_ELEMENT = "properties"; public static final String EDGES_ELEMENT = "edges"; @@ -60,15 +64,11 @@ public class Parser implements GraphParser { public static final String EDGE_ELEMENT = "edge"; public static final String NODE_ELEMENT = "node"; public static final String NODES_ELEMENT = "nodes"; + public static final String VISIBLE_NODES_ELEMENT = "visibleNodes"; + public static final String ALL_PROPERTY = "all"; public static final String REMOVE_EDGE_ELEMENT = "removeEdge"; public static final String REMOVE_NODE_ELEMENT = "removeNode"; public static final String METHOD_NAME_PROPERTY = "name"; - public static final String GROUP_NAME_PROPERTY = "name"; - public static final String METHOD_IS_PUBLIC_PROPERTY = "public"; - public static final String METHOD_IS_STATIC_PROPERTY = "static"; - public static final String TRUE_VALUE = "true"; - public static final String NODE_NAME_PROPERTY = "name"; - public static final String EDGE_NAME_PROPERTY = "name"; public static final String NODE_ID_PROPERTY = "id"; public static final String FROM_PROPERTY = "from"; public static final String TO_PROPERTY = "to"; @@ -89,110 +89,42 @@ public class Parser implements GraphParser { public static final String BLOCK_ELEMENT = "block"; public static final String SUCCESSORS_ELEMENT = "successors"; public static final String SUCCESSOR_ELEMENT = "successor"; - public static final String ASSEMBLY_ELEMENT = "assembly"; public static final String DIFFERENCE_PROPERTY = "difference"; - private final TopElementHandler xmlDocument = new TopElementHandler<>(); + private final TopElementHandler xmlData = new TopElementHandler<>(); private final Map differenceEncoding = new HashMap<>(); private final Map lastParsedGraph = new HashMap<>(); - private final GroupCallback groupCallback; + private final GraphDocument callbackDocument; + private final GraphContextAction contextAction; + private final ArrayList contexts = new ArrayList<>(); private final HashMap idCache = new HashMap<>(); private final ArrayList> blockConnections = new ArrayList<>(); - private int maxId = 0; - private GraphDocument graphDocument; private final ParseMonitor monitor; private final ReadableByteChannel channel; private boolean invokeLater = true; - private int lookupID(String i) { - try { - return Integer.parseInt(i); - } catch (NumberFormatException nfe) { - // ignore - } - Integer id = idCache.get(i); - if (id == null) { - id = maxId++; - idCache.put(i, id); - } - return id; - } - - // - private ElementHandler topHandler = new ElementHandler(TOP_ELEMENT) { - - @Override - protected GraphDocument start() throws SAXException { - graphDocument = new GraphDocument(); - return graphDocument; - } - }; - // - private ElementHandler groupHandler = new XMLParser.ElementHandler(GROUP_ELEMENT) { - - @Override - protected Group start() throws SAXException { - final Group group = new Group(this.getParentObject()); - - String differenceProperty = this.readAttribute(DIFFERENCE_PROPERTY); - Parser.this.differenceEncoding.put(group, (differenceProperty != null && (differenceProperty.equals("1") || differenceProperty.equals("true")))); - - ParseMonitor monitor = getMonitor(); - if (monitor != null) { - monitor.setState(group.getName()); - } - - final Folder parent = getParentObject(); - if (groupCallback == null || parent instanceof Group) { - Runnable addToParent = () -> parent.addElement(group); - if (invokeLater) { - SwingUtilities.invokeLater(addToParent); - } else { - addToParent.run(); - } - } - - return group; - } - - @Override - protected void end(String text) throws SAXException { - } - }; // - private ElementHandler methodHandler = new XMLParser.ElementHandler(METHOD_ELEMENT) { + private final ElementHandler methodHandler = new XMLParser.ElementHandler<>(METHOD_ELEMENT) { @Override protected InputMethod start() throws SAXException { - - InputMethod method = parseMethod(this, getParentObject()); - getParentObject().setMethod(method); + Group group = getParentObject(); + InputMethod method = parseMethod(this, group); + group.setMethod(method); return method; } }; - - private InputMethod parseMethod(XMLParser.ElementHandler handler, Group group) throws SAXException { - String s = handler.readRequiredAttribute(METHOD_BCI_PROPERTY); - int bci = 0; - try { - bci = Integer.parseInt(s); - } catch (NumberFormatException e) { - throw new SAXException(e); - } - InputMethod method = new InputMethod(group, handler.readRequiredAttribute(METHOD_NAME_PROPERTY), handler.readRequiredAttribute(METHOD_SHORT_NAME_PROPERTY), bci); - return method; - } // - private HandoverElementHandler bytecodesHandler = new XMLParser.HandoverElementHandler(BYTECODES_ELEMENT, true) { + private final HandoverElementHandler bytecodesHandler = new XMLParser.HandoverElementHandler<>(BYTECODES_ELEMENT, true) { @Override - protected void end(String text) throws SAXException { + protected void end(String text) { getParentObject().setBytecodes(text); } }; // - private HandoverElementHandler inlinedHandler = new XMLParser.HandoverElementHandler<>(INLINE_ELEMENT); + private final HandoverElementHandler inlinedHandler = new XMLParser.HandoverElementHandler<>(INLINE_ELEMENT); // - private ElementHandler inlinedMethodHandler = new XMLParser.ElementHandler(METHOD_ELEMENT) { + private final ElementHandler inlinedMethodHandler = new XMLParser.ElementHandler<>(METHOD_ELEMENT) { @Override protected InputMethod start() throws SAXException { @@ -201,97 +133,69 @@ protected InputMethod start() throws SAXException { return method; } }; - // - private ElementHandler graphHandler = new XMLParser.ElementHandler(GRAPH_ELEMENT) { + // + private final HandoverElementHandler nodesHandler = new HandoverElementHandler<>(NODES_ELEMENT); + // + private final HandoverElementHandler controlFlowHandler = new HandoverElementHandler<>(CONTROL_FLOW_ELEMENT); + private final HandoverElementHandler graphStatesHandler = new HandoverElementHandler<>(GRAPH_STATES_ELEMENT); + private final ElementHandler stateHandler = new ElementHandler<>(STATE_ELEMENT) { @Override - protected InputGraph start() throws SAXException { - String name = readAttribute(GRAPH_NAME_PROPERTY); - InputGraph curGraph = new InputGraph(name); - if (differenceEncoding.get(getParentObject())) { - InputGraph previous = lastParsedGraph.get(getParentObject()); - lastParsedGraph.put(getParentObject(), curGraph); - if (previous != null) { - for (InputNode n : previous.getNodes()) { - curGraph.addNode(n); - } - for (InputEdge e : previous.getEdges()) { - curGraph.addEdge(e); - } - } + protected GraphContext start() { + InputGraph inputGraph = getParentObject(); + GraphContext graphContext = new GraphContext(inputGraph, new AtomicInteger(0), new HashSet<>(), new AtomicBoolean(false)); + if (contextAction != null) { + contexts.add(graphContext); } - ParseMonitor monitor = getMonitor(); - if (monitor != null) { - monitor.updateProgress(); - } - return curGraph; + return graphContext; } + }; + private final ElementHandler visibleNodesHandler = new ElementHandler<>(VISIBLE_NODES_ELEMENT) { @Override - protected void end(String text) throws SAXException { - // NOTE: Some graphs intentionally don't provide blocks. Instead - // they later generate the blocks from other information such - // as node properties (example: ServerCompilerScheduler). - // Thus, we shouldn't assign nodes that don't belong to any - // block to some artificial block below unless blocks are - // defined and nodes are assigned to them. - - final InputGraph graph = getObject(); - final Group parent = getParentObject(); - if (graph.getBlocks().size() > 0) { - boolean blocksContainNodes = false; - for (InputBlock b : graph.getBlocks()) { - if (b.getNodes().size() > 0) { - blocksContainNodes = true; - break; - } - } - - if (!blocksContainNodes) { - graph.clearBlocks(); - blockConnections.clear(); - } else { - // Blocks and their nodes defined: add other nodes to an - // artificial "no block" block - InputBlock noBlock = null; - for (InputNode n : graph.getNodes()) { - if (graph.getBlock(n) == null) { - if (noBlock == null) { - noBlock = graph.addArtificialBlock(); - } - - noBlock.addNode(n.getId()); - } - - assert graph.getBlock(n) != null; - } - } + protected GraphContext start() throws SAXException { + String s = readRequiredAttribute(ALL_PROPERTY); + try { + boolean all = Boolean.parseBoolean(s); + getParentObject().showAll().set(all); + } catch (NumberFormatException e) { + throw new SAXException(e); } + return getParentObject(); + } + }; + private final ElementHandler visibleNodeHandler = new ElementHandler<>(NODE_ELEMENT) { - // Resolve block successors - for (Pair p : blockConnections) { - final InputBlock left = graph.getBlock(p.getLeft()); - assert left != null; - final InputBlock right = graph.getBlock(p.getRight()); - assert right != null; - graph.addBlockEdge(left, right); + @Override + protected GraphContext start() throws SAXException { + String s = readRequiredAttribute(NODE_ID_PROPERTY); + int nodeID; + try { + nodeID = Integer.parseInt(s); + } catch (NumberFormatException e) { + throw new SAXException(e); } - blockConnections.clear(); + getParentObject().visibleNodes().add(nodeID); + return getParentObject(); + } + }; + private final ElementHandler differenceHandler = new ElementHandler<>(STATE_POSITION_DIFFERENCE) { - Runnable addToParent = () -> parent.addElement(graph); - if (invokeLater) { - SwingUtilities.invokeLater(addToParent); - } else { - addToParent.run(); + @Override + protected GraphContext start() throws SAXException { + String s = readRequiredAttribute(POSITION_DIFFERENCE_PROPERTY); + int posDiff; + try { + posDiff = Integer.parseInt(s); + } catch (NumberFormatException e) { + throw new SAXException(e); } + getParentObject().posDiff().set(posDiff); + return getParentObject(); } }; - // - private HandoverElementHandler nodesHandler = new HandoverElementHandler<>(NODES_ELEMENT); - // - private HandoverElementHandler controlFlowHandler = new HandoverElementHandler<>(CONTROL_FLOW_ELEMENT); // - private ElementHandler blockHandler = new ElementHandler(BLOCK_ELEMENT) { + private final ElementHandler blockHandler = new ElementHandler<>(BLOCK_ELEMENT) { @Override protected InputBlock start() throws SAXException { @@ -305,15 +209,64 @@ protected InputBlock start() throws SAXException { } }; // - private HandoverElementHandler blockNodesHandler = new HandoverElementHandler<>(NODES_ELEMENT); + private final HandoverElementHandler blockNodesHandler = new HandoverElementHandler<>(NODES_ELEMENT); + // + private final HandoverElementHandler successorsHandler = new HandoverElementHandler<>(SUCCESSORS_ELEMENT); + // + private final ElementHandler successorHandler = new ElementHandler<>(SUCCESSOR_ELEMENT) { + + @Override + protected InputBlock start() throws SAXException { + String name = readRequiredAttribute(BLOCK_NAME_PROPERTY); + blockConnections.add(new Pair<>(getParentObject().getName(), name)); + return getParentObject(); + } + }; + // + private final HandoverElementHandler edgesHandler = new HandoverElementHandler<>(EDGES_ELEMENT); + // + private final EdgeElementHandler edgeHandler = new EdgeElementHandler(EDGE_ELEMENT) { + + @Override + protected InputEdge start(InputEdge conn) { + InputGraph inputGraph = getParentObject(); + inputGraph.addEdge(conn); + return conn; + } + }; + // + private final EdgeElementHandler removeEdgeHandler = new EdgeElementHandler(REMOVE_EDGE_ELEMENT) { + + @Override + protected InputEdge start(InputEdge conn) { + getParentObject().removeEdge(conn); + return conn; + } + }; + // + private final HandoverElementHandler propertiesHandler = new HandoverElementHandler<>(PROPERTIES_ELEMENT); + // + private final ElementHandler propertyHandler = new XMLParser.ElementHandler<>(PROPERTY_ELEMENT, true) { + + @Override + public String start() throws SAXException { + return readRequiredAttribute(PROPERTY_NAME_PROPERTY); + } + + @Override + public void end(String text) { + getParentObject().getProperties().setProperty(getObject(), text.trim()); + } + }; + private int maxId = 0; // - private ElementHandler blockNodeHandler = new ElementHandler(NODE_ELEMENT) { + private final ElementHandler blockNodeHandler = new ElementHandler<>(NODE_ELEMENT) { @Override protected InputBlock start() throws SAXException { String s = readRequiredAttribute(NODE_ID_PROPERTY); - int id = 0; + int id; try { id = lookupID(s); } catch (NumberFormatException e) { @@ -323,25 +276,13 @@ protected InputBlock start() throws SAXException { return getParentObject(); } }; - // - private HandoverElementHandler successorsHandler = new HandoverElementHandler<>(SUCCESSORS_ELEMENT); - // - private ElementHandler successorHandler = new ElementHandler(SUCCESSOR_ELEMENT) { - - @Override - protected InputBlock start() throws SAXException { - String name = readRequiredAttribute(BLOCK_NAME_PROPERTY); - blockConnections.add(new Pair<>(getParentObject().getName(), name)); - return getParentObject(); - } - }; // - private ElementHandler nodeHandler = new ElementHandler(NODE_ELEMENT) { + private final ElementHandler nodeHandler = new ElementHandler<>(NODE_ELEMENT) { @Override protected InputNode start() throws SAXException { String s = readRequiredAttribute(NODE_ID_PROPERTY); - int id = 0; + int id; try { id = lookupID(s); } catch (NumberFormatException e) { @@ -353,12 +294,12 @@ protected InputNode start() throws SAXException { } }; // - private ElementHandler removeNodeHandler = new ElementHandler(REMOVE_NODE_ELEMENT) { + private final ElementHandler removeNodeHandler = new ElementHandler<>(REMOVE_NODE_ELEMENT) { @Override protected InputNode start() throws SAXException { String s = readRequiredAttribute(NODE_ID_PROPERTY); - int id = 0; + int id; try { id = lookupID(s); } catch (NumberFormatException e) { @@ -367,118 +308,164 @@ protected InputNode start() throws SAXException { return getParentObject().removeNode(id); } }; - // - private HandoverElementHandler edgesHandler = new HandoverElementHandler<>(EDGES_ELEMENT); - - // Local class for edge elements - private class EdgeElementHandler extends ElementHandler { + private GraphDocument graphDocument; + // + private final ElementHandler topHandler = new ElementHandler<>(TOP_ELEMENT) { - public EdgeElementHandler(String name) { - super(name); + @Override + protected GraphDocument start() { + graphDocument = new GraphDocument(); + return graphDocument; } + }; + // + private final ElementHandler groupHandler = new XMLParser.ElementHandler<>(GROUP_ELEMENT) { @Override - protected InputEdge start() throws SAXException { - int fromIndex = 0; - int toIndex = 0; - int from = -1; - int to = -1; - String label = null; - String type = null; + protected Group start() { + final Folder folder = getParentObject(); + final Group group = new Group(folder); - try { - String fromIndexString = readAttribute(FROM_INDEX_PROPERTY); - if (fromIndexString != null) { - fromIndex = Integer.parseInt(fromIndexString); - } - - String toIndexString = readAttribute(TO_INDEX_PROPERTY); - if (toIndexString == null) { - toIndexString = readAttribute(TO_INDEX_ALT_PROPERTY); - } - if (toIndexString != null) { - toIndex = Integer.parseInt(toIndexString); - } - - label = readAttribute(LABEL_PROPERTY); - type = readAttribute(TYPE_PROPERTY); + String differenceProperty = this.readAttribute(DIFFERENCE_PROPERTY); + Parser.this.differenceEncoding.put(group, (differenceProperty != null && (differenceProperty.equals("1") || differenceProperty.equals("true")))); - from = lookupID(readRequiredAttribute(FROM_PROPERTY)); - to = lookupID(readRequiredAttribute(TO_PROPERTY)); - } catch (NumberFormatException e) { - throw new SAXException(e); + ParseMonitor monitor = getMonitor(); + if (monitor != null) { + monitor.setState(group.getName()); } - InputEdge conn = new InputEdge((char) fromIndex, (char) toIndex, from, to, label, type == null ? "" : type); - return start(conn); - } + if (callbackDocument == null || folder instanceof Group) { + if (invokeLater) { + SwingUtilities.invokeLater(() -> folder.addElement(group)); + } else { + folder.addElement(group); + } + } - protected InputEdge start(InputEdge conn) throws SAXException { - return conn; + return group; } - } - // - private EdgeElementHandler edgeHandler = new EdgeElementHandler(EDGE_ELEMENT) { @Override - protected InputEdge start(InputEdge conn) throws SAXException { - getParentObject().addEdge(conn); - return conn; + protected void end(String text) { } }; - // - private EdgeElementHandler removeEdgeHandler = new EdgeElementHandler(REMOVE_EDGE_ELEMENT) { + // + private final ElementHandler graphHandler = new XMLParser.ElementHandler<>(GRAPH_ELEMENT) { @Override - protected InputEdge start(InputEdge conn) throws SAXException { - getParentObject().removeEdge(conn); - return conn; + protected InputGraph start() { + Group group = getParentObject(); + String name = readAttribute(GRAPH_NAME_PROPERTY); + InputGraph curGraph = new InputGraph(name); + if (differenceEncoding.get(group)) { + InputGraph previous = lastParsedGraph.get(group); + lastParsedGraph.put(group, curGraph); + if (previous != null) { + for (InputNode n : previous.getNodes()) { + curGraph.addNode(n); + } + for (InputEdge e : previous.getEdges()) { + curGraph.addEdge(e); + } + } + } + ParseMonitor monitor = getMonitor(); + if (monitor != null) { + monitor.updateProgress(); + } + return curGraph; } - }; - // - private HandoverElementHandler propertiesHandler = new HandoverElementHandler<>(PROPERTIES_ELEMENT); - // - private HandoverElementHandler groupPropertiesHandler = new HandoverElementHandler(PROPERTIES_ELEMENT) { @Override - public void end(String text) throws SAXException { - if (groupCallback != null && getParentObject().getParent() instanceof GraphDocument) { - final Group group = getParentObject(); - Runnable addStarted = () -> groupCallback.started(group); - if (invokeLater) { - SwingUtilities.invokeLater(addStarted); + protected void end(String text) { + // NOTE: Some graphs intentionally don't provide blocks. Instead, + // they later generate the blocks from other information such + // as node properties (example: ServerCompilerScheduler). + // Thus, we shouldn't assign nodes that don't belong to any + // block to some artificial block below unless blocks are + // defined and nodes are assigned to them. + + final InputGraph graph = getObject(); + + final Group parent = getParentObject(); + if (!graph.getBlocks().isEmpty()) { + boolean blocksContainNodes = false; + for (InputBlock b : graph.getBlocks()) { + if (!b.getNodes().isEmpty()) { + blocksContainNodes = true; + break; + } + } + + if (!blocksContainNodes) { + graph.clearBlocks(); + blockConnections.clear(); } else { - addStarted.run(); + // Blocks and their nodes defined: add other nodes to an + // artificial "no block" block + InputBlock noBlock = null; + for (InputNode n : graph.getNodes()) { + if (graph.getBlock(n) == null) { + if (noBlock == null) { + noBlock = graph.addArtificialBlock(); + } + + noBlock.addNode(n.getId()); + } + + assert graph.getBlock(n) != null; + } } } + + // Resolve block successors + for (Pair p : blockConnections) { + final InputBlock left = graph.getBlock(p.getLeft()); + assert left != null; + final InputBlock right = graph.getBlock(p.getRight()); + assert right != null; + graph.addBlockEdge(left, right); + } + blockConnections.clear(); + + if (invokeLater) { + SwingUtilities.invokeLater(() -> parent.addElement(graph)); + } else { + parent.addElement(graph); + } + if (contextAction != null) { + for (GraphContext ctx : contexts) { + contextAction.performAction(ctx); + } + } + contexts.clear(); } }; - // - private ElementHandler propertyHandler = new XMLParser.ElementHandler(PROPERTY_ELEMENT, true) { - - @Override - public String start() throws SAXException { - return readRequiredAttribute(PROPERTY_NAME_PROPERTY); - } + // + private final HandoverElementHandler groupPropertiesHandler = new HandoverElementHandler<>(PROPERTIES_ELEMENT) { @Override public void end(String text) { - getParentObject().getProperties().setProperty(getObject(), text.trim()); + final Group group = getParentObject(); + if (callbackDocument != null && group.getParent() instanceof GraphDocument) { + group.setParent(callbackDocument); + if (invokeLater) { + SwingUtilities.invokeLater(() -> callbackDocument.addElement(group)); + } else { + callbackDocument.addElement(group); + } + } } }; - public Parser(ReadableByteChannel channel) { - this(channel, null, null); - } - - public Parser(ReadableByteChannel channel, ParseMonitor monitor, GroupCallback groupCallback) { - - this.groupCallback = groupCallback; + public Parser(ReadableByteChannel channel, ParseMonitor monitor, GraphDocument callbackDocument, GraphContextAction contextAction) { + this.callbackDocument = callbackDocument; + this.contextAction = contextAction; this.monitor = monitor; this.channel = channel; // Initialize dependencies - xmlDocument.addChild(topHandler); + xmlData.addChild(topHandler); topHandler.addChild(groupHandler); groupHandler.addChild(methodHandler); @@ -495,9 +482,15 @@ public Parser(ReadableByteChannel channel, ParseMonitor monitor, GroupCallback g graphHandler.addChild(nodesHandler); graphHandler.addChild(edgesHandler); graphHandler.addChild(controlFlowHandler); + graphHandler.addChild(graphStatesHandler); controlFlowHandler.addChild(blockHandler); + graphStatesHandler.addChild(stateHandler); + stateHandler.addChild(differenceHandler); + stateHandler.addChild(visibleNodesHandler); + visibleNodesHandler.addChild(visibleNodeHandler); + blockHandler.addChild(successorsHandler); successorsHandler.addChild(successorHandler); blockHandler.addChild(blockNodesHandler); @@ -518,6 +511,31 @@ public Parser(ReadableByteChannel channel, ParseMonitor monitor, GroupCallback g groupPropertiesHandler.addChild(propertyHandler); } + private int lookupID(String i) { + try { + return Integer.parseInt(i); + } catch (NumberFormatException nfe) { + // ignore + } + Integer id = idCache.get(i); + if (id == null) { + id = maxId++; + idCache.put(i, id); + } + return id; + } + + private InputMethod parseMethod(XMLParser.ElementHandler handler, Group group) throws SAXException { + String s = handler.readRequiredAttribute(METHOD_BCI_PROPERTY); + int bci; + try { + bci = Integer.parseInt(s); + } catch (NumberFormatException e) { + throw new SAXException(e); + } + return new InputMethod(group, handler.readRequiredAttribute(METHOD_NAME_PROPERTY), handler.readRequiredAttribute(METHOD_SHORT_NAME_PROPERTY), bci); + } + // Returns a new GraphDocument object deserialized from an XML input source. @Override public GraphDocument parse() throws IOException { @@ -528,7 +546,7 @@ public GraphDocument parse() throws IOException { XMLReader reader = createReader(); // To enforce using English for non-English users, we must use Locale.ROOT rather than Locale.ENGLISH reader.setProperty("http://apache.org/xml/properties/locale", Locale.ROOT); - reader.setContentHandler(new XMLParser(xmlDocument, monitor)); + reader.setContentHandler(new XMLParser(xmlData, monitor)); reader.parse(new InputSource(Channels.newInputStream(channel))); } catch (SAXException ex) { if (!(ex instanceof SAXParseException) || !"XML document structures must start and end within the same entity.".equals(ex.getMessage())) { @@ -538,6 +556,7 @@ public GraphDocument parse() throws IOException { if (monitor != null) { monitor.setState("Finished parsing"); } + return graphDocument; } @@ -549,12 +568,60 @@ public void setInvokeLater(boolean invokeLater) { private XMLReader createReader() throws SAXException { try { - SAXParserFactory pfactory = SAXParserFactory.newInstance(); - pfactory.setValidating(false); - pfactory.setNamespaceAware(true); - return pfactory.newSAXParser().getXMLReader(); + SAXParserFactory pFactory = SAXParserFactory.newInstance(); + pFactory.setValidating(false); + pFactory.setNamespaceAware(true); + return pFactory.newSAXParser().getXMLReader(); } catch (ParserConfigurationException ex) { throw new SAXException(ex); } } + + // Local class for edge elements + private class EdgeElementHandler extends ElementHandler { + + public EdgeElementHandler(String name) { + super(name); + } + + @Override + protected InputEdge start() throws SAXException { + int fromIndex = 0; + int toIndex = 0; + int from; + int to; + String label; + String type; + + try { + String fromIndexString = readAttribute(FROM_INDEX_PROPERTY); + if (fromIndexString != null) { + fromIndex = Integer.parseInt(fromIndexString); + } + + String toIndexString = readAttribute(TO_INDEX_PROPERTY); + if (toIndexString == null) { + toIndexString = readAttribute(TO_INDEX_ALT_PROPERTY); + } + if (toIndexString != null) { + toIndex = Integer.parseInt(toIndexString); + } + + label = readAttribute(LABEL_PROPERTY); + type = readAttribute(TYPE_PROPERTY); + + from = lookupID(readRequiredAttribute(FROM_PROPERTY)); + to = lookupID(readRequiredAttribute(TO_PROPERTY)); + } catch (NumberFormatException e) { + throw new SAXException(e); + } + + InputEdge conn = new InputEdge((char) fromIndex, (char) toIndex, from, to, label, type == null ? "" : type); + return start(conn); + } + + protected InputEdge start(InputEdge conn) { + return conn; + } + } } diff --git a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/serialization/Printer.java b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/serialization/Printer.java index eb3f145170324..f930e47877635 100644 --- a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/serialization/Printer.java +++ b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/serialization/Printer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,10 +25,13 @@ import com.sun.hotspot.igv.data.*; import java.io.IOException; -import java.io.InputStream; import java.io.Writer; import java.util.HashSet; +import java.util.List; import java.util.Set; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; /** * @@ -36,76 +39,47 @@ */ public class Printer { - private final InputStream in; - - public Printer() { - this(null); - } - - public Printer(InputStream inputStream) { - this.in = inputStream; - } - - public void export(Writer writer, GraphDocument document) { - + public static void exportGraphDocument(Writer writer, Folder folder, List contexts) { XMLWriter xmlWriter = new XMLWriter(writer); - try { - export(xmlWriter, document); - } catch (IOException ignored) {} - } - - private void export(XMLWriter xmlWriter, GraphDocument document) throws IOException { - xmlWriter.startTag(Parser.ROOT_ELEMENT); - xmlWriter.writeProperties(document.getProperties()); - for (FolderElement e : document.getElements()) { - if (e instanceof Group) { - export(xmlWriter, (Group) e); - } else if (e instanceof InputGraph) { - export(xmlWriter, (InputGraph)e, null, false); + xmlWriter.startTag(Parser.ROOT_ELEMENT); + xmlWriter.writeProperties(folder.getProperties()); + for (FolderElement e : folder.getElements()) { + if (e instanceof Group group) { + exportGroup(xmlWriter, group, contexts); + } else if (e instanceof InputGraph graph) { + exportInputGraph(xmlWriter, graph, null, false, contexts); + } } - } - - xmlWriter.endTag(); - xmlWriter.flush(); + xmlWriter.endTag(); + xmlWriter.flush(); + } catch (IOException ignored) {} } - private void export(XMLWriter writer, Group g) throws IOException { + private static void exportGroup(XMLWriter writer, Group g, List contexts) throws IOException { Properties attributes = new Properties(); attributes.setProperty("difference", Boolean.toString(true)); writer.startTag(Parser.GROUP_ELEMENT, attributes); writer.writeProperties(g.getProperties()); - boolean shouldExport = true; - if (in != null) { - char c = (char) in.read(); - if (c != 'y') { - shouldExport = false; - } + if (g.getMethod() != null) { + exportInputMethod(writer, g.getMethod()); } - if (shouldExport) { - if (g.getMethod() != null) { - export(writer, g.getMethod()); - } - - InputGraph previous = null; - for (FolderElement e : g.getElements()) { - if (e instanceof InputGraph) { - InputGraph graph = (InputGraph) e; - export(writer, graph, previous, true); - previous = graph; - } else if (e instanceof Group) { - export(writer, (Group) e); - } + InputGraph previous = null; + for (FolderElement e : g.getElements()) { + if (e instanceof InputGraph graph) { + exportInputGraph(writer, graph, previous, true, contexts); + previous = graph; + } else if (e instanceof Group group) { + exportGroup(writer, group, contexts); } } writer.endTag(); } - public void export(XMLWriter writer, InputGraph graph, InputGraph previous, boolean difference) throws IOException { - + private static void exportInputGraph(XMLWriter writer, InputGraph graph, InputGraph previous, boolean difference, List contexts) throws IOException { writer.startTag(Parser.GRAPH_ELEMENT); writer.writeProperties(graph.getProperties()); writer.startTag(Parser.NODES_ELEMENT); @@ -135,11 +109,11 @@ public void export(XMLWriter writer, InputGraph graph, InputGraph previous, bool if (!difference || !equal.contains(n)) { writer.startTag(Parser.NODE_ELEMENT, new Properties(Parser.NODE_ID_PROPERTY, Integer.toString(n.getId()))); writer.writeProperties(n.getProperties()); - writer.endTag(); + writer.endTag(); // Parser.NODE_ELEMENT } } - writer.endTag(); + writer.endTag(); // Parser.NODES_ELEMENT writer.startTag(Parser.EDGES_ELEMENT); Set removedEdges = new HashSet<>(); @@ -169,45 +143,78 @@ public void export(XMLWriter writer, InputGraph graph, InputGraph previous, bool } } - writer.endTag(); + writer.endTag(); // Parser.EDGES_ELEMENT writer.startTag(Parser.CONTROL_FLOW_ELEMENT); for (InputBlock b : graph.getBlocks()) { writer.startTag(Parser.BLOCK_ELEMENT, new Properties(Parser.BLOCK_NAME_PROPERTY, b.getName())); - if (b.getSuccessors().size() > 0) { + if (!b.getSuccessors().isEmpty()) { writer.startTag(Parser.SUCCESSORS_ELEMENT); for (InputBlock s : b.getSuccessors()) { writer.simpleTag(Parser.SUCCESSOR_ELEMENT, new Properties(Parser.BLOCK_NAME_PROPERTY, s.getName())); } - writer.endTag(); + writer.endTag(); // Parser.SUCCESSORS_ELEMENT } - if (b.getNodes().size() > 0) { - writer.startTag(Parser.NODES_ELEMENT); + if (!b.getNodes().isEmpty()) { + writer.startTag(Parser.NODES_ELEMENT); for (InputNode n : b.getNodes()) { writer.simpleTag(Parser.NODE_ELEMENT, new Properties(Parser.NODE_ID_PROPERTY, n.getId() + "")); } - writer.endTag(); + writer.endTag(); // Parser.NODES_ELEMENT } - writer.endTag(); + writer.endTag(); // Parser.BLOCK_ELEMENT } - writer.endTag(); - writer.endTag(); + writer.endTag(); // Parser.CONTROL_FLOW_ELEMENT + + exportStates(writer, graph, contexts); + + writer.endTag(); // Parser.GRAPH_ELEMENT } - private void export(XMLWriter w, InputMethod method) throws IOException { + private static void exportStates(XMLWriter writer, InputGraph exportingGraph, List contexts) throws IOException { + List contextsContainingGraph = contexts.stream() + .filter(context -> context.inputGraph().equals(exportingGraph)) + .toList(); + + if (contextsContainingGraph.isEmpty()) { + return; + } + + writer.startTag(Parser.GRAPH_STATES_ELEMENT); + + for (GraphContext context : contextsContainingGraph) { + assert exportingGraph == context.inputGraph(); + + writer.startTag(Parser.STATE_ELEMENT); + writer.simpleTag(Parser.STATE_POSITION_DIFFERENCE, + new Properties(Parser.POSITION_DIFFERENCE_PROPERTY, Integer.toString(context.posDiff().get()))); + + writer.startTag(Parser.VISIBLE_NODES_ELEMENT, new Properties(Parser.ALL_PROPERTY, Boolean.toString(context.showAll().get()))); + for (Integer hiddenNodeID : context.visibleNodes()) { + writer.simpleTag(Parser.NODE_ELEMENT, new Properties(Parser.NODE_ID_PROPERTY, hiddenNodeID.toString())); + } + writer.endTag(); // Parser.VISIBLE_NODES_ELEMENT + + writer.endTag(); // Parser.STATES_ELEMENT + } + + writer.endTag(); // Parser.GRAPH_STATE_ELEMENT + } + + private static void exportInputMethod(XMLWriter w, InputMethod method) throws IOException { w.startTag(Parser.METHOD_ELEMENT, new Properties(Parser.METHOD_BCI_PROPERTY, method.getBci() + "", Parser.METHOD_NAME_PROPERTY, method.getName(), Parser.METHOD_SHORT_NAME_PROPERTY, method.getShortName())); w.writeProperties(method.getProperties()); - if (method.getInlined().size() > 0) { + if (!method.getInlined().isEmpty()) { w.startTag(Parser.INLINE_ELEMENT); for (InputMethod m : method.getInlined()) { - export(w, m); + exportInputMethod(w, m); } w.endTag(); } @@ -229,7 +236,7 @@ private void export(XMLWriter w, InputMethod method) throws IOException { w.endTag(); } - private Properties createProperties(InputEdge edge) { + private static Properties createProperties(InputEdge edge) { Properties p = new Properties(); if (edge.getToIndex() != 0) { p.setProperty(Parser.TO_INDEX_PROPERTY, Integer.toString(edge.getToIndex())); @@ -242,4 +249,10 @@ private Properties createProperties(InputEdge edge) { p.setProperty(Parser.TYPE_PROPERTY, edge.getType()); return p; } + + public record GraphContext(InputGraph inputGraph, AtomicInteger posDiff, Set visibleNodes, AtomicBoolean showAll) { } + + public interface GraphContextAction { + void performAction(GraphContext context); + } } diff --git a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/services/GraphViewer.java b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/services/GraphViewer.java index ebaa03df282ae..3cef9c4fc95a5 100644 --- a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/services/GraphViewer.java +++ b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/services/GraphViewer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,7 @@ */ public interface GraphViewer { - void view(InputGraph graph, boolean newTab); + InputGraph view(InputGraph graph, boolean newTab); - void viewDifference(InputGraph firstGraph, InputGraph secondGraph); + InputGraph viewDifference(InputGraph firstGraph, InputGraph secondGraph); } diff --git a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/services/GroupCallback.java b/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/services/GroupCallback.java deleted file mode 100644 index b35f3eabf89dd..0000000000000 --- a/src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/services/GroupCallback.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (c) 1998, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. 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 com.sun.hotspot.igv.data.services; - -import com.sun.hotspot.igv.data.Group; - -/** - * - * @author Thomas Wuerthinger - */ -public interface GroupCallback { - - public void started(Group g); -} diff --git a/src/utils/IdealGraphVisualizer/Data/src/test/java/com/sun/hotspot/igv/data/serialization/ParserTest.java b/src/utils/IdealGraphVisualizer/Data/src/test/java/com/sun/hotspot/igv/data/serialization/ParserTest.java index 4342604644805..9788ee4443c61 100644 --- a/src/utils/IdealGraphVisualizer/Data/src/test/java/com/sun/hotspot/igv/data/serialization/ParserTest.java +++ b/src/utils/IdealGraphVisualizer/Data/src/test/java/com/sun/hotspot/igv/data/serialization/ParserTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,6 +32,8 @@ import java.io.InputStream; import java.nio.channels.Channels; import static java.nio.charset.StandardCharsets.UTF_8; +import java.util.ArrayList; +import java.util.HashSet; import org.junit.*; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -62,19 +64,18 @@ public void tearDown() { } private void test(GraphDocument document) { - final Printer printer = new Printer(); final CharArrayWriter writer = new CharArrayWriter(); - printer.export(writer, document); + Printer.exportGraphDocument(writer, document, new ArrayList<>()); test(document, writer.toString()); } private void test(GraphDocument document, String xmlString) { InputStream in = new ByteArrayInputStream(xmlString.getBytes(UTF_8)); try { - Parser parser = new Parser(Channels.newChannel(in)); + Parser parser = new Parser(Channels.newChannel(in), null, null, null); parser.setInvokeLater(false); - final GraphDocument parsedDocument = parser.parse(); - Util.assertGraphDocumentEquals(document, parsedDocument); + final GraphDocument exportData = parser.parse(); + Util.assertGraphDocumentEquals(document, exportData); } catch (IOException ex) { fail(ex.toString()); } diff --git a/src/utils/IdealGraphVisualizer/NetworkConnection/src/main/java/com/sun/hotspot/igv/connection/Client.java b/src/utils/IdealGraphVisualizer/NetworkConnection/src/main/java/com/sun/hotspot/igv/connection/Client.java deleted file mode 100644 index 2f4b6cff0dbac..0000000000000 --- a/src/utils/IdealGraphVisualizer/NetworkConnection/src/main/java/com/sun/hotspot/igv/connection/Client.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (c) 2012, 2022, 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 com.sun.hotspot.igv.connection; - -import com.sun.hotspot.igv.data.serialization.Parser; -import com.sun.hotspot.igv.data.services.GroupCallback; -import java.io.IOException; -import java.nio.channels.SocketChannel; -import org.openide.util.Exceptions; - -public class Client implements Runnable { - private final SocketChannel socket; - private final GroupCallback callback; - - public Client(SocketChannel socket, GroupCallback callback) { - this.callback = callback; - this.socket = socket; - } - - @Override - public void run() { - - try { - final SocketChannel channel = socket; - channel.configureBlocking(true); - channel.socket().getOutputStream().write('y'); - new Parser(channel, null, callback).parse(); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } finally { - try { - socket.close(); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - } - } -} diff --git a/src/utils/IdealGraphVisualizer/NetworkConnection/src/main/java/com/sun/hotspot/igv/connection/Server.java b/src/utils/IdealGraphVisualizer/NetworkConnection/src/main/java/com/sun/hotspot/igv/connection/Server.java index 523f4d2017d10..a507c568be25f 100644 --- a/src/utils/IdealGraphVisualizer/NetworkConnection/src/main/java/com/sun/hotspot/igv/connection/Server.java +++ b/src/utils/IdealGraphVisualizer/NetworkConnection/src/main/java/com/sun/hotspot/igv/connection/Server.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2015, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,9 @@ */ package com.sun.hotspot.igv.connection; -import com.sun.hotspot.igv.data.services.GroupCallback; +import com.sun.hotspot.igv.data.GraphDocument; +import com.sun.hotspot.igv.data.serialization.Parser; +import com.sun.hotspot.igv.data.serialization.Printer.GraphContextAction; import com.sun.hotspot.igv.settings.Settings; import java.io.IOException; import java.net.InetSocketAddress; @@ -32,9 +34,6 @@ import java.nio.channels.SocketChannel; import java.util.prefs.PreferenceChangeEvent; import java.util.prefs.PreferenceChangeListener; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.util.RequestProcessor; /** * @@ -42,13 +41,16 @@ */ public class Server implements PreferenceChangeListener { private ServerSocketChannel serverSocket; - private final GroupCallback callback; + private final GraphDocument graphDocument; + private final GraphContextAction contextAction; private int port; - private Runnable serverRunnable; - public Server(GroupCallback callback) { - this.callback = callback; - initializeNetwork(); + private volatile boolean isServerRunning; + + public Server(GraphDocument graphDocument, GraphContextAction contextAction) { + this.graphDocument = graphDocument; + this.contextAction = contextAction; + port = Integer.parseInt(Settings.get().get(Settings.PORT, Settings.PORT_DEFAULT)); Settings.get().addPreferenceChangeListener(this); } @@ -56,46 +58,65 @@ public Server(GroupCallback callback) { public void preferenceChange(PreferenceChangeEvent e) { int curPort = Integer.parseInt(Settings.get().get(Settings.PORT, Settings.PORT_DEFAULT)); if (curPort != port) { - initializeNetwork(); + port = curPort; + shutdownServer(); + startServer(); } } - private void initializeNetwork() { - int curPort = Integer.parseInt(Settings.get().get(Settings.PORT, Settings.PORT_DEFAULT)); - this.port = curPort; + public void startServer() { + isServerRunning = true; + try { serverSocket = ServerSocketChannel.open(); - serverSocket.bind(new InetSocketAddress(curPort)); - } catch (Throwable ex) { - NotifyDescriptor message = new NotifyDescriptor.Message("Could not create server. Listening for incoming data is disabled.", NotifyDescriptor.ERROR_MESSAGE); - DialogDisplayer.getDefault().notifyLater(message); + serverSocket.bind(new InetSocketAddress(port)); + } catch (IOException ex) { + ex.printStackTrace(); return; } - Runnable runnable = new Runnable() { - - @Override - public void run() { - while (true) { - try { - SocketChannel clientSocket = serverSocket.accept(); - if (serverRunnable != this) { - clientSocket.close(); - return; - } - RequestProcessor.getDefault().post(new Client(clientSocket, callback), 0, Thread.MAX_PRIORITY); - } catch (IOException ex) { - serverSocket = null; - NotifyDescriptor message = new NotifyDescriptor.Message("Error during listening for incoming connections. Listening for incoming data is disabled.", NotifyDescriptor.ERROR_MESSAGE); - DialogDisplayer.getDefault().notifyLater(message); + Runnable client = () -> { + while (isServerRunning) { + try { + SocketChannel clientSocket = serverSocket.accept(); + if (!isServerRunning) { + clientSocket.close(); return; } + new Thread(() -> { + try (clientSocket) { + clientSocket.configureBlocking(true); + clientSocket.socket().getOutputStream().write('y'); + new Parser(clientSocket, null, graphDocument, contextAction).parse(); + } catch (IOException ignored) {} + }).start(); + } catch (IOException ex) { + if (isServerRunning) { + ex.printStackTrace(); + } + return; } } + try { + if (serverSocket != null) { + serverSocket.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } }; - serverRunnable = runnable; + new Thread(client).start(); + } - RequestProcessor.getDefault().post(runnable, 0, Thread.MAX_PRIORITY); + public void shutdownServer() { + isServerRunning = false; + try { + if (serverSocket != null) { + serverSocket.close(); + } + } catch (IOException ex) { + ex.printStackTrace(); + } } } diff --git a/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/DiagramScene.java b/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/DiagramScene.java index 23cd4a4360fd5..e47518de4a722 100644 --- a/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/DiagramScene.java +++ b/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/DiagramScene.java @@ -652,7 +652,7 @@ private void centerRootNode() { Rectangle bounds = rootWidget.getBounds(); if (bounds != null) { Point location = rootWidget.getLocation(); - centerRectangle(new Rectangle(location.x, location.y, bounds.width, bounds.height)); + centerRectangle(new Rectangle(location.x, location.y, bounds.width, bounds.height), false); } } } @@ -872,7 +872,7 @@ public Lookup getLookup() { private void gotoBlock(final Block block) { BlockWidget bw = getWidget(block.getInputBlock()); if (bw != null) { - centerRectangle(bw.getBounds()); + centerRectangle(bw.getBounds(), true); } } @@ -919,26 +919,28 @@ public void centerSelectedFigures() { } } if (overallRect != null) { - centerRectangle(overallRect); + centerRectangle(overallRect, true); } } - private void centerRectangle(Rectangle r) { + private void centerRectangle(Rectangle r, boolean zoomToFit) { Rectangle rect = convertSceneToView(r); Rectangle viewRect = scrollPane.getViewport().getViewRect(); - - double factor = Math.min(viewRect.getWidth() / rect.getWidth(), viewRect.getHeight() / rect.getHeight()); - double zoomFactor = getZoomFactor(); - double newZoomFactor = zoomFactor * factor; - if (factor < 1.0 || zoomFactor < 1.0) { - newZoomFactor = Math.min(1.0, newZoomFactor); - centredZoom(newZoomFactor, null); - factor = newZoomFactor / zoomFactor; - rect.x *= factor; - rect.y *= factor; - rect.width *= factor; - rect.height *= factor; + if (zoomToFit) { + double factor = Math.min(viewRect.getWidth() / rect.getWidth(), viewRect.getHeight() / rect.getHeight()); + double zoomFactor = getZoomFactor(); + double newZoomFactor = zoomFactor * factor; + if (factor < 1.0 || zoomFactor < 1.0) { + newZoomFactor = Math.min(1.0, newZoomFactor); + centredZoom(newZoomFactor, null); + factor = newZoomFactor / zoomFactor; + rect.x *= factor; + rect.y *= factor; + rect.width *= factor; + rect.height *= factor; + } } + viewRect.x = rect.x + rect.width / 2 - viewRect.width / 2; viewRect.y = rect.y + rect.height / 2 - viewRect.height / 2; // Ensure to be within area diff --git a/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/DiagramViewModel.java b/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/DiagramViewModel.java index f48e05ec6b9f3..6d7599e6d3458 100644 --- a/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/DiagramViewModel.java +++ b/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/DiagramViewModel.java @@ -332,6 +332,14 @@ public void showOnly(final Set nodes) { final HashSet allNodes = new HashSet<>(getGroup().getAllNodes()); allNodes.removeAll(nodes); setHiddenNodes(allNodes); + + + } + + public Set getVisibleNodes() { + final Set visibleNodes = new HashSet<>(getGraph().getNodesAsSet()); + visibleNodes.removeAll(hiddenNodes); + return visibleNodes; } public void setHiddenNodes(Set nodes) { diff --git a/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/EditorTopComponent.java b/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/EditorTopComponent.java index 57d2b006ac0e9..617f59a591d4d 100644 --- a/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/EditorTopComponent.java +++ b/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/EditorTopComponent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -125,8 +125,7 @@ public EditorTopComponent(DiagramViewModel diagramViewModel) { Group group = diagramViewModel.getGroup(); group.getChangedEvent().addListener(g -> closeOnRemovedOrEmptyGroup()); - if (group.getParent() instanceof GraphDocument) { - final GraphDocument doc = (GraphDocument) group.getParent(); + if (group.getParent() instanceof GraphDocument doc) { doc.getChangedEvent().addListener(d -> closeOnRemovedOrEmptyGroup()); } @@ -309,8 +308,7 @@ public static EditorTopComponent findEditorForGraph(InputGraph graph) { l.add(m.getSelectedTopComponent()); l.addAll(Arrays.asList(manager.getOpenedTopComponents(m))); for (TopComponent t : l) { - if (t instanceof EditorTopComponent) { - EditorTopComponent etc = (EditorTopComponent) t; + if (t instanceof EditorTopComponent etc) { if (etc.getModel().getGroup().getGraphs().contains(graph)) { return etc; } @@ -320,17 +318,31 @@ public static EditorTopComponent findEditorForGraph(InputGraph graph) { return null; } + public static void closeAllInstances() { + WindowManager manager = WindowManager.getDefault(); + for (Mode mode : manager.getModes()) { + TopComponent[] openedTopComponents = manager.getOpenedTopComponents(mode); + for (TopComponent tc : openedTopComponents) { + if (tc instanceof EditorTopComponent etc) { + etc.close(); + } + } + } + } + @Override public int getPersistenceType() { return TopComponent.PERSISTENCE_NEVER; } private void closeOnRemovedOrEmptyGroup() { - Group group = getModel().getGroup(); - if (!group.getParent().getElements().contains(group) || - group.getGraphs().isEmpty()) { - close(); - } + SwingUtilities.invokeLater(() -> { + Group group = getModel().getGroup(); + if (!group.getParent().getElements().contains(group) || + group.getGraphs().isEmpty()) { + close(); + } + }); } public void addSelectedNodes(Collection nodes, boolean showIfHidden) { @@ -405,8 +417,7 @@ protected void componentActivated() { WindowManager manager = WindowManager.getDefault(); for (Mode m : manager.getModes()) { for (TopComponent topComponent : manager.getOpenedTopComponents(m)) { - if (topComponent instanceof EditorTopComponent) { - EditorTopComponent editor = (EditorTopComponent) topComponent; + if (topComponent instanceof EditorTopComponent editor) { editor.setBoldDisplayName(false); } } diff --git a/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/GraphViewerImplementation.java b/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/GraphViewerImplementation.java index d4b88135408c9..04e63ebbc5f60 100644 --- a/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/GraphViewerImplementation.java +++ b/src/utils/IdealGraphVisualizer/View/src/main/java/com/sun/hotspot/igv/view/GraphViewerImplementation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,6 @@ import com.sun.hotspot.igv.data.InputGraph; import com.sun.hotspot.igv.data.services.GraphViewer; import com.sun.hotspot.igv.difference.Difference; -import com.sun.hotspot.igv.graph.Diagram; -import com.sun.hotspot.igv.settings.Settings; import org.openide.util.lookup.ServiceProvider; /** @@ -38,33 +36,37 @@ public class GraphViewerImplementation implements GraphViewer { @Override - public void viewDifference(InputGraph firstGraph, InputGraph secondGraph) { + public InputGraph viewDifference(InputGraph firstGraph, InputGraph secondGraph) { if (firstGraph.getGroup() != secondGraph.getGroup()) { InputGraph diffGraph = Difference.createDiffGraph(firstGraph, secondGraph); - view(diffGraph, true); + return view(diffGraph, true); } else { - view(firstGraph, true); - EditorTopComponent etc = EditorTopComponent.findEditorForGraph(firstGraph); - if (etc != null) { - etc.getModel().selectDiffGraph(secondGraph); - etc.requestActive(); + if (view(firstGraph, true) != null) { + EditorTopComponent etc = EditorTopComponent.findEditorForGraph(firstGraph); + if (etc != null) { + etc.getModel().selectDiffGraph(secondGraph); + etc.requestActive(); + return etc.getModel().getGraph(); + } } + return null; } } @Override - public void view(InputGraph graph, boolean newTab) { + public InputGraph view(InputGraph graph, boolean newTab) { if (!newTab) { EditorTopComponent etc = EditorTopComponent.findEditorForGraph(graph); if (etc != null) { etc.getModel().selectGraph(graph); etc.requestActive(); - return; + return etc.getModel().getGraph(); } } DiagramViewModel model = new DiagramViewModel(graph); EditorTopComponent etc = new EditorTopComponent(model); etc.open(); etc.requestActive(); + return etc.getModel().getGraph(); } } From f713766cab649947e543f0290717e7bcc501f063 Mon Sep 17 00:00:00 2001 From: Renjith Kannath Pariyangad Date: Thu, 18 Apr 2024 13:32:35 +0000 Subject: [PATCH 010/141] 8329322: Convert PageFormat/Orient.java to use PassFailJFrame Reviewed-by: abhiscxk, aivanov --- .../jdk/java/awt/print/PageFormat/Orient.java | 462 +++--------------- 1 file changed, 63 insertions(+), 399 deletions(-) diff --git a/test/jdk/java/awt/print/PageFormat/Orient.java b/test/jdk/java/awt/print/PageFormat/Orient.java index ea6facaf57042..c23e3faf27081 100644 --- a/test/jdk/java/awt/print/PageFormat/Orient.java +++ b/test/jdk/java/awt/print/PageFormat/Orient.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,64 +21,47 @@ * questions. */ -/* - @test - @bug 4236095 - @summary Confirm that the you get three pages of output, one - each in portrait, landscape, and reverse landscape - orientations. - @key printer - @run main/manual Orient -*/ - - -//*** global search and replace Orient with name of the test *** +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.geom.Ellipse2D; +import java.awt.print.Book; +import java.awt.print.PageFormat; +import java.awt.print.Printable; +import java.awt.print.PrinterException; +import java.awt.print.PrinterJob; -/** - * Orient.java - * - * summary: +/* + * @test + * @bug 4236095 + * @summary Confirm that you get three pages of output, one + * each in portrait, landscape and reverse landscape + * orientations. + * @library /java/awt/regtesthelpers + * @build PassFailJFrame + * @key printer + * @run main/manual Orient */ - -import java.awt.*; -import java.awt.event.*; -import java.awt.geom.*; -import java.awt.print.*; - -// This test is a "main" test as applets would need Runtime permission -// "queuePrintJob". - public class Orient implements Printable { + private static final String INSTRUCTIONS = + """ + This test will automatically initiate a print. - private static void init() - { - //*** Create instructions for the user here *** + A passing test will print three pages each containing a large oval + with the text describing the orientation: PORTRAIT, LANDSCAPE + or REVERSE_LANDSCAPE, inside of it. The first page will + be emitted in portrait orientation, the second page in landscape + orientation and the third page in reverse-landscape orientation. - String[] instructions = - { - "On-screen inspection is not possible for this printing-specific", - "test therefore its only output is three printed pages.", - "To be able to run this test it is required to have a default", - "printer configured in your user environment.", - "", - "Visual inspection of the printed page is needed. A passing", - "test will print three pages each containing a large oval ", - "with the text describing the orientation: PORTRAIT, LANDSCAPE", - "or REVERSE_LANDSCAPE, inside of it. The first page will ", - "be emitted in portait orientation, the second page in landscape ", - "orientation and the third page in reverse-landscape orientation. ", - "On each page the oval will be wholly within the imageable area ", - "of the page. In a failing test the oval on the third page ", - "will be clipped against the imageable area.", - "Axes will indicate the direction of increasing X and Y" - }; - Sysout.createDialog( ); - Sysout.printInstructions( instructions ); + On each page the oval will be wholly within the imageable area of the page. + Axes will indicate the direction of increasing X and Y. - PrinterJob pjob = PrinterJob.getPrinterJob(); + Test failed if the oval on the page clipped against the imageable area. + """; + private static void printOrientationJob() throws PrinterException { + PrinterJob pjob = PrinterJob.getPrinterJob(); Book book = new Book(); - // Page 1 PageFormat portrait = pjob.defaultPage(); portrait.setOrientation(PageFormat.PORTRAIT); @@ -95,366 +78,47 @@ private static void init() book.append(new Orient(), reverseLandscape); pjob.setPageable(book); - try { - pjob.print(); - } catch (PrinterException e) { - e.printStackTrace(); - } - }//End init() + pjob.print(); + } + @Override public int print(Graphics g, PageFormat pf, int pageIndex) { - - Graphics2D g2d = (Graphics2D)g; + Graphics2D g2d = (Graphics2D) g; g2d.translate(pf.getImageableX(), pf.getImageableY()); drawGraphics(g2d, pf); return Printable.PAGE_EXISTS; } void drawGraphics(Graphics2D g, PageFormat pf) { - double iw = pf.getImageableWidth(); - double ih = pf.getImageableHeight(); - + String orientation = switch (pf.getOrientation()) { + case PageFormat.PORTRAIT -> "PORTRAIT"; + case PageFormat.LANDSCAPE -> "LANDSCAPE"; + case PageFormat.REVERSE_LANDSCAPE -> "REVERSE_LANDSCAPE"; + default -> "INVALID"; + }; g.setColor(Color.black); - String orientation; - switch (pf.getOrientation()) { - case PageFormat.PORTRAIT : orientation = "PORTRAIT"; - break; - case PageFormat.LANDSCAPE : orientation = "LANDSCAPE"; - break; - case PageFormat.REVERSE_LANDSCAPE : - orientation = "REVERSE_LANDSCAPE"; - break; - default : orientation = "INVALID"; - } g.drawString(orientation, 100, 300); - g.draw(new Ellipse2D.Double(0, 0, iw, ih)); - g.drawString("(0,0)", 5,15); - g.drawLine(0,0,300,0); - g.drawString("X", 300,15); - g.drawLine(0,0,0,300); - g.drawString("Y",5,300); - } - - - /***************************************************** - Standard Test Machinery Section - DO NOT modify anything in this section -- it's a - standard chunk of code which has all of the - synchronisation necessary for the test harness. - By keeping it the same in all tests, it is easier - to read and understand someone else's test, as - well as insuring that all tests behave correctly - with the test harness. - There is a section following this for test-defined - classes - ******************************************************/ - private static boolean theTestPassed = false; - private static boolean testGeneratedInterrupt = false; - private static String failureMessage = ""; - - private static Thread mainThread = null; - - private static int sleepTime = 300000; - - public static void main( String args[] ) throws InterruptedException - { - mainThread = Thread.currentThread(); - try - { - init(); - } - catch( TestPassedException e ) - { - //The test passed, so just return from main and harness will - // interepret this return as a pass - return; - } - //At this point, neither test passed nor test failed has been - // called -- either would have thrown an exception and ended the - // test, so we know we have multiple threads. - - //Test involves other threads, so sleep and wait for them to - // called pass() or fail() - try - { - Thread.sleep( sleepTime ); - //Timed out, so fail the test - throw new RuntimeException( "Timed out after " + sleepTime/1000 + " seconds" ); - } - catch (InterruptedException e) - { - if( ! testGeneratedInterrupt ) throw e; - - //reset flag in case hit this code more than once for some reason (just safety) - testGeneratedInterrupt = false; - if ( theTestPassed == false ) - { - throw new RuntimeException( failureMessage ); - } - } - - }//main - - public static synchronized void setTimeoutTo( int seconds ) - { - sleepTime = seconds * 1000; - } - - public static synchronized void pass() - { - Sysout.println( "The test passed." ); - Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); - //first check if this is executing in main thread - if ( mainThread == Thread.currentThread() ) - { - //Still in the main thread, so set the flag just for kicks, - // and throw a test passed exception which will be caught - // and end the test. - theTestPassed = true; - throw new TestPassedException(); - } - //pass was called from a different thread, so set the flag and interrupt - // the main thead. - theTestPassed = true; - testGeneratedInterrupt = true; - mainThread.interrupt(); - }//pass() - - public static synchronized void fail() - { - //test writer didn't specify why test failed, so give generic - fail( "it just plain failed! :-)" ); - } - - public static synchronized void fail( String whyFailed ) - { - Sysout.println( "The test failed: " + whyFailed ); - Sysout.println( "The test is over, hit Ctl-C to stop Java VM" ); - //check if this called from main thread - if ( mainThread == Thread.currentThread() ) - { - //If main thread, fail now 'cause not sleeping - throw new RuntimeException( whyFailed ); - } - theTestPassed = false; - testGeneratedInterrupt = true; - failureMessage = whyFailed; - mainThread.interrupt(); - }//fail() - - }// class Orient - -//This exception is used to exit from any level of call nesting -// when it's determined that the test has passed, and immediately -// end the test. -class TestPassedException extends RuntimeException - { - } - -//*********** End Standard Test Machinery Section ********** - - -//************ Begin classes defined for the test **************** - -// make listeners in a class defined here, and instantiate them in init() - -/* Example of a class which may be written as part of a test -class NewClass implements anInterface - { - static int newVar = 0; - - public void eventDispatched(AWTEvent e) - { - //Counting events to see if we get enough - eventCount++; - - if( eventCount == 20 ) - { - //got enough events, so pass - - Orient.pass(); - } - else if( tries == 20 ) - { - //tried too many times without getting enough events so fail - - Orient.fail(); - } - - }// eventDispatched() - - }// NewClass class - -*/ - - -//************** End classes defined for the test ******************* - - - - -/**************************************************** - Standard Test Machinery - DO NOT modify anything below -- it's a standard - chunk of code whose purpose is to make user - interaction uniform, and thereby make it simpler - to read and understand someone else's test. - ****************************************************/ - -/** - This is part of the standard test machinery. - It creates a dialog (with the instructions), and is the interface - for sending text messages to the user. - To print the instructions, send an array of strings to Sysout.createDialog - WithInstructions method. Put one line of instructions per array entry. - To display a message for the tester to see, simply call Sysout.println - with the string to be displayed. - This mimics System.out.println but works within the test harness as well - as standalone. - */ - -class Sysout - { - private static TestDialog dialog; - - public static void createDialogWithInstructions( String[] instructions ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - dialog.printInstructions( instructions ); - dialog.show(); - println( "Any messages for the tester will display here." ); - } - - public static void createDialog( ) - { - dialog = new TestDialog( new Frame(), "Instructions" ); - String[] defInstr = { "Instructions will appear here. ", "" } ; - dialog.printInstructions( defInstr ); - dialog.show(); - println( "Any messages for the tester will display here." ); - } - - - public static void printInstructions( String[] instructions ) - { - dialog.printInstructions( instructions ); - } - - - public static void println( String messageIn ) - { - dialog.displayMessage( messageIn ); + g.draw(new Ellipse2D.Double(0, 0, + pf.getImageableWidth(), pf.getImageableHeight())); + g.drawString("(0,0)", 5, 15); + g.drawLine(0, 0, 300, 0); + g.drawString("X", 300, 15); + g.drawLine(0, 0, 0, 300); + g.drawString("Y", 5, 300); } - }// Sysout class - -/** - This is part of the standard test machinery. It provides a place for the - test instructions to be displayed, and a place for interactive messages - to the user to be displayed. - To have the test instructions displayed, see Sysout. - To have a message to the user be displayed, see Sysout. - Do not call anything in this dialog directly. - */ -class TestDialog extends Dialog implements ActionListener - { - - TextArea instructionsText; - TextArea messageText; - int maxStringLength = 80; - Panel buttonP = new Panel(); - Button passB = new Button( "pass" ); - Button failB = new Button( "fail" ); - - //DO NOT call this directly, go through Sysout - public TestDialog( Frame frame, String name ) - { - super( frame, name ); - int scrollBoth = TextArea.SCROLLBARS_BOTH; - instructionsText = new TextArea( "", 15, maxStringLength, scrollBoth ); - add( "North", instructionsText ); - - messageText = new TextArea( "", 5, maxStringLength, scrollBoth ); - add("Center", messageText); - - passB = new Button( "pass" ); - passB.setActionCommand( "pass" ); - passB.addActionListener( this ); - buttonP.add( "East", passB ); - - failB = new Button( "fail" ); - failB.setActionCommand( "fail" ); - failB.addActionListener( this ); - buttonP.add( "West", failB ); - - add( "South", buttonP ); - pack(); - - show(); - }// TestDialog() - - //DO NOT call this directly, go through Sysout - public void printInstructions( String[] instructions ) - { - //Clear out any current instructions - instructionsText.setText( "" ); - - //Go down array of instruction strings - - String printStr, remainingStr; - for( int i=0; i < instructions.length; i++ ) - { - //chop up each into pieces maxSringLength long - remainingStr = instructions[ i ]; - while( remainingStr.length() > 0 ) - { - //if longer than max then chop off first max chars to print - if( remainingStr.length() >= maxStringLength ) - { - //Try to chop on a word boundary - int posOfSpace = remainingStr. - lastIndexOf( ' ', maxStringLength - 1 ); - - if( posOfSpace <= 0 ) posOfSpace = maxStringLength - 1; - - printStr = remainingStr.substring( 0, posOfSpace + 1 ); - remainingStr = remainingStr.substring( posOfSpace + 1 ); - } - //else just print - else - { - printStr = remainingStr; - remainingStr = ""; - } - - instructionsText.append( printStr + "\n" ); - - }// while - - }// for - - }//printInstructions() - - //DO NOT call this directly, go through Sysout - public void displayMessage( String messageIn ) - { - messageText.append( messageIn + "\n" ); - } + public static void main(String args[]) throws Exception { + if (PrinterJob.lookupPrintServices().length == 0) { + throw new RuntimeException("Printer not configured or available."); + } - //catch presses of the passed and failed buttons. - //simply call the standard pass() or fail() static methods of - //Orient - public void actionPerformed( ActionEvent e ) - { - if( e.getActionCommand() == "pass" ) - { - Orient.pass(); - } - else - { - Orient.fail(); - } + PassFailJFrame passFailJFrame = PassFailJFrame.builder() + .instructions(INSTRUCTIONS) + .rows((int) INSTRUCTIONS.lines().count() + 1) + .columns(45) + .build(); + printOrientationJob(); + passFailJFrame.awaitAndCheck(); } - - }// TestDialog class +} From 235ba9a7025964b1e43149c7102e26b82b2081ad Mon Sep 17 00:00:00 2001 From: Joe Darcy Date: Thu, 18 Apr 2024 16:12:50 +0000 Subject: [PATCH 011/141] 8330458: Add missing @since tag to ClassFile.JAVA_23_VERSION Reviewed-by: jjg, iris, asotona --- .../share/classes/java/lang/classfile/ClassFile.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/lang/classfile/ClassFile.java b/src/java.base/share/classes/java/lang/classfile/ClassFile.java index 27c2f18fe9633..68618252999ee 100644 --- a/src/java.base/share/classes/java/lang/classfile/ClassFile.java +++ b/src/java.base/share/classes/java/lang/classfile/ClassFile.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, 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 @@ -1475,7 +1475,10 @@ default List verify(Path path) throws IOException { /** The class major version of JAVA_22. */ int JAVA_22_VERSION = 66; - /** 67 */ + /** + * The class major version of JAVA_23. + * @since 23 + */ int JAVA_23_VERSION = 67; /** From 6ee8407758c92d32e18642b0758d2d5c71ad09f5 Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons Date: Thu, 18 Apr 2024 18:49:08 +0000 Subject: [PATCH 012/141] 8324342: Doclet should default @since for a nested class to that of its enclosing class Reviewed-by: prappo, hannesw --- .../formats/html/taglets/SimpleTaglet.java | 58 +++++++++- .../formats/html/taglets/TagletManager.java | 8 +- src/jdk.javadoc/share/man/javadoc.1 | 34 +++--- .../javadoc/doclet/testAuthor/TestAuthor.java | 104 +++++++++++++++++- .../doclet/testSinceTag/TestSinceTag.java | 79 ++++++++++++- .../doclet/testVersionTag/TestVersionTag.java | 37 ++++++- 6 files changed, 286 insertions(+), 34 deletions(-) diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SimpleTaglet.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SimpleTaglet.java index 119da6a761003..110a3e1246eb3 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SimpleTaglet.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/SimpleTaglet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2024, 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,10 +29,13 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.function.Predicate; import javax.lang.model.element.Element; import javax.lang.model.element.ElementKind; import javax.lang.model.element.ExecutableElement; +import javax.lang.model.element.NestingKind; +import javax.lang.model.element.TypeElement; import com.sun.source.doctree.BlockTagTree; import com.sun.source.doctree.DocTree; @@ -100,6 +103,7 @@ public class SimpleTaglet extends BaseTaglet implements InheritableTaglet { * @param tagName the name of this tag * @param header the header to output * @param locations the possible locations that this tag can appear in + * @param enabled whether this tag is enabled */ private SimpleTaglet(HtmlConfiguration config, String tagName, String header, Set locations, boolean enabled) { super(config, tagName, false, locations); @@ -113,6 +117,7 @@ private SimpleTaglet(HtmlConfiguration config, String tagName, String header, Se * @param tagKind the kind of this tag * @param header the header to output * @param locations the possible locations that this tag can appear in + * @param enabled whether this tag is enabled */ protected SimpleTaglet(HtmlConfiguration config, DocTree.Kind tagKind, String header, Set locations, boolean enabled) { super(config, tagKind, false, locations); @@ -120,6 +125,37 @@ protected SimpleTaglet(HtmlConfiguration config, DocTree.Kind tagKind, String he this.enabled = enabled; } + /** + * Constructs a {@code SimpleTaglet} that will look for tags on enclosing type elements + * if there are no relevant tags on a nested (member) type element. + * + * @param tagKind the kind of this tag + * @param header the header to output + * @param locations the possible locations that this tag can appear in + * @param enabled whether this tag is enabled + */ + static SimpleTaglet createWithDefaultForNested(HtmlConfiguration config, DocTree.Kind tagKind, String header, Set locations, boolean enabled) { + return new SimpleTaglet(config, tagKind, header, locations, enabled) { + @Override + protected List getDefaultBlockTags(Element e, Predicate accepts) { + while (isNestedType(e)) { + e = e.getEnclosingElement(); + var tags = utils.getBlockTags(e, accepts); + if (!tags.isEmpty()) { + return tags; + } + } + + return List.of(); + } + + private boolean isNestedType(Element e) { + return e.getKind().isDeclaredType() + && ((TypeElement) e).getNestingKind() == NestingKind.MEMBER; + } + }; + } + @Override public Output inherit(Element dst, Element src, DocTree tag, boolean isFirstSentence) { assert dst.getKind() == ElementKind.METHOD; @@ -153,8 +189,8 @@ boolean isEnabled() { /** * Returns whether this taglet accepts a {@code BlockTagTree} node. - * The taglet accepts a tree node if it has the same kind, and - * if the kind is {@code UNKNOWN_BLOCK_TAG} the same tag name. + * The taglet accepts a tree node if it has the same kind, or + * if the kind is {@code UNKNOWN_BLOCK_TAG} with the same tag name. * * @param tree the tree node * @return {@code true} if this taglet accepts this tree node @@ -168,7 +204,7 @@ private boolean accepts(BlockTagTree tree) { record Documentation(DocTree tag, List description, ExecutableElement method) { } private Optional extractFirst(ExecutableElement m) { - List tags = utils.getBlockTags(m, this::accepts); + List tags = getBlockTags(m); if (tags.isEmpty()) { return Optional.empty(); } @@ -179,13 +215,25 @@ private Optional extractFirst(ExecutableElement m) { @Override public Content getAllBlockTagOutput(Element holder, TagletWriter tagletWriter) { this.tagletWriter = tagletWriter; - List tags = utils.getBlockTags(holder, this::accepts); + List tags = getBlockTags(holder); if (header == null || tags.isEmpty()) { return null; } return simpleBlockTagOutput(holder, tags, header); } + private List getBlockTags(Element e) { + var tags = utils.getBlockTags(e, this::accepts); + if (tags.isEmpty()) { + tags = getDefaultBlockTags(e, this::accepts); + } + return tags; + } + + protected List getDefaultBlockTags(Element e, Predicate accepts) { + return List.of(); + } + /** * Returns the output for a series of simple tags. * diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/TagletManager.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/TagletManager.java index 804704528ce31..0e7b29590287c 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/TagletManager.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/taglets/TagletManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2024, 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 @@ -590,13 +590,13 @@ private void initStandardTaglets() { addStandardTaglet(new ReturnTaglet(config)); addStandardTaglet(new ThrowsTaglet(config), EXCEPTION); addStandardTaglet( - new SimpleTaglet(config, SINCE, resources.getText("doclet.Since"), + SimpleTaglet.createWithDefaultForNested(config, SINCE, resources.getText("doclet.Since"), EnumSet.allOf(Location.class), !nosince)); addStandardTaglet( - new SimpleTaglet(config, VERSION, resources.getText("doclet.Version"), + SimpleTaglet.createWithDefaultForNested(config, VERSION, resources.getText("doclet.Version"), EnumSet.of(Location.OVERVIEW, Location.MODULE, Location.PACKAGE, Location.TYPE), showversion)); addStandardTaglet( - new SimpleTaglet(config, AUTHOR, resources.getText("doclet.Author"), + SimpleTaglet.createWithDefaultForNested(config, AUTHOR, resources.getText("doclet.Author"), EnumSet.of(Location.OVERVIEW, Location.MODULE, Location.PACKAGE, Location.TYPE), showauthor)); addStandardTaglet( new SimpleTaglet(config, SERIAL_DATA, resources.getText("doclet.SerialData"), diff --git a/src/jdk.javadoc/share/man/javadoc.1 b/src/jdk.javadoc/share/man/javadoc.1 index a6437c0288bc5..30256207b3ea7 100644 --- a/src/jdk.javadoc/share/man/javadoc.1 +++ b/src/jdk.javadoc/share/man/javadoc.1 @@ -1,4 +1,4 @@ -.\" Copyright (c) 1994, 2023, Oracle and/or its affiliates. All rights reserved. +.\" Copyright (c) 1994, 2024, 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 @@ -110,8 +110,8 @@ also recommended to check the generated output with any appropriate conformance and other checking tools. .PP For more details on the conformance requirements for HTML5 documents, -see \f[B]Conformance requirements\f[R] -[https://www.w3.org/TR/html5/infrastructure.html#conformance-requirements] +see \f[B]Conformance requirements for authors\f[R] +[https://html.spec.whatwg.org/multipage/introduction.html#conformance-requirements-for-authors] in the HTML5 Specification. For more details on security issues related to web pages, see the \f[B]Open Web Application Security Project (OWASP)\f[R] @@ -489,7 +489,8 @@ Allow JavaScript in documentation comments, and options whose value is \f[I]html-code\f[R]. .TP \f[V]-author\f[R] -Includes the \f[V]\[at]author\f[R] text in the generated docs. +Includes the text of any \f[V]author\f[R] tags in the generated +documentation. .TP \f[V]-bottom\f[R] \f[I]html-code\f[R] Specifies the text to be placed at the bottom of each generated page. @@ -512,18 +513,16 @@ javadoc -charset \[dq]iso-8859-1\[dq] mypackage \f[R] .fi .PP -This command inserts the following line in the head of every generated -page: +This command inserts the following line, containing a +\f[B]\f[VB]meta\f[B] element\f[R] +[https://html.spec.whatwg.org/multipage/semantics.html#the-meta-element] +in the head of every generated page: .IP .nf \f[CB] \f[R] .fi -.PP -The \f[V]meta\f[R] tag is described in the \f[B]HTML standard (4197265 -and 4137321), HTML Document Representation\f[R] -[http://www.w3.org/TR/REC-html40/charset.html#h-5.2.2]. .RE .TP \f[V]-d\f[R] \f[I]directory\f[R] @@ -723,8 +722,8 @@ documentation shares the same file system. In all cases, and on all operating systems, use a slash as the separator, whether the URL is absolute or relative, and \f[V]https:\f[R], \f[V]http:\f[R], or \f[V]file:\f[R] as specified in -the \f[B]URL Memo: Uniform Resource Locators\f[R] -[http://www.ietf.org/rfc/rfc1738.txt]. +the \f[B]RFC 1738: Uniform Resource Locators (URL)\f[R] +[https://www.rfc-editor.org/info/rfc1738]. .IP .nf \f[CB] @@ -950,8 +949,8 @@ is used. .RE .TP \f[V]-nosince\f[R] -Omits from the generated documents the \f[V]Since\f[R] sections -associated with the \f[V]\[at]since\f[R] tags. +Omits from the generated documentation the \f[V]Since\f[R] sections +derived from any \f[V]since\f[R] tags. .TP \f[V]-notimestamp\f[R] Suppresses the time stamp, which is hidden in an HTML comment in the @@ -1181,10 +1180,11 @@ To access the generated Use page, go to the class or package and click the \f[B]USE\f[R] link in the navigation bar. .TP \f[V]-version\f[R] -Includes the version text in the generated docs. +Includes the text of any \f[V]version\f[R] tags in the generated +documentation. This text is omitted by default. -To find out what version of the \f[V]javadoc\f[R] tool you are using, -use the \f[V]--version\f[R] option (with two hyphens). +Note: To find out what version of the \f[V]javadoc\f[R] tool you are +using, use the \f[V]--version\f[R] option (with two hyphens). .TP \f[V]-windowtitle\f[R] \f[I]title\f[R] Specifies the title to be placed in the HTML \f[V]\f[R] tag. diff --git a/test/langtools/jdk/javadoc/doclet/testAuthor/TestAuthor.java b/test/langtools/jdk/javadoc/doclet/testAuthor/TestAuthor.java index 5229f8ccab54b..799185f4deec4 100644 --- a/test/langtools/jdk/javadoc/doclet/testAuthor/TestAuthor.java +++ b/test/langtools/jdk/javadoc/doclet/testAuthor/TestAuthor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 8202947 8239804 + * @bug 8202947 8239804 8324342 * @summary test the at-author tag, and corresponding option * @library /tools/lib ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool @@ -129,4 +129,104 @@ void checkAuthor(boolean on) { <dd>anonymous</dd> </dl>"""); } + + @Test + public void testAuthorDefault(Path base) throws Exception { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, """ + package p; + /** + * Class C. + * @author J. Duke + */ + public class C { + /** Class Nested, with no explicit at-author. */ + public class Nested { } + }"""); + javadoc("-d", base.resolve("api").toString(), + "-author", + "-sourcepath", src.toString(), + "p"); + checkExit(Exit.OK); + + checkOutput("p/C.html", true, + """ + <dl class="notes"> + <dt>Author:</dt> + <dd>J. Duke</dd>"""); + + checkOutput("p/C.Nested.html", true, + """ + <dl class="notes"> + <dt>Author:</dt> + <dd>J. Duke</dd>"""); + } + + @Test + public void testAuthorDefault_Multiple(Path base) throws Exception { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, """ + package p; + /** + * Class C. + * @author J. Duke + * @author A. N. Other + */ + public class C { + /** Class Nested, with no explicit at-author. */ + public class Nested { } + }"""); + javadoc("-d", base.resolve("api").toString(), + "-author", + "-sourcepath", src.toString(), + "p"); + checkExit(Exit.OK); + + checkOutput("p/C.html", true, + """ + <dl class="notes"> + <dt>Author:</dt> + <dd>J. Duke, A. N. Other</dd>"""); + + checkOutput("p/C.Nested.html", true, + """ + <dl class="notes"> + <dt>Author:</dt> + <dd>J. Duke, A. N. Other</dd>"""); + } + + @Test + public void testAuthorDefault_Nested(Path base) throws Exception { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, """ + package p; + /** + * Class C. + * @author J. Duke + * @author A. N. Other + */ + public class C { + public class Nested1 { + /** Class Nested, with no explicit at-author. */ + public class Nested { } + } + }"""); + javadoc("-d", base.resolve("api").toString(), + "-author", + "-sourcepath", src.toString(), + "p"); + checkExit(Exit.OK); + + checkOutput("p/C.html", true, + """ + <dl class="notes"> + <dt>Author:</dt> + <dd>J. Duke, A. N. Other</dd>"""); + + checkOutput("p/C.Nested1.Nested.html", true, + """ + <dl class="notes"> + <dt>Author:</dt> + <dd>J. Duke, A. N. Other</dd>"""); + } } diff --git a/test/langtools/jdk/javadoc/doclet/testSinceTag/TestSinceTag.java b/test/langtools/jdk/javadoc/doclet/testSinceTag/TestSinceTag.java index 5f47be2c09a88..8d85fa176f6b8 100644 --- a/test/langtools/jdk/javadoc/doclet/testSinceTag/TestSinceTag.java +++ b/test/langtools/jdk/javadoc/doclet/testSinceTag/TestSinceTag.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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,15 +23,18 @@ /* * @test - * @bug 7180906 8026567 8239804 + * @bug 7180906 8026567 8239804 8324342 * @summary Test to make sure that the since tag works correctly - * @library ../../lib + * @library /tools/lib ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool - * @build javadoc.tester.* + * @build toolbox.ToolBox javadoc.tester.* * @run main TestSinceTag */ +import java.nio.file.Path; + import javadoc.tester.JavadocTester; +import toolbox.ToolBox; public class TestSinceTag extends JavadocTester { @@ -41,6 +44,8 @@ public static void main(String... args) throws Exception { tester.printSummary(); } + private final ToolBox tb = new ToolBox(); + @Test public void testSince() { javadoc("-d", "out-since", @@ -75,4 +80,70 @@ void checkSince(boolean on) { <dt>Since:</dt> <dd>1.4</dd>"""); } + + @Test + public void testSinceDefault(Path base) throws Exception { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, """ + package p; + /** + * Class C. + * @since 99 + */ + public class C { + /** Class Nested, with no explicit at-since. */ + public class Nested { } + }"""); + javadoc("-d", base.resolve("api").toString(), + "-sourcepath", src.toString(), + "p"); + checkExit(Exit.OK); + + checkOutput("p/C.html", true, + """ + <dl class="notes"> + <dt>Since:</dt> + <dd>99</dd>"""); + + checkOutput("p/C.Nested.html", true, + """ + <dl class="notes"> + <dt>Since:</dt> + <dd>99</dd>"""); + + } + + @Test + public void testSinceDefault_Nested(Path base) throws Exception { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, """ + package p; + /** + * Class C. + * @since 99 + */ + public class C { + public class Nested1 { + /** Class Nested, with no explicit at-since. */ + public class Nested { } + } + }"""); + javadoc("-d", base.resolve("api").toString(), + "-sourcepath", src.toString(), + "p"); + checkExit(Exit.OK); + + checkOutput("p/C.html", true, + """ + <dl class="notes"> + <dt>Since:</dt> + <dd>99</dd>"""); + + checkOutput("p/C.Nested1.Nested.html", true, + """ + <dl class="notes"> + <dt>Since:</dt> + <dd>99</dd>"""); + + } } diff --git a/test/langtools/jdk/javadoc/doclet/testVersionTag/TestVersionTag.java b/test/langtools/jdk/javadoc/doclet/testVersionTag/TestVersionTag.java index e04fa956e7410..6f01b407ae344 100644 --- a/test/langtools/jdk/javadoc/doclet/testVersionTag/TestVersionTag.java +++ b/test/langtools/jdk/javadoc/doclet/testVersionTag/TestVersionTag.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 8202947 8239804 + * @bug 8202947 8239804 8324342 * @summary test the at-version tag, and corresponding option * @library /tools/lib ../../lib * @modules jdk.javadoc/jdk.javadoc.internal.tool @@ -129,4 +129,37 @@ void checkVersion(boolean on) { <dd>1.2.3</dd> </dl>"""); } + + @Test + public void testVersionDefault(Path base) throws Exception { + Path src = base.resolve("src"); + tb.writeJavaFiles(src, """ + package p; + /** + * Class C. + * @version 42 + */ + public class C { + /** Class Nested, with no explicit at-version. */ + public class Nested { } + }"""); + javadoc("-d", base.resolve("api").toString(), + "-version", + "-sourcepath", src.toString(), + "p"); + checkExit(Exit.OK); + + checkOutput("p/C.html", true, + """ + <dl class="notes"> + <dt>Version:</dt> + <dd>42</dd>"""); + + checkOutput("p/C.Nested.html", true, + """ + <dl class="notes"> + <dt>Version:</dt> + <dd>42</dd>"""); + + } } From 32946e1882e9b22c983cbba3c6bda3cc7295946a Mon Sep 17 00:00:00 2001 From: Alexey Semenyuk <asemenyuk@openjdk.org> Date: Thu, 18 Apr 2024 22:09:32 +0000 Subject: [PATCH 013/141] 8295111: dpkg appears to have problems resolving symbolically linked native libraries Reviewed-by: almatvee --- .../jpackage/internal/LinuxDebBundler.java | 66 ++++++++++++------- 1 file changed, 41 insertions(+), 25 deletions(-) diff --git a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxDebBundler.java b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxDebBundler.java index e97cfc90a8006..478ec07879740 100644 --- a/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxDebBundler.java +++ b/src/jdk.jpackage/linux/classes/jdk/jpackage/internal/LinuxDebBundler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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 @@ -201,6 +201,24 @@ protected void initLibProvidersLookup( Map<String, ? super Object> params, LibProvidersLookup libProvidersLookup) { + libProvidersLookup.setPackageLookup(file -> { + Path realPath = file.toRealPath(); + + try { + // Try the real path first as it works better on newer Ubuntu versions + return findProvidingPackages(realPath); + } catch (IOException ex) { + // Try the default path if differ + if (!realPath.toString().equals(file.toString())) { + return findProvidingPackages(file); + } else { + throw ex; + } + } + }); + } + + private static Stream<String> findProvidingPackages(Path file) throws IOException { // // `dpkg -S` command does glob pattern lookup. If not the absolute path // to the file is specified it might return mltiple package names. @@ -243,32 +261,30 @@ protected void initLibProvidersLookup( // 4. Arch suffix should be stripped from accepted package names. // - libProvidersLookup.setPackageLookup(file -> { - Set<String> archPackages = new HashSet<>(); - Set<String> otherPackages = new HashSet<>(); - - Executor.of(TOOL_DPKG, "-S", file.toString()) - .saveOutput(true).executeExpectSuccess() - .getOutput().forEach(line -> { - Matcher matcher = PACKAGE_NAME_REGEX.matcher(line); - if (matcher.find()) { - String name = matcher.group(1); - if (name.endsWith(":" + DEB_ARCH)) { - // Strip arch suffix - name = name.substring(0, - name.length() - (DEB_ARCH.length() + 1)); - archPackages.add(name); - } else { - otherPackages.add(name); - } + Set<String> archPackages = new HashSet<>(); + Set<String> otherPackages = new HashSet<>(); + + Executor.of(TOOL_DPKG, "-S", file.toString()) + .saveOutput(true).executeExpectSuccess() + .getOutput().forEach(line -> { + Matcher matcher = PACKAGE_NAME_REGEX.matcher(line); + if (matcher.find()) { + String name = matcher.group(1); + if (name.endsWith(":" + DEB_ARCH)) { + // Strip arch suffix + name = name.substring(0, + name.length() - (DEB_ARCH.length() + 1)); + archPackages.add(name); + } else { + otherPackages.add(name); } - }); + } + }); - if (!archPackages.isEmpty()) { - return archPackages.stream(); - } - return otherPackages.stream(); - }); + if (!archPackages.isEmpty()) { + return archPackages.stream(); + } + return otherPackages.stream(); } @Override From 252c62a66dd955a5d22f307544f38cc0dd4f2550 Mon Sep 17 00:00:00 2001 From: Matthias Baesken <mbaesken@openjdk.org> Date: Fri, 19 Apr 2024 10:02:44 +0000 Subject: [PATCH 014/141] 8330524: Linux ppc64le compile warning with clang in os_linux_ppc.cpp Reviewed-by: mdoerr, clanger --- src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp b/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp index 55963b0680601..90640a6f06a81 100644 --- a/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp +++ b/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp @@ -1,6 +1,6 @@ /* * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2012, 2021 SAP SE. All rights reserved. + * Copyright (c) 2012, 2024 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -254,7 +254,7 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, stub = SharedRuntime::get_handle_wrong_method_stub(); } - else if ((sig == USE_POLL_BIT_ONLY ? SIGTRAP : SIGSEGV) && + else if ((sig == (USE_POLL_BIT_ONLY ? SIGTRAP : SIGSEGV)) && // A linux-ppc64 kernel before 2.6.6 doesn't set si_addr on some segfaults // in 64bit mode (cf. http://www.kernel.org/pub/linux/kernel/v2.6/ChangeLog-2.6.6), // especially when we try to read from the safepoint polling page. So the check From 46a2ce4eb4c961649a70d52a6317a2c022e87d63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20Walln=C3=B6fer?= <hannesw@openjdk.org> Date: Fri, 19 Apr 2024 10:03:59 +0000 Subject: [PATCH 015/141] 8330063: Upgrade jQuery to 3.7.1 Reviewed-by: prappo --- .../html/resources/jquery/jquery-3.6.1.min.js | 2 - .../{jquery-3.6.1.js => jquery-3.7.1.js} | 1915 ++++++++--------- .../html/resources/jquery/jquery-3.7.1.min.js | 2 + .../doclets/toolkit/util/DocPaths.java | 2 +- src/jdk.javadoc/share/legal/jquery.md | 50 +- .../javadoc/doclet/testSearch/TestSearch.java | 4 +- .../doclet/testSearchScript/javadoc-search.js | 10 +- .../jdk/javadoc/tool/api/basic/APITest.java | 2 +- 8 files changed, 877 insertions(+), 1110 deletions(-) delete mode 100644 src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.6.1.min.js rename src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/{jquery-3.6.1.js => jquery-3.7.1.js} (88%) create mode 100644 src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.7.1.min.js diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.6.1.min.js b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.6.1.min.js deleted file mode 100644 index 2c69bc908b10d..0000000000000 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.6.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=y.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:v}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,y,s,c,v,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace($," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,y){var v="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===y?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=v!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(v){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=y)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye(function(){return[0]}),last:ye(function(e,t){return[t-1]}),eq:ye(function(e,t,n){return[n<0?n+t:n]}),even:ye(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ye(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ye(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ye(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,y,v,e){return y&&!y[S]&&(y=Ce(y)),v&&!v[S]&&(v=Ce(v,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?v||(e?d:l||y)?[]:t:f;if(g&&g(f,p,n,r),y){i=Te(p,u),y(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(v||d){if(v){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);v(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=v?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),v?v(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,y,v,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(y=o,m=0<(v=i).length,x=0<y.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=y[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=v[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+v.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ve(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},d.sortStable=S.split("").sort(j).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function $(){E.removeEventListener("DOMContentLoaded",$),C.removeEventListener("load",$),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",$),C.addEventListener("load",$));var B=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)B(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):B(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",v.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,v.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ee(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ee(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Se(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,we)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=y.events)||(u=y.events=Object.create(null)),(a=y.handle)||(a=y.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.hasData(e)&&Y.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||S.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Se(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(t,e){S.event.special[t]={setup:function(){return Se(this,t,Ce),!1},trigger:function(){return Se(this,t),!0},_default:function(e){return Y.get(e.target,t)},delegateType:e}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return Ee(this,e,t,n,r)},one:function(e,t,n,r){return Ee(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){S.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!v.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ye(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ye(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ye(r)),r.parentNode&&(n&&ie(r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ye(c),r=0,i=(o=ye(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ye(e),a=a||ye(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ye(c,"script")).length&&ve(a,!f&&ye(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return B(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ye(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=/^--/,Me=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Ie=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},We=new RegExp(ne.join("|"),"i"),Fe="[\\x20\\t\\r\\n\\f]",$e=new RegExp("^"+Fe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Fe+"+$","g");function Be(e,t,n){var r,i,o,a,s=Re.test(t),u=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t],s&&(a=a.replace($e,"$1")),""!==a||ie(e)||(a=S.style(e,t)),!v.pixelBoxStyles()&&Pe.test(a)&&We.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(v,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var ze=["Webkit","Moz","ms"],Ue=E.createElement("div").style,Xe={};function Ve(e){var t=S.cssProps[e]||Xe[e];return t||(e in Ue?e:Xe[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=ze.length;while(n--)if((e=ze[n]+t)in Ue)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Me(e),i=(!v.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Re.test(t),l=e.style;if(u||(t=Ve(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Re.test(t)||(t=Ve(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ge.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):Ie(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Me(e),o=!v.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=_e(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Ie(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return B(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(y?"hidden"in y&&(g=y.hidden):y=Y.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",v.checkOn=""!==rt.value,v.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",v.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return B(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function yt(e){return(e.match(P)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return B(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),v.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){S(this).addClass(t.call(this,e,vt(this)))}):(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=yt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){S(this).removeClass(t.call(this,e,vt(this)))}):arguments.length?(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=yt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return m(t)?this.each(function(e){S(this).toggleClass(t.call(this,e,vt(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=mt(t),this.each(function(){if(s)for(o=S(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=vt(this))&&Y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+yt(vt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:yt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},v.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=y.call(e,"type")?e.type:e,h=y.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),v.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||S.error("Invalid XML: "+(n?S.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):jt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)jt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Dt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function $t(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Bt(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,S.ajaxSettings),t):Bt(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,y=S.ajaxSetup({},t),v=y.context||y,m=y.context&&(v.nodeType||v.jquery)?S(v):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=y.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(y.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),y.url=((e||y.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),y.type=t.method||t.type||y.method||y.type,y.dataTypes=(y.dataType||"*").toLowerCase().match(P)||[""],null==y.crossDomain){r=E.createElement("a");try{r.href=y.url,r.href=r.href,y.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){y.crossDomain=!0}}if(y.data&&y.processData&&"string"!=typeof y.data&&(y.data=S.param(y.data,y.traditional)),$t(Rt,y,t,T),h)return T;for(i in(g=S.event&&y.global)&&0==S.active++&&S.event.trigger("ajaxStart"),y.type=y.type.toUpperCase(),y.hasContent=!Ot.test(y.type),f=y.url.replace(qt,""),y.hasContent?y.data&&y.processData&&0===(y.contentType||"").indexOf("application/x-www-form-urlencoded")&&(y.data=y.data.replace(Dt,"+")):(o=y.url.slice(f.length),y.data&&(y.processData||"string"==typeof y.data)&&(f+=(Et.test(f)?"&":"?")+y.data,delete y.data),!1===y.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),y.url=f+o),y.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(y.data&&y.hasContent&&!1!==y.contentType||t.contentType)&&T.setRequestHeader("Content-Type",y.contentType),T.setRequestHeader("Accept",y.dataTypes[0]&&y.accepts[y.dataTypes[0]]?y.accepts[y.dataTypes[0]]+("*"!==y.dataTypes[0]?", "+It+"; q=0.01":""):y.accepts["*"]),y.headers)T.setRequestHeader(i,y.headers[i]);if(y.beforeSend&&(!1===y.beforeSend.call(v,T,y)||h))return T.abort();if(u="abort",b.add(y.complete),T.done(y.success),T.fail(y.error),c=$t(Mt,y,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,y]),h)return T;y.async&&0<y.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},y.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(y,T,n)),!i&&-1<S.inArray("script",y.dataTypes)&&S.inArray("json",y.dataTypes)<0&&(y.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(y,s,T,i),i?(y.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===y.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(v,[o,l,T]):x.rejectWith(v,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,y,i?o:a]),b.fireWith(v,[T,l]),g&&(m.trigger("ajaxComplete",[T,y]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();v.cors=!!zt&&"withCredentials"in zt,v.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(v.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=yt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S}); diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.6.1.js b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.7.1.js similarity index 88% rename from src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.6.1.js rename to src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.7.1.js index 12e65d069fe3f..1a86433c22303 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.6.1.js +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.7.1.js @@ -1,15 +1,12 @@ /*! - * jQuery JavaScript Library v3.6.1 + * jQuery JavaScript Library v3.7.1 * https://jquery.com/ * - * Includes Sizzle.js - * https://sizzlejs.com/ - * * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * - * Date: 2022-08-26T17:52Z + * Date: 2023-08-28T13:37Z */ ( function( global, factory ) { @@ -150,8 +147,9 @@ function toType( obj ) { -var - version = "3.6.1", +var version = "3.7.1", + + rhtmlSuffix = /HTML$/i, // Define a local copy of jQuery jQuery = function( selector, context ) { @@ -397,6 +395,38 @@ jQuery.extend( { return obj; }, + + // Retrieve the text value of an array of DOM nodes + text: function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += jQuery.text( node ); + } + } + if ( nodeType === 1 || nodeType === 11 ) { + return elem.textContent; + } + if ( nodeType === 9 ) { + return elem.documentElement.textContent; + } + if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; + }, + // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; @@ -419,6 +449,15 @@ jQuery.extend( { return arr == null ? -1 : indexOf.call( arr, elem, i ); }, + isXMLDoc: function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Assume HTML when documentElement doesn't yet exist, such as inside + // document fragments. + return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); + }, + // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit merge: function( first, second ) { @@ -520,43 +559,98 @@ function isArrayLike( obj ) { return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.6 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2021-02-16 - */ -( function( window ) { + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var pop = arr.pop; + + +var sort = arr.sort; + + +var splice = arr.splice; + + +var whitespace = "[\\x20\\t\\r\\n\\f]"; + + +var rtrimCSS = new RegExp( + "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", + "g" +); + + + + +// Note: an element does not contain itself +jQuery.contains = function( a, b ) { + var bup = b && b.parentNode; + + return a === bup || !!( bup && bup.nodeType === 1 && ( + + // Support: IE 9 - 11+ + // IE doesn't have `contains` on SVG. + a.contains ? + a.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); +}; + + + + +// CSS string/identifier serialization +// https://drafts.csswg.org/cssom/#common-serializing-idioms +var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; + +function fcssescape( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; +} + +jQuery.escapeSelector = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + + + + +var preferredDoc = document, + pushNative = push; + +( function() { + var i, - support, Expr, - getText, - isXML, - tokenize, - compile, - select, outermostContext, sortInput, hasDuplicate, + push = pushNative, // Local document vars - setDocument, document, - docElem, + documentElement, documentIsHTML, rbuggyQSA, - rbuggyMatches, matches, - contains, // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, + expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), @@ -570,47 +664,22 @@ var i, return 0; }, - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + + "loop|multiple|open|readonly|required|scoped", // Regular expressions - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", @@ -629,101 +698,88 @@ var i, // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), + rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + + whitespace + "*" ), rdescend = new RegExp( whitespace + "|>" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + ID: new RegExp( "^#(" + identifier + ")" ), + CLASS: new RegExp( "^\\.(" + identifier + ")" ), + TAG: new RegExp( "^(" + identifier + "|[*])" ), + ATTR: new RegExp( "^" + attributes ), + PSEUDO: new RegExp( "^" + pseudos ), + CHILD: new RegExp( + "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + bool: new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + + needsContext: new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, - rhtml = /HTML$/i, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, - rnative = /^[^{]+\{\s*\[native \w/, - // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\([^\\r\\n\\f])", "g" ), funescape = function( escape, nonHex ) { var high = "0x" + escape.slice( 1 ) - 0x10000; - return nonHex ? + if ( nonHex ) { // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + return nonHex; } - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + return high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, - // Used for iframes - // See setDocument() + // Used for iframes; see `setDocument`. + // Support: IE 9 - 11+, Edge 12 - 18+ // Removing the function wrapper causes a "Permission Denied" - // error in IE + // error in IE/Edge. unloadHandler = function() { setDocument(); }, inDisabledFieldset = addCombinator( function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + return elem.disabled === true && nodeName( elem, "fieldset" ); }, { dir: "parentNode", next: "legend" } ); +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + // Optimize for push.apply( _, NodeList ) try { push.apply( @@ -731,32 +787,22 @@ try { preferredDoc.childNodes ); - // Support: Android<4.0 + // Support: Android <=4.0 // Detect silently failing push.apply // eslint-disable-next-line no-unused-expressions arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { + push = { + apply: function( target, els ) { pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; + }, + call: function( target ) { + pushNative.apply( target, slice.call( arguments, 1 ) ); } }; } -function Sizzle( selector, context, results, seed ) { +function find( selector, context, results, seed ) { var m, i, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, @@ -790,11 +836,10 @@ function Sizzle( selector, context, results, seed ) { if ( nodeType === 9 ) { if ( ( elem = context.getElementById( m ) ) ) { - // Support: IE, Opera, Webkit - // TODO: identify versions + // Support: IE 9 only // getElementById can match elements by name instead of ID if ( elem.id === m ) { - results.push( elem ); + push.call( results, elem ); return results; } } else { @@ -804,14 +849,13 @@ function Sizzle( selector, context, results, seed ) { // Element context } else { - // Support: IE, Opera, Webkit - // TODO: identify versions + // Support: IE 9 only // getElementById can match elements by name instead of ID if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && + find.contains( context, elem ) && elem.id === m ) { - results.push( elem ); + push.call( results, elem ); return results; } } @@ -822,22 +866,15 @@ function Sizzle( selector, context, results, seed ) { return results; // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - + } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + if ( !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { newSelector = selector; newContext = context; @@ -850,7 +887,7 @@ function Sizzle( selector, context, results, seed ) { // as such selectors are not recognized by querySelectorAll. // Thanks to Andrew Dupont for this technique. if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { // Expand context for sibling selectors newContext = rsibling.test( selector ) && testContext( context.parentNode ) || @@ -858,11 +895,15 @@ function Sizzle( selector, context, results, seed ) { // We can use :scope instead of the ID hack if the browser // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when + // strict-comparing two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( newContext != context || !support.scope ) { // Capture the context ID, setting it first if necessary if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); + nid = jQuery.escapeSelector( nid ); } else { context.setAttribute( "id", ( nid = expando ) ); } @@ -895,7 +936,7 @@ function Sizzle( selector, context, results, seed ) { } // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); + return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); } /** @@ -909,7 +950,8 @@ function createCache() { function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + // Use (key + " ") to avoid collision with native prototype properties + // (see https://github.com/jquery/sizzle/issues/157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries @@ -921,7 +963,7 @@ function createCache() { } /** - * Mark a function for special use by Sizzle + * Mark a function for special use by jQuery selector module * @param {Function} fn The function to mark */ function markFunction( fn ) { @@ -952,56 +994,13 @@ function assert( fn ) { } } -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; + return nodeName( elem, "input" ) && elem.type === type; }; } @@ -1011,8 +1010,8 @@ function createInputPseudo( type ) { */ function createButtonPseudo( type ) { return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; + return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && + elem.type === type; }; } @@ -1048,14 +1047,13 @@ function createDisabledPseudo( disabled ) { } } - // Support: IE 6 - 11 + // Support: IE 6 - 11+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors return elem.isDisabled === disabled || // Where there is no isDisabled, check manually - /* jshint -W018 */ elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; + inDisabledFieldset( elem ) === disabled; } return elem.disabled === disabled; @@ -1095,7 +1093,7 @@ function createPositionalPseudo( fn ) { } /** - * Checks a node for validity as a Sizzle context + * Checks a node for validity as a jQuery selector context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ @@ -1103,31 +1101,13 @@ function testContext( context ) { return context && typeof context.getElementsByTagName !== "undefined" && context; } -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem && elem.namespaceURI, - docElem = elem && ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - /** * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document + * @param {Element|Object} [node] An element or document object to use to set the document * @returns {Object} Returns the current document */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, +function setDocument( node ) { + var subWindow, doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected @@ -1141,87 +1121,90 @@ setDocument = Sizzle.setDocument = function( node ) { // Update global variables document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); + documentElement = document.documentElement; + documentIsHTML = !jQuery.isXMLDoc( document ); + + // Support: iOS 7 only, IE 9 - 11+ + // Older browsers didn't support unprefixed `matches`. + matches = documentElement.matches || + documentElement.webkitMatchesSelector || + documentElement.msMatchesSelector; // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + // Accessing iframe documents after unload throws "permission denied" errors + // (see trac-13936). + // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, + // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. + if ( documentElement.msMatchesSelector && - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } + // Support: IE 9 - 11+, Edge 12 - 18+ + subWindow.addEventListener( "unload", unloadHandler ); } - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; + // Support: IE <10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + documentElement.appendChild( el ).id = jQuery.expando; + return !document.getElementsByName || + !document.getElementsByName( jQuery.expando ).length; } ); - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); + // Support: IE 9 only + // Check to see if it's possible to do matchesSelector + // on a disconnected node. + support.disconnectedMatch = assert( function( el ) { + return matches.call( el, "*" ); } ); - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; + // Support: IE 9 - 11+, Edge 12 - 18+ + // IE/Edge don't support the :scope pseudo-class. + support.scope = assert( function() { + return document.querySelectorAll( ":scope" ); } ); - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; + // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only + // Make sure the `:has()` argument is parsed unforgivingly. + // We include `*` in the test to detect buggy implementations that are + // _selectively_ forgiving (specifically when the list includes at least + // one valid selector). + // Note that we treat complete lack of support for `:has()` as if it were + // spec-compliant support, which is fine because use of `:has()` in such + // environments will fail in the qSA path and fall back to jQuery traversal + // anyway. + support.cssHas = assert( function() { + try { + document.querySelector( ":has(*,:jqfake)" ); + return false; + } catch ( e ) { + return true; + } } ); // ID filter and find if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { + Expr.filter.ID = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute( "id" ) === attrId; }; }; - Expr.find[ "ID" ] = function( id, context ) { + Expr.find.ID = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var elem = context.getElementById( id ); return elem ? [ elem ] : []; } }; } else { - Expr.filter[ "ID" ] = function( id ) { + Expr.filter.ID = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && @@ -1232,7 +1215,7 @@ setDocument = Sizzle.setDocument = function( node ) { // Support: IE 6 - 7 only // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { + Expr.find.ID = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var node, i, elems, elem = context.getElementById( id ); @@ -1262,40 +1245,18 @@ setDocument = Sizzle.setDocument = function( node ) { } // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); + Expr.find.TAG = function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; + // DocumentFragment nodes don't have gEBTN + } else { + return context.querySelectorAll( tag ); + } + }; // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + Expr.find.CLASS = function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } @@ -1306,177 +1267,94 @@ setDocument = Sizzle.setDocument = function( node ) { // QSA and matchesSelector support - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 rbuggyQSA = []; - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { - var input; + var input; - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + - "<select id='" + expando + "-\r\\' msallowcapture=''>" + - "<option selected=''></option></select>"; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } + documentElement.appendChild( el ).innerHTML = + "<a id='" + expando + "' href='' disabled='disabled'></a>" + + "<select id='" + expando + "-\r\\' disabled='disabled'>" + + "<option selected=''></option></select>"; - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "<a href='' disabled='disabled'></a>" + - "<select disabled='disabled'><option/></select>"; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } + // Support: iOS <=7 - 8 only + // Boolean attributes and "value" are not treated correctly in some XML documents + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } + // Support: iOS <=7 - 8 only + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } + // Support: iOS 8 only + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } - assert( function( el ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE 9 - 11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ + // In some of the document kinds, these selectors wouldn't work natively. + // This is probably OK but for backwards compatibility we want to maintain + // handling them through jQuery traversal in jQuery 3.x. + documentElement.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + } ); - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); + if ( !support.cssHas ) { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Our regular `try-catch` mechanism fails to detect natively-unsupported + // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) + // in browsers that parse the `:has()` argument as a forgiving selector list. + // https://drafts.csswg.org/selectors/#relational now requires the argument + // to be parsed unforgivingly, but browsers have not yet fully adjusted. + rbuggyQSA.push( ":has" ); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; /* Sorting ---------------------------------------------------------------------- */ // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { + sortOrder = function( a, b ) { // Flag for duplicate removal if ( a === b ) { @@ -1510,8 +1388,8 @@ setDocument = Sizzle.setDocument = function( node ) { // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { + if ( a === document || a.ownerDocument == preferredDoc && + find.contains( preferredDoc, a ) ) { return -1; } @@ -1519,100 +1397,33 @@ setDocument = Sizzle.setDocument = function( node ) { // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { + if ( b === document || b.ownerDocument == preferredDoc && + find.contains( preferredDoc, b ) ) { return 1; } // Maintain original order return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; }; return document; -}; +} -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); +find.matches = function( expr, elements ) { + return find( expr, null, null, elements ); }; -Sizzle.matchesSelector = function( elem, expr ) { +find.matchesSelector = function( elem, expr ) { setDocument( elem ); - if ( support.matchesSelector && documentIsHTML && + if ( documentIsHTML && !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); @@ -1620,9 +1431,9 @@ Sizzle.matchesSelector = function( elem, expr ) { // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch ( e ) { @@ -1630,10 +1441,10 @@ Sizzle.matchesSelector = function( elem, expr ) { } } - return Sizzle( expr, document, null, [ elem ] ).length > 0; + return find( expr, document, null, [ elem ] ).length > 0; }; -Sizzle.contains = function( context, elem ) { +find.contains = function( context, elem ) { // Set document vars if needed // Support: IE 11+, Edge 17 - 18+ @@ -1643,10 +1454,11 @@ Sizzle.contains = function( context, elem ) { if ( ( context.ownerDocument || context ) != document ) { setDocument( context ); } - return contains( context, elem ); + return jQuery.contains( context, elem ); }; -Sizzle.attr = function( elem, name ) { + +find.attr = function( elem, name ) { // Set document vars if needed // Support: IE 11+, Edge 17 - 18+ @@ -1659,25 +1471,19 @@ Sizzle.attr = function( elem, name ) { var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) + // Don't get fooled by Object.prototype properties (see trac-13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; + if ( val !== undefined ) { + return val; + } -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); + return elem.getAttribute( name ); }; -Sizzle.error = function( msg ) { +find.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; @@ -1685,16 +1491,20 @@ Sizzle.error = function( msg ) { * Document sorting and removing duplicates * @param {ArrayLike} results */ -Sizzle.uniqueSort = function( results ) { +jQuery.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); + // + // Support: Android <=4.0+ + // Testing for detecting duplicates is unpredictable so instead assume we can't + // depend on duplicate detection in all browsers without a stable sort. + hasDuplicate = !support.sortStable; + sortInput = !support.sortStable && slice.call( results, 0 ); + sort.call( results, sortOrder ); if ( hasDuplicate ) { while ( ( elem = results[ i++ ] ) ) { @@ -1703,7 +1513,7 @@ Sizzle.uniqueSort = function( results ) { } } while ( j-- ) { - results.splice( duplicates[ j ], 1 ); + splice.call( results, duplicates[ j ], 1 ); } } @@ -1714,47 +1524,11 @@ Sizzle.uniqueSort = function( results ) { return results; }; -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; +jQuery.fn.uniqueSort = function() { + return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); }; -Expr = Sizzle.selectors = { +Expr = jQuery.expr = { // Can be adjusted by the user cacheLength: 50, @@ -1775,12 +1549,12 @@ Expr = Sizzle.selectors = { }, preFilter: { - "ATTR": function( match ) { + ATTR: function( match ) { match[ 1 ] = match[ 1 ].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) + .replace( runescape, funescape ); if ( match[ 2 ] === "~=" ) { match[ 3 ] = " " + match[ 3 ] + " "; @@ -1789,7 +1563,7 @@ Expr = Sizzle.selectors = { return match.slice( 0, 4 ); }, - "CHILD": function( match ) { + CHILD: function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) @@ -1807,29 +1581,30 @@ Expr = Sizzle.selectors = { // nth-* requires argument if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); + find.error( match[ 0 ] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[ 4 ] = +( match[ 4 ] ? match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) + ); match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - // other types prohibit arguments + // other types prohibit arguments } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); + find.error( match[ 0 ] ); } return match; }, - "PSEUDO": function( match ) { + PSEUDO: function( match ) { var excess, unquoted = !match[ 6 ] && match[ 2 ]; - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + if ( matchExpr.CHILD.test( match[ 0 ] ) ) { return null; } @@ -1858,36 +1633,36 @@ Expr = Sizzle.selectors = { filter: { - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + TAG: function( nodeNameSelector ) { + var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + return nodeName( elem, expectedNodeName ); }; }, - "CLASS": function( className ) { + CLASS: function( className ) { var pattern = classCache[ className + " " ]; return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); + ( pattern = new RegExp( "(^|" + whitespace + ")" + className + + "(" + whitespace + "|$)" ) ) && + classCache( className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); } ); }, - "ATTR": function( name, operator, check ) { + ATTR: function( name, operator, check ) { return function( elem ) { - var result = Sizzle.attr( elem, name ); + var result = find.attr( elem, name ); if ( result == null ) { return operator === "!="; @@ -1898,22 +1673,34 @@ Expr = Sizzle.selectors = { result += ""; - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ + if ( operator === "=" ) { + return result === check; + } + if ( operator === "!=" ) { + return result !== check; + } + if ( operator === "^=" ) { + return check && result.indexOf( check ) === 0; + } + if ( operator === "*=" ) { + return check && result.indexOf( check ) > -1; + } + if ( operator === "$=" ) { + return check && result.slice( -check.length ) === check; + } + if ( operator === "~=" ) { + return ( " " + result.replace( rwhitespace, " " ) + " " ) + .indexOf( check ) > -1; + } + if ( operator === "|=" ) { + return result === check || result.slice( 0, check.length + 1 ) === check + "-"; + } + return false; }; }, - "CHILD": function( type, what, _argument, first, last ) { + CHILD: function( type, what, _argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; @@ -1926,7 +1713,7 @@ Expr = Sizzle.selectors = { } : function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, + var cache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), @@ -1941,7 +1728,7 @@ Expr = Sizzle.selectors = { node = elem; while ( ( node = node[ dir ] ) ) { if ( ofType ? - node.nodeName.toLowerCase() === name : + nodeName( node, name ) : node.nodeType === 1 ) { return false; @@ -1960,17 +1747,8 @@ Expr = Sizzle.selectors = { if ( forward && useCache ) { // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; + outerCache = parent[ expando ] || ( parent[ expando ] = {} ); + cache = outerCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; @@ -1982,7 +1760,7 @@ Expr = Sizzle.selectors = { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + outerCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } @@ -1991,17 +1769,8 @@ Expr = Sizzle.selectors = { // Use previously-cached element index if available if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + cache = outerCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex; } @@ -2015,7 +1784,7 @@ Expr = Sizzle.selectors = { ( diff = nodeIndex = 0 ) || start.pop() ) ) { if ( ( ofType ? - node.nodeName.toLowerCase() === name : + nodeName( node, name ) : node.nodeType === 1 ) && ++diff ) { @@ -2023,13 +1792,7 @@ Expr = Sizzle.selectors = { if ( useCache ) { outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; + outerCache[ type ] = [ dirruns, diff ]; } if ( node === elem ) { @@ -2047,19 +1810,19 @@ Expr = Sizzle.selectors = { }; }, - "PSEUDO": function( pseudo, argument ) { + PSEUDO: function( pseudo, argument ) { // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes + // https://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); + find.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function - // just as Sizzle does + // just as jQuery does if ( fn[ expando ] ) { return fn( argument ); } @@ -2073,7 +1836,7 @@ Expr = Sizzle.selectors = { matched = fn( seed, argument ), i = matched.length; while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); + idx = indexOf.call( seed, matched[ i ] ); seed[ idx ] = !( matches[ idx ] = matched[ i ] ); } } ) : @@ -2089,14 +1852,14 @@ Expr = Sizzle.selectors = { pseudos: { // Potentially complex pseudos - "not": markFunction( function( selector ) { + not: markFunction( function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); + matcher = compile( selector.replace( rtrimCSS, "$1" ) ); return matcher[ expando ] ? markFunction( function( seed, matches, _context, xml ) { @@ -2115,22 +1878,23 @@ Expr = Sizzle.selectors = { input[ 0 ] = elem; matcher( input, null, xml, results ); - // Don't keep the element (issue #299) + // Don't keep the element + // (see https://github.com/jquery/sizzle/issues/299) input[ 0 ] = null; return !results.pop(); }; } ), - "has": markFunction( function( selector ) { + has: markFunction( function( selector ) { return function( elem ) { - return Sizzle( selector, elem ).length > 0; + return find( selector, elem ).length > 0; }; } ), - "contains": markFunction( function( text ) { + contains: markFunction( function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; }; } ), @@ -2140,12 +1904,12 @@ Expr = Sizzle.selectors = { // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { + // https://www.w3.org/TR/selectors/#lang-pseudo + lang: markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); + find.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { @@ -2164,38 +1928,39 @@ Expr = Sizzle.selectors = { } ), // Miscellaneous - "target": function( elem ) { + target: function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, - "root": function( elem ) { - return elem === docElem; + root: function( elem ) { + return elem === documentElement; }, - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && + focus: function( elem ) { + return elem === safeActiveElement() && + document.hasFocus() && !!( elem.type || elem.href || ~elem.tabIndex ); }, // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), + enabled: createDisabledPseudo( false ), + disabled: createDisabledPseudo( true ), - "checked": function( elem ) { + checked: function( elem ) { // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); + // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + return ( nodeName( elem, "input" ) && !!elem.checked ) || + ( nodeName( elem, "option" ) && !!elem.selected ); }, - "selected": function( elem ) { + selected: function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly + // Support: IE <=11+ + // Accessing the selectedIndex property + // forces the browser to treat the default option as + // selected when in an optgroup. if ( elem.parentNode ) { // eslint-disable-next-line no-unused-expressions elem.parentNode.selectedIndex; @@ -2205,9 +1970,9 @@ Expr = Sizzle.selectors = { }, // Contents - "empty": function( elem ) { + empty: function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo + // https://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children @@ -2219,49 +1984,49 @@ Expr = Sizzle.selectors = { return true; }, - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); + parent: function( elem ) { + return !Expr.pseudos.empty( elem ); }, // Element/input types - "header": function( elem ) { + header: function( elem ) { return rheader.test( elem.nodeName ); }, - "input": function( elem ) { + input: function( elem ) { return rinputs.test( elem.nodeName ); }, - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; + button: function( elem ) { + return nodeName( elem, "input" ) && elem.type === "button" || + nodeName( elem, "button" ); }, - "text": function( elem ) { + text: function( elem ) { var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && + return nodeName( elem, "input" ) && elem.type === "text" && - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + // Support: IE <10 only + // New HTML5 attribute values (e.g., "search") appear + // with elem.type === "text" ( ( attr = elem.getAttribute( "type" ) ) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection - "first": createPositionalPseudo( function() { + first: createPositionalPseudo( function() { return [ 0 ]; } ), - "last": createPositionalPseudo( function( _matchIndexes, length ) { + last: createPositionalPseudo( function( _matchIndexes, length ) { return [ length - 1 ]; } ), - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; } ), - "even": createPositionalPseudo( function( matchIndexes, length ) { + even: createPositionalPseudo( function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); @@ -2269,7 +2034,7 @@ Expr = Sizzle.selectors = { return matchIndexes; } ), - "odd": createPositionalPseudo( function( matchIndexes, length ) { + odd: createPositionalPseudo( function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); @@ -2277,19 +2042,24 @@ Expr = Sizzle.selectors = { return matchIndexes; } ), - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; + lt: createPositionalPseudo( function( matchIndexes, length, argument ) { + var i; + + if ( argument < 0 ) { + i = argument + length; + } else if ( argument > length ) { + i = length; + } else { + i = argument; + } + for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; } ), - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + gt: createPositionalPseudo( function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); @@ -2299,7 +2069,7 @@ Expr = Sizzle.selectors = { } }; -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; +Expr.pseudos.nth = Expr.pseudos.eq; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { @@ -2314,7 +2084,7 @@ function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { +function tokenize( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; @@ -2342,13 +2112,13 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) { matched = false; // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { + if ( ( match = rleadingCombinator.exec( soFar ) ) ) { matched = match.shift(); tokens.push( { value: matched, // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) + type: match[ 0 ].replace( rtrimCSS, " " ) } ); soFar = soFar.slice( matched.length ); } @@ -2375,14 +2145,16 @@ tokenize = Sizzle.tokenize = function( selector, parseOnly ) { // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : + if ( parseOnly ) { + return soFar.length; + } - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; + return soFar ? + find.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +} function toSelector( tokens ) { var i = 0, @@ -2415,7 +2187,7 @@ function addCombinator( matcher, combinator, base ) { // Check against all ancestor/preceding elements function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, + var oldCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching @@ -2432,14 +2204,9 @@ function addCombinator( matcher, combinator, base ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { + if ( skip && nodeName( elem, skip ) ) { elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && + } else if ( ( oldCache = outerCache[ key ] ) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements @@ -2447,7 +2214,7 @@ function addCombinator( matcher, combinator, base ) { } else { // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; + outerCache[ key ] = newCache; // A match means we're done; a fail means we have to keep checking if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { @@ -2479,7 +2246,7 @@ function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); + find( selector, contexts[ i ], results ); } return results; } @@ -2513,38 +2280,37 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS postFinder = setMatcher( postFinder, postSelector ); } return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, + var temp, i, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), + elems = seed || + multipleContexts( selector || "*", + context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : - elems, + elems; - matcherOut = matcher ? + if ( matcher ) { - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + // If we have a postFinder, or filtered seed, or non-seed postFilter + // or preexisting results, + matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - // ...intermediate processing is necessary - [] : + // ...intermediate processing is necessary + [] : - // ...otherwise use results directly - results : - matcherIn; + // ...otherwise use results directly + results; - // Find primary matches - if ( matcher ) { + // Find primary matches matcher( matcherIn, matcherOut, context, xml ); + } else { + matcherOut = matcherIn; } // Apply postFilter @@ -2582,7 +2348,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS i = matcherOut.length; while ( i-- ) { if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { seed[ temp ] = !( results[ temp ] = elem ); } @@ -2617,15 +2383,21 @@ function matcherFromTokens( tokens ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; + return indexOf.call( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( ( checkContext = context ).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); - // Avoid hanging onto element (issue #299) + // Avoid hanging onto element + // (see https://github.com/jquery/sizzle/issues/299) checkContext = null; return ret; } ]; @@ -2650,11 +2422,10 @@ function matcherFromTokens( tokens ) { i > 1 && elementMatcher( matchers ), i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrimCSS, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), @@ -2680,7 +2451,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { contextBackup = outermostContext, // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + elems = seed || byElement && Expr.find.TAG( "*", outermost ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), @@ -2696,8 +2467,9 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { } // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id + // Support: iOS <=7 - 9 only + // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching + // elements by id. (see trac-14142) for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { if ( byElement && elem ) { j = 0; @@ -2712,7 +2484,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { } while ( ( matcher = elementMatchers[ j++ ] ) ) { if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); + push.call( results, elem ); break; } } @@ -2775,7 +2547,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { - Sizzle.uniqueSort( results ); + jQuery.uniqueSort( results ); } } @@ -2793,7 +2565,7 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { superMatcher; } -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { +function compile( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], @@ -2816,27 +2588,25 @@ compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { } // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); + cached = compilerCache( selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; -}; +} /** - * A low-level selection function that works with Sizzle's compiled + * A low-level selection function that works with jQuery's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile + * selector function built with jQuery selector compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ -select = Sizzle.select = function( selector, context, results, seed ) { +function select( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize( ( selector = compiled.selector || selector ) ); @@ -2850,10 +2620,12 @@ select = Sizzle.select = function( selector, context, results, seed ) { // Reduce context if the leading compound selector is an ID tokens = match[ 0 ] = match[ 0 ].slice( 0 ); if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; + context = ( Expr.find.ID( + token.matches[ 0 ].replace( runescape, funescape ), + context + ) || [] )[ 0 ]; if ( !context ) { return results; @@ -2866,7 +2638,7 @@ select = Sizzle.select = function( selector, context, results, seed ) { } // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[ i ]; @@ -2879,8 +2651,8 @@ select = Sizzle.select = function( selector, context, results, seed ) { // Search, expanding context for leading sibling combinators if ( ( seed = find( token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context + rsibling.test( tokens[ 0 ].type ) && + testContext( context.parentNode ) || context ) ) ) { // If seed is empty or no tokens remain, we can return early @@ -2907,21 +2679,18 @@ select = Sizzle.select = function( selector, context, results, seed ) { !context || rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; -}; +} // One-time assignments +// Support: Android <=4.0 - 4.1+ // Sort stability support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - // Initialize against the default document setDocument(); -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Support: Android <=4.0 - 4.1+ // Detached nodes confoundingly follow *each other* support.sortDetached = assert( function( el ) { @@ -2929,68 +2698,29 @@ support.sortDetached = assert( function( el ) { return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; } ); -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = "<a href='#'></a>"; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = "<input/>"; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; +jQuery.find = find; // Deprecated jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; +jQuery.unique = jQuery.uniqueSort; +// These have always been private, but they used to be documented as part of +// Sizzle so let's maintain them for now for backwards compatibility purposes. +find.compile = compile; +find.select = select; +find.setDocument = setDocument; +find.tokenize = tokenize; +find.escape = jQuery.escapeSelector; +find.getText = jQuery.text; +find.isXML = jQuery.isXMLDoc; +find.selectors = jQuery.expr; +find.support = jQuery.support; +find.uniqueSort = jQuery.uniqueSort; + + /* eslint-enable */ + +} )(); var dir = function( elem, dir, until ) { @@ -3024,13 +2754,6 @@ var siblings = function( n, elem ) { var rneedsContext = jQuery.expr.match.needsContext; - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -} var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); @@ -3281,7 +3004,7 @@ jQuery.fn.extend( { if ( cur.nodeType < 11 && ( targets ? targets.index( cur ) > -1 : - // Don't pass non-elements to Sizzle + // Don't pass non-elements to jQuery#find cur.nodeType === 1 && jQuery.find.matchesSelector( cur, selectors ) ) ) { @@ -3836,7 +3559,7 @@ jQuery.extend( { if ( jQuery.Deferred.exceptionHook ) { jQuery.Deferred.exceptionHook( e, - process.stackTrace ); + process.error ); } // Support: Promises/A+ section 2.3.3.3.4.1 @@ -3864,10 +3587,17 @@ jQuery.extend( { process(); } else { - // Call an optional hook to record the stack, in case of exception + // Call an optional hook to record the error, in case of exception // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); + if ( jQuery.Deferred.getErrorHook ) { + process.error = jQuery.Deferred.getErrorHook(); + + // The deprecated alias of the above. While the name suggests + // returning the stack, not an error instance, jQuery just passes + // it directly to `console.warn` so both will work; an instance + // just better cooperates with source maps. + } else if ( jQuery.Deferred.getStackHook ) { + process.error = jQuery.Deferred.getStackHook(); } window.setTimeout( process ); } @@ -4042,12 +3772,16 @@ jQuery.extend( { // warn about them ASAP rather than swallowing them by default. var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; -jQuery.Deferred.exceptionHook = function( error, stack ) { +// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error +// captured before the async barrier to get the original error cause +// which may otherwise be hidden. +jQuery.Deferred.exceptionHook = function( error, asyncError ) { // Support: IE 8 - 9 only // Console exists when dev tools are open, which can happen at any time if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + window.console.warn( "jQuery.Deferred exception: " + error.message, + error.stack, asyncError ); } }; @@ -5103,25 +4837,6 @@ function returnFalse() { return false; } -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - function on( elem, types, selector, data, fn, one ) { var origFn, type; @@ -5559,7 +5274,7 @@ jQuery.event = { el.click && nodeName( el, "input" ) ) { // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); + leverageNative( el, "click", true ); } // Return false to allow normal processing in the caller @@ -5610,10 +5325,10 @@ jQuery.event = { // synthetic events by interrupting progress until reinvoked in response to // *native* events that it fires directly, ensuring that state changes have // already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { +function leverageNative( el, type, isSetup ) { - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { + // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add + if ( !isSetup ) { if ( dataPriv.get( el, type ) === undefined ) { jQuery.event.add( el, type, returnTrue ); } @@ -5625,15 +5340,13 @@ function leverageNative( el, type, expectSync ) { jQuery.event.add( el, type, { namespace: false, handler: function( event ) { - var notAsync, result, + var result, saved = dataPriv.get( this, type ); if ( ( event.isTrigger & 1 ) && this[ type ] ) { // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { + if ( !saved ) { // Store arguments for use when handling the inner native event // There will always be at least one argument (an event object), so this array @@ -5642,33 +5355,22 @@ function leverageNative( el, type, expectSync ) { dataPriv.set( this, type, saved ); // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); this[ type ](); result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } + dataPriv.set( this, type, false ); + if ( saved !== result ) { // Cancel the outer synthetic event event.stopImmediatePropagation(); event.preventDefault(); - // Support: Chrome 86+ - // In Chrome, if an element having a focusout handler is blurred by - // clicking outside of it, it invokes the handler synchronously. If - // that handler calls `.remove()` on the element, the data is cleared, - // leaving `result` undefined. We need to guard against this. - return result && result.value; + return result; } // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. + // (focus or blur), assume that the surrogate already propagated from triggering + // the native event and prevent that from happening again here. // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the // bubbling surrogate propagates *after* the non-bubbling base), but that seems // less bad than duplication. @@ -5678,22 +5380,25 @@ function leverageNative( el, type, expectSync ) { // If this is a native event triggered above, everything is now in order // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { + } else if ( saved ) { // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); + dataPriv.set( this, type, jQuery.event.trigger( + saved[ 0 ], + saved.slice( 1 ), + this + ) ); + + // Abort handling of the native event by all jQuery handlers while allowing + // native handlers on the same element to run. On target, this is achieved + // by stopping immediate propagation just on the jQuery event. However, + // the native event is re-wrapped by a jQuery one on each level of the + // propagation so the only way to stop it for jQuery is to stop it for + // everyone via native `stopPropagation()`. This is not a problem for + // focus/blur which don't bubble, but it does also stop click on checkboxes + // and radios. We accept this limitation. + event.stopPropagation(); + event.isImmediatePropagationStopped = returnTrue; } } } ); @@ -5832,18 +5537,73 @@ jQuery.each( { }, jQuery.event.addProp ); jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + + function focusMappedHandler( nativeEvent ) { + if ( document.documentMode ) { + + // Support: IE 11+ + // Attach a single focusin/focusout handler on the document while someone wants + // focus/blur. This is because the former are synchronous in IE while the latter + // are async. In other browsers, all those handlers are invoked synchronously. + + // `handle` from private data would already wrap the event, but we need + // to change the `type` here. + var handle = dataPriv.get( this, "handle" ), + event = jQuery.event.fix( nativeEvent ); + event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; + event.isSimulated = true; + + // First, handle focusin/focusout + handle( nativeEvent ); + + // ...then, handle focus/blur + // + // focus/blur don't bubble while focusin/focusout do; simulate the former by only + // invoking the handler at the lower level. + if ( event.target === event.currentTarget ) { + + // The setup part calls `leverageNative`, which, in turn, calls + // `jQuery.event.add`, so event handle will already have been set + // by this point. + handle( event ); + } + } else { + + // For non-IE browsers, attach a single capturing handler on the document + // while someone wants focusin/focusout. + jQuery.event.simulate( delegateType, nativeEvent.target, + jQuery.event.fix( nativeEvent ) ); + } + } + jQuery.event.special[ type ] = { // Utilize native event if possible so blur/focus sequence is correct setup: function() { + var attaches; + // Claim the first handler // dataPriv.set( this, "focus", ... ) // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); + leverageNative( this, type, true ); - // Return false to allow normal processing in the caller - return false; + if ( document.documentMode ) { + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + attaches = dataPriv.get( this, delegateType ); + if ( !attaches ) { + this.addEventListener( delegateType, focusMappedHandler ); + } + dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); + } else { + + // Return false to allow normal processing in the caller + return false; + } }, trigger: function() { @@ -5854,6 +5614,24 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp return true; }, + teardown: function() { + var attaches; + + if ( document.documentMode ) { + attaches = dataPriv.get( this, delegateType ) - 1; + if ( !attaches ) { + this.removeEventListener( delegateType, focusMappedHandler ); + dataPriv.remove( this, delegateType ); + } else { + dataPriv.set( this, delegateType, attaches ); + } + } else { + + // Return false to indicate standard teardown should be applied + return false; + } + }, + // Suppress native focus or blur if we're currently inside // a leveraged native-event stack _default: function( event ) { @@ -5862,6 +5640,58 @@ jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateTyp delegateType: delegateType }; + + // Support: Firefox <=44 + // Firefox doesn't have focus(in | out) events + // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 + // + // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 + // focus(in | out) events fire after focus & blur events, + // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order + // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 + // + // Support: IE 9 - 11+ + // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, + // attach a single handler for both events in IE. + jQuery.event.special[ delegateType ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ); + + // Support: IE 9 - 11+ + // We use the same native handler for focusin & focus (and focusout & blur) + // so we need to coordinate setup & teardown parts between those events. + // Use `delegateType` as the key as `type` is already used by `leverageNative`. + if ( !attaches ) { + if ( document.documentMode ) { + this.addEventListener( delegateType, focusMappedHandler ); + } else { + doc.addEventListener( type, focusMappedHandler, true ); + } + } + dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + dataHolder = document.documentMode ? this : doc, + attaches = dataPriv.get( dataHolder, delegateType ) - 1; + + if ( !attaches ) { + if ( document.documentMode ) { + this.removeEventListener( delegateType, focusMappedHandler ); + } else { + doc.removeEventListener( type, focusMappedHandler, true ); + } + dataPriv.remove( dataHolder, delegateType ); + } else { + dataPriv.set( dataHolder, delegateType, attaches ); + } + } + }; } ); // Create mouseenter/leave events using mouseover/out and event-time checks @@ -6093,7 +5923,7 @@ function domManip( collection, args, callback, ignored ) { if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; - // Reenable scripts + // Re-enable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion @@ -6164,7 +5994,8 @@ jQuery.extend( { if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + // We eschew jQuery#find here for performance reasons: + // https://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); @@ -6440,15 +6271,6 @@ var swap = function( elem, options, callback ) { var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); -var whitespace = "[\\x20\\t\\r\\n\\f]"; - - -var rtrimCSS = new RegExp( - "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", - "g" -); - - ( function() { @@ -6558,7 +6380,7 @@ var rtrimCSS = new RegExp( trChild = document.createElement( "div" ); table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "border:1px solid"; + tr.style.cssText = "box-sizing:content-box;border:1px solid"; // Support: Chrome 86+ // Height set through cssText does not get applied. @@ -6570,7 +6392,7 @@ var rtrimCSS = new RegExp( // In our bodyBackground.html iframe, // display for all div elements is set to "inline", // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is display: block + // Ensuring the div is `display: block` // gets around this issue. trChild.style.display = "block"; @@ -6608,17 +6430,37 @@ function curCSS( elem, name, computed ) { // .css('filter') (IE 9 only, trac-12537) // .css('--customProperty) (gh-3144) if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - // trim whitespace for custom property (issue gh-4926) - if ( isCustomProp ) { + // Support: IE <=9 - 11+ + // IE only supports `"float"` in `getPropertyValue`; in computed styles + // it's only available as `"cssFloat"`. We no longer modify properties + // sent to `.css()` apart from camelCasing, so we need to check both. + // Normally, this would create difference in behavior: if + // `getPropertyValue` returns an empty string, the value returned + // by `.css()` would be `undefined`. This is usually the case for + // disconnected elements. However, in IE even disconnected elements + // with no styles return `"none"` for `getPropertyValue( "float" )` + ret = computed.getPropertyValue( name ) || computed[ name ]; - // rtrim treats U+000D CARRIAGE RETURN and U+000C FORM FEED + if ( isCustomProp && ret ) { + + // Support: Firefox 105+, Chrome <=105+ + // Spec requires trimming whitespace for custom properties (gh-4926). + // Firefox only trims leading whitespace. Chrome just collapses + // both leading & trailing whitespace to a single space. + // + // Fall back to `undefined` if empty string returned. + // This collapses a missing definition with property defined + // and set to an empty string but there's no standard API + // allowing us to differentiate them without a performance penalty + // and returning `undefined` aligns with older jQuery. + // + // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED // as whitespace while CSS does not, but this is not a problem // because CSS preprocessing replaces them with U+000A LINE FEED // (which *is* CSS whitespace) // https://www.w3.org/TR/css-syntax-3/#input-preprocessing - ret = ret.replace( rtrimCSS, "$1" ); + ret = ret.replace( rtrimCSS, "$1" ) || undefined; } if ( ret === "" && !isAttached( elem ) ) { @@ -6737,7 +6579,8 @@ function setPositiveNumber( _elem, value, subtract ) { function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { var i = dimension === "width" ? 1 : 0, extra = 0, - delta = 0; + delta = 0, + marginDelta = 0; // Adjustment may not be necessary if ( box === ( isBorderBox ? "border" : "content" ) ) { @@ -6747,8 +6590,10 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed for ( ; i < 4; i += 2 ) { // Both box models exclude margin + // Count margin delta separately to only add it after scroll gutter adjustment. + // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); } // If we get here with a content-box, we're seeking "padding" or "border" or "margin" @@ -6799,7 +6644,7 @@ function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computed ) ) || 0; } - return delta; + return delta + marginDelta; } function getWidthOrHeight( elem, dimension, extra ) { @@ -6897,26 +6742,35 @@ jQuery.extend( { // Don't automatically add "px" to these possibly-unitless properties cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true + animationIterationCount: true, + aspectRatio: true, + borderImageSlice: true, + columnCount: true, + flexGrow: true, + flexShrink: true, + fontWeight: true, + gridArea: true, + gridColumn: true, + gridColumnEnd: true, + gridColumnStart: true, + gridRow: true, + gridRowEnd: true, + gridRowStart: true, + lineHeight: true, + opacity: true, + order: true, + orphans: true, + scale: true, + widows: true, + zIndex: true, + zoom: true, + + // SVG-related + fillOpacity: true, + floodOpacity: true, + stopOpacity: true, + strokeMiterlimit: true, + strokeOpacity: true }, // Add in properties whose names you wish to fix before @@ -8642,9 +8496,39 @@ jQuery.each( [ "radio", "checkbox" ], function() { // Return jQuery for attributes-only inclusion +var location = window.location; + +var nonce = { guid: Date.now() }; +var rquery = ( /\?/ ); -support.focusin = "onfocusin" in window; + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, @@ -8832,85 +8716,6 @@ jQuery.fn.extend( { } ); -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, parserErrorElem; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) {} - - parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; - if ( !xml || parserErrorElem ) { - jQuery.error( "Invalid XML: " + ( - parserErrorElem ? - jQuery.map( parserErrorElem.childNodes, function( el ) { - return el.textContent; - } ).join( "\n" ) : - data - ) ); - } - return xml; -}; - - var rbracket = /\[\]$/, rCRLF = /\r?\n/g, @@ -10755,7 +10560,9 @@ jQuery.fn.extend( { }, hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + return this + .on( "mouseenter", fnOver ) + .on( "mouseleave", fnOut || fnOver ); } } ); diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.7.1.min.js b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.7.1.min.js new file mode 100644 index 0000000000000..7f37b5d99122b --- /dev/null +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/resources/jquery/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:z(!1),disabled:z(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:X(function(){return[0]}),last:X(function(e,t){return[t-1]}),eq:X(function(e,t,n){return[n<0?n+t:n]}),even:X(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:X(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:X(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:X(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Z(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!=w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[J(K(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(O,P),H.test(o[0].type)&&U(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&U(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.tokenize=Y,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var M=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)M(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},R=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(R,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!ce.isEmptyObject(t)}};var _=new B,z=new B,X=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,U=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(U,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:X.test(i)?JSON.parse(i):i)}catch(e){}z.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return z.hasData(e)||_.hasData(e)},data:function(e,t,n){return z.access(e,t,n)},removeData:function(e,t){z.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=z.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){z.set(this,n)}):M(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=z.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){z.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){z.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ne={};function re(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Le(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=ce.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((ce.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<ce(i,this).index(l):ce.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Me=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);z.hasData(e)&&(o=z.access(e),a=ce.extend({},o),z.set(t,a))}}function $e(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Me,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[z.expando]&&(n[z.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return M(this,function(e){return void 0===e?ce.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Re(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Re(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return M(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),ze=/^--/,Xe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},Ue=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=ze.test(t),u=e.style;return(n=n||Xe(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",J.appendChild(u).appendChild(l);var e=ie.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="box-sizing:content-box;border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u+l}function ot(e,t,n){var r=Xe(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=ze.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=F(t);return ze.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):Ue(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Xe(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-Ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return M(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Xe(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return M(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return M(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Mt=/%20/g,Rt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},zt="*/".concat("*"),Xt=C.createElement("a");function Ut(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Xt.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":zt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:Ut(Bt),ajaxTransport:Ut(_t),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Wt.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Xt.protocol+"//"+Xt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Rt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Mt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+zt+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&ie.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(Yt[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&ie.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce}); diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java index 2f7a994097b55..5ae2d1590721c 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/util/DocPaths.java @@ -113,7 +113,7 @@ public static DocPath indexN(int n) { public static final DocPath JQUERY_DIR = DocPath.create("jquery"); /** The name of the default jQuery javascript file. */ - public static final DocPath JQUERY_JS = DocPath.create("jquery-3.6.1.min.js"); + public static final DocPath JQUERY_JS = DocPath.create("jquery-3.7.1.min.js"); /** The name of the default jQuery UI stylesheet file. */ public static final DocPath JQUERY_UI_CSS = DocPath.create("jquery-ui.min.css"); diff --git a/src/jdk.javadoc/share/legal/jquery.md b/src/jdk.javadoc/share/legal/jquery.md index d468b3183a700..a763ec6f18740 100644 --- a/src/jdk.javadoc/share/legal/jquery.md +++ b/src/jdk.javadoc/share/legal/jquery.md @@ -1,8 +1,8 @@ -## jQuery v3.6.1 +## jQuery v3.7.1 ### jQuery License ``` -jQuery v 3.6.1 +jQuery v 3.7.1 Copyright OpenJS Foundation and other contributors, https://openjsf.org/ Permission is hereby granted, free of charge, to any person obtaining @@ -23,50 +23,4 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -****************************************** - -The jQuery JavaScript Library v3.6.1 also includes Sizzle.js - -Sizzle.js includes the following license: - -Copyright JS Foundation and other contributors, https://js.foundation/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/sizzle - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - -********************* - ``` diff --git a/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java b/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java index a7f1ad91ced82..292d82459829f 100644 --- a/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java +++ b/test/langtools/jdk/javadoc/doclet/testSearch/TestSearch.java @@ -421,7 +421,7 @@ void checkSearchOutput(String fileName, boolean expectedOutput) { <link rel="stylesheet" type="text/css" href="resource-files/jquery-ui.min.css" title="Style"> """, """ - <script type="text/javascript" src="script-files/jquery-3.6.1.min.js"></script> + <script type="text/javascript" src="script-files/jquery-3.7.1.min.js"></script> """, """ <script type="text/javascript" src="script-files/jquery-ui.min.js"></script>""", @@ -672,7 +672,7 @@ void checkInvalidUsageIndexTag() { void checkJqueryAndImageFiles(boolean expectedOutput) { checkFiles(expectedOutput, "script-files/search.js", - "script-files/jquery-3.6.1.min.js", + "script-files/jquery-3.7.1.min.js", "script-files/jquery-ui.min.js", "resource-files/jquery-ui.min.css", "resource-files/x.png", diff --git a/test/langtools/jdk/javadoc/doclet/testSearchScript/javadoc-search.js b/test/langtools/jdk/javadoc/doclet/testSearchScript/javadoc-search.js index 668ca9f68ffe0..b3874d822367f 100644 --- a/test/langtools/jdk/javadoc/doclet/testSearchScript/javadoc-search.js +++ b/test/langtools/jdk/javadoc/doclet/testSearchScript/javadoc-search.js @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, 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,7 +36,7 @@ function loadIndexFiles(docsPath) { tryLoad(docsPath, "type-search-index.js"); tryLoad(docsPath, "member-search-index.js"); tryLoad(docsPath, "tag-search-index.js"); - load(docsPath + "/search.js"); + load(docsPath + "/script-files/search.js"); } function tryLoad(docsPath, file) { @@ -63,6 +63,12 @@ var $ = function(f) { f(); } else { return { + attr: function() { + return this; + }, + css: function() { + return this; + }, val: function() { return this; }, diff --git a/test/langtools/jdk/javadoc/tool/api/basic/APITest.java b/test/langtools/jdk/javadoc/tool/api/basic/APITest.java index eb6a980f7a81e..cbb63bfd12911 100644 --- a/test/langtools/jdk/javadoc/tool/api/basic/APITest.java +++ b/test/langtools/jdk/javadoc/tool/api/basic/APITest.java @@ -235,7 +235,7 @@ protected void error(String msg) { "resource-files/fonts/DejaVuLGCSerif-Italic.woff2", "resource-files/fonts/DejaVuLGCSerif.woff", "resource-files/fonts/DejaVuLGCSerif.woff2", - "script-files/jquery-3.6.1.min.js", + "script-files/jquery-3.7.1.min.js", "script-files/jquery-ui.min.js", "script-files/script.js", "script-files/search.js", From 8990864a53fa04f44ecf8bff65a6dc9cdd67cb1c Mon Sep 17 00:00:00 2001 From: Robbin Ehn <rehn@openjdk.org> Date: Fri, 19 Apr 2024 10:05:24 +0000 Subject: [PATCH 016/141] 8330156: RISC-V: Range check auipc + signed 12 imm instruction Reviewed-by: fyang, mli, tonyp --- src/hotspot/cpu/riscv/macroAssembler_riscv.cpp | 2 +- src/hotspot/cpu/riscv/macroAssembler_riscv.hpp | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp index 4704fbcaf75a9..26eacc3ec6fc8 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp @@ -721,7 +721,7 @@ void MacroAssembler::super_call_VM_leaf(address entry_point, Register arg_0, Reg void MacroAssembler::la(Register Rd, const address addr) { int64_t offset = addr - pc(); - if (is_simm32(offset)) { + if (is_valid_32bit_offset(offset)) { auipc(Rd, (int32_t)offset + 0x800); //0x800, Note:the 11th sign bit addi(Rd, Rd, ((int64_t)offset << 52) >> 52); } else { diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp index 75c0f9ba30596..508b23df12874 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp @@ -678,6 +678,14 @@ class MacroAssembler: public Assembler { int pop_v(unsigned int bitset, Register stack); #endif // COMPILER2 + // The signed 20-bit upper imm can materialize at most negative 0xF...F80000000, two G. + // The following signed 12-bit imm can at max subtract 0x800, two K, from that previously loaded two G. + bool is_valid_32bit_offset(int64_t x) { + constexpr int64_t twoG = (2 * G); + constexpr int64_t twoK = (2 * K); + return x < (twoG - twoK) && x >= (-twoG - twoK); + } + public: void push_reg(Register Rs); void pop_reg(Register Rd); @@ -833,7 +841,7 @@ class MacroAssembler: public Assembler { void NAME(Register Rd, address dest) { \ assert_cond(dest != nullptr); \ int64_t distance = dest - pc(); \ - if (is_simm32(distance)) { \ + if (is_valid_32bit_offset(distance)) { \ auipc(Rd, (int32_t)distance + 0x800); \ Assembler::NAME(Rd, Rd, ((int32_t)distance << 20) >> 20); \ } else { \ @@ -890,7 +898,7 @@ class MacroAssembler: public Assembler { void NAME(FloatRegister Rd, address dest, Register temp = t0) { \ assert_cond(dest != nullptr); \ int64_t distance = dest - pc(); \ - if (is_simm32(distance)) { \ + if (is_valid_32bit_offset(distance)) { \ auipc(temp, (int32_t)distance + 0x800); \ Assembler::NAME(Rd, temp, ((int32_t)distance << 20) >> 20); \ } else { \ @@ -951,7 +959,7 @@ class MacroAssembler: public Assembler { assert_cond(dest != nullptr); \ assert_different_registers(Rs, temp); \ int64_t distance = dest - pc(); \ - if (is_simm32(distance)) { \ + if (is_valid_32bit_offset(distance)) { \ auipc(temp, (int32_t)distance + 0x800); \ Assembler::NAME(Rs, temp, ((int32_t)distance << 20) >> 20); \ } else { \ @@ -996,7 +1004,7 @@ class MacroAssembler: public Assembler { void NAME(FloatRegister Rs, address dest, Register temp = t0) { \ assert_cond(dest != nullptr); \ int64_t distance = dest - pc(); \ - if (is_simm32(distance)) { \ + if (is_valid_32bit_offset(distance)) { \ auipc(temp, (int32_t)distance + 0x800); \ Assembler::NAME(Rs, temp, ((int32_t)distance << 20) >> 20); \ } else { \ From 9f2a4fad1715ccbc339d2476bbdc7a52e9a13380 Mon Sep 17 00:00:00 2001 From: Jaikiran Pai <jpai@openjdk.org> Date: Fri, 19 Apr 2024 10:07:25 +0000 Subject: [PATCH 017/141] 8330572: jdk.internal.net.http.HttpConnection calls an expensive checkOpen() when returning a HTTP/1.1 connection to the pool Reviewed-by: dfuchs, djelinski --- .../share/classes/jdk/internal/net/http/HttpConnection.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/HttpConnection.java b/src/java.net.http/share/classes/jdk/internal/net/http/HttpConnection.java index ffff67518658b..8fbf27ddc4670 100644 --- a/src/java.net.http/share/classes/jdk/internal/net/http/HttpConnection.java +++ b/src/java.net.http/share/classes/jdk/internal/net/http/HttpConnection.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, 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 @@ -409,7 +409,7 @@ void closeOrReturnToCache(HttpHeaders hdrs) { .map((s) -> !s.equalsIgnoreCase("close")) .orElse(true); - if (keepAlive && checkOpen()) { + if (keepAlive && isOpen()) { Log.logTrace("Returning connection to the pool: {0}", this); pool.returnToPool(this); } else { From 85261bcebc1903d9f05523bfb9c1b25d7f1fd8b6 Mon Sep 17 00:00:00 2001 From: Hamlin Li <mli@openjdk.org> Date: Fri, 19 Apr 2024 10:08:57 +0000 Subject: [PATCH 018/141] 8330266: RISC-V: Restore frm to RoundingMode::rne after JNI Reviewed-by: fyang, rehn --- src/hotspot/cpu/riscv/downcallLinker_riscv.cpp | 3 +++ src/hotspot/cpu/riscv/macroAssembler_riscv.cpp | 13 +++++++++++++ src/hotspot/cpu/riscv/macroAssembler_riscv.hpp | 3 +++ src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp | 3 +++ .../riscv/templateInterpreterGenerator_riscv.cpp | 3 +++ 5 files changed, 25 insertions(+) diff --git a/src/hotspot/cpu/riscv/downcallLinker_riscv.cpp b/src/hotspot/cpu/riscv/downcallLinker_riscv.cpp index 9c4ea56d0c8ba..26845986a81f4 100644 --- a/src/hotspot/cpu/riscv/downcallLinker_riscv.cpp +++ b/src/hotspot/cpu/riscv/downcallLinker_riscv.cpp @@ -278,6 +278,9 @@ void DowncallLinker::StubGenerator::generate() { Label L_reguard; Label L_after_reguard; if (_needs_transition) { + // Restore cpu control state after JNI call + __ restore_cpu_control_state_after_jni(t0); + __ block_comment("{ thread native2java"); __ mv(t0, _thread_in_native_trans); __ sw(t0, Address(xthread, JavaThread::thread_state_offset())); diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp index 26eacc3ec6fc8..1b5a3cf571f96 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp @@ -1167,6 +1167,19 @@ void MacroAssembler::fsflagsi(Register Rd, unsigned imm) { #undef INSN +void MacroAssembler::restore_cpu_control_state_after_jni(Register tmp) { + if (RestoreMXCSROnJNICalls) { + Label skip_fsrmi; + frrm(tmp); + // Set FRM to the state we need. We do want Round to Nearest. + // We don't want non-IEEE rounding modes. + guarantee(RoundingMode::rne == 0, "must be"); + beqz(tmp, skip_fsrmi); // Only reset FRM if it's wrong + fsrmi(RoundingMode::rne); + bind(skip_fsrmi); + } +} + void MacroAssembler::push_reg(Register Rs) { addi(esp, esp, 0 - wordSize); diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp index 508b23df12874..1abf156070786 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp @@ -581,6 +581,9 @@ class MacroAssembler: public Assembler { void fsflagsi(Register Rd, unsigned imm); void fsflagsi(unsigned imm); + // Restore cpu control state after JNI call + void restore_cpu_control_state_after_jni(Register tmp); + // Control transfer pseudo instructions void beqz(Register Rs, const address dest); void bnez(Register Rs, const address dest); diff --git a/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp b/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp index 4f84ae256def5..9e6c8ce2e5e3b 100644 --- a/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp +++ b/src/hotspot/cpu/riscv/sharedRuntime_riscv.cpp @@ -1748,6 +1748,9 @@ nmethod* SharedRuntime::generate_native_wrapper(MacroAssembler* masm, intptr_t return_pc = (intptr_t) __ pc(); oop_maps->add_gc_map(return_pc - start, map); + // Verify or restore cpu control state after JNI call + __ restore_cpu_control_state_after_jni(t0); + // Unpack native results. if (ret_type != T_OBJECT && ret_type != T_ARRAY) { __ cast_primitive_type(ret_type, x10); diff --git a/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp b/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp index 860a7afb5e332..07aad47173c29 100644 --- a/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp +++ b/src/hotspot/cpu/riscv/templateInterpreterGenerator_riscv.cpp @@ -1157,6 +1157,9 @@ address TemplateInterpreterGenerator::generate_native_entry(bool synchronized) { __ get_method(xmethod); // result potentially in x10 or f10 + // Restore cpu control state after JNI call + __ restore_cpu_control_state_after_jni(t0); + // make room for the pushes we're about to do __ sub(t0, esp, 4 * wordSize); __ andi(sp, t0, -16); From eb60822a45ecd076484e707b2dd1049ed9d8079b Mon Sep 17 00:00:00 2001 From: Abhishek Kumar <abhiscxk@openjdk.org> Date: Fri, 19 Apr 2024 10:10:00 +0000 Subject: [PATCH 019/141] 8310072: JComboBox/DisabledComboBoxFontTestAuto: Enabled and disabled ComboBox does not match in these LAFs: GTK+ Reviewed-by: dnguyen, jdv, tr, serb --- .../DisabledComboBoxFontTestAuto.java | 80 ++++++++----------- 1 file changed, 33 insertions(+), 47 deletions(-) diff --git a/test/jdk/javax/swing/JComboBox/DisabledComboBoxFontTestAuto.java b/test/jdk/javax/swing/JComboBox/DisabledComboBoxFontTestAuto.java index 49b1dbc016aa7..50d3708fa5a2e 100644 --- a/test/jdk/javax/swing/JComboBox/DisabledComboBoxFontTestAuto.java +++ b/test/jdk/javax/swing/JComboBox/DisabledComboBoxFontTestAuto.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,13 +21,6 @@ * questions. */ -/* - * @test - * @bug 7093691 - * @summary Tests if JComboBox has correct font color when disabled/enabled - * @run main/othervm -Dsun.java2d.uiScale=1 DisabledComboBoxFontTestAuto - */ - import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; @@ -44,20 +37,29 @@ import static java.awt.image.BufferedImage.TYPE_INT_ARGB; +/* + * @test + * @bug 7093691 8310072 + * @summary Tests if JComboBox has correct font color when disabled/enabled + * @key headful + * @run main/othervm -Dsun.java2d.uiScale=1 DisabledComboBoxFontTestAuto + */ + public class DisabledComboBoxFontTestAuto { private static JComboBox combo, combo2; private static BufferedImage enabledImage, disabledImage, enabledImage2, disabledImage2; - private static Path testDir; private static String lafName; private static StringBuffer failingLafs; private static int COMBO_HEIGHT, COMBO_WIDTH, COMBO2_HEIGHT, COMBO2_WIDTH; private static void createCombo() { combo = new JComboBox(); - combo.addItem("Simple JComboBox"); + combo.addItem("\u2588".repeat(5)); + combo.setFont(combo.getFont().deriveFont(50.0f)); combo.setRenderer(new DefaultListCellRenderer()); combo2 = new JComboBox(); - combo2.addItem("Simple JComboBox"); + combo2.addItem("\u2588".repeat(5)); + combo2.setFont(combo2.getFont().deriveFont(50.0f)); COMBO_WIDTH = (int) combo.getPreferredSize().getWidth(); COMBO_HEIGHT = (int) combo.getPreferredSize().getHeight(); COMBO2_WIDTH = (int) combo2.getPreferredSize().getWidth(); @@ -90,53 +92,38 @@ private static void paintCombo() { } private static void testMethod() throws IOException { - ImageIO.write(enabledImage, "png", new File(testDir - + "/" + lafName + "Enabled.png")); - ImageIO.write(disabledImage, "png", new File(testDir - + "/" + lafName + "Disabled.png")); - ImageIO.write(enabledImage2, "png", new File(testDir - + "/" + lafName + "EnabledDLCR.png")); - ImageIO.write(disabledImage2, "png", new File(testDir - + "/" + lafName + "DisabledDLCR.png")); - - boolean isIdentical = true; Color eColor1, eColor2, dColor1, dColor2; + Path testDir = Path.of(System.getProperty("test.classes", ".")); // Use center line to compare RGB values - int y = 10; + int y = enabledImage.getHeight() / 2; for (int x = (enabledImage.getWidth() / 2) - 20; x < (enabledImage.getWidth() / 2) + 20; x++) { - // Nimbus has a pixel offset in coordinates since Nimbus is 2px - // smaller in width than other L&F's - if (lafName.equals("Nimbus")) { - eColor1 = new Color(enabledImage.getRGB(x + 1, y)); - eColor2 = new Color(enabledImage2.getRGB(x, y)); - dColor1 = new Color(disabledImage.getRGB(x + 1, y)); - dColor2 = new Color(disabledImage2.getRGB(x, y)); - } else { - eColor1 = new Color(enabledImage.getRGB(x, y)); - eColor2 = new Color(enabledImage2.getRGB(x, y)); - dColor1 = new Color(disabledImage.getRGB(x, y)); - dColor2 = new Color(disabledImage2.getRGB(x, y)); - } + eColor1 = new Color(enabledImage.getRGB(x, y)); + eColor2 = new Color(enabledImage2.getRGB(x, y)); + dColor1 = new Color(disabledImage.getRGB(x, y)); + dColor2 = new Color(disabledImage2.getRGB(x, y)); + if ((!isColorMatching(eColor1, eColor2)) || (!isColorMatching(dColor1, dColor2))) { - isIdentical = false; - break; + failingLafs.append(lafName + ", "); + ImageIO.write(enabledImage, "png", new File(testDir + + "/" + lafName + "Enabled.png")); + ImageIO.write(disabledImage, "png", new File(testDir + + "/" + lafName + "Disabled.png")); + ImageIO.write(enabledImage2, "png", new File(testDir + + "/" + lafName + "EnabledDLCR.png")); + ImageIO.write(disabledImage2, "png", new File(testDir + + "/" + lafName + "DisabledDLCR.png")); + return; } } - - if (isIdentical) { - System.out.println("PASSED"); - } else { - failingLafs.append(lafName + ", "); - } + System.out.println("Test Passed: " + lafName); } private static boolean isColorMatching(Color c1, Color c2) { if ((c1.getRed() != c2.getRed()) - || (c1.getBlue() != c2.getBlue()) - || (c1.getGreen() != c2.getGreen())) { - + || (c1.getBlue() != c2.getBlue()) + || (c1.getGreen() != c2.getGreen())) { System.out.println(lafName + " Enabled RGB failure: " + c1.getRed() + ", " + c1.getBlue() + ", " @@ -163,7 +150,6 @@ private static void setLookAndFeel(UIManager.LookAndFeelInfo laf) { public static void main(String[] args) throws Exception { lafName = "null"; failingLafs = new StringBuffer(); - testDir = Path.of(System.getProperty("test.classes", ".")); for (UIManager.LookAndFeelInfo laf : UIManager.getInstalledLookAndFeels()) { // Change Motif LAF name to avoid using slash in saved image file path lafName = laf.getName().equals("CDE/Motif") ? "Motif" : laf.getName(); From 177092b952c2135c6f6872c6b64d1e210452d35a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johan=20Sj=C3=B6len?= <jsjolen@openjdk.org> Date: Fri, 19 Apr 2024 10:13:40 +0000 Subject: [PATCH 020/141] 8330569: Rename Nix to Posix in platform-dependent attachListener code Reviewed-by: mdoerr, stuefe, coleenp --- ...tener_nix.cpp => attachListener_posix.cpp} | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) rename src/hotspot/os/posix/{attachListener_nix.cpp => attachListener_posix.cpp} (91%) diff --git a/src/hotspot/os/posix/attachListener_nix.cpp b/src/hotspot/os/posix/attachListener_posix.cpp similarity index 91% rename from src/hotspot/os/posix/attachListener_nix.cpp rename to src/hotspot/os/posix/attachListener_posix.cpp index a1a5ab81b4cd3..bdd97afd47ee2 100644 --- a/src/hotspot/os/posix/attachListener_nix.cpp +++ b/src/hotspot/os/posix/attachListener_posix.cpp @@ -63,9 +63,9 @@ // of the client matches this process. // forward reference -class NixAttachOperation; +class PosixAttachOperation; -class NixAttachListener: AllStatic { +class PosixAttachListener: AllStatic { private: // the path to which we bind the UNIX domain socket static char _path[UNIX_PATH_MAX]; @@ -77,7 +77,7 @@ class NixAttachListener: AllStatic { static bool _atexit_registered; // reads a request from the given connected socket - static NixAttachOperation* read_request(int s); + static PosixAttachOperation* read_request(int s); public: enum { @@ -110,10 +110,10 @@ class NixAttachListener: AllStatic { // write the given buffer to a socket static int write_fully(int s, char* buf, size_t len); - static NixAttachOperation* dequeue(); + static PosixAttachOperation* dequeue(); }; -class NixAttachOperation: public AttachOperation { +class PosixAttachOperation: public AttachOperation { private: // the connection to the client int _socket; @@ -124,16 +124,16 @@ class NixAttachOperation: public AttachOperation { void set_socket(int s) { _socket = s; } int socket() const { return _socket; } - NixAttachOperation(char* name) : AttachOperation(name) { + PosixAttachOperation(char* name) : AttachOperation(name) { set_socket(-1); } }; // statics -char NixAttachListener::_path[UNIX_PATH_MAX]; -bool NixAttachListener::_has_path; -volatile int NixAttachListener::_listener = -1; -bool NixAttachListener::_atexit_registered = false; +char PosixAttachListener::_path[UNIX_PATH_MAX]; +bool PosixAttachListener::_has_path; +volatile int PosixAttachListener::_listener = -1; +bool PosixAttachListener::_atexit_registered = false; // Supporting class to help split a buffer into individual components class ArgumentIterator : public StackObj { @@ -168,22 +168,22 @@ class ArgumentIterator : public StackObj { // bound too. extern "C" { static void listener_cleanup() { - int s = NixAttachListener::listener(); + int s = PosixAttachListener::listener(); if (s != -1) { - NixAttachListener::set_listener(-1); + PosixAttachListener::set_listener(-1); ::shutdown(s, SHUT_RDWR); ::close(s); } - if (NixAttachListener::has_path()) { - ::unlink(NixAttachListener::path()); - NixAttachListener::set_path(nullptr); + if (PosixAttachListener::has_path()) { + ::unlink(PosixAttachListener::path()); + PosixAttachListener::set_path(nullptr); } } } // Initialization - create a listener socket and bind it to a file -int NixAttachListener::init() { +int PosixAttachListener::init() { char path[UNIX_PATH_MAX]; // socket file char initial_path[UNIX_PATH_MAX]; // socket file during setup int listener; // listener socket (file descriptor) @@ -255,7 +255,7 @@ int NixAttachListener::init() { // after the peer credentials have been checked and in the worst case it just // means that the attach listener thread is blocked. // -NixAttachOperation* NixAttachListener::read_request(int s) { +PosixAttachOperation* PosixAttachListener::read_request(int s) { char ver_str[8]; os::snprintf_checked(ver_str, sizeof(ver_str), "%d", ATTACH_PROTOCOL_VER); @@ -327,7 +327,7 @@ NixAttachOperation* NixAttachListener::read_request(int s) { return nullptr; } - NixAttachOperation* op = new NixAttachOperation(name); + PosixAttachOperation* op = new PosixAttachOperation(name); for (int i=0; i<AttachOperation::arg_count_max; i++) { char* arg = args.next(); @@ -351,7 +351,7 @@ NixAttachOperation* NixAttachListener::read_request(int s) { // In the Linux and BSD implementations, there is only a single operation and // clients cannot queue commands (except at the socket level). // -NixAttachOperation* NixAttachListener::dequeue() { +PosixAttachOperation* PosixAttachListener::dequeue() { for (;;) { int s; @@ -400,7 +400,7 @@ NixAttachOperation* NixAttachListener::dequeue() { #endif // peer credential look okay so we read the request - NixAttachOperation* op = read_request(s); + PosixAttachOperation* op = read_request(s); if (op == nullptr) { ::close(s); continue; @@ -411,7 +411,7 @@ NixAttachOperation* NixAttachListener::dequeue() { } // write the given buffer to the socket -int NixAttachListener::write_fully(int s, char* buf, size_t len) { +int PosixAttachListener::write_fully(int s, char* buf, size_t len) { do { ssize_t n = ::write(s, buf, len); if (n == -1) { @@ -433,18 +433,18 @@ int NixAttachListener::write_fully(int s, char* buf, size_t len) { // if there are operations that involves a very big reply then it the // socket could be made non-blocking and a timeout could be used. -void NixAttachOperation::complete(jint result, bufferedStream* st) { +void PosixAttachOperation::complete(jint result, bufferedStream* st) { JavaThread* thread = JavaThread::current(); ThreadBlockInVM tbivm(thread); // write operation result char msg[32]; os::snprintf_checked(msg, sizeof(msg), "%d\n", result); - int rc = NixAttachListener::write_fully(this->socket(), msg, strlen(msg)); + int rc = PosixAttachListener::write_fully(this->socket(), msg, strlen(msg)); // write any result data if (rc == 0) { - NixAttachListener::write_fully(this->socket(), (char*) st->base(), st->size()); + PosixAttachListener::write_fully(this->socket(), (char*) st->base(), st->size()); ::shutdown(this->socket(), 2); } @@ -461,7 +461,7 @@ AttachOperation* AttachListener::dequeue() { JavaThread* thread = JavaThread::current(); ThreadBlockInVM tbivm(thread); - AttachOperation* op = NixAttachListener::dequeue(); + AttachOperation* op = PosixAttachListener::dequeue(); return op; } @@ -493,7 +493,7 @@ int AttachListener::pd_init() { JavaThread* thread = JavaThread::current(); ThreadBlockInVM tbivm(thread); - int ret_code = NixAttachListener::init(); + int ret_code = PosixAttachListener::init(); return ret_code; } @@ -501,10 +501,10 @@ int AttachListener::pd_init() { bool AttachListener::check_socket_file() { int ret; struct stat st; - ret = stat(NixAttachListener::path(), &st); + ret = stat(PosixAttachListener::path(), &st); if (ret == -1) { // need to restart attach listener. log_debug(attach)("Socket file %s does not exist - Restart Attach Listener", - NixAttachListener::path()); + PosixAttachListener::path()); listener_cleanup(); From 650ca65a4f838a1095e43acac649fde48eceaee7 Mon Sep 17 00:00:00 2001 From: Erik Gahlin <egahlin@openjdk.org> Date: Fri, 19 Apr 2024 14:50:39 +0000 Subject: [PATCH 021/141] 8329330: NoClassDefFoundError: Could not initialize class jdk.jfr.internal.MirrorEvents Reviewed-by: mgronlun --- .../share/classes/jdk/jfr/internal/instrument/JDKEvents.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java index 10ab2094d5ba0..a6c65641cd30c 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/instrument/JDKEvents.java @@ -44,8 +44,6 @@ import jdk.jfr.events.FileReadEvent; import jdk.jfr.events.FileWriteEvent; import jdk.jfr.events.InitialSecurityPropertyEvent; -import jdk.jfr.events.SocketReadEvent; -import jdk.jfr.events.SocketWriteEvent; import jdk.jfr.internal.JVM; import jdk.jfr.internal.LogLevel; @@ -62,8 +60,6 @@ public final class JDKEvents { FileForceEvent.class, FileReadEvent.class, FileWriteEvent.class, - SocketReadEvent.class, - SocketWriteEvent.class, ActiveSettingEvent.class, ActiveRecordingEvent.class, // jdk.internal.event.* classes need their mirror From 3c1d1d93d7b1de229753ed697f008bd5639ac957 Mon Sep 17 00:00:00 2001 From: Dan Heidinga <heidinga@openjdk.org> Date: Fri, 19 Apr 2024 15:03:18 +0000 Subject: [PATCH 022/141] 8320522: Remove code related to `RegisterFinalizersAtInit` Reviewed-by: coleenp, ayang, kbarrett --- src/hotspot/cpu/aarch64/templateTable_aarch64.cpp | 2 +- src/hotspot/cpu/arm/templateTable_arm.cpp | 4 ++-- src/hotspot/cpu/ppc/templateTable_ppc_64.cpp | 2 +- src/hotspot/cpu/riscv/templateTable_riscv.cpp | 2 +- src/hotspot/cpu/x86/templateTable_x86.cpp | 3 +-- src/hotspot/share/c1/c1_GraphBuilder.cpp | 3 +-- src/hotspot/share/classfile/classFileParser.cpp | 3 +-- src/hotspot/share/interpreter/abstractInterpreter.cpp | 4 ++-- src/hotspot/share/interpreter/rewriter.cpp | 2 +- src/hotspot/share/oops/instanceKlass.cpp | 10 +--------- src/hotspot/share/oops/instanceKlass.hpp | 1 - src/hotspot/share/opto/parse1.cpp | 3 +-- src/hotspot/share/runtime/globals.hpp | 4 ---- 13 files changed, 13 insertions(+), 30 deletions(-) diff --git a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp index 1a567049a4654..eaaefb55f3691 100644 --- a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp @@ -3611,7 +3611,7 @@ void TemplateTable::_new() { __ ldrw(r3, Address(r4, Klass::layout_helper_offset())); - // test to see if it has a finalizer or is malformed in some way + // test to see if it is malformed in some way __ tbnz(r3, exact_log2(Klass::_lh_instance_slow_path_bit), slow_case); // Allocate the instance: diff --git a/src/hotspot/cpu/arm/templateTable_arm.cpp b/src/hotspot/cpu/arm/templateTable_arm.cpp index 55a0120e7c77c..e657c65958834 100644 --- a/src/hotspot/cpu/arm/templateTable_arm.cpp +++ b/src/hotspot/cpu/arm/templateTable_arm.cpp @@ -3971,7 +3971,7 @@ void TemplateTable::_new() { __ b(slow_case, ne); __ load_resolved_klass_at_offset(Rcpool, Rindex, Rklass); - // make sure klass is initialized & doesn't have finalizer + // make sure klass is initialized // make sure klass is fully initialized __ ldrb(Rtemp, Address(Rklass, InstanceKlass::init_state_offset())); __ cmp(Rtemp, InstanceKlass::fully_initialized); @@ -3980,7 +3980,7 @@ void TemplateTable::_new() { // get instance_size in InstanceKlass (scaled to a count of bytes) __ ldr_u32(Rsize, Address(Rklass, Klass::layout_helper_offset())); - // test to see if it has a finalizer or is malformed in some way + // test to see if it is malformed in some way // Klass::_lh_instance_slow_path_bit is really a bit mask, not bit number __ tbnz(Rsize, exact_log2(Klass::_lh_instance_slow_path_bit), slow_case); diff --git a/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp b/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp index 86353aefb36ef..d9b76a5b6645a 100644 --- a/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp +++ b/src/hotspot/cpu/ppc/templateTable_ppc_64.cpp @@ -3809,7 +3809,7 @@ void TemplateTable::_new() { __ lwz(Rinstance_size, in_bytes(Klass::layout_helper_offset()), RinstanceKlass); - // Make sure klass does not have has_finalizer, or is abstract, or interface or java/lang/Class. + // Make sure klass is not abstract, or interface or java/lang/Class. __ andi_(R0, Rinstance_size, Klass::_lh_instance_slow_path_bit); // slow path bit equals 0? __ bne(CCR0, Lslow_case); diff --git a/src/hotspot/cpu/riscv/templateTable_riscv.cpp b/src/hotspot/cpu/riscv/templateTable_riscv.cpp index 58f57f32b2f65..6240e4b4b50e1 100644 --- a/src/hotspot/cpu/riscv/templateTable_riscv.cpp +++ b/src/hotspot/cpu/riscv/templateTable_riscv.cpp @@ -3554,7 +3554,7 @@ void TemplateTable::_new() { // get instance_size in InstanceKlass (scaled to a count of bytes) __ lwu(x13, Address(x14, Klass::layout_helper_offset())); - // test to see if it has a finalizer or is malformed in some way + // test to see if is malformed in some way __ test_bit(t0, x13, exact_log2(Klass::_lh_instance_slow_path_bit)); __ bnez(t0, slow_case); diff --git a/src/hotspot/cpu/x86/templateTable_x86.cpp b/src/hotspot/cpu/x86/templateTable_x86.cpp index f53a7872451a4..664cd86d486a1 100644 --- a/src/hotspot/cpu/x86/templateTable_x86.cpp +++ b/src/hotspot/cpu/x86/templateTable_x86.cpp @@ -4057,10 +4057,9 @@ void TemplateTable::_new() { __ jcc(Assembler::notEqual, slow_case); #endif - // make sure klass doesn't have finalizer // get instance_size in InstanceKlass (scaled to a count of bytes) __ movl(rdx, Address(rcx, Klass::layout_helper_offset())); - // test to see if it has a finalizer or is malformed in some way + // test to see if it is malformed in some way __ testl(rdx, Klass::_lh_instance_slow_path_bit); __ jcc(Assembler::notZero, slow_case); diff --git a/src/hotspot/share/c1/c1_GraphBuilder.cpp b/src/hotspot/share/c1/c1_GraphBuilder.cpp index 396c83c6ab976..a361f3da9c281 100644 --- a/src/hotspot/share/c1/c1_GraphBuilder.cpp +++ b/src/hotspot/share/c1/c1_GraphBuilder.cpp @@ -1556,8 +1556,7 @@ void GraphBuilder::call_register_finalizer() { void GraphBuilder::method_return(Value x, bool ignore_return) { - if (RegisterFinalizersAtInit && - method()->intrinsic_id() == vmIntrinsics::_Object_init) { + if (method()->intrinsic_id() == vmIntrinsics::_Object_init) { call_register_finalizer(); } diff --git a/src/hotspot/share/classfile/classFileParser.cpp b/src/hotspot/share/classfile/classFileParser.cpp index fa7ca41e0c536..734b425cb4593 100644 --- a/src/hotspot/share/classfile/classFileParser.cpp +++ b/src/hotspot/share/classfile/classFileParser.cpp @@ -4188,8 +4188,7 @@ void ClassFileParser::set_precomputed_flags(InstanceKlass* ik) { // If it cannot be fast-path allocated, set a bit in the layout helper. // See documentation of InstanceKlass::can_be_fastpath_allocated(). assert(ik->size_helper() > 0, "layout_helper is initialized"); - if ((!RegisterFinalizersAtInit && ik->has_finalizer()) - || ik->is_abstract() || ik->is_interface() + if (ik->is_abstract() || ik->is_interface() || (ik->name() == vmSymbols::java_lang_Class() && ik->class_loader() == nullptr) || ik->size_helper() >= FastAllocateSizeLimit) { // Forbid fast-path allocation. diff --git a/src/hotspot/share/interpreter/abstractInterpreter.cpp b/src/hotspot/share/interpreter/abstractInterpreter.cpp index ff039a8945520..0b67ea4a8f9c1 100644 --- a/src/hotspot/share/interpreter/abstractInterpreter.cpp +++ b/src/hotspot/share/interpreter/abstractInterpreter.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, 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 @@ -149,7 +149,7 @@ AbstractInterpreter::MethodKind AbstractInterpreter::method_kind(const methodHan case vmIntrinsics::_dsqrt_strict: return java_lang_math_sqrt_strict; case vmIntrinsics::_Reference_get: return java_lang_ref_reference_get; case vmIntrinsics::_Object_init: - if (RegisterFinalizersAtInit && m->code_size() == 1) { + if (m->code_size() == 1) { // We need to execute the special return bytecode to check for // finalizer registration so create a normal frame. return zerolocals; diff --git a/src/hotspot/share/interpreter/rewriter.cpp b/src/hotspot/share/interpreter/rewriter.cpp index ea9b9cff95237..07ea1e2e2044b 100644 --- a/src/hotspot/share/interpreter/rewriter.cpp +++ b/src/hotspot/share/interpreter/rewriter.cpp @@ -531,7 +531,7 @@ void Rewriter::rewrite_bytecodes(TRAPS) { // determine index maps for Method* rewriting compute_index_maps(); - if (RegisterFinalizersAtInit && _klass->name() == vmSymbols::java_lang_Object()) { + if (_klass->name() == vmSymbols::java_lang_Object()) { bool did_rewrite = false; int i = _methods->length(); while (i-- > 0) { diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp index 43bec86d8e5f1..0b5c975931026 100644 --- a/src/hotspot/share/oops/instanceKlass.cpp +++ b/src/hotspot/share/oops/instanceKlass.cpp @@ -1509,16 +1509,8 @@ instanceOop InstanceKlass::register_finalizer(instanceOop i, TRAPS) { } instanceOop InstanceKlass::allocate_instance(TRAPS) { - bool has_finalizer_flag = has_finalizer(); // Query before possible GC size_t size = size_helper(); // Query before forming handle. - - instanceOop i; - - i = (instanceOop)Universe::heap()->obj_allocate(this, size, CHECK_NULL); - if (has_finalizer_flag && !RegisterFinalizersAtInit) { - i = register_finalizer(i, CHECK_NULL); - } - return i; + return (instanceOop)Universe::heap()->obj_allocate(this, size, CHECK_NULL); } instanceOop InstanceKlass::allocate_instance(oop java_class, TRAPS) { diff --git a/src/hotspot/share/oops/instanceKlass.hpp b/src/hotspot/share/oops/instanceKlass.hpp index b5f598030ef26..a77227198f63e 100644 --- a/src/hotspot/share/oops/instanceKlass.hpp +++ b/src/hotspot/share/oops/instanceKlass.hpp @@ -959,7 +959,6 @@ class InstanceKlass: public Klass { // This bit is initialized in classFileParser.cpp. // It is false under any of the following conditions: // - the class is abstract (including any interface) - // - the class has a finalizer (if !RegisterFinalizersAtInit) // - the class size is larger than FastAllocateSizeLimit // - the class is java/lang/Class, which cannot be allocated directly bool can_be_fastpath_allocated() const { diff --git a/src/hotspot/share/opto/parse1.cpp b/src/hotspot/share/opto/parse1.cpp index 97cc025b45b72..5f86847442208 100644 --- a/src/hotspot/share/opto/parse1.cpp +++ b/src/hotspot/share/opto/parse1.cpp @@ -2239,8 +2239,7 @@ void Parse::rtm_deopt() { //------------------------------return_current--------------------------------- // Append current _map to _exit_return void Parse::return_current(Node* value) { - if (RegisterFinalizersAtInit && - method()->intrinsic_id() == vmIntrinsics::_Object_init) { + if (method()->intrinsic_id() == vmIntrinsics::_Object_init) { call_register_finalizer(); } diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index d62403a29d53e..693e5660c24bf 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -671,10 +671,6 @@ const int ObjectAlignmentInBytes = 8; product(bool, PrintWarnings, true, \ "Print JVM warnings to output stream") \ \ - product(bool, RegisterFinalizersAtInit, true, \ - "(Deprecated) Register finalizable objects at end of " \ - "Object.<init> or after allocation") \ - \ develop(bool, RegisterReferences, true, \ "Tell whether the VM should register soft/weak/final/phantom " \ "references") \ From 8da175d094c02e7655188a60e6364104433429de Mon Sep 17 00:00:00 2001 From: Amit Kumar <amitkumar@openjdk.org> Date: Fri, 19 Apr 2024 16:06:55 +0000 Subject: [PATCH 023/141] 8330008: [s390x] Test bit "in-memory" in case of DiagnoseSyncOnValueBasedClasses Reviewed-by: lucy, mdoerr --- src/hotspot/cpu/s390/macroAssembler_s390.cpp | 6 ++---- src/hotspot/cpu/s390/sharedRuntime_s390.cpp | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/hotspot/cpu/s390/macroAssembler_s390.cpp b/src/hotspot/cpu/s390/macroAssembler_s390.cpp index fd04a66a8431c..224153f0e84b0 100644 --- a/src/hotspot/cpu/s390/macroAssembler_s390.cpp +++ b/src/hotspot/cpu/s390/macroAssembler_s390.cpp @@ -3207,10 +3207,8 @@ void MacroAssembler::compiler_fast_lock_object(Register oop, Register box, Regis if (DiagnoseSyncOnValueBasedClasses != 0) { load_klass(temp, oop); - z_l(temp, Address(temp, Klass::access_flags_offset())); - assert((JVM_ACC_IS_VALUE_BASED_CLASS & 0xFFFF) == 0, "or change following instruction"); - z_nilh(temp, JVM_ACC_IS_VALUE_BASED_CLASS >> 16); - z_brne(done); + testbit(Address(temp, Klass::access_flags_offset()), exact_log2(JVM_ACC_IS_VALUE_BASED_CLASS)); + z_btrue(done); } // Handle existing monitor. diff --git a/src/hotspot/cpu/s390/sharedRuntime_s390.cpp b/src/hotspot/cpu/s390/sharedRuntime_s390.cpp index 11e1e617d8e3a..87cf9cb600cb4 100644 --- a/src/hotspot/cpu/s390/sharedRuntime_s390.cpp +++ b/src/hotspot/cpu/s390/sharedRuntime_s390.cpp @@ -1,6 +1,6 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. - * Copyright (c) 2016, 2023 SAP SE. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1712,8 +1712,6 @@ nmethod *SharedRuntime::generate_native_wrapper(MacroAssembler *masm, // Try fastpath for locking. // Fast_lock kills r_temp_1, r_temp_2. - // in case of DiagnoseSyncOnValueBasedClasses content for Z_R1_scratch - // will be destroyed, So avoid using Z_R1 as temp here. __ compiler_fast_lock_object(r_oop, r_box, r_tmp1, r_tmp2); __ z_bre(done); From b704e91241b0f84d866f50a8f2c6af240087cb29 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov <kvn@openjdk.org> Date: Fri, 19 Apr 2024 16:11:17 +0000 Subject: [PATCH 024/141] 8329433: Reduce nmethod header size Reviewed-by: dlong, iveresov --- src/hotspot/share/code/codeBlob.cpp | 76 ++---- src/hotspot/share/code/codeBlob.hpp | 80 +++--- src/hotspot/share/code/debugInfoRec.cpp | 7 +- src/hotspot/share/code/dependencies.cpp | 6 +- src/hotspot/share/code/nmethod.cpp | 231 +++++++++--------- src/hotspot/share/code/nmethod.hpp | 188 +++++++------- src/hotspot/share/compiler/compileBroker.cpp | 2 +- .../share/compiler/compilerDefinitions.hpp | 4 +- .../share/gc/shared/classUnloadingContext.cpp | 4 +- src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 2 +- src/hotspot/share/memory/heap.hpp | 12 +- src/hotspot/share/runtime/frame.cpp | 5 +- src/hotspot/share/runtime/vmStructs.cpp | 20 +- .../sun/jvm/hotspot/code/CodeBlob.java | 12 +- .../classes/sun/jvm/hotspot/code/NMethod.java | 76 +++--- 15 files changed, 337 insertions(+), 388 deletions(-) diff --git a/src/hotspot/share/code/codeBlob.cpp b/src/hotspot/share/code/codeBlob.cpp index 8341874298883..81c4d001078cb 100644 --- a/src/hotspot/share/code/codeBlob.cpp +++ b/src/hotspot/share/code/codeBlob.cpp @@ -73,74 +73,48 @@ unsigned int CodeBlob::allocation_size(CodeBuffer* cb, int header_size) { return size; } -#ifdef ASSERT -void CodeBlob::verify_parameters() { - assert(is_aligned(_size, oopSize), "unaligned size"); - assert(is_aligned(_header_size, oopSize), "unaligned size"); - assert(is_aligned(_relocation_size, oopSize), "unaligned size"); - assert(_data_offset <= size(), "codeBlob is too small"); - assert(code_end() == content_end(), "must be the same - see code_end()"); -#ifdef COMPILER1 - // probably wrong for tiered - assert(frame_size() >= -1, "must use frame size or -1 for runtime stubs"); -#endif // COMPILER1 -} -#endif - -CodeBlob::CodeBlob(const char* name, CodeBlobKind kind, int size, int header_size, int relocation_size, - int content_offset, int code_offset, int frame_complete_offset, int data_offset, - int frame_size, ImmutableOopMapSet* oop_maps, bool caller_must_gc_arguments) : - _oop_maps(oop_maps), - _name(name), - _size(size), - _header_size(header_size), - _relocation_size(relocation_size), - _content_offset(content_offset), - _code_offset(code_offset), - _frame_complete_offset(frame_complete_offset), - _data_offset(data_offset), - _frame_size(frame_size), - S390_ONLY(_ctable_offset(0) COMMA) - _kind(kind), - _caller_must_gc_arguments(caller_must_gc_arguments) -{ - DEBUG_ONLY( verify_parameters(); ) -} - -CodeBlob::CodeBlob(const char* name, CodeBlobKind kind, CodeBuffer* cb, int size, int header_size, - int frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments) : +CodeBlob::CodeBlob(const char* name, CodeBlobKind kind, CodeBuffer* cb, int size, uint16_t header_size, + int16_t frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments) : _oop_maps(nullptr), // will be set by set_oop_maps() call _name(name), _size(size), - _header_size(header_size), _relocation_size(align_up(cb->total_relocation_size(), oopSize)), - _content_offset(CodeBlob::align_code_offset(_header_size + _relocation_size)), + _content_offset(CodeBlob::align_code_offset(header_size + _relocation_size)), _code_offset(_content_offset + cb->total_offset_of(cb->insts())), - _frame_complete_offset(frame_complete_offset), _data_offset(_content_offset + align_up(cb->total_content_size(), oopSize)), _frame_size(frame_size), S390_ONLY(_ctable_offset(0) COMMA) + _header_size(header_size), + _frame_complete_offset(frame_complete_offset), _kind(kind), _caller_must_gc_arguments(caller_must_gc_arguments) { - DEBUG_ONLY( verify_parameters(); ) + assert(is_aligned(_size, oopSize), "unaligned size"); + assert(is_aligned(header_size, oopSize), "unaligned size"); + assert(is_aligned(_relocation_size, oopSize), "unaligned size"); + assert(_data_offset <= _size, "codeBlob is too small: %d > %d", _data_offset, _size); + assert(code_end() == content_end(), "must be the same - see code_end()"); +#ifdef COMPILER1 + // probably wrong for tiered + assert(_frame_size >= -1, "must use frame size or -1 for runtime stubs"); +#endif // COMPILER1 set_oop_maps(oop_maps); } // Simple CodeBlob used for simple BufferBlob. -CodeBlob::CodeBlob(const char* name, CodeBlobKind kind, int size, int header_size) : +CodeBlob::CodeBlob(const char* name, CodeBlobKind kind, int size, uint16_t header_size) : _oop_maps(nullptr), _name(name), _size(size), - _header_size(header_size), _relocation_size(0), _content_offset(CodeBlob::align_code_offset(header_size)), _code_offset(_content_offset), - _frame_complete_offset(CodeOffsets::frame_never_safe), _data_offset(size), _frame_size(0), S390_ONLY(_ctable_offset(0) COMMA) + _header_size(header_size), + _frame_complete_offset(CodeOffsets::frame_never_safe), _kind(kind), _caller_must_gc_arguments(false) { @@ -148,7 +122,7 @@ CodeBlob::CodeBlob(const char* name, CodeBlobKind kind, int size, int header_siz assert(is_aligned(header_size, oopSize), "unaligned size"); } -void CodeBlob::purge(bool free_code_cache_data, bool unregister_nmethod) { +void CodeBlob::purge() { if (_oop_maps != nullptr) { delete _oop_maps; _oop_maps = nullptr; @@ -185,8 +159,8 @@ RuntimeBlob::RuntimeBlob( CodeBlobKind kind, CodeBuffer* cb, int size, - int header_size, - int frame_complete, + uint16_t header_size, + int16_t frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments) @@ -198,7 +172,7 @@ RuntimeBlob::RuntimeBlob( void RuntimeBlob::free(RuntimeBlob* blob) { assert(blob != nullptr, "caller must check for nullptr"); ThreadInVMfromUnknown __tiv; // get to VM state in case we block on CodeCache_lock - blob->purge(true /* free_code_cache_data */, true /* unregister_nmethod */); + blob->purge(); { MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); CodeCache::free(blob); @@ -408,7 +382,7 @@ RuntimeStub::RuntimeStub( const char* name, CodeBuffer* cb, int size, - int frame_complete, + int16_t frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments @@ -420,7 +394,7 @@ RuntimeStub::RuntimeStub( RuntimeStub* RuntimeStub::new_runtime_stub(const char* stub_name, CodeBuffer* cb, - int frame_complete, + int16_t frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments, @@ -668,10 +642,6 @@ void UpcallStub::free(UpcallStub* blob) { RuntimeBlob::free(blob); } -void UpcallStub::preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) { - ShouldNotReachHere(); // caller should never have to gc arguments -} - //---------------------------------------------------------------------------------------------------- // Verification and printing diff --git a/src/hotspot/share/code/codeBlob.hpp b/src/hotspot/share/code/codeBlob.hpp index 134d60e5cb58f..26ae5f7df5941 100644 --- a/src/hotspot/share/code/codeBlob.hpp +++ b/src/hotspot/share/code/codeBlob.hpp @@ -90,8 +90,8 @@ enum class CodeBlobKind : u1 { Number_Of_Kinds }; -class UpcallStub; // for as_upcall_stub() -class RuntimeStub; // for as_runtime_stub() +class UpcallStub; // for as_upcall_stub() +class RuntimeStub; // for as_runtime_stub() class JavaFrameAnchor; // for UpcallStub::jfa_for_frame class CodeBlob { @@ -101,43 +101,39 @@ class CodeBlob { protected: // order fields from large to small to minimize padding between fields - ImmutableOopMapSet* _oop_maps; // OopMap for this CodeBlob + ImmutableOopMapSet* _oop_maps; // OopMap for this CodeBlob const char* _name; - int _size; // total size of CodeBlob in bytes - int _header_size; // size of header (depends on subclass) - int _relocation_size; // size of relocation - int _content_offset; // offset to where content region begins (this includes consts, insts, stubs) - int _code_offset; // offset to where instructions region begins (this includes insts, stubs) - int _frame_complete_offset; // instruction offsets in [0.._frame_complete_offset) have - // not finished setting up their frame. Beware of pc's in - // that range. There is a similar range(s) on returns - // which we don't detect. - int _data_offset; // offset to where data region begins - int _frame_size; // size of stack frame in words (NOT slots. On x64 these are 64bit words) + int _size; // total size of CodeBlob in bytes + int _relocation_size; // size of relocation (could be bigger than 64Kb) + int _content_offset; // offset to where content region begins (this includes consts, insts, stubs) + int _code_offset; // offset to where instructions region begins (this includes insts, stubs) - S390_ONLY(int _ctable_offset;) + int _data_offset; // offset to where data region begins + int _frame_size; // size of stack frame in words (NOT slots. On x64 these are 64bit words) - CodeBlobKind _kind; // Kind of this code blob + S390_ONLY(int _ctable_offset;) - bool _caller_must_gc_arguments; + uint16_t _header_size; // size of header (depends on subclass) + int16_t _frame_complete_offset; // instruction offsets in [0.._frame_complete_offset) have + // not finished setting up their frame. Beware of pc's in + // that range. There is a similar range(s) on returns + // which we don't detect. + + CodeBlobKind _kind; // Kind of this code blob + + bool _caller_must_gc_arguments; #ifndef PRODUCT AsmRemarks _asm_remarks; DbgStrings _dbg_strings; -#endif // not PRODUCT - - DEBUG_ONLY( void verify_parameters() ); - - CodeBlob(const char* name, CodeBlobKind kind, int size, int header_size, int relocation_size, - int content_offset, int code_offset, int data_offset, int frame_complete_offset, - int frame_size, ImmutableOopMapSet* oop_maps, bool caller_must_gc_arguments); +#endif - CodeBlob(const char* name, CodeBlobKind kind, CodeBuffer* cb, int size, int header_size, - int frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments); + CodeBlob(const char* name, CodeBlobKind kind, CodeBuffer* cb, int size, uint16_t header_size, + int16_t frame_complete_offset, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments); // Simple CodeBlob used for simple BufferBlob. - CodeBlob(const char* name, CodeBlobKind kind, int size, int header_size); + CodeBlob(const char* name, CodeBlobKind kind, int size, uint16_t header_size); void operator delete(void* p) { } @@ -152,7 +148,7 @@ class CodeBlob { static unsigned int align_code_offset(int offset); // Deletion - virtual void purge(bool free_code_cache_data, bool unregister_nmethod); + void purge(); // Typing bool is_nmethod() const { return _kind == CodeBlobKind::Nmethod; } @@ -225,7 +221,6 @@ class CodeBlob { const ImmutableOopMap* oop_map_for_slot(int slot, address return_address) const; const ImmutableOopMap* oop_map_for_return_address(address return_address) const; - virtual void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) = 0; // Frame support. Sizes are in word units. int frame_size() const { return _frame_size; } @@ -273,7 +268,7 @@ class RuntimeBlob : public CodeBlob { // Creation // a) simple CodeBlob - RuntimeBlob(const char* name, CodeBlobKind kind, int size, int header_size) + RuntimeBlob(const char* name, CodeBlobKind kind, int size, uint16_t header_size) : CodeBlob(name, kind, size, header_size) {} @@ -285,8 +280,8 @@ class RuntimeBlob : public CodeBlob { CodeBlobKind kind, CodeBuffer* cb, int size, - int header_size, - int frame_complete, + uint16_t header_size, + int16_t frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments = false @@ -324,10 +319,9 @@ class BufferBlob: public RuntimeBlob { static void free(BufferBlob* buf); - // GC/Verification support - void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) override { /* nothing to do */ } - + // Verification support void verify() override; + void print_on(outputStream* st) const override; void print_value_on(outputStream* st) const override; }; @@ -381,7 +375,7 @@ class RuntimeStub: public RuntimeBlob { const char* name, CodeBuffer* cb, int size, - int frame_complete, + int16_t frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments @@ -394,7 +388,7 @@ class RuntimeStub: public RuntimeBlob { static RuntimeStub* new_runtime_stub( const char* stub_name, CodeBuffer* cb, - int frame_complete, + int16_t frame_complete, int frame_size, OopMapSet* oop_maps, bool caller_must_gc_arguments, @@ -405,10 +399,9 @@ class RuntimeStub: public RuntimeBlob { address entry_point() const { return code_begin(); } - // GC/Verification support - void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) override { /* nothing to do */ } - + // Verification support void verify() override; + void print_on(outputStream* st) const override; void print_value_on(outputStream* st) const override; }; @@ -429,7 +422,7 @@ class SingletonBlob: public RuntimeBlob { CodeBlobKind kind, CodeBuffer* cb, int size, - int header_size, + uint16_t header_size, int frame_size, OopMapSet* oop_maps ) @@ -438,9 +431,9 @@ class SingletonBlob: public RuntimeBlob { address entry_point() { return code_begin(); } - // GC/Verification support - void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) override { /* nothing to do */ } + // Verification support void verify() override; // does nothing + void print_on(outputStream* st) const override; void print_value_on(outputStream* st) const override; }; @@ -632,7 +625,6 @@ class UpcallStub: public RuntimeBlob { // GC/Verification support void oops_do(OopClosure* f, const frame& frame); - void preserve_callee_argument_oops(frame fr, const RegisterMap* reg_map, OopClosure* f) override; void verify() override; // Misc. diff --git a/src/hotspot/share/code/debugInfoRec.cpp b/src/hotspot/share/code/debugInfoRec.cpp index 85be80dbf0b3e..71da21f1e99cd 100644 --- a/src/hotspot/share/code/debugInfoRec.cpp +++ b/src/hotspot/share/code/debugInfoRec.cpp @@ -244,14 +244,11 @@ static struct dir_stats_struct { int chunks_queried; int chunks_shared; - int chunks_reshared; int chunks_elided; void print() { - tty->print_cr("Debug Data Chunks: %d, shared %d+%d, non-SP's elided %d", - chunks_queried, - chunks_shared, chunks_reshared, - chunks_elided); + tty->print_cr("Debug Data Chunks: %d, shared %d, non-SP's elided %d", + chunks_queried, chunks_shared, chunks_elided); } } dir_stats; #endif //PRODUCT diff --git a/src/hotspot/share/code/dependencies.cpp b/src/hotspot/share/code/dependencies.cpp index 93a2bf22ba52b..26e53ed90275c 100644 --- a/src/hotspot/share/code/dependencies.cpp +++ b/src/hotspot/share/code/dependencies.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, 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 @@ -388,9 +388,7 @@ void Dependencies::copy_to(nmethod* nm) { address beg = nm->dependencies_begin(); address end = nm->dependencies_end(); guarantee(end - beg >= (ptrdiff_t) size_in_bytes(), "bad sizing"); - Copy::disjoint_words((HeapWord*) content_bytes(), - (HeapWord*) beg, - size_in_bytes() / sizeof(HeapWord)); + (void)memcpy(beg, content_bytes(), size_in_bytes()); assert(size_in_bytes() % sizeof(HeapWord) == 0, "copy by words"); } diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index dd330714e6763..4b72c32c9cb13 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -137,9 +137,6 @@ struct java_nmethod_stats_struct { uint oops_size; uint metadata_size; - uint size_gt_32k; - int size_max; - void note_nmethod(nmethod* nm) { nmethod_count += 1; total_size += nm->size(); @@ -158,9 +155,6 @@ struct java_nmethod_stats_struct { speculations_size += nm->speculations_size(); jvmci_data_size += nm->jvmci_data_size(); #endif - int short_pos_max = ((1<<15) - 1); - if (nm->size() > short_pos_max) size_gt_32k++; - if (nm->size() > size_max) size_max = nm->size(); } void print_nmethod_stats(const char* name) { if (nmethod_count == 0) return; @@ -183,8 +177,6 @@ struct java_nmethod_stats_struct { if (speculations_size != 0) tty->print_cr(" speculations = %u (%f%%)", speculations_size, (speculations_size * 100.0f)/total_size); if (jvmci_data_size != 0) tty->print_cr(" JVMCI data = %u (%f%%)", jvmci_data_size, (jvmci_data_size * 100.0f)/total_size); #endif - if (size_gt_32k != 0) tty->print_cr(" size > 32k = %u", size_gt_32k); - if (size_max != 0) tty->print_cr(" max size = %d", size_max); } }; @@ -1004,27 +996,6 @@ const char* nmethod::compiler_name() const { return compilertype2name(_compiler_type); } -// Fill in default values for various flag fields -void nmethod::init_defaults() { - // avoid uninitialized fields, even for short time periods - _exception_cache = nullptr; - - _has_unsafe_access = 0; - _has_method_handle_invokes = 0; - _has_wide_vectors = 0; - _has_monitors = 0; - - _state = not_installed; - _has_flushed_dependencies = 0; - _load_reported = false; // jvmti state - - _oops_do_mark_link = nullptr; - _osr_link = nullptr; -#if INCLUDE_RTM_OPT - _rtm_state = NoRTM; -#endif -} - #ifdef ASSERT class CheckForOopsClosure : public OopClosure { bool _found_oop = false; @@ -1199,6 +1170,53 @@ nmethod* nmethod::new_nmethod(const methodHandle& method, return nm; } +// Fill in default values for various fields +void nmethod::init_defaults(CodeBuffer *code_buffer, CodeOffsets* offsets) { + // avoid uninitialized fields, even for short time periods + _exception_cache = nullptr; + _gc_data = nullptr; + _oops_do_mark_link = nullptr; + _compiled_ic_data = nullptr; + +#if INCLUDE_RTM_OPT + _rtm_state = NoRTM; +#endif + _is_unloading_state = 0; + _state = not_installed; + + _has_unsafe_access = 0; + _has_method_handle_invokes = 0; + _has_wide_vectors = 0; + _has_monitors = 0; + _has_flushed_dependencies = 0; + _is_unlinked = 0; + _load_reported = 0; // jvmti state + + _deoptimization_status = not_marked; + + // SECT_CONSTS is first in code buffer so the offset should be 0. + int consts_offset = code_buffer->total_offset_of(code_buffer->consts()); + assert(consts_offset == 0, "const_offset: %d", consts_offset); + + _entry_offset = checked_cast<uint16_t>(offsets->value(CodeOffsets::Entry)); + _verified_entry_offset = checked_cast<uint16_t>(offsets->value(CodeOffsets::Verified_Entry)); + _stub_offset = content_offset() + code_buffer->total_offset_of(code_buffer->stubs()); + + _skipped_instructions_size = checked_cast<uint16_t>(code_buffer->total_skipped_instructions_size()); +} + +// Post initialization +void nmethod::post_init() { + clear_unloading_state(); + + finalize_relocations(); + + Universe::heap()->register_nmethod(this); + debug_only(Universe::heap()->verify_nmethod(this)); + + CodeCache::commit(this); +} + // For native wrappers nmethod::nmethod( Method* method, @@ -1214,69 +1232,58 @@ nmethod::nmethod( : CodeBlob("native nmethod", CodeBlobKind::Nmethod, code_buffer, nmethod_size, sizeof(nmethod), offsets->value(CodeOffsets::Frame_Complete), frame_size, oop_maps, false), _deoptimization_generation(0), + _gc_epoch(CodeCache::gc_epoch()), _method(method), - _gc_data(nullptr), - _compiled_ic_data(nullptr), - _is_unlinked(false), _native_receiver_sp_offset(basic_lock_owner_sp_offset), - _native_basic_lock_sp_offset(basic_lock_sp_offset), - _is_unloading_state(0), - _deoptimization_status(not_marked) + _native_basic_lock_sp_offset(basic_lock_sp_offset) { { debug_only(NoSafepointVerifier nsv;) assert_locked_or_safepoint(CodeCache_lock); - init_defaults(); - _comp_level = CompLevel_none; + init_defaults(code_buffer, offsets); + + _osr_entry_point = nullptr; _entry_bci = InvocationEntryBci; - _num_stack_arg_slots = _method->constMethod()->num_stack_arg_slots(); - // We have no exception handler or deopt handler make the - // values something that will never match a pc like the nmethod vtable entry - _exception_offset = 0; + _compile_id = compile_id; + _comp_level = CompLevel_none; + _compiler_type = type; _orig_pc_offset = 0; + _num_stack_arg_slots = _method->constMethod()->num_stack_arg_slots(); + + if (offsets->value(CodeOffsets::Exceptions) != -1) { + // Continuation enter intrinsic + _exception_offset = code_offset() + offsets->value(CodeOffsets::Exceptions); + } else { + _exception_offset = 0; + } + // Native wrappers do not have deopt handlers. Make the values + // something that will never match a pc like the nmethod vtable entry _deopt_handler_offset = 0; _deopt_mh_handler_offset = 0; - _gc_epoch = CodeCache::gc_epoch(); - - _consts_offset = content_offset() + code_buffer->total_offset_of(code_buffer->consts()); - _stub_offset = content_offset() + code_buffer->total_offset_of(code_buffer->stubs()); - _oops_offset = data_offset(); - _metadata_offset = _oops_offset + align_up(code_buffer->total_oop_size(), oopSize); - _scopes_data_offset = _metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize); - _scopes_pcs_offset = _scopes_data_offset; - _dependencies_offset = _scopes_pcs_offset; - _handler_table_offset = _dependencies_offset; + _unwind_handler_offset = 0; + + _metadata_offset = checked_cast<uint16_t>(align_up(code_buffer->total_oop_size(), oopSize)); + _dependencies_offset = checked_cast<uint16_t>(_metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize)); + _scopes_pcs_offset = _dependencies_offset; + _scopes_data_offset = _scopes_pcs_offset; + _handler_table_offset = _scopes_data_offset; _nul_chk_table_offset = _handler_table_offset; - _skipped_instructions_size = code_buffer->total_skipped_instructions_size(); #if INCLUDE_JVMCI _speculations_offset = _nul_chk_table_offset; _jvmci_data_offset = _speculations_offset; - _nmethod_end_offset = _jvmci_data_offset; + DEBUG_ONLY( int data_end_offset = _jvmci_data_offset; ) #else - _nmethod_end_offset = _nul_chk_table_offset; + DEBUG_ONLY( int data_end_offset = _nul_chk_table_offset; ) #endif - _compile_id = compile_id; - _compiler_type = type; - _entry_point = code_begin() + offsets->value(CodeOffsets::Entry); - _verified_entry_point = code_begin() + offsets->value(CodeOffsets::Verified_Entry); - _osr_entry_point = nullptr; - _exception_cache = nullptr; - _pc_desc_container.reset_to(nullptr); + assert((data_offset() + data_end_offset) <= nmethod_size, "wrong nmethod's size: %d < %d", nmethod_size, (data_offset() + data_end_offset)); - _exception_offset = code_offset() + offsets->value(CodeOffsets::Exceptions); + _pc_desc_container.reset_to(nullptr); code_buffer->copy_code_and_locs_to(this); code_buffer->copy_values_to(this); - clear_unloading_state(); - - finalize_relocations(); - - Universe::heap()->register_nmethod(this); - debug_only(Universe::heap()->verify_nmethod(this)); - - CodeCache::commit(this); + post_init(); } if (PrintNativeNMethods || PrintDebugInfo || PrintRelocations || PrintDependencies) { @@ -1334,6 +1341,7 @@ void* nmethod::operator new(size_t size, int nmethod_size, bool allow_NonNMethod return CodeCache::allocate(nmethod_size, CodeBlobType::NonNMethod); } +// For normal JIT compiled code nmethod::nmethod( Method* method, CompilerType type, @@ -1360,34 +1368,27 @@ nmethod::nmethod( : CodeBlob("nmethod", CodeBlobKind::Nmethod, code_buffer, nmethod_size, sizeof(nmethod), offsets->value(CodeOffsets::Frame_Complete), frame_size, oop_maps, false), _deoptimization_generation(0), + _gc_epoch(CodeCache::gc_epoch()), _method(method), - _gc_data(nullptr), - _compiled_ic_data(nullptr), - _is_unlinked(false), - _native_receiver_sp_offset(in_ByteSize(-1)), - _native_basic_lock_sp_offset(in_ByteSize(-1)), - _is_unloading_state(0), - _deoptimization_status(not_marked) + _osr_link(nullptr) { assert(debug_info->oop_recorder() == code_buffer->oop_recorder(), "shared OR"); { debug_only(NoSafepointVerifier nsv;) assert_locked_or_safepoint(CodeCache_lock); - init_defaults(); - _entry_bci = entry_bci; - _num_stack_arg_slots = entry_bci != InvocationEntryBci ? 0 : _method->constMethod()->num_stack_arg_slots(); - _compile_id = compile_id; - _compiler_type = type; - _comp_level = comp_level; - _orig_pc_offset = orig_pc_offset; - _gc_epoch = CodeCache::gc_epoch(); + init_defaults(code_buffer, offsets); + + _osr_entry_point = code_begin() + offsets->value(CodeOffsets::OSR_Entry); + _entry_bci = entry_bci; + _compile_id = compile_id; + _comp_level = comp_level; + _compiler_type = type; + _orig_pc_offset = orig_pc_offset; + + _num_stack_arg_slots = entry_bci != InvocationEntryBci ? 0 : _method->constMethod()->num_stack_arg_slots(); - // Section offsets - _consts_offset = content_offset() + code_buffer->total_offset_of(code_buffer->consts()); - _stub_offset = content_offset() + code_buffer->total_offset_of(code_buffer->stubs()); - set_ctable_begin(header_begin() + _consts_offset); - _skipped_instructions_size = code_buffer->total_skipped_instructions_size(); + set_ctable_begin(header_begin() + content_offset()); #if INCLUDE_JVMCI if (compiler->is_jvmci()) { @@ -1427,28 +1428,23 @@ nmethod::nmethod( } else { _unwind_handler_offset = -1; } - - _oops_offset = data_offset(); - _metadata_offset = _oops_offset + align_up(code_buffer->total_oop_size(), oopSize); - _scopes_data_offset = _metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize); - - _scopes_pcs_offset = _scopes_data_offset + align_up(debug_info->data_size (), oopSize); - _dependencies_offset = _scopes_pcs_offset + adjust_pcs_size(debug_info->pcs_size()); - _handler_table_offset = _dependencies_offset + align_up((int)dependencies->size_in_bytes(), oopSize); - _nul_chk_table_offset = _handler_table_offset + align_up(handler_table->size_in_bytes(), oopSize); + _metadata_offset = checked_cast<uint16_t>(align_up(code_buffer->total_oop_size(), oopSize)); + _dependencies_offset = checked_cast<uint16_t>(_metadata_offset + align_up(code_buffer->total_metadata_size(), wordSize)); + _scopes_pcs_offset = checked_cast<uint16_t>(_dependencies_offset + align_up((int)dependencies->size_in_bytes(), oopSize)); + _scopes_data_offset = _scopes_pcs_offset + adjust_pcs_size(debug_info->pcs_size()); + _handler_table_offset = _scopes_data_offset + align_up(debug_info->data_size (), oopSize); + _nul_chk_table_offset = _handler_table_offset + align_up(handler_table->size_in_bytes(), oopSize); #if INCLUDE_JVMCI - _speculations_offset = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize); - _jvmci_data_offset = _speculations_offset + align_up(speculations_len, oopSize); - int jvmci_data_size = compiler->is_jvmci() ? jvmci_data->size() : 0; - _nmethod_end_offset = _jvmci_data_offset + align_up(jvmci_data_size, oopSize); + _speculations_offset = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize); + _jvmci_data_offset = _speculations_offset + align_up(speculations_len, oopSize); + int jvmci_data_size = compiler->is_jvmci() ? jvmci_data->size() : 0; + DEBUG_ONLY( int data_end_offset = _jvmci_data_offset + align_up(jvmci_data_size, oopSize); ) #else - _nmethod_end_offset = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize); + DEBUG_ONLY( int data_end_offset = _nul_chk_table_offset + align_up(nul_chk_table->size_in_bytes(), oopSize); ) #endif - _entry_point = code_begin() + offsets->value(CodeOffsets::Entry); - _verified_entry_point = code_begin() + offsets->value(CodeOffsets::Verified_Entry); - _osr_entry_point = code_begin() + offsets->value(CodeOffsets::OSR_Entry); - _exception_cache = nullptr; + assert((data_offset() + data_end_offset) <= nmethod_size, "wrong nmethod's size: %d < %d", nmethod_size, (data_offset() + data_end_offset)); + // after _scopes_pcs_offset is set _pc_desc_container.reset_to(scopes_pcs_begin()); code_buffer->copy_code_and_locs_to(this); @@ -1456,7 +1452,6 @@ nmethod::nmethod( code_buffer->copy_values_to(this); debug_info->copy_to(this); dependencies->copy_to(this); - clear_unloading_state(); #if INCLUDE_JVMCI if (compiler->is_jvmci()) { @@ -1465,13 +1460,6 @@ nmethod::nmethod( } #endif - finalize_relocations(); - - Universe::heap()->register_nmethod(this); - debug_only(Universe::heap()->verify_nmethod(this)); - - CodeCache::commit(this); - // Copy contents of ExceptionHandlerTable to nmethod handler_table->copy_to(this); nul_chk_table->copy_to(this); @@ -1483,10 +1471,12 @@ nmethod::nmethod( } #endif + post_init(); + // we use the information of entry points to find out if a method is // static or non static assert(compiler->is_c2() || compiler->is_jvmci() || - _method->is_static() == (entry_point() == _verified_entry_point), + _method->is_static() == (entry_point() == verified_entry_point()), " entry points must be same for static methods and vice versa"); } } @@ -1999,7 +1989,7 @@ bool nmethod::make_not_entrant() { // For concurrent GCs, there must be a handshake between unlink and flush void nmethod::unlink() { - if (_is_unlinked) { + if (is_unlinked()) { // Already unlinked. return; } @@ -2033,8 +2023,7 @@ void nmethod::unlink() { ClassUnloadingContext::context()->register_unlinked_nmethod(this); } -void nmethod::purge(bool free_code_cache_data, bool unregister_nmethod) { - assert(!free_code_cache_data, "must only call not freeing code cache data"); +void nmethod::purge(bool unregister_nmethod) { MutexLocker ml(CodeCache_lock, Mutex::_no_safepoint_check_flag); @@ -2062,7 +2051,7 @@ void nmethod::purge(bool free_code_cache_data, bool unregister_nmethod) { } CodeCache::unregister_old_nmethod(this); - CodeBlob::purge(free_code_cache_data, unregister_nmethod); + CodeBlob::purge(); } oop nmethod::oop_at(int index) const { diff --git a/src/hotspot/share/code/nmethod.hpp b/src/hotspot/share/code/nmethod.hpp index 9fd87020309bf..b22edaec5ace9 100644 --- a/src/hotspot/share/code/nmethod.hpp +++ b/src/hotspot/share/code/nmethod.hpp @@ -188,8 +188,23 @@ class nmethod : public CodeBlob { Method* _method; - // To support simple linked-list chaining of nmethods: - nmethod* _osr_link; // from InstanceKlass::osr_nmethods_head + // To reduce header size union fields which usages do not overlap. + union { + // To support simple linked-list chaining of nmethods: + nmethod* _osr_link; // from InstanceKlass::osr_nmethods_head + struct { + // These are used for compiled synchronized native methods to + // locate the owner and stack slot for the BasicLock. They are + // needed because there is no debug information for compiled native + // wrappers and the oop maps are insufficient to allow + // frame::retrieve_receiver() to work. Currently they are expected + // to be byte offsets from the Java stack pointer for maximum code + // sharing between platforms. JVMTI's GetLocalInstance() uses these + // offsets to find the receiver for non-static native wrapper frames. + ByteSize _native_receiver_sp_offset; + ByteSize _native_basic_lock_sp_offset; + }; + }; PcDescContainer _pc_desc_container; ExceptionCache* volatile _exception_cache; @@ -200,18 +215,20 @@ class nmethod : public CodeBlob { static nmethod* volatile _oops_do_mark_nmethods; oops_do_mark_link* volatile _oops_do_mark_link; + CompiledICData* _compiled_ic_data; + // offsets for entry points - address _entry_point; // entry point with class check - address _verified_entry_point; // entry point without class check - address _osr_entry_point; // entry point for on stack replacement + address _osr_entry_point; // entry point for on stack replacement + uint16_t _entry_offset; // entry point with class check + uint16_t _verified_entry_offset; // entry point without class check + int _entry_bci; // != InvocationEntryBci if this nmethod is an on-stack replacement method - CompiledICData* _compiled_ic_data; + // _consts_offset == _content_offset because SECT_CONSTS is first in code buffer - // Shared fields for all nmethod's - int _entry_bci; // != InvocationEntryBci if this nmethod is an on-stack replacement method + int _stub_offset; - // Offsets for different nmethod parts - int _exception_offset; + // Offsets for different stubs section parts + int _exception_offset; // All deoptee's will resume execution at this location described by // this offset. int _deopt_handler_offset; @@ -221,33 +238,29 @@ class nmethod : public CodeBlob { // Offset of the unwind handler if it exists int _unwind_handler_offset; - int _consts_offset; - int _stub_offset; - int _oops_offset; // offset to where embedded oop table begins (inside data) - int _metadata_offset; // embedded meta data table - int _scopes_data_offset; - int _scopes_pcs_offset; - int _dependencies_offset; - int _handler_table_offset; - int _nul_chk_table_offset; + uint16_t _skipped_instructions_size; + + // _oops_offset == _data_offset, offset where embedded oop table begins (inside data) + uint16_t _metadata_offset; // embedded meta data table + uint16_t _dependencies_offset; + uint16_t _scopes_pcs_offset; + int _scopes_data_offset; + int _handler_table_offset; + int _nul_chk_table_offset; #if INCLUDE_JVMCI - int _speculations_offset; - int _jvmci_data_offset; + int _speculations_offset; + int _jvmci_data_offset; #endif - int _nmethod_end_offset; - int _skipped_instructions_size; // location in frame (offset for sp) that deopt can store the original // pc during a deopt. int _orig_pc_offset; - int _compile_id; // which compilation made this nmethod - - int _num_stack_arg_slots; // Number of arguments passed on the stack - - CompilerType _compiler_type; // which compiler made this nmethod (u1) + int _compile_id; // which compilation made this nmethod + CompLevel _comp_level; // compilation level (s1) + CompilerType _compiler_type; // which compiler made this nmethod (u1) - bool _is_unlinked; + uint16_t _num_stack_arg_slots; // Number of arguments passed on the stack #if INCLUDE_RTM_OPT // RTM state at compile time. Used during deoptimization to decide @@ -255,25 +268,9 @@ class nmethod : public CodeBlob { RTMState _rtm_state; #endif - // These are used for compiled synchronized native methods to - // locate the owner and stack slot for the BasicLock. They are - // needed because there is no debug information for compiled native - // wrappers and the oop maps are insufficient to allow - // frame::retrieve_receiver() to work. Currently they are expected - // to be byte offsets from the Java stack pointer for maximum code - // sharing between platforms. JVMTI's GetLocalInstance() uses these - // offsets to find the receiver for non-static native wrapper frames. - ByteSize _native_receiver_sp_offset; - ByteSize _native_basic_lock_sp_offset; - - CompLevel _comp_level; // compilation level (s1) - // Local state used to keep track of whether unloading is happening or not volatile uint8_t _is_unloading_state; - // used by jvmti to track if an event has been posted for this nmethod. - bool _load_reported; - // Protected by NMethodState_lock volatile signed char _state; // {not_installed, in_use, not_entrant} @@ -282,7 +279,9 @@ class nmethod : public CodeBlob { _has_method_handle_invokes:1,// Has this method MethodHandle invokes? _has_wide_vectors:1, // Preserve wide vectors at safepoints _has_monitors:1, // Fastpath monitor detection for continuations - _has_flushed_dependencies:1; // Used for maintenance of dependencies (under CodeCache_lock) + _has_flushed_dependencies:1, // Used for maintenance of dependencies (under CodeCache_lock) + _is_unlinked:1, // mark during class unloading + _load_reported:1; // used by jvmti to track if an event has been posted for this nmethod enum DeoptimizationStatus : u1 { not_marked, @@ -297,6 +296,12 @@ class nmethod : public CodeBlob { return Atomic::load(&_deoptimization_status); } + // Initialize fields to their default values + void init_defaults(CodeBuffer *code_buffer, CodeOffsets* offsets); + + // Post initialization + void post_init(); + // For native wrappers nmethod(Method* method, CompilerType type, @@ -309,7 +314,7 @@ class nmethod : public CodeBlob { ByteSize basic_lock_sp_offset, /* synchronized natives only */ OopMapSet* oop_maps); - // Creation support + // For normal JIT compiled code nmethod(Method* method, CompilerType type, int nmethod_size, @@ -353,9 +358,6 @@ class nmethod : public CodeBlob { // Inform external interfaces that a compiled method has been unloaded void post_compiled_method_unload(); - // Initialize fields to their default values - void init_defaults(); - PcDesc* find_pc_desc(address pc, bool approximate) { return _pc_desc_container.find_pc_desc(pc, approximate, PcDescSearch(code_begin(), scopes_pcs_begin(), scopes_pcs_end())); } @@ -523,40 +525,41 @@ class nmethod : public CodeBlob { const char* compiler_name () const; // boundaries for different parts - address consts_begin () const { return header_begin() + _consts_offset ; } - address consts_end () const { return header_begin() + code_offset() ; } - address insts_begin () const { return header_begin() + code_offset() ; } + address consts_begin () const { return content_begin(); } + address consts_end () const { return code_begin() ; } + address insts_begin () const { return code_begin() ; } address insts_end () const { return header_begin() + _stub_offset ; } address stub_begin () const { return header_begin() + _stub_offset ; } - address stub_end () const { return header_begin() + _oops_offset ; } + address stub_end () const { return data_begin() ; } address exception_begin () const { return header_begin() + _exception_offset ; } address deopt_handler_begin () const { return header_begin() + _deopt_handler_offset ; } address deopt_mh_handler_begin() const { return header_begin() + _deopt_mh_handler_offset ; } address unwind_handler_begin () const { return _unwind_handler_offset != -1 ? (header_begin() + _unwind_handler_offset) : nullptr; } - oop* oops_begin () const { return (oop*) (header_begin() + _oops_offset) ; } - oop* oops_end () const { return (oop*) (header_begin() + _metadata_offset) ; } - - Metadata** metadata_begin () const { return (Metadata**) (header_begin() + _metadata_offset) ; } - Metadata** metadata_end () const { return (Metadata**) (header_begin() + _scopes_data_offset) ; } - - address scopes_data_begin () const { return header_begin() + _scopes_data_offset ; } - address scopes_data_end () const { return header_begin() + _scopes_pcs_offset ; } - PcDesc* scopes_pcs_begin () const { return (PcDesc*)(header_begin() + _scopes_pcs_offset) ; } - PcDesc* scopes_pcs_end () const { return (PcDesc*)(header_begin() + _dependencies_offset) ; } - address dependencies_begin () const { return header_begin() + _dependencies_offset ; } - address dependencies_end () const { return header_begin() + _handler_table_offset ; } - address handler_table_begin () const { return header_begin() + _handler_table_offset ; } - address handler_table_end () const { return header_begin() + _nul_chk_table_offset ; } - address nul_chk_table_begin () const { return header_begin() + _nul_chk_table_offset ; } + + oop* oops_begin () const { return (oop*) data_begin(); } + oop* oops_end () const { return (oop*) (data_begin() + _metadata_offset) ; } + + Metadata** metadata_begin () const { return (Metadata**) (data_begin() + _metadata_offset) ; } + Metadata** metadata_end () const { return (Metadata**) (data_begin() + _dependencies_offset) ; } + + address dependencies_begin () const { return data_begin() + _dependencies_offset ; } + address dependencies_end () const { return data_begin() + _scopes_pcs_offset ; } + PcDesc* scopes_pcs_begin () const { return (PcDesc*)(data_begin() + _scopes_pcs_offset) ; } + PcDesc* scopes_pcs_end () const { return (PcDesc*)(data_begin() + _scopes_data_offset) ; } + address scopes_data_begin () const { return data_begin() + _scopes_data_offset ; } + address scopes_data_end () const { return data_begin() + _handler_table_offset ; } + address handler_table_begin () const { return data_begin() + _handler_table_offset ; } + address handler_table_end () const { return data_begin() + _nul_chk_table_offset ; } + address nul_chk_table_begin () const { return data_begin() + _nul_chk_table_offset ; } #if INCLUDE_JVMCI - address nul_chk_table_end () const { return header_begin() + _speculations_offset ; } - address speculations_begin () const { return header_begin() + _speculations_offset ; } - address speculations_end () const { return header_begin() + _jvmci_data_offset ; } - address jvmci_data_begin () const { return header_begin() + _jvmci_data_offset ; } - address jvmci_data_end () const { return header_begin() + _nmethod_end_offset ; } + address nul_chk_table_end () const { return data_begin() + _speculations_offset ; } + address speculations_begin () const { return data_begin() + _speculations_offset ; } + address speculations_end () const { return data_begin() + _jvmci_data_offset ; } + address jvmci_data_begin () const { return data_begin() + _jvmci_data_offset ; } + address jvmci_data_end () const { return data_end(); } #else - address nul_chk_table_end () const { return header_begin() + _nmethod_end_offset ; } + address nul_chk_table_end () const { return data_end(); } #endif // Sizes @@ -596,8 +599,8 @@ class nmethod : public CodeBlob { bool nul_chk_table_contains (address addr) const { return nul_chk_table_begin() <= addr && addr < nul_chk_table_end(); } // entry points - address entry_point() const { return _entry_point; } // normal entry point - address verified_entry_point() const { return _verified_entry_point; } // if klass is correct + address entry_point() const { return code_begin() + _entry_offset; } // normal entry point + address verified_entry_point() const { return code_begin() + _verified_entry_offset; } // if klass is correct enum : signed char { not_installed = -1, // in construction, only the owner doing the construction is // allowed to advance state @@ -617,9 +620,6 @@ class nmethod : public CodeBlob { bool is_unloading(); void do_unloading(bool unloading_occurred); - bool is_unlinked() const { return _is_unlinked; } - void set_is_unlinked() { assert(!_is_unlinked, "already unlinked"); _is_unlinked = true; } - #if INCLUDE_RTM_OPT // rtm state accessing and manipulating RTMState rtm_state() const { return _rtm_state; } @@ -679,6 +679,12 @@ class nmethod : public CodeBlob { _has_flushed_dependencies = z; } + bool is_unlinked() const { return _is_unlinked; } + void set_is_unlinked() { + assert(!_is_unlinked, "already unlinked"); + _is_unlinked = true; + } + int comp_level() const { return _comp_level; } // Support for oops in scopes and relocs: @@ -723,7 +729,6 @@ class nmethod : public CodeBlob { // Note: _exception_cache may be read and cleaned concurrently. ExceptionCache* exception_cache() const { return _exception_cache; } ExceptionCache* exception_cache_acquire() const; - void set_exception_cache(ExceptionCache *ec) { _exception_cache = ec; } public: address handler_for_exception_and_pc(Handle exception, address pc); @@ -752,7 +757,7 @@ class nmethod : public CodeBlob { return (addr >= code_begin() && addr < verified_entry_point()); } - void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f) override; + void preserve_callee_argument_oops(frame fr, const RegisterMap *reg_map, OopClosure* f); // implicit exceptions support address continuation_for_implicit_div0_exception(address pc) { return continuation_for_implicit_exception(pc, true); } @@ -788,11 +793,11 @@ class nmethod : public CodeBlob { void unlink_from_method(); // On-stack replacement support - int osr_entry_bci() const { assert(is_osr_method(), "wrong kind of nmethod"); return _entry_bci; } - address osr_entry() const { assert(is_osr_method(), "wrong kind of nmethod"); return _osr_entry_point; } - void invalidate_osr_method(); - nmethod* osr_link() const { return _osr_link; } - void set_osr_link(nmethod *n) { _osr_link = n; } + int osr_entry_bci() const { assert(is_osr_method(), "wrong kind of nmethod"); return _entry_bci; } + address osr_entry() const { assert(is_osr_method(), "wrong kind of nmethod"); return _osr_entry_point; } + nmethod* osr_link() const { return _osr_link; } + void set_osr_link(nmethod *n) { _osr_link = n; } + void invalidate_osr_method(); int num_stack_arg_slots(bool rounded = true) const { return rounded ? align_up(_num_stack_arg_slots, 2) : _num_stack_arg_slots; @@ -805,7 +810,7 @@ class nmethod : public CodeBlob { void unlink(); // Deallocate this nmethod - called by the GC - void purge(bool free_code_cache_data, bool unregister_nmethod) override; + void purge(bool unregister_nmethod); // See comment at definition of _last_seen_on_stack void mark_as_maybe_on_stack(); @@ -970,16 +975,17 @@ class nmethod : public CodeBlob { // JVMTI's GetLocalInstance() support ByteSize native_receiver_sp_offset() { + assert(is_native_method(), "sanity"); return _native_receiver_sp_offset; } ByteSize native_basic_lock_sp_offset() { + assert(is_native_method(), "sanity"); return _native_basic_lock_sp_offset; } // support for code generation - static ByteSize verified_entry_point_offset() { return byte_offset_of(nmethod, _verified_entry_point); } - static ByteSize osr_entry_point_offset() { return byte_offset_of(nmethod, _osr_entry_point); } - static ByteSize state_offset() { return byte_offset_of(nmethod, _state); } + static ByteSize osr_entry_point_offset() { return byte_offset_of(nmethod, _osr_entry_point); } + static ByteSize state_offset() { return byte_offset_of(nmethod, _state); } void metadata_do(MetadataClosure* f); diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp index a41718d583127..61d5f9bd576c8 100644 --- a/src/hotspot/share/compiler/compileBroker.cpp +++ b/src/hotspot/share/compiler/compileBroker.cpp @@ -1793,7 +1793,7 @@ bool CompileBroker::init_compiler_runtime() { void CompileBroker::free_buffer_blob_if_allocated(CompilerThread* thread) { BufferBlob* blob = thread->get_buffer_blob(); if (blob != nullptr) { - blob->purge(true /* free_code_cache_data */, true /* unregister_nmethod */); + blob->purge(); MutexLocker mu(CodeCache_lock, Mutex::_no_safepoint_check_flag); CodeCache::free(blob); } diff --git a/src/hotspot/share/compiler/compilerDefinitions.hpp b/src/hotspot/share/compiler/compilerDefinitions.hpp index 6321e3e0738f8..9b69501a5986d 100644 --- a/src/hotspot/share/compiler/compilerDefinitions.hpp +++ b/src/hotspot/share/compiler/compilerDefinitions.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, 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 @@ -100,7 +100,7 @@ inline bool is_compile(int comp_level) { // States of Restricted Transactional Memory usage. -enum RTMState { +enum RTMState: u1 { NoRTM = 0x2, // Don't use RTM UseRTM = 0x1, // Use RTM ProfileRTM = 0x0 // Use RTM with abort ratio calculation diff --git a/src/hotspot/share/gc/shared/classUnloadingContext.cpp b/src/hotspot/share/gc/shared/classUnloadingContext.cpp index bd5fb2ff3d72f..fdf84d69b6a86 100644 --- a/src/hotspot/share/gc/shared/classUnloadingContext.cpp +++ b/src/hotspot/share/gc/shared/classUnloadingContext.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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 @@ -116,7 +116,7 @@ void ClassUnloadingContext::purge_nmethods() { NMethodSet* set = _unlinked_nmethods[i]; for (nmethod* nm : *set) { freed_memory += nm->size(); - nm->purge(false /* free_code_cache_data */, _unregister_nmethods_during_purge); + nm->purge(_unregister_nmethods_during_purge); } } diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index 2a67a6791b419..a57d1f7e6736f 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -294,7 +294,7 @@ nonstatic_field(MethodData, _backedge_mask, int) \ nonstatic_field(MethodData, _jvmci_ir_size, int) \ \ - nonstatic_field(nmethod, _verified_entry_point, address) \ + nonstatic_field(nmethod, _verified_entry_offset, u2) \ nonstatic_field(nmethod, _comp_level, CompLevel) \ \ nonstatic_field(ObjArrayKlass, _element_klass, Klass*) \ diff --git a/src/hotspot/share/memory/heap.hpp b/src/hotspot/share/memory/heap.hpp index 27ae8ec0c78e7..a7b9b95050da2 100644 --- a/src/hotspot/share/memory/heap.hpp +++ b/src/hotspot/share/memory/heap.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,8 +38,8 @@ class HeapBlock { public: struct Header { - size_t _length; // the length in segments - bool _used; // Used bit + uint32_t _length; // the length in segments + bool _used; // Used bit }; protected: @@ -51,9 +51,11 @@ class HeapBlock { public: // Initialization - void initialize(size_t length) { _header._length = length; set_used(); } + void initialize(size_t length) { set_length(length); set_used(); } // Merging/splitting - void set_length(size_t length) { _header._length = length; } + void set_length(size_t length) { + _header._length = checked_cast<uint32_t>(length); + } // Accessors void* allocated_space() const { return (void*)(this + 1); } diff --git a/src/hotspot/share/runtime/frame.cpp b/src/hotspot/share/runtime/frame.cpp index c0c6431418cc0..275f095af37dd 100644 --- a/src/hotspot/share/runtime/frame.cpp +++ b/src/hotspot/share/runtime/frame.cpp @@ -975,8 +975,9 @@ void frame::oops_nmethod_do(OopClosure* f, NMethodClosure* cf, DerivedOopClosure // Preserve potential arguments for a callee. We handle this by dispatching // on the codeblob. For c2i, we do - if (reg_map->include_argument_oops()) { - _cb->preserve_callee_argument_oops(*this, reg_map, f); + if (reg_map->include_argument_oops() && _cb->is_nmethod()) { + // Only nmethod preserves outgoing arguments at call. + _cb->as_nmethod()->preserve_callee_argument_oops(*this, reg_map, f); } } // In cases where perm gen is collected, GC will want to mark diff --git a/src/hotspot/share/runtime/vmStructs.cpp b/src/hotspot/share/runtime/vmStructs.cpp index 3935a9dcca881..8d86fb6ceb4bf 100644 --- a/src/hotspot/share/runtime/vmStructs.cpp +++ b/src/hotspot/share/runtime/vmStructs.cpp @@ -507,7 +507,7 @@ nonstatic_field(CodeHeap, _segmap, VirtualSpace) \ nonstatic_field(CodeHeap, _log2_segment_size, int) \ nonstatic_field(HeapBlock, _header, HeapBlock::Header) \ - nonstatic_field(HeapBlock::Header, _length, size_t) \ + nonstatic_field(HeapBlock::Header, _length, uint32_t) \ nonstatic_field(HeapBlock::Header, _used, bool) \ \ /**********************************/ \ @@ -550,11 +550,11 @@ \ nonstatic_field(CodeBlob, _name, const char*) \ nonstatic_field(CodeBlob, _size, int) \ - nonstatic_field(CodeBlob, _header_size, int) \ + nonstatic_field(CodeBlob, _header_size, u2) \ nonstatic_field(CodeBlob, _relocation_size, int) \ nonstatic_field(CodeBlob, _content_offset, int) \ nonstatic_field(CodeBlob, _code_offset, int) \ - nonstatic_field(CodeBlob, _frame_complete_offset, int) \ + nonstatic_field(CodeBlob, _frame_complete_offset, int16_t) \ nonstatic_field(CodeBlob, _data_offset, int) \ nonstatic_field(CodeBlob, _frame_size, int) \ nonstatic_field(CodeBlob, _oop_maps, ImmutableOopMapSet*) \ @@ -575,17 +575,14 @@ nonstatic_field(nmethod, _deopt_mh_handler_offset, int) \ nonstatic_field(nmethod, _orig_pc_offset, int) \ nonstatic_field(nmethod, _stub_offset, int) \ - nonstatic_field(nmethod, _consts_offset, int) \ - nonstatic_field(nmethod, _oops_offset, int) \ - nonstatic_field(nmethod, _metadata_offset, int) \ + nonstatic_field(nmethod, _metadata_offset, u2) \ + nonstatic_field(nmethod, _scopes_pcs_offset, u2) \ nonstatic_field(nmethod, _scopes_data_offset, int) \ - nonstatic_field(nmethod, _scopes_pcs_offset, int) \ - nonstatic_field(nmethod, _dependencies_offset, int) \ + nonstatic_field(nmethod, _dependencies_offset, u2) \ nonstatic_field(nmethod, _handler_table_offset, int) \ nonstatic_field(nmethod, _nul_chk_table_offset, int) \ - nonstatic_field(nmethod, _nmethod_end_offset, int) \ - nonstatic_field(nmethod, _entry_point, address) \ - nonstatic_field(nmethod, _verified_entry_point, address) \ + nonstatic_field(nmethod, _entry_offset, u2) \ + nonstatic_field(nmethod, _verified_entry_offset, u2) \ nonstatic_field(nmethod, _osr_entry_point, address) \ nonstatic_field(nmethod, _compile_id, int) \ nonstatic_field(nmethod, _comp_level, CompLevel) \ @@ -1131,6 +1128,7 @@ declare_integer_type(ssize_t) \ declare_integer_type(intx) \ declare_integer_type(intptr_t) \ + declare_integer_type(int16_t) \ declare_integer_type(int64_t) \ declare_unsigned_integer_type(uintx) \ declare_unsigned_integer_type(uintptr_t) \ diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/CodeBlob.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/CodeBlob.java index f546a8cea53dd..81a075ad50c4c 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/CodeBlob.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/CodeBlob.java @@ -25,10 +25,12 @@ import sun.jvm.hotspot.compiler.ImmutableOopMap; import sun.jvm.hotspot.compiler.ImmutableOopMapSet; import sun.jvm.hotspot.debugger.Address; +import sun.jvm.hotspot.oops.CIntField; import sun.jvm.hotspot.runtime.VM; import sun.jvm.hotspot.runtime.VMObject; import sun.jvm.hotspot.types.AddressField; import sun.jvm.hotspot.types.CIntegerField; +import sun.jvm.hotspot.types.JShortField; import sun.jvm.hotspot.types.Type; import sun.jvm.hotspot.types.TypeDataBase; import sun.jvm.hotspot.utilities.Assert; @@ -41,11 +43,11 @@ public class CodeBlob extends VMObject { private static AddressField nameField; private static CIntegerField sizeField; - private static CIntegerField headerSizeField; private static CIntegerField relocationSizeField; + private static CIntField headerSizeField; private static CIntegerField contentOffsetField; private static CIntegerField codeOffsetField; - private static CIntegerField frameCompleteOffsetField; + private static CIntField frameCompleteOffsetField; private static CIntegerField dataOffsetField; private static CIntegerField frameSizeField; private static AddressField oopMapsField; @@ -61,11 +63,11 @@ private static void initialize(TypeDataBase db) { nameField = type.getAddressField("_name"); sizeField = type.getCIntegerField("_size"); - headerSizeField = type.getCIntegerField("_header_size"); relocationSizeField = type.getCIntegerField("_relocation_size"); + headerSizeField = new CIntField(type.getCIntegerField("_header_size"), 0); contentOffsetField = type.getCIntegerField("_content_offset"); codeOffsetField = type.getCIntegerField("_code_offset"); - frameCompleteOffsetField = type.getCIntegerField("_frame_complete_offset"); + frameCompleteOffsetField = new CIntField(type.getCIntegerField("_frame_complete_offset"), 0); dataOffsetField = type.getCIntegerField("_data_offset"); frameSizeField = type.getCIntegerField("_frame_size"); oopMapsField = type.getAddressField("_oop_maps"); @@ -103,7 +105,7 @@ public void update(Observable o, Object data) { // Offsets public int getContentOffset() { return (int) contentOffsetField.getValue(addr); } - public int getCodeOffset() { return (int) codeOffsetField .getValue(addr); } + public int getCodeOffset() { return (int) codeOffsetField.getValue(addr); } public long getFrameCompleteOffset() { return frameCompleteOffsetField.getValue(addr); } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java index c1f16c7957e47..edcf85ce0c78f 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/code/NMethod.java @@ -49,26 +49,24 @@ public class NMethod extends CodeBlob { private static CIntegerField deoptMhHandlerOffsetField; private static CIntegerField origPCOffsetField; private static CIntegerField stubOffsetField; - private static CIntegerField oopsOffsetField; - private static CIntegerField metadataOffsetField; + private static CIntField metadataOffsetField; + private static CIntField dependenciesOffsetField; + private static CIntField scopesPCsOffsetField; private static CIntegerField scopesDataOffsetField; - private static CIntegerField scopesPCsOffsetField; - private static CIntegerField dependenciesOffsetField; private static CIntegerField handlerTableOffsetField; private static CIntegerField nulChkTableOffsetField; - private static CIntegerField nmethodEndOffsetField; /** Offsets for entry points */ /** Entry point with class check */ - private static AddressField entryPointField; + private static CIntField entryOffsetField; /** Entry point without class check */ - private static AddressField verifiedEntryPointField; + private static CIntField verifiedEntryOffsetField; /** Entry point for on stack replacement */ private static AddressField osrEntryPointField; // FIXME: add access to flags (how?) - private static CIntegerField compLevelField; + private static CIntField compLevelField; static { VM.registerVMInitializedObserver(new Observer() { @@ -90,18 +88,16 @@ private static void initialize(TypeDataBase db) { deoptMhHandlerOffsetField = type.getCIntegerField("_deopt_mh_handler_offset"); origPCOffsetField = type.getCIntegerField("_orig_pc_offset"); stubOffsetField = type.getCIntegerField("_stub_offset"); - oopsOffsetField = type.getCIntegerField("_oops_offset"); - metadataOffsetField = type.getCIntegerField("_metadata_offset"); + metadataOffsetField = new CIntField(type.getCIntegerField("_metadata_offset"), 0); + dependenciesOffsetField = new CIntField(type.getCIntegerField("_dependencies_offset"), 0); + scopesPCsOffsetField = new CIntField(type.getCIntegerField("_scopes_pcs_offset"), 0); scopesDataOffsetField = type.getCIntegerField("_scopes_data_offset"); - scopesPCsOffsetField = type.getCIntegerField("_scopes_pcs_offset"); - dependenciesOffsetField = type.getCIntegerField("_dependencies_offset"); handlerTableOffsetField = type.getCIntegerField("_handler_table_offset"); nulChkTableOffsetField = type.getCIntegerField("_nul_chk_table_offset"); - nmethodEndOffsetField = type.getCIntegerField("_nmethod_end_offset"); - entryPointField = type.getAddressField("_entry_point"); - verifiedEntryPointField = type.getAddressField("_verified_entry_point"); + entryOffsetField = new CIntField(type.getCIntegerField("_entry_offset"), 0); + verifiedEntryOffsetField = new CIntField(type.getCIntegerField("_verified_entry_offset"), 0); osrEntryPointField = type.getAddressField("_osr_entry_point"); - compLevelField = type.getCIntegerField("_comp_level"); + compLevelField = new CIntField(type.getCIntegerField("_comp_level"), 0); pcDescSize = db.lookupType("PcDesc").getSize(); } @@ -126,28 +122,28 @@ public Method getMethod() { /** Boundaries for different parts */ public Address constantsBegin() { return contentBegin(); } - public Address constantsEnd() { return getEntryPoint(); } + public Address constantsEnd() { return codeBegin(); } public Address instsBegin() { return codeBegin(); } public Address instsEnd() { return headerBegin().addOffsetTo(getStubOffset()); } public Address exceptionBegin() { return headerBegin().addOffsetTo(getExceptionOffset()); } public Address deoptHandlerBegin() { return headerBegin().addOffsetTo(getDeoptHandlerOffset()); } public Address deoptMhHandlerBegin() { return headerBegin().addOffsetTo(getDeoptMhHandlerOffset()); } public Address stubBegin() { return headerBegin().addOffsetTo(getStubOffset()); } - public Address stubEnd() { return headerBegin().addOffsetTo(getOopsOffset()); } - public Address oopsBegin() { return headerBegin().addOffsetTo(getOopsOffset()); } - public Address oopsEnd() { return headerBegin().addOffsetTo(getMetadataOffset()); } - public Address metadataBegin() { return headerBegin().addOffsetTo(getMetadataOffset()); } - public Address metadataEnd() { return headerBegin().addOffsetTo(getScopesDataOffset()); } - public Address scopesDataBegin() { return headerBegin().addOffsetTo(getScopesDataOffset()); } - public Address scopesDataEnd() { return headerBegin().addOffsetTo(getScopesPCsOffset()); } - public Address scopesPCsBegin() { return headerBegin().addOffsetTo(getScopesPCsOffset()); } - public Address scopesPCsEnd() { return headerBegin().addOffsetTo(getDependenciesOffset()); } - public Address dependenciesBegin() { return headerBegin().addOffsetTo(getDependenciesOffset()); } - public Address dependenciesEnd() { return headerBegin().addOffsetTo(getHandlerTableOffset()); } - public Address handlerTableBegin() { return headerBegin().addOffsetTo(getHandlerTableOffset()); } - public Address handlerTableEnd() { return headerBegin().addOffsetTo(getNulChkTableOffset()); } - public Address nulChkTableBegin() { return headerBegin().addOffsetTo(getNulChkTableOffset()); } - public Address nulChkTableEnd() { return headerBegin().addOffsetTo(getNMethodEndOffset()); } + public Address stubEnd() { return dataBegin(); } + public Address oopsBegin() { return dataBegin(); } + public Address oopsEnd() { return dataBegin().addOffsetTo(getMetadataOffset()); } + public Address metadataBegin() { return dataBegin().addOffsetTo(getMetadataOffset()); } + public Address metadataEnd() { return dataBegin().addOffsetTo(getDependenciesOffset()); } + public Address dependenciesBegin() { return dataBegin().addOffsetTo(getDependenciesOffset()); } + public Address dependenciesEnd() { return dataBegin().addOffsetTo(getScopesDataOffset()); } + public Address scopesDataBegin() { return dataBegin().addOffsetTo(getScopesDataOffset()); } + public Address scopesDataEnd() { return dataBegin().addOffsetTo(getScopesPCsOffset()); } + public Address scopesPCsBegin() { return dataBegin().addOffsetTo(getScopesPCsOffset()); } + public Address scopesPCsEnd() { return dataBegin().addOffsetTo(getHandlerTableOffset()); } + public Address handlerTableBegin() { return dataBegin().addOffsetTo(getHandlerTableOffset()); } + public Address handlerTableEnd() { return dataBegin().addOffsetTo(getNulChkTableOffset()); } + public Address nulChkTableBegin() { return dataBegin().addOffsetTo(getNulChkTableOffset()); } + public Address nulChkTableEnd() { return dataEnd(); } public int constantsSize() { return (int) constantsEnd() .minus(constantsBegin()); } public int instsSize() { return (int) instsEnd() .minus(instsBegin()); } @@ -187,8 +183,8 @@ public int totalSize() { public int getMetadataLength() { return (int) (metadataSize() / VM.getVM().getOopSize()); } /** Entry points */ - public Address getEntryPoint() { return entryPointField.getValue(addr); } - public Address getVerifiedEntryPoint() { return verifiedEntryPointField.getValue(addr); } + public Address getEntryPoint() { return codeBegin().addOffsetTo(getEntryPointOffset()); } + public Address getVerifiedEntryPoint() { return codeBegin().addOffsetTo(getVerifiedEntryPointOffset()); } /** Support for oops in scopes and relocs. Note: index 0 is reserved for null. */ public OopHandle getOopAt(int index) { @@ -432,11 +428,11 @@ public Map<sun.jvm.hotspot.debugger.Address, PCDesc> getSafepoints() { // FIXME: add isPatchableAt() /** Support for code generation. Only here for proof-of-concept. */ - public static int getEntryPointOffset() { return (int) entryPointField.getOffset(); } - public static int getVerifiedEntryPointOffset() { return (int) verifiedEntryPointField.getOffset(); } - public static int getOSREntryPointOffset() { return (int) osrEntryPointField.getOffset(); } - public static int getEntryBCIOffset() { return (int) entryBCIField.getOffset(); } - public static int getMethodOffset() { return (int) methodField.getOffset(); } + public int getEntryPointOffset() { return (int) entryOffsetField.getValue(addr); } + public int getVerifiedEntryPointOffset() { return (int) verifiedEntryOffsetField.getValue(addr);} + public static int getOSREntryPointOffset() { return (int) osrEntryPointField.getOffset(); } + public static int getEntryBCIOffset() { return (int) entryBCIField.getOffset(); } + public static int getMethodOffset() { return (int) methodField.getOffset(); } public void print() { printOn(System.out); @@ -517,13 +513,11 @@ public void dumpReplayData(PrintStream out) { private int getDeoptHandlerOffset() { return (int) deoptHandlerOffsetField .getValue(addr); } private int getDeoptMhHandlerOffset() { return (int) deoptMhHandlerOffsetField.getValue(addr); } private int getStubOffset() { return (int) stubOffsetField .getValue(addr); } - private int getOopsOffset() { return (int) oopsOffsetField .getValue(addr); } private int getMetadataOffset() { return (int) metadataOffsetField .getValue(addr); } private int getScopesDataOffset() { return (int) scopesDataOffsetField .getValue(addr); } private int getScopesPCsOffset() { return (int) scopesPCsOffsetField .getValue(addr); } private int getDependenciesOffset() { return (int) dependenciesOffsetField.getValue(addr); } private int getHandlerTableOffset() { return (int) handlerTableOffsetField.getValue(addr); } private int getNulChkTableOffset() { return (int) nulChkTableOffsetField .getValue(addr); } - private int getNMethodEndOffset() { return (int) nmethodEndOffsetField .getValue(addr); } private int getCompLevel() { return (int) compLevelField .getValue(addr); } } From c1dd82b4d2393b2095cfd2365a806b74e9adf92e Mon Sep 17 00:00:00 2001 From: Joe Darcy <darcy@openjdk.org> Date: Fri, 19 Apr 2024 19:00:17 +0000 Subject: [PATCH 025/141] 8329644: Discuss expected visitor evolution patterns in javax.lang.model.util Reviewed-by: prappo, jlahoda, jjg --- ...AbstractAnnotationValueVisitorPreview.java | 2 + .../util/AbstractElementVisitorPreview.java | 2 + .../util/AbstractTypeVisitorPreview.java | 2 + .../model/util/ElementKindVisitorPreview.java | 2 + .../model/util/ElementScannerPreview.java | 2 + .../SimpleAnnotationValueVisitorPreview.java | 2 + .../util/SimpleElementVisitorPreview.java | 2 + .../model/util/SimpleTypeVisitorPreview.java | 2 + .../model/util/TypeKindVisitorPreview.java | 2 + .../javax/lang/model/util/package-info.java | 272 +++++++++++++++++- 10 files changed, 289 insertions(+), 1 deletion(-) diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java index 0e504e192bd91..63381039b116e 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java @@ -40,6 +40,8 @@ * @param <R> the return type of this visitor's methods * @param <P> the type of the additional parameter to this visitor's methods. * +* @see <a href="package-summary.html#expectedEvolution"> +* <strong>Expected visitor evolution</strong></a> * @see <a href="AbstractAnnotationValueVisitor6.html#note_for_subclasses"> * <strong>Compatibility note for subclasses</strong></a> * @see AbstractAnnotationValueVisitor6 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java index eb36165439434..f5a64c8c532a0 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java @@ -45,6 +45,8 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * + * @see <a href="package-summary.html#expectedEvolution"> + * <strong>Expected visitor evolution</strong></a> * @see <a href="AbstractElementVisitor6.html#note_for_subclasses"> * <strong>Compatibility note for subclasses</strong></a> * @see AbstractElementVisitor6 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java index 5da08ee004eae..9f4561fe9df84 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java @@ -43,6 +43,8 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * + * @see <a href="package-summary.html#expectedEvolution"> + * <strong>Expected visitor evolution</strong></a> * @see <a href="AbstractTypeVisitor6.html#note_for_subclasses"> * <strong>Compatibility note for subclasses</strong></a> * @see AbstractTypeVisitor6 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java index 01c70ea11d5b3..519a8a31bcb30 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java @@ -57,6 +57,8 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * + * @see <a href="package-summary.html#expectedEvolution"> + * <strong>Expected visitor evolution</strong></a> * @see <a href="ElementKindVisitor6.html#note_for_subclasses"> * <strong>Compatibility note for subclasses</strong></a> * @see ElementKindVisitor6 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java index 511141a5093b5..03aca5f538804 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java @@ -74,6 +74,8 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * + * @see <a href="package-summary.html#expectedEvolution"> + * <strong>Expected visitor evolution</strong></a> * @see <a href="ElementScanner6.html#note_for_subclasses"><strong>Compatibility note for subclasses</strong></a> * @see ElementScanner6 * @see ElementScanner7 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java index a16a82a79fb65..ec8c0169ac9b9 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java @@ -48,6 +48,8 @@ * @param <R> the return type of this visitor's methods * @param <P> the type of the additional parameter to this visitor's methods. * + * @see <a href="package-summary.html#expectedEvolution"> + * <strong>Expected visitor evolution</strong></a> * @see <a href="SimpleAnnotationValueVisitor6.html#note_for_subclasses"> * <strong>Compatibility note for subclasses</strong></a> * @see SimpleAnnotationValueVisitor6 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java index 02c2d78daedee..01fbc76e931c8 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java @@ -53,6 +53,8 @@ * @param <P> the type of the additional parameter to this visitor's methods. Use {@code Void} * for visitors that do not need an additional parameter. * + * @see <a href="package-summary.html#expectedEvolution"> + * <strong>Expected visitor evolution</strong></a> * @see <a href="SimpleElementVisitor6.html#note_for_subclasses"> * <strong>Compatibility note for subclasses</strong></a> * @see SimpleElementVisitor6 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java index bac2e2a87a142..3048e29154293 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java @@ -52,6 +52,8 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * + * @see <a href="package-summary.html#expectedEvolution"> + * <strong>Expected visitor evolution</strong></a> * @see <a href="SimpleTypeVisitor6.html#note_for_subclasses"> * <strong>Compatibility note for subclasses</strong></a> * @see SimpleTypeVisitor6 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java index b1458706091dc..88256379ea7cb 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java @@ -56,6 +56,8 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * + * @see <a href="package-summary.html#expectedEvolution"> + * <strong>Expected visitor evolution</strong></a> * @see <a href="TypeKindVisitor6.html#note_for_subclasses"> * <strong>Compatibility note for subclasses</strong></a> * @see TypeKindVisitor6 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/package-info.java b/src/java.compiler/share/classes/javax/lang/model/util/package-info.java index b906cdbf3424e..0293856457cea 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/package-info.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/package-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -35,6 +35,276 @@ * <p> Unless otherwise specified, methods in this package will throw * a {@code NullPointerException} if given a {@code null} argument. * + * @apiNote + * + * <h2 id=expectedEvolution>Expected visitor evolution</h2> + * + * As the Java programming language evolves, the visitor interfaces of + * the language model also evolve as do the concrete visitors in this + * package. A <a href="https://openjdk.org/jeps/12">preview language + * feature</a> in JDK <i>N</i> may have API elements added in the set + * of visitors for the preview language level. Such new elements are + * marked as reflective preview API. Any existing methods whose + * specification is updated to support the preview feature are + * <em>not</em> marked as preview. + * + * <p>The remainder of this note will show two examples of the API + * changes in the model and visitors that can be added to support a + * language feature. The examples will use additions to the elements + * portion of the language model, but the updates to visitors for + * types or annotation values would be analogous. + * + * Two distinct cases are: + * <ul> + * + * <li>the preview language construct has a corresponding new modeling + * interface and a concomitant new kind constant, such as a new {@link + * javax.lang.model.element.ElementKind} constant + * + * <li>the preview language construct only triggers the introduction + * of a new kind <em>without</em> a new modeling interface + * + * </ul> + * + * If a preview language feature is withdrawn rather than evolving to + * a permanent platform feature, the API elements associated with the + * feature are expected to be removed. The examples below outline the + * API changes expected when a preview feature becomes a permanent + * feature. + * + * <h3 id=topLevelLangConstruct>Adding visitor support for a + * top-level language construct</h3> + * + * Consider a new language feature, preview feature 1, in JDK <i>N</i>. This + * feature has a top-level element interface to model it: + * + * <pre> + * package javax.lang.model.element; + * /** + * * Represents a preview feature 1. + * * + * * @since N + * */ + * public interface PreviewFeature1Element extends Element { + * // Methods to retrieve information specific to the preview feature... + * } + * </pre> + * A new element kind would also be introduced to model such a feature: + * + * <pre> + * // Sample diff of ElementKind.java + * + /** + * + * A preview feature 1. + * + * @since N + * + */ + * + PREVIEW_FEATURE_1, + * </pre> + * + * A {@code default} method is added to {@code ElementVisitor} to accommodate the new construct: + * <pre> + * // Sample diff for ElementVisitor.java + * + /** + * + * Visits a preview feature 1. + * + * + * + * @implSpec The default implementation visits a {@code + * + * PreviewFeature1Element} by calling {@code visitUnknown(e, p)}. + * + * + * + * @param e the element to visit + * + * @param p a visitor-specified parameter + * + * @return a visitor-specified result + * + * @since N + * + */ + * + default R visitPreviewFeature1(PreviewFeature1Element e, P p) { + * + return visitUnknown(e, p); + * + } + * </pre> + * + * Given the {@code default} method on the visitor interface, the + * preview visitor classes need to override this method and take an + * action appropriate for the visitor's semantics: + * + * <pre> + * // Sample diff for AbstractElementVisitorPreview.java + * // Re-abstract visitPreviewFeature1. + * + /** + * + * {@inheritDoc ElementVisitor} + * + * + * + * @implSpec Visits a {@code PreviewFeature1Element} in a manner + * + * defined by a subclass. + * + * + * + * @param e {@inheritDoc ElementVisitor} + * + * @param p {@inheritDoc ElementVisitor} + * + * @return a visitor-specified result + * + * @since N + * + */ + * + @Override + * + public abstract R visitPreviewFeature1(PreviewFeature1Element e, P p); + * + * // Sample diff for ElementKindVisitorPreview.java + * // Take the default action for a preview feature 1. + * + + * + /** + * + * {@inheritDoc ElementVisitor} + * + * + * + * @implSpec This implementation calls {@code defaultAction}. + * + * + * + * @param e {@inheritDoc ElementVisitor} + * + * @param p {@inheritDoc ElementVisitor} + * + * @return the result of {@code defaultAction} + * + * @since N + * + */ + * + @Override + * + public R visitPreviewFeature1(PreviewFeature1Element e, P p) { + * + return defaultAction(e, p); + * + } + * + * // Sample diff for ElementScannerPreview.java + * // Scan the enclosed elements of a preview feature 1. + * + + * + /** + * + * {@inheritDoc ElementVisitor} + * + * + * + * @implSpec This implementation scans the enclosed elements. + * + * + * + * @param e {@inheritDoc ElementVisitor} + * + * @param p {@inheritDoc ElementVisitor} + * + * @return {@inheritDoc ElementScanner6} + * + * @since N + * + */ + * + @Override + * + public R visitPreviewFeature1(PreviewFeature1Element e, P p) { + * + return scan(e.getEnclosedElements(), p); + * + } + * + * // Sample diff for SimpleElementVisitorPreview.java + * // Take the default action for a preview feature 1. + * + /** + * + * {@inheritDoc ElementVisitor} + * + * + * + * @implSpec Visits a {@code PreviewFeature1Element} by calling + * + * {@code defaultAction}. + * + * + * + * @param e {@inheritDoc ElementVisitor} + * + * @param p {@inheritDoc ElementVisitor} + * + * @return {@inheritDoc ElementVisitor} + * + * @since N + * + */ + * + @Override + * + public R visitPreviewFeature1(PreviewFeature1Element e, P p) { + * + return defaultAction(e, p); + * + } + * </pre> + * + * When preview feature 1 exits preview in JDK (<i>N+k</i>), a set of + * visitors for language level (<i>N+k</i>) would be added. The + * methods operating over the feature would be moved from the preview + * visitors to the new language level (<i>N+k</i>) visitors. Each + * preview visitor would then have its direct superclass changed to + * the new corresponding (<i>N+k</i>) visitor. + * + * <h3 id=newKindLangConstruct>Adding visitor support for a language + * construct that is a new kind of an existing construct</h3> + * + * Consider a new language feature, preview feature 2, in JDK + * <i>N</i>. This feature has a new element kind <em>without</em> a + * new top-level element interface needed to model it. Concretely, + * assume a preview feature 2 is a new kind of variable; the changes + * would be analogous if the feature were a new kind of executable + * instead or new kind of another existing top-level construct. In + * that case, the API changes are more limited: + * + * <pre> + * // Sample diff for ElementKind.java + * + /** + * + * A preview feature 2. + * + * @since N + * + */ + * + PREVIEW_FEATURE_2, + * ... + * // Update existing methods as needed + * public boolean isVariable() { + * return switch(this) { + * case ENUM_CONSTANT, FIELD, PARAMETER, + * LOCAL_VARIABLE, EXCEPTION_PARAMETER, RESOURCE_VARIABLE, + * - BINDING_VARIABLE -> true; + * + BINDING_VARIABLE, PREVIEW_FEATURE_2 -> true; + * default -> false; + * }; + * } + * </pre> + * + * The kind visitors need support for the new variety of element: + * <pre> + * // Update visitVariable in ElementKindVisitor6: + * ... + * * @implSpec This implementation dispatches to the visit method for + * * the specific {@linkplain ElementKind kind} of variable, {@code + * * ENUM_CONSTANT}, {@code EXCEPTION_PARAMETER}, {@code FIELD}, + * - * {@code LOCAL_VARIABLE}, {@code PARAMETER}, or {@code RESOURCE_VARIABLE}. + * + * {@code LOCAL_VARIABLE}, {@code PARAMETER}, {@code RESOURCE_VARIABLE}, + * + * or {@code PREVIEW_FEATURE_2}. + * * + * * @param e {@inheritDoc ElementVisitor} + * * @param p {@inheritDoc ElementVisitor} + * * @return the result of the kind-specific visit method + * */ + * @Override + * public R visitVariable(VariableElement e, P p) { + * ... + * case BINDING_VARIABLE: + * return visitVariableAsBindingVariable(e, p); + * + * + case PREVIEW_FEATURE_2: + * + return visitVariableAsPreviewFeature2(e, p); + * + + * default: + * throw new AssertionError("Bad kind " + k + " for VariableElement" + e); + * ... + * + /** + * + * Visits a {@code PREVIEW_FEATURE_2} variable element. + * + * + * + * @implSpec This implementation calls {@code visitUnknown}. + * + * + * + * @param e the element to visit + * + * @param p a visitor-specified parameter + * + * @return the result of {@code visitUnknown} + * + * + * + * @since N + * + */ + * + public R visitVariableAsPreviewFeature2(VariableElement e, P p) { + * + return visitUnknown(e, p); + * + } + * </pre> + * + * The preview element kind visitor in turn overrides {@code + * visitVariableAsPreviewFeature2}: + * <pre> + * // Sample diff for ElementKindVisitorPreview: + * + /** + * + * {@inheritDoc ElementKindVisitor6} + * + * + * + * @implSpec This implementation calls {@code defaultAction}. + * + * + * + * @param e {@inheritDoc ElementKindVisitor6} + * + * @param p {@inheritDoc ElementKindVisitor6} + * + * @return the result of {@code defaultAction} + * + * + * + * @since N + * + */ + * + @Override + * + public R visitVariableAsPreviewFeature2(VariableElement e, P p) { + * + return defaultAction(e, p); + * + } + * </pre> + * + * As in the case where a new interface is introduced, when preview + * feature 2 exits preview in JDK (<i>N+k</i>), a set of visitors for + * language level (<i>N+k</i>) would be added. The methods operating + * over the new feature in the kind visitors would be moved from the + * preview visitors to new language level (<i>N+k</i>) visitors. Each + * preview visitor would then have its direct superclass changed to + * the new corresponding (<i>N+k</i>) visitor. + * * @since 1.6 * * @see <a href="https://jcp.org/en/jsr/detail?id=269"> From df04358223e8ae24009187d9c5a7e12701f4191f Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons <jjg@openjdk.org> Date: Fri, 19 Apr 2024 19:02:46 +0000 Subject: [PATCH 026/141] 8330179: Clean up non-standard use of /** comments in `jdk.compiler` Reviewed-by: darcy --- .../com/sun/tools/javac/code/ClassFinder.java | 6 +++--- .../com/sun/tools/javac/code/Flags.java | 4 ++-- .../com/sun/tools/javac/code/Source.java | 4 ++-- .../com/sun/tools/javac/code/Type.java | 2 +- .../com/sun/tools/javac/comp/Annotate.java | 4 ++-- .../com/sun/tools/javac/comp/Flow.java | 14 ++++++------- .../sun/tools/javac/comp/LambdaToMethod.java | 2 +- .../com/sun/tools/javac/comp/Lower.java | 20 +++++++++---------- .../com/sun/tools/javac/comp/TransTypes.java | 4 ++-- .../com/sun/tools/javac/jvm/ClassFile.java | 2 +- .../com/sun/tools/javac/jvm/ClassReader.java | 16 +++++++-------- .../com/sun/tools/javac/jvm/ClassWriter.java | 14 ++++++------- .../classes/com/sun/tools/javac/jvm/Code.java | 6 +++--- .../com/sun/tools/javac/tree/Pretty.java | 2 +- .../classes/com/sun/tools/javac/util/Log.java | 2 +- 15 files changed, 51 insertions(+), 51 deletions(-) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java index 770adbebc2ebf..95f8f847923c6 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/ClassFinder.java @@ -226,7 +226,7 @@ protected ClassFinder(Context context) { } -/************************************************************************ +/* ********************************************************************** * Temporary ct.sym replacement * * The following code is a temporary substitute for the ct.sym mechanism @@ -278,7 +278,7 @@ long getSupplementaryFlags(ClassSymbol c) { private Map<PackageSymbol, Long> supplementaryFlags; -/************************************************************************ +/* ********************************************************************** * Loading Classes ***********************************************************************/ @@ -455,7 +455,7 @@ public ClassSymbol loadClass(ModuleSymbol msym, Name flatname) throws Completion return c; } -/************************************************************************ +/* ********************************************************************** * Loading Packages ***********************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java index 429465c191024..346aab18a60fd 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Flags.java @@ -110,7 +110,7 @@ public static EnumSet<Flag> asFlagSet(long flags) { public static final int ACC_VARARGS = 0x0080; public static final int ACC_MODULE = 0x8000; - /***************************************** + /* *************************************** * Internal compiler flags (no bits in the lower 16). *****************************************/ @@ -278,7 +278,7 @@ public static EnumSet<Flag> asFlagSet(long flags) { */ public static final long THROWS = 1L<<47; - /** + /* * Currently available: Bit 48. */ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java index 80f60aa72090d..479e6891d8f69 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Source.java @@ -47,10 +47,10 @@ * deletion without notice.</b> */ public enum Source { - /** 1.0 had no inner classes, and so could not pass the JCK. */ + /* 1.0 had no inner classes, and so could not pass the JCK. */ // public static final Source JDK1_0 = new Source("1.0"); - /** 1.1 did not have strictfp, and so could not pass the JCK. */ + /* 1.1 did not have strictfp, and so could not pass the JCK. */ // public static final Source JDK1_1 = new Source("1.1"); /** 1.2 introduced strictfp. */ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java index 1715dfa1451a0..5acb4c384ebac 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java @@ -600,7 +600,7 @@ public String argtypes(boolean varargs) { public Type getUpperBound() { return null; } public Type getLowerBound() { return null; } - /** Navigation methods, these will work for classes, type variables, + /* Navigation methods, these will work for classes, type variables, * foralls, but will return null for arrays and methods. */ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java index 366e16f1da3f9..71c9d59cb276c 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java @@ -1015,7 +1015,7 @@ private <T extends Attribute.Compound> T makeContainerAnnotation(List<T> toBeRep return validRepeated; } - /******************** + /* ****************** * Type annotations * ********************/ @@ -1168,7 +1168,7 @@ public void visitNewClass(JCNewClass tree) { } } - /********************* + /* ******************* * Completer support * *********************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java index c103ee342afda..eda2772fb7593 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Flow.java @@ -526,7 +526,7 @@ void markDead() { alive = Liveness.DEAD; } - /************************************************************************* + /* *********************************************************************** * Visitor methods for statements and definitions *************************************************************************/ @@ -1330,7 +1330,7 @@ public void visitModuleDef(JCModuleDecl tree) { // Do nothing for modules } - /************************************************************************** + /* ************************************************************************ * main method *************************************************************************/ @@ -1446,7 +1446,7 @@ void markThrown(JCTree tree, Type exc) { } } - /************************************************************************* + /* *********************************************************************** * Visitor methods for statements and definitions *************************************************************************/ @@ -1914,7 +1914,7 @@ public void visitModuleDef(JCModuleDecl tree) { // Do nothing for modules } - /************************************************************************** + /* ************************************************************************ * main method *************************************************************************/ @@ -3223,7 +3223,7 @@ public void visitModuleDef(JCModuleDecl tree) { // Do nothing for modules } - /************************************************************************** + /* ************************************************************************ * main method *************************************************************************/ @@ -3342,7 +3342,7 @@ void reportEffectivelyFinalError(DiagnosticPosition pos, Symbol sym) { log.error(pos, Errors.CantRefNonEffectivelyFinalVar(sym, diags.fragment(subKey))); } - /************************************************************************* + /* *********************************************************************** * Visitor methods for statements and definitions *************************************************************************/ @@ -3461,7 +3461,7 @@ public void visitModuleDef(JCModuleDecl tree) { // Do nothing for modules } - /************************************************************************** + /* ************************************************************************ * main method *************************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java index 9d7bd1f068e66..5b70a376f2a90 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java @@ -796,7 +796,7 @@ private void addDeserializationCase(MethodHandleSymbol refSym, Type targetType, stmts = new ListBuffer<>(); kInfo.deserializeCases.put(implMethodName, stmts); } - /**** + /* ** System.err.printf("+++++++++++++++++\n"); System.err.printf("*functionalInterfaceClass: '%s'\n", functionalInterfaceClass); System.err.printf("*functionalInterfaceMethodName: '%s'\n", functionalInterfaceMethodName); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java index f1c897a917e70..66de5203d5731 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Lower.java @@ -153,7 +153,7 @@ protected Lower(Context context) { */ EndPosTable endPosTable; -/************************************************************************** +/* ************************************************************************ * Global mappings *************************************************************************/ @@ -647,7 +647,7 @@ public void translate() { } -/************************************************************************** +/* ************************************************************************ * Tree building blocks *************************************************************************/ @@ -784,7 +784,7 @@ JCClassDecl makeEmptyClass(long flags, ClassSymbol owner, Name flatname, return cdef; } -/************************************************************************** +/* ************************************************************************ * Symbol manipulation utilities *************************************************************************/ @@ -938,7 +938,7 @@ void swapAccessConstructorTag(ClassSymbol oldCTag, ClassSymbol newCTag) { } } -/************************************************************************** +/* ************************************************************************ * Access methods *************************************************************************/ @@ -1513,7 +1513,7 @@ JCTree accessConstructorDef(int pos, Symbol constr, MethodSymbol accessor) { return md; } -/************************************************************************** +/* ************************************************************************ * Free variables proxies and this$n *************************************************************************/ @@ -1950,7 +1950,7 @@ JCStatement initOuterThis(int pos, VarSymbol rhs) { make.Ident(rhs)).setType(lhs.erasure(types))); } -/************************************************************************** +/* ************************************************************************ * Code for .class *************************************************************************/ @@ -2009,7 +2009,7 @@ private JCExpression classOfType(Type type, DiagnosticPosition pos) { } } -/************************************************************************** +/* ************************************************************************ * Code for enabling/disabling assertions. *************************************************************************/ @@ -2078,7 +2078,7 @@ private JCExpression assertFlagTest(DiagnosticPosition pos) { } -/************************************************************************** +/* ************************************************************************ * Building blocks for let expressions *************************************************************************/ @@ -2172,7 +2172,7 @@ JCExpression makeComma(final JCExpression expr1, final JCExpression expr2) { return res; } -/************************************************************************** +/* ************************************************************************ * Translation methods *************************************************************************/ @@ -4440,7 +4440,7 @@ public void visitTry(JCTry tree) { super.visitTry(tree); } -/************************************************************************** +/* ************************************************************************ * main method *************************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java index fd3b507b038ee..d1ea165104176 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TransTypes.java @@ -897,7 +897,7 @@ public void visitTypeIntersection(JCTypeIntersection tree) { result = tree; } -/************************************************************************** +/* ************************************************************************ * utility methods *************************************************************************/ @@ -905,7 +905,7 @@ private Type erasure(Type t) { return types.erasure(t); } -/************************************************************************** +/* ************************************************************************ * main method *************************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java index 8455935c7485d..b3492d6a0e517 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassFile.java @@ -143,7 +143,7 @@ public enum Version { } -/************************************************************************ +/* ********************************************************************** * String Translation Routines ***********************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java index 47c7d9c7d4500..e0cebce611de0 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassReader.java @@ -308,7 +308,7 @@ private void enterMember(ClassSymbol c, Symbol sym) { c.members_field.enter(sym); } -/************************************************************************ +/* ********************************************************************** * Error Diagnoses ***********************************************************************/ @@ -338,7 +338,7 @@ public ClassFinder.BadEnclosingMethodAttr badEnclosingMethod(Symbol sym) { dcfh); } -/************************************************************************ +/* ********************************************************************** * Buffer Access ***********************************************************************/ @@ -378,7 +378,7 @@ int nextInt() { return res; } -/************************************************************************ +/* ********************************************************************** * Constant Pool Access ***********************************************************************/ @@ -437,7 +437,7 @@ Set<RequiresFlag> readRequiresFlags(int flags) { return set; } -/************************************************************************ +/* ********************************************************************** * Reading Types ***********************************************************************/ @@ -791,7 +791,7 @@ private Name readName(byte[] buf, int off, int len) { } } -/************************************************************************ +/* ********************************************************************** * Reading Attributes ***********************************************************************/ @@ -1462,7 +1462,7 @@ Code readCode(Symbol owner) { return null; } -/************************************************************************ +/* ********************************************************************** * Reading Java-language annotations ***********************************************************************/ @@ -2579,7 +2579,7 @@ public Type visitType(Type t, Void unused) { } } -/************************************************************************ +/* ********************************************************************** * Reading Symbols ***********************************************************************/ @@ -3122,7 +3122,7 @@ public void readClassFile(ClassSymbol c) { */ public boolean filling = false; -/************************************************************************ +/* ********************************************************************** * Adjusting flags ***********************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java index 625d3fb890b3e..dfa92efae7421 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/ClassWriter.java @@ -196,7 +196,7 @@ public void addExtraAttributes(ToIntFunction<Symbol> addExtraAttributes) { extraAttributeHooks = extraAttributeHooks.prepend(addExtraAttributes); } -/****************************************************************** +/* **************************************************************** * Diagnostics: dump generated class names and modifiers ******************************************************************/ @@ -237,7 +237,7 @@ public static String flagNames(long flags) { "SUPER", "VOLATILE", "TRANSIENT", "NATIVE", "INTERFACE", "ABSTRACT", "STRICTFP"}; -/****************************************************************** +/* **************************************************************** * Output routines ******************************************************************/ @@ -259,7 +259,7 @@ void putInt(ByteBuffer buf, int adr, int x) { buf.elems[adr+3] = (byte)((x ) & 0xFF); } -/****************************************************************** +/* **************************************************************** * Writing the Constant Pool ******************************************************************/ @@ -277,7 +277,7 @@ public StringOverflow(String s) { } } -/****************************************************************** +/* **************************************************************** * Writing Attributes ******************************************************************/ @@ -480,7 +480,7 @@ int writeParameterAttrs(List<VarSymbol> vars) { return attrCount; } -/********************************************************************** +/* ******************************************************************** * Writing Java-language annotations (aka metadata, attributes) **********************************************************************/ @@ -741,7 +741,7 @@ void writePosition(TypeAnnotationPosition p) { } } -/********************************************************************** +/* ******************************************************************** * Writing module attributes **********************************************************************/ @@ -823,7 +823,7 @@ int writeModuleAttribute(ClassSymbol c) { return 1; } -/********************************************************************** +/* ******************************************************************** * Writing Objects **********************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java index b86bdc19be401..703e1cb0c9c7e 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Code.java @@ -1219,7 +1219,7 @@ public boolean isStatementStart() { return !alive || state.stacksize == letExprStackPos; } -/************************************************************************** +/* ************************************************************************ * Stack map generation *************************************************************************/ @@ -1394,7 +1394,7 @@ StackMapFrame getInitialFrame() { } -/************************************************************************** +/* ************************************************************************ * Operations having to do with jumps *************************************************************************/ @@ -2238,7 +2238,7 @@ public void endScopes(int first) { for (int i = nextreg; i < prevNextReg; i++) endScope(i); } -/************************************************************************** +/* ************************************************************************ * static tables *************************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/Pretty.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/Pretty.java index c63706639b33b..9cc0f6e3b6dbb 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/Pretty.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/Pretty.java @@ -417,7 +417,7 @@ public void visitIdent(JCIdent tree) { return v.result; } - /************************************************************************** + /* ************************************************************************ * Visitor methods *************************************************************************/ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Log.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Log.java index b4260b84e1d5a..1491c65180cc0 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Log.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/util/Log.java @@ -819,7 +819,7 @@ public String localize(PrefixKind pk, String key, Object... args) { // backdoor hook for testing, should transition to use -XDrawDiagnostics private static boolean useRawMessages = false; -/*************************************************************************** +/* ************************************************************************* * raw error messages without internationalization; used for experimentation * and quick prototyping ***************************************************************************/ From f6feeb03bbe9024b609ae6a4795255128581d53c Mon Sep 17 00:00:00 2001 From: Joe Darcy <darcy@openjdk.org> Date: Fri, 19 Apr 2024 20:32:18 +0000 Subject: [PATCH 027/141] 8330703: Improve link syntax in javax.lang.model.util Reviewed-by: jjg --- .../model/util/AbstractAnnotationValueVisitorPreview.java | 8 ++++---- .../lang/model/util/AbstractElementVisitorPreview.java | 8 ++++---- .../javax/lang/model/util/AbstractTypeVisitorPreview.java | 8 ++++---- .../javax/lang/model/util/ElementKindVisitorPreview.java | 8 ++++---- .../javax/lang/model/util/ElementScannerPreview.java | 7 ++++--- .../model/util/SimpleAnnotationValueVisitorPreview.java | 8 ++++---- .../lang/model/util/SimpleElementVisitorPreview.java | 8 ++++---- .../javax/lang/model/util/SimpleTypeVisitorPreview.java | 8 ++++---- .../javax/lang/model/util/TypeKindVisitorPreview.java | 8 ++++---- 9 files changed, 36 insertions(+), 35 deletions(-) diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java index 63381039b116e..f56d671778f42 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractAnnotationValueVisitorPreview.java @@ -40,10 +40,10 @@ * @param <R> the return type of this visitor's methods * @param <P> the type of the additional parameter to this visitor's methods. * -* @see <a href="package-summary.html#expectedEvolution"> -* <strong>Expected visitor evolution</strong></a> - * @see <a href="AbstractAnnotationValueVisitor6.html#note_for_subclasses"> - * <strong>Compatibility note for subclasses</strong></a> + * @see javax.lang.model.util##expectedEvolution + * <strong>Expected visitor evolution</strong> + * @see AbstractAnnotationValueVisitor6##note_for_subclasses + * <strong>Compatibility note for subclasses</strong> * @see AbstractAnnotationValueVisitor6 * @see AbstractAnnotationValueVisitor7 * @see AbstractAnnotationValueVisitor8 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java index f5a64c8c532a0..e574a5b148af3 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractElementVisitorPreview.java @@ -45,10 +45,10 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * - * @see <a href="package-summary.html#expectedEvolution"> - * <strong>Expected visitor evolution</strong></a> - * @see <a href="AbstractElementVisitor6.html#note_for_subclasses"> - * <strong>Compatibility note for subclasses</strong></a> + * @see javax.lang.model.util##expectedEvolution + * <strong>Expected visitor evolution</strong> + * @see AbstractAnnotationValueVisitor6##note_for_subclasses + * <strong>Compatibility note for subclasses</strong> * @see AbstractElementVisitor6 * @see AbstractElementVisitor7 * @see AbstractElementVisitor8 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java index 9f4561fe9df84..230e9d8ead54f 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/AbstractTypeVisitorPreview.java @@ -43,10 +43,10 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * - * @see <a href="package-summary.html#expectedEvolution"> - * <strong>Expected visitor evolution</strong></a> - * @see <a href="AbstractTypeVisitor6.html#note_for_subclasses"> - * <strong>Compatibility note for subclasses</strong></a> + * @see javax.lang.model.util##expectedEvolution + * <strong>Expected visitor evolution</strong> + * @see AbstractAnnotationValueVisitor6##note_for_subclasses + * <strong>Compatibility note for subclasses</strong> * @see AbstractTypeVisitor6 * @see AbstractTypeVisitor7 * @see AbstractTypeVisitor8 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java index 519a8a31bcb30..8a59d91b88655 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementKindVisitorPreview.java @@ -57,10 +57,10 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * - * @see <a href="package-summary.html#expectedEvolution"> - * <strong>Expected visitor evolution</strong></a> - * @see <a href="ElementKindVisitor6.html#note_for_subclasses"> - * <strong>Compatibility note for subclasses</strong></a> + * @see javax.lang.model.util##expectedEvolution + * <strong>Expected visitor evolution</strong> + * @see AbstractAnnotationValueVisitor6##note_for_subclasses + * <strong>Compatibility note for subclasses</strong> * @see ElementKindVisitor6 * @see ElementKindVisitor7 * @see ElementKindVisitor8 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java index 03aca5f538804..2935958e4b42d 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/ElementScannerPreview.java @@ -74,9 +74,10 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * - * @see <a href="package-summary.html#expectedEvolution"> - * <strong>Expected visitor evolution</strong></a> - * @see <a href="ElementScanner6.html#note_for_subclasses"><strong>Compatibility note for subclasses</strong></a> + * @see javax.lang.model.util##expectedEvolution + * <strong>Expected visitor evolution</strong> + * @see AbstractAnnotationValueVisitor6##note_for_subclasses + * <strong>Compatibility note for subclasses</strong> * @see ElementScanner6 * @see ElementScanner7 * @see ElementScanner8 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java index ec8c0169ac9b9..8ff12cb61bb21 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleAnnotationValueVisitorPreview.java @@ -48,10 +48,10 @@ * @param <R> the return type of this visitor's methods * @param <P> the type of the additional parameter to this visitor's methods. * - * @see <a href="package-summary.html#expectedEvolution"> - * <strong>Expected visitor evolution</strong></a> - * @see <a href="SimpleAnnotationValueVisitor6.html#note_for_subclasses"> - * <strong>Compatibility note for subclasses</strong></a> + * @see javax.lang.model.util##expectedEvolution + * <strong>Expected visitor evolution</strong> + * @see AbstractAnnotationValueVisitor6##note_for_subclasses + * <strong>Compatibility note for subclasses</strong> * @see SimpleAnnotationValueVisitor6 * @see SimpleAnnotationValueVisitor7 * @see SimpleAnnotationValueVisitor8 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java index 01fbc76e931c8..b891f65d69334 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleElementVisitorPreview.java @@ -53,10 +53,10 @@ * @param <P> the type of the additional parameter to this visitor's methods. Use {@code Void} * for visitors that do not need an additional parameter. * - * @see <a href="package-summary.html#expectedEvolution"> - * <strong>Expected visitor evolution</strong></a> - * @see <a href="SimpleElementVisitor6.html#note_for_subclasses"> - * <strong>Compatibility note for subclasses</strong></a> + * @see javax.lang.model.util##expectedEvolution + * <strong>Expected visitor evolution</strong> + * @see AbstractAnnotationValueVisitor6##note_for_subclasses + * <strong>Compatibility note for subclasses</strong> * @see SimpleElementVisitor6 * @see SimpleElementVisitor7 * @see SimpleElementVisitor8 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java index 3048e29154293..0c7fd39dbf882 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/SimpleTypeVisitorPreview.java @@ -52,10 +52,10 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * - * @see <a href="package-summary.html#expectedEvolution"> - * <strong>Expected visitor evolution</strong></a> - * @see <a href="SimpleTypeVisitor6.html#note_for_subclasses"> - * <strong>Compatibility note for subclasses</strong></a> + * @see javax.lang.model.util##expectedEvolution + * <strong>Expected visitor evolution</strong> + * @see AbstractAnnotationValueVisitor6##note_for_subclasses + * <strong>Compatibility note for subclasses</strong> * @see SimpleTypeVisitor6 * @see SimpleTypeVisitor7 * @see SimpleTypeVisitor8 diff --git a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java index 88256379ea7cb..9868dbe4134bb 100644 --- a/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java +++ b/src/java.compiler/share/classes/javax/lang/model/util/TypeKindVisitorPreview.java @@ -56,10 +56,10 @@ * methods. Use {@code Void} for visitors that do not need an * additional parameter. * - * @see <a href="package-summary.html#expectedEvolution"> - * <strong>Expected visitor evolution</strong></a> - * @see <a href="TypeKindVisitor6.html#note_for_subclasses"> - * <strong>Compatibility note for subclasses</strong></a> + * @see javax.lang.model.util##expectedEvolution + * <strong>Expected visitor evolution</strong> + * @see AbstractAnnotationValueVisitor6##note_for_subclasses + * <strong>Compatibility note for subclasses</strong> * @see TypeKindVisitor6 * @see TypeKindVisitor7 * @see TypeKindVisitor8 From 6d5699617ff0985104a8bb5f2c9eb8887cb0961e Mon Sep 17 00:00:00 2001 From: Ioi Lam <iklam@openjdk.org> Date: Sat, 20 Apr 2024 03:52:17 +0000 Subject: [PATCH 028/141] 8330540: Rename the enum type CompileCommand to CompileCommandEnum Reviewed-by: kvn, dlong --- src/hotspot/share/c1/c1_LIRGenerator.cpp | 5 +- src/hotspot/share/ci/ciMethod.cpp | 5 +- src/hotspot/share/ci/ciMethod.hpp | 8 +- src/hotspot/share/code/nmethod.cpp | 7 +- .../share/compiler/compilationPolicy.cpp | 4 +- src/hotspot/share/compiler/compileBroker.cpp | 2 +- .../share/compiler/compilerDirectives.cpp | 10 +- .../share/compiler/compilerDirectives.hpp | 1 - src/hotspot/share/compiler/compilerOracle.cpp | 166 +++++++++--------- src/hotspot/share/compiler/compilerOracle.hpp | 18 +- src/hotspot/share/compiler/methodMatcher.cpp | 2 +- src/hotspot/share/jvmci/jvmciCompilerToVM.cpp | 1 + src/hotspot/share/oops/methodCounters.cpp | 6 +- src/hotspot/share/oops/methodCounters.hpp | 3 +- src/hotspot/share/oops/methodData.cpp | 6 +- src/hotspot/share/opto/compile.cpp | 5 +- src/hotspot/share/opto/compile.hpp | 4 +- src/hotspot/share/prims/whitebox.cpp | 5 +- src/hotspot/share/utilities/vmEnums.hpp | 3 +- 19 files changed, 134 insertions(+), 127 deletions(-) diff --git a/src/hotspot/share/c1/c1_LIRGenerator.cpp b/src/hotspot/share/c1/c1_LIRGenerator.cpp index 1cb350f1e39c4..cd08413565808 100644 --- a/src/hotspot/share/c1/c1_LIRGenerator.cpp +++ b/src/hotspot/share/c1/c1_LIRGenerator.cpp @@ -35,6 +35,7 @@ #include "ci/ciObjArray.hpp" #include "ci/ciUtilities.hpp" #include "compiler/compilerDefinitions.inline.hpp" +#include "compiler/compilerOracle.hpp" #include "gc/shared/barrierSet.hpp" #include "gc/shared/c1/barrierSetC1.hpp" #include "oops/klass.inline.hpp" @@ -3216,7 +3217,7 @@ void LIRGenerator::do_ProfileInvoke(ProfileInvoke* x) { // Notify the runtime very infrequently only to take care of counter overflows int freq_log = Tier23InlineeNotifyFreqLog; double scale; - if (_method->has_option_value(CompileCommand::CompileThresholdScaling, scale)) { + if (_method->has_option_value(CompileCommandEnum::CompileThresholdScaling, scale)) { freq_log = CompilerConfig::scaled_freq_log(freq_log, scale); } increment_event_counter_impl(info, x->inlinee(), LIR_OprFact::intConst(InvocationCounter::count_increment), right_n_bits(freq_log), InvocationEntryBci, false, true); @@ -3257,7 +3258,7 @@ void LIRGenerator::increment_event_counter(CodeEmitInfo* info, LIR_Opr step, int } // Increment the appropriate invocation/backedge counter and notify the runtime. double scale; - if (_method->has_option_value(CompileCommand::CompileThresholdScaling, scale)) { + if (_method->has_option_value(CompileCommandEnum::CompileThresholdScaling, scale)) { freq_log = CompilerConfig::scaled_freq_log(freq_log, scale); } increment_event_counter_impl(info, info->scope()->method(), step, right_n_bits(freq_log), bci, backedge, true); diff --git a/src/hotspot/share/ci/ciMethod.cpp b/src/hotspot/share/ci/ciMethod.cpp index 0b41a257a4bf9..aac2a553cda31 100644 --- a/src/hotspot/share/ci/ciMethod.cpp +++ b/src/hotspot/share/ci/ciMethod.cpp @@ -36,6 +36,7 @@ #include "ci/ciUtilities.inline.hpp" #include "compiler/abstractCompiler.hpp" #include "compiler/compilerDefinitions.inline.hpp" +#include "compiler/compilerOracle.hpp" #include "compiler/methodLiveness.hpp" #include "interpreter/interpreter.hpp" #include "interpreter/linkResolver.hpp" @@ -1062,7 +1063,7 @@ MethodCounters* ciMethod::ensure_method_counters() { // ------------------------------------------------------------------ // ciMethod::has_option // -bool ciMethod::has_option(enum CompileCommand option) { +bool ciMethod::has_option(CompileCommandEnum option) { check_is_loaded(); VM_ENTRY_MARK; methodHandle mh(THREAD, get_Method()); @@ -1072,7 +1073,7 @@ bool ciMethod::has_option(enum CompileCommand option) { // ------------------------------------------------------------------ // ciMethod::has_option_value // -bool ciMethod::has_option_value(enum CompileCommand option, double& value) { +bool ciMethod::has_option_value(CompileCommandEnum option, double& value) { check_is_loaded(); VM_ENTRY_MARK; methodHandle mh(THREAD, get_Method()); diff --git a/src/hotspot/share/ci/ciMethod.hpp b/src/hotspot/share/ci/ciMethod.hpp index 0c171d0cf0b7c..a7c18b09f13eb 100644 --- a/src/hotspot/share/ci/ciMethod.hpp +++ b/src/hotspot/share/ci/ciMethod.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,10 +31,10 @@ #include "ci/ciSignature.hpp" #include "classfile/vmIntrinsics.hpp" #include "compiler/methodLiveness.hpp" -#include "compiler/compilerOracle.hpp" #include "oops/method.hpp" #include "runtime/handles.hpp" #include "utilities/bitMap.hpp" +#include "utilities/vmEnums.hpp" class ciMethodBlocks; class MethodLiveness; @@ -303,8 +303,8 @@ class ciMethod : public ciMetadata { // Find the proper vtable index to invoke this method. int resolve_vtable_index(ciKlass* caller, ciKlass* receiver); - bool has_option(enum CompileCommand option); - bool has_option_value(enum CompileCommand option, double& value); + bool has_option(CompileCommandEnum option); + bool has_option_value(CompileCommandEnum option, double& value); bool can_be_compiled(); bool can_be_parsed() const { return _can_be_parsed; } bool has_compiled_code(); diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index 4b72c32c9cb13..ee57e11f9323c 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -36,6 +36,7 @@ #include "compiler/compileLog.hpp" #include "compiler/compileTask.hpp" #include "compiler/compilerDirectives.hpp" +#include "compiler/compilerOracle.hpp" #include "compiler/directivesParser.hpp" #include "compiler/disassembler.hpp" #include "compiler/oopMap.inline.hpp" @@ -1605,15 +1606,15 @@ void nmethod::print_nmethod(bool printmethod) { #if defined(SUPPORT_DATA_STRUCTS) if (AbstractDisassembler::show_structs()) { methodHandle mh(Thread::current(), _method); - if (printmethod || PrintDebugInfo || CompilerOracle::has_option(mh, CompileCommand::PrintDebugInfo)) { + if (printmethod || PrintDebugInfo || CompilerOracle::has_option(mh, CompileCommandEnum::PrintDebugInfo)) { print_scopes(); tty->print_cr("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "); } - if (printmethod || PrintRelocations || CompilerOracle::has_option(mh, CompileCommand::PrintRelocations)) { + if (printmethod || PrintRelocations || CompilerOracle::has_option(mh, CompileCommandEnum::PrintRelocations)) { print_relocations(); tty->print_cr("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "); } - if (printmethod || PrintDependencies || CompilerOracle::has_option(mh, CompileCommand::PrintDependencies)) { + if (printmethod || PrintDependencies || CompilerOracle::has_option(mh, CompileCommandEnum::PrintDependencies)) { print_dependencies_on(tty); tty->print_cr("- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - "); } diff --git a/src/hotspot/share/compiler/compilationPolicy.cpp b/src/hotspot/share/compiler/compilationPolicy.cpp index 4fcd9b5bde43d..0e6d8f6a6c91b 100644 --- a/src/hotspot/share/compiler/compilationPolicy.cpp +++ b/src/hotspot/share/compiler/compilationPolicy.cpp @@ -229,7 +229,7 @@ class LoopPredicate : AllStatic { public: static bool apply_scaled(const methodHandle& method, CompLevel cur_level, int i, int b, double scale) { double threshold_scaling; - if (CompilerOracle::has_option_value(method, CompileCommand::CompileThresholdScaling, threshold_scaling)) { + if (CompilerOracle::has_option_value(method, CompileCommandEnum::CompileThresholdScaling, threshold_scaling)) { scale *= threshold_scaling; } switch(cur_level) { @@ -267,7 +267,7 @@ class CallPredicate : AllStatic { public: static bool apply_scaled(const methodHandle& method, CompLevel cur_level, int i, int b, double scale) { double threshold_scaling; - if (CompilerOracle::has_option_value(method, CompileCommand::CompileThresholdScaling, threshold_scaling)) { + if (CompilerOracle::has_option_value(method, CompileCommandEnum::CompileThresholdScaling, threshold_scaling)) { scale *= threshold_scaling; } switch(cur_level) { diff --git a/src/hotspot/share/compiler/compileBroker.cpp b/src/hotspot/share/compiler/compileBroker.cpp index 61d5f9bd576c8..82f0996bc603e 100644 --- a/src/hotspot/share/compiler/compileBroker.cpp +++ b/src/hotspot/share/compiler/compileBroker.cpp @@ -1549,7 +1549,7 @@ bool CompileBroker::compilation_is_prohibited(const methodHandle& method, int os // The method may be explicitly excluded by the user. double scale; - if (excluded || (CompilerOracle::has_option_value(method, CompileCommand::CompileThresholdScaling, scale) && scale == 0)) { + if (excluded || (CompilerOracle::has_option_value(method, CompileCommandEnum::CompileThresholdScaling, scale) && scale == 0)) { bool quietly = CompilerOracle::be_quiet(); if (PrintCompilation && !quietly) { // This does not happen quietly... diff --git a/src/hotspot/share/compiler/compilerDirectives.cpp b/src/hotspot/share/compiler/compilerDirectives.cpp index 74a1076cc49bc..f5ccd9e69e929 100644 --- a/src/hotspot/share/compiler/compilerDirectives.cpp +++ b/src/hotspot/share/compiler/compilerDirectives.cpp @@ -426,7 +426,7 @@ DirectiveSet* DirectiveSet::compilecommand_compatibility_init(const methodHandle } // inline and dontinline (including exclude) are implemented in the directiveset accessors -#define init_default_cc(name, type, dvalue, cc_flag) { type v; if (!_modified[name##Index] && CompileCommand::cc_flag != CompileCommand::Unknown && CompilerOracle::has_option_value(method, CompileCommand::cc_flag, v) && v != this->name##Option) { set.cloned()->name##Option = v; } } +#define init_default_cc(name, type, dvalue, cc_flag) { type v; if (!_modified[name##Index] && CompileCommandEnum::cc_flag != CompileCommandEnum::Unknown && CompilerOracle::has_option_value(method, CompileCommandEnum::cc_flag, v) && v != this->name##Option) { set.cloned()->name##Option = v; } } compilerdirectives_common_flags(init_default_cc) compilerdirectives_c2_flags(init_default_cc) compilerdirectives_c1_flags(init_default_cc) @@ -438,7 +438,7 @@ DirectiveSet* DirectiveSet::compilecommand_compatibility_init(const methodHandle if (!_modified[TraceAutoVectorizationIndex]) { // Parse ccstr and create mask ccstrlist option; - if (CompilerOracle::has_option_value(method, CompileCommand::TraceAutoVectorization, option)) { + if (CompilerOracle::has_option_value(method, CompileCommandEnum::TraceAutoVectorization, option)) { TraceAutoVectorizationTagValidator validator(option, false); if (validator.is_valid()) { set.cloned()->set_trace_auto_vectorization_tags(validator.tags()); @@ -448,7 +448,7 @@ DirectiveSet* DirectiveSet::compilecommand_compatibility_init(const methodHandle if (!_modified[PrintIdealPhaseIndex]) { // Parse ccstr and create set ccstrlist option; - if (CompilerOracle::has_option_value(method, CompileCommand::PrintIdealPhase, option)) { + if (CompilerOracle::has_option_value(method, CompileCommandEnum::PrintIdealPhase, option)) { PhaseNameValidator validator(option); if (validator.is_valid()) { assert(!validator.phase_name_set().is_empty(), "Phase name set must be non-empty"); @@ -464,7 +464,7 @@ DirectiveSet* DirectiveSet::compilecommand_compatibility_init(const methodHandle bool need_reset = true; // if Control/DisableIntrinsic redefined, only need to reset control_words once if (!_modified[ControlIntrinsicIndex] && - CompilerOracle::has_option_value(method, CompileCommand::ControlIntrinsic, option_value)) { + CompilerOracle::has_option_value(method, CompileCommandEnum::ControlIntrinsic, option_value)) { ControlIntrinsicIter iter(option_value); if (need_reset) { @@ -484,7 +484,7 @@ DirectiveSet* DirectiveSet::compilecommand_compatibility_init(const methodHandle if (!_modified[DisableIntrinsicIndex] && - CompilerOracle::has_option_value(method, CompileCommand::DisableIntrinsic, option_value)) { + CompilerOracle::has_option_value(method, CompileCommandEnum::DisableIntrinsic, option_value)) { ControlIntrinsicIter iter(option_value, true/*disable_all*/); if (need_reset) { diff --git a/src/hotspot/share/compiler/compilerDirectives.hpp b/src/hotspot/share/compiler/compilerDirectives.hpp index 6cd831c8d72a6..0b1090406b904 100644 --- a/src/hotspot/share/compiler/compilerDirectives.hpp +++ b/src/hotspot/share/compiler/compilerDirectives.hpp @@ -30,7 +30,6 @@ #include "ci/ciMethod.hpp" #include "compiler/compiler_globals.hpp" #include "compiler/methodMatcher.hpp" -#include "compiler/compilerOracle.hpp" #include "opto/phasetype.hpp" #include "utilities/bitMap.hpp" #include "utilities/exceptions.hpp" diff --git a/src/hotspot/share/compiler/compilerOracle.cpp b/src/hotspot/share/compiler/compilerOracle.cpp index a8eee10fac539..ea09e3ebb7f75 100644 --- a/src/hotspot/share/compiler/compilerOracle.cpp +++ b/src/hotspot/share/compiler/compilerOracle.cpp @@ -58,7 +58,7 @@ static enum OptionType option_types[] = { #undef enum_of_options }; -static enum OptionType option2type(enum CompileCommand option) { +static enum OptionType option2type(CompileCommandEnum option) { return option_types[static_cast<int>(option)]; } @@ -68,7 +68,7 @@ static const char* option_names[] = { #undef enum_of_options }; -static const char* option2name(enum CompileCommand option) { +static const char* option2name(CompileCommandEnum option) { return option_names[static_cast<int>(option)]; } @@ -106,28 +106,28 @@ static bool any_set = false; static bool print_final_memstat_report = false; // A filter for quick lookup if an option is set -static bool option_filter[static_cast<int>(CompileCommand::Unknown) + 1] = { 0 }; +static bool option_filter[static_cast<int>(CompileCommandEnum::Unknown) + 1] = { 0 }; -static void command_set_in_filter(enum CompileCommand option) { - assert(option != CompileCommand::Unknown, "sanity"); +static void command_set_in_filter(CompileCommandEnum option) { + assert(option != CompileCommandEnum::Unknown, "sanity"); assert(option2type(option) != OptionType::Unknown, "sanity"); - if ((option != CompileCommand::DontInline) && - (option != CompileCommand::Inline) && - (option != CompileCommand::Log)) { + if ((option != CompileCommandEnum::DontInline) && + (option != CompileCommandEnum::Inline) && + (option != CompileCommandEnum::Log)) { any_set = true; } option_filter[static_cast<int>(option)] = true; } -static bool has_command(enum CompileCommand option) { +static bool has_command(CompileCommandEnum option) { return option_filter[static_cast<int>(option)]; } class TypedMethodOptionMatcher : public MethodMatcher { private: TypedMethodOptionMatcher* _next; - enum CompileCommand _option; + CompileCommandEnum _option; public: union { @@ -140,15 +140,15 @@ class TypedMethodOptionMatcher : public MethodMatcher { TypedMethodOptionMatcher() : MethodMatcher(), _next(nullptr), - _option(CompileCommand::Unknown) { + _option(CompileCommandEnum::Unknown) { memset(&_u, 0, sizeof(_u)); } ~TypedMethodOptionMatcher(); static TypedMethodOptionMatcher* parse_method_pattern(char*& line, char* errorbuf, const int buf_size); - TypedMethodOptionMatcher* match(const methodHandle &method, enum CompileCommand option); + TypedMethodOptionMatcher* match(const methodHandle &method, CompileCommandEnum option); - void init(enum CompileCommand option, TypedMethodOptionMatcher* next) { + void init(CompileCommandEnum option, TypedMethodOptionMatcher* next) { _next = next; _option = option; } @@ -161,7 +161,7 @@ class TypedMethodOptionMatcher : public MethodMatcher { void set_next(TypedMethodOptionMatcher* next) {_next = next; } TypedMethodOptionMatcher* next() { return _next; } - enum CompileCommand option() { return _option; } + CompileCommandEnum option() { return _option; } template<typename T> T value(); template<typename T> void set_value(T value); void print(); @@ -286,7 +286,7 @@ TypedMethodOptionMatcher* TypedMethodOptionMatcher::parse_method_pattern(char*& return tom; } -TypedMethodOptionMatcher* TypedMethodOptionMatcher::match(const methodHandle& method, enum CompileCommand option) { +TypedMethodOptionMatcher* TypedMethodOptionMatcher::match(const methodHandle& method, CompileCommandEnum option) { TypedMethodOptionMatcher* current = this; while (current != nullptr) { if (current->_option == option) { @@ -301,16 +301,16 @@ TypedMethodOptionMatcher* TypedMethodOptionMatcher::match(const methodHandle& me template<typename T> static void register_command(TypedMethodOptionMatcher* matcher, - enum CompileCommand option, + CompileCommandEnum option, T value) { assert(matcher != option_list, "No circular lists please"); - if (option == CompileCommand::Log && !LogCompilation) { + if (option == CompileCommandEnum::Log && !LogCompilation) { tty->print_cr("Warning: +LogCompilation must be enabled in order for individual methods to be logged with "); tty->print_cr(" CompileCommand=log,<method pattern>"); } assert(CompilerOracle::option_matches_type(option, value), "Value must match option type"); - if (option == CompileCommand::Blackhole && !UnlockExperimentalVMOptions) { + if (option == CompileCommandEnum::Blackhole && !UnlockExperimentalVMOptions) { warning("Blackhole compile option is experimental and must be enabled via -XX:+UnlockExperimentalVMOptions"); // Delete matcher as we don't keep it delete matcher; @@ -333,7 +333,7 @@ static void register_command(TypedMethodOptionMatcher* matcher, } template<typename T> -bool CompilerOracle::has_option_value(const methodHandle& method, enum CompileCommand option, T& value) { +bool CompilerOracle::has_option_value(const methodHandle& method, CompileCommandEnum option, T& value) { assert(option_matches_type(option, value), "Value must match option type"); if (!has_command(option)) { return false; @@ -348,22 +348,22 @@ bool CompilerOracle::has_option_value(const methodHandle& method, enum CompileCo return false; } -static bool resolve_inlining_predicate(enum CompileCommand option, const methodHandle& method) { - assert(option == CompileCommand::Inline || option == CompileCommand::DontInline, "Sanity"); +static bool resolve_inlining_predicate(CompileCommandEnum option, const methodHandle& method) { + assert(option == CompileCommandEnum::Inline || option == CompileCommandEnum::DontInline, "Sanity"); bool v1 = false; bool v2 = false; - bool has_inline = CompilerOracle::has_option_value(method, CompileCommand::Inline, v1); - bool has_dnotinline = CompilerOracle::has_option_value(method, CompileCommand::DontInline, v2); + bool has_inline = CompilerOracle::has_option_value(method, CompileCommandEnum::Inline, v1); + bool has_dnotinline = CompilerOracle::has_option_value(method, CompileCommandEnum::DontInline, v2); if (has_inline && has_dnotinline) { if (v1 && v2) { // Conflict options detected // Find the last one for that method and return the predicate accordingly // option_list lists options in reverse order. So the first option we find is the last which was specified. - enum CompileCommand last_one = CompileCommand::Unknown; + CompileCommandEnum last_one = CompileCommandEnum::Unknown; TypedMethodOptionMatcher* current = option_list; while (current != nullptr) { last_one = current->option(); - if (last_one == CompileCommand::Inline || last_one == CompileCommand::DontInline) { + if (last_one == CompileCommandEnum::Inline || last_one == CompileCommandEnum::DontInline) { if (current->matches(method)) { return last_one == option; } @@ -374,10 +374,10 @@ static bool resolve_inlining_predicate(enum CompileCommand option, const methodH return false; } else { // No conflicts - return option == CompileCommand::Inline ? v1 : v2; + return option == CompileCommandEnum::Inline ? v1 : v2; } } else { - if (option == CompileCommand::Inline) { + if (option == CompileCommandEnum::Inline) { return has_inline ? v1 : false; } else { return has_dnotinline ? v2 : false; @@ -385,9 +385,9 @@ static bool resolve_inlining_predicate(enum CompileCommand option, const methodH } } -static bool check_predicate(enum CompileCommand option, const methodHandle& method) { +static bool check_predicate(CompileCommandEnum option, const methodHandle& method) { // Special handling for Inline and DontInline since conflict options may be specified - if (option == CompileCommand::Inline || option == CompileCommand::DontInline) { + if (option == CompileCommandEnum::Inline || option == CompileCommandEnum::DontInline) { return resolve_inlining_predicate(option, method); } @@ -403,14 +403,14 @@ bool CompilerOracle::has_any_command_set() { } // Explicit instantiation for all OptionTypes supported. -template bool CompilerOracle::has_option_value<intx>(const methodHandle& method, enum CompileCommand option, intx& value); -template bool CompilerOracle::has_option_value<uintx>(const methodHandle& method, enum CompileCommand option, uintx& value); -template bool CompilerOracle::has_option_value<bool>(const methodHandle& method, enum CompileCommand option, bool& value); -template bool CompilerOracle::has_option_value<ccstr>(const methodHandle& method, enum CompileCommand option, ccstr& value); -template bool CompilerOracle::has_option_value<double>(const methodHandle& method, enum CompileCommand option, double& value); +template bool CompilerOracle::has_option_value<intx>(const methodHandle& method, CompileCommandEnum option, intx& value); +template bool CompilerOracle::has_option_value<uintx>(const methodHandle& method, CompileCommandEnum option, uintx& value); +template bool CompilerOracle::has_option_value<bool>(const methodHandle& method, CompileCommandEnum option, bool& value); +template bool CompilerOracle::has_option_value<ccstr>(const methodHandle& method, CompileCommandEnum option, ccstr& value); +template bool CompilerOracle::has_option_value<double>(const methodHandle& method, CompileCommandEnum option, double& value); template<typename T> -bool CompilerOracle::option_matches_type(enum CompileCommand option, T& value) { +bool CompilerOracle::option_matches_type(CompileCommandEnum option, T& value) { enum OptionType option_type = option2type(option); if (option_type == OptionType::Unknown) { return false; // Can't query options with type Unknown. @@ -421,47 +421,47 @@ bool CompilerOracle::option_matches_type(enum CompileCommand option, T& value) { return (get_type_for<T>() == option_type); } -template bool CompilerOracle::option_matches_type<intx>(enum CompileCommand option, intx& value); -template bool CompilerOracle::option_matches_type<uintx>(enum CompileCommand option, uintx& value); -template bool CompilerOracle::option_matches_type<bool>(enum CompileCommand option, bool& value); -template bool CompilerOracle::option_matches_type<ccstr>(enum CompileCommand option, ccstr& value); -template bool CompilerOracle::option_matches_type<double>(enum CompileCommand option, double& value); +template bool CompilerOracle::option_matches_type<intx>(CompileCommandEnum option, intx& value); +template bool CompilerOracle::option_matches_type<uintx>(CompileCommandEnum option, uintx& value); +template bool CompilerOracle::option_matches_type<bool>(CompileCommandEnum option, bool& value); +template bool CompilerOracle::option_matches_type<ccstr>(CompileCommandEnum option, ccstr& value); +template bool CompilerOracle::option_matches_type<double>(CompileCommandEnum option, double& value); -bool CompilerOracle::has_option(const methodHandle& method, enum CompileCommand option) { +bool CompilerOracle::has_option(const methodHandle& method, CompileCommandEnum option) { bool value = false; has_option_value(method, option, value); return value; } bool CompilerOracle::should_exclude(const methodHandle& method) { - if (check_predicate(CompileCommand::Exclude, method)) { + if (check_predicate(CompileCommandEnum::Exclude, method)) { return true; } - if (has_command(CompileCommand::CompileOnly)) { - return !check_predicate(CompileCommand::CompileOnly, method); + if (has_command(CompileCommandEnum::CompileOnly)) { + return !check_predicate(CompileCommandEnum::CompileOnly, method); } return false; } bool CompilerOracle::should_inline(const methodHandle& method) { - return (check_predicate(CompileCommand::Inline, method)); + return (check_predicate(CompileCommandEnum::Inline, method)); } bool CompilerOracle::should_not_inline(const methodHandle& method) { - return check_predicate(CompileCommand::DontInline, method) || check_predicate(CompileCommand::Exclude, method); + return check_predicate(CompileCommandEnum::DontInline, method) || check_predicate(CompileCommandEnum::Exclude, method); } bool CompilerOracle::should_print(const methodHandle& method) { - return check_predicate(CompileCommand::Print, method); + return check_predicate(CompileCommandEnum::Print, method); } bool CompilerOracle::should_print_methods() { - return has_command(CompileCommand::Print); + return has_command(CompileCommandEnum::Print); } // Tells whether there are any methods to collect memory statistics for bool CompilerOracle::should_collect_memstat() { - return has_command(CompileCommand::MemStat) || has_command(CompileCommand::MemLimit); + return has_command(CompileCommandEnum::MemStat) || has_command(CompileCommandEnum::MemLimit); } bool CompilerOracle::should_print_final_memstat_report() { @@ -470,18 +470,18 @@ bool CompilerOracle::should_print_final_memstat_report() { bool CompilerOracle::should_log(const methodHandle& method) { if (!LogCompilation) return false; - if (!has_command(CompileCommand::Log)) { + if (!has_command(CompileCommandEnum::Log)) { return true; // by default, log all } - return (check_predicate(CompileCommand::Log, method)); + return (check_predicate(CompileCommandEnum::Log, method)); } bool CompilerOracle::should_break_at(const methodHandle& method) { - return check_predicate(CompileCommand::Break, method); + return check_predicate(CompileCommandEnum::Break, method); } void CompilerOracle::tag_blackhole_if_possible(const methodHandle& method) { - if (!check_predicate(CompileCommand::Blackhole, method)) { + if (!check_predicate(CompileCommandEnum::Blackhole, method)) { return; } guarantee(UnlockExperimentalVMOptions, "Checked during initial parsing"); @@ -511,8 +511,8 @@ void CompilerOracle::tag_blackhole_if_possible(const methodHandle& method) { method->set_intrinsic_id(vmIntrinsics::_blackhole); } -static enum CompileCommand match_option_name(const char* line, int* bytes_read, char* errorbuf, int bufsize) { - assert(ARRAY_SIZE(option_names) == static_cast<int>(CompileCommand::Count), "option_names size mismatch"); +static CompileCommandEnum match_option_name(const char* line, int* bytes_read, char* errorbuf, int bufsize) { + assert(ARRAY_SIZE(option_names) == static_cast<int>(CompileCommandEnum::Count), "option_names size mismatch"); *bytes_read = 0; char option_buf[256]; @@ -520,22 +520,22 @@ static enum CompileCommand match_option_name(const char* line, int* bytes_read, if (matches > 0 && strcasecmp(option_buf, "unknown") != 0) { for (uint i = 0; i < ARRAY_SIZE(option_names); i++) { if (strcasecmp(option_buf, option_names[i]) == 0) { - return static_cast<enum CompileCommand>(i); + return static_cast<CompileCommandEnum>(i); } } } jio_snprintf(errorbuf, bufsize, "Unrecognized option '%s'", option_buf); - return CompileCommand::Unknown; + return CompileCommandEnum::Unknown; } // match exactly and don't mess with errorbuf -enum CompileCommand CompilerOracle::parse_option_name(const char* line) { +CompileCommandEnum CompilerOracle::parse_option_name(const char* line) { for (uint i = 0; i < ARRAY_SIZE(option_names); i++) { if (strcasecmp(line, option_names[i]) == 0) { - return static_cast<enum CompileCommand>(i); + return static_cast<CompileCommandEnum>(i); } } - return CompileCommand::Unknown; + return CompileCommandEnum::Unknown; } enum OptionType CompilerOracle::parse_option_type(const char* type_str) { @@ -555,7 +555,7 @@ static void print_tip() { // CMH Update info tty->cr(); } -static void print_option(enum CompileCommand option, const char* name, enum OptionType type) { +static void print_option(CompileCommandEnum option, const char* name, enum OptionType type) { if (type != OptionType::Unknown) { tty->print_cr(" %s (%s)", name, optiontype2name(type)); } @@ -564,7 +564,7 @@ static void print_option(enum CompileCommand option, const char* name, enum Opti static void print_commands() { tty->cr(); tty->print_cr("All available options:"); -#define enum_of_options(option, name, ctype) print_option(CompileCommand::option, name, OptionType::ctype); +#define enum_of_options(option, name, ctype) print_option(CompileCommandEnum::option, name, OptionType::ctype); COMPILECOMMAND_OPTIONS(enum_of_options) #undef enum_of_options tty->cr(); @@ -699,7 +699,7 @@ static bool parseMemStat(const char* line, uintx& value, int& bytes_read, char* } static void scan_value(enum OptionType type, char* line, int& total_bytes_read, - TypedMethodOptionMatcher* matcher, enum CompileCommand option, char* errorbuf, const int buf_size) { + TypedMethodOptionMatcher* matcher, CompileCommandEnum option, char* errorbuf, const int buf_size) { int bytes_read = 0; const char* ccname = option2name(option); const char* type_str = optiontype2name(type); @@ -708,7 +708,7 @@ static void scan_value(enum OptionType type, char* line, int& total_bytes_read, if (type == OptionType::Intx) { intx value; bool success = false; - if (option == CompileCommand::MemLimit) { + if (option == CompileCommandEnum::MemLimit) { // Special parsing for MemLimit success = parseMemLimit(line, value, bytes_read, errorbuf, buf_size); } else { @@ -726,7 +726,7 @@ static void scan_value(enum OptionType type, char* line, int& total_bytes_read, } else if (type == OptionType::Uintx) { uintx value; bool success = false; - if (option == CompileCommand::MemStat) { + if (option == CompileCommandEnum::MemStat) { // Special parsing for MemStat success = parseMemStat(line, value, bytes_read, errorbuf, buf_size); } else { @@ -769,27 +769,27 @@ static void scan_value(enum OptionType type, char* line, int& total_bytes_read, end_value = next_value-1; } - if (option == CompileCommand::ControlIntrinsic || option == CompileCommand::DisableIntrinsic) { - ControlIntrinsicValidator validator(value, (option == CompileCommand::DisableIntrinsic)); + if (option == CompileCommandEnum::ControlIntrinsic || option == CompileCommandEnum::DisableIntrinsic) { + ControlIntrinsicValidator validator(value, (option == CompileCommandEnum::DisableIntrinsic)); if (!validator.is_valid()) { jio_snprintf(errorbuf, buf_size, "Unrecognized intrinsic detected in %s: %s", option2name(option), validator.what()); } } #if !defined(PRODUCT) && defined(COMPILER2) - else if (option == CompileCommand::TraceAutoVectorization) { + else if (option == CompileCommandEnum::TraceAutoVectorization) { TraceAutoVectorizationTagValidator validator(value, true); if (!validator.is_valid()) { jio_snprintf(errorbuf, buf_size, "Unrecognized tag name in %s: %s", option2name(option), validator.what()); } - } else if (option == CompileCommand::PrintIdealPhase) { + } else if (option == CompileCommandEnum::PrintIdealPhase) { PhaseNameValidator validator(value); if (!validator.is_valid()) { jio_snprintf(errorbuf, buf_size, "Unrecognized phase name in %s: %s", option2name(option), validator.what()); } - } else if (option == CompileCommand::TestOptionList) { + } else if (option == CompileCommandEnum::TestOptionList) { // all values are ok } #endif @@ -862,8 +862,8 @@ static void scan_option_and_value(enum OptionType type, char* line, int& total_b total_bytes_read += bytes_read; int bytes_read2 = 0; total_bytes_read += skip_whitespace(line); - enum CompileCommand option = match_option_name(option_buf, &bytes_read2, errorbuf, buf_size); - if (option == CompileCommand::Unknown) { + CompileCommandEnum option = match_option_name(option_buf, &bytes_read2, errorbuf, buf_size); + if (option == CompileCommandEnum::Unknown) { assert(*errorbuf != '\0', "error must have been set"); return; } @@ -914,26 +914,26 @@ bool CompilerOracle::parse_from_line(char* line) { int bytes_read; char error_buf[1024] = {0}; - enum CompileCommand option = match_option_name(line, &bytes_read, error_buf, sizeof(error_buf)); + CompileCommandEnum option = match_option_name(line, &bytes_read, error_buf, sizeof(error_buf)); line += bytes_read; ResourceMark rm; - if (option == CompileCommand::Unknown) { + if (option == CompileCommandEnum::Unknown) { print_parse_error(error_buf, original.get()); return false; } - if (option == CompileCommand::Quiet) { + if (option == CompileCommandEnum::Quiet) { _quiet = true; return true; } - if (option == CompileCommand::Help) { + if (option == CompileCommandEnum::Help) { usage(); return true; } - if (option == CompileCommand::Option) { + if (option == CompileCommandEnum::Option) { // Look for trailing options. // // Two types of trailing options are @@ -975,8 +975,8 @@ bool CompilerOracle::parse_from_line(char* line) { } else { // Type (1) option - option_type contains the option name -> bool value = true is implied int bytes_read; - enum CompileCommand option = match_option_name(option_type, &bytes_read, error_buf, sizeof(error_buf)); - if (option == CompileCommand::Unknown) { + CompileCommandEnum option = match_option_name(option_type, &bytes_read, error_buf, sizeof(error_buf)); + if (option == CompileCommandEnum::Unknown) { print_parse_error(error_buf, original.get()); return false; } @@ -1013,7 +1013,7 @@ bool CompilerOracle::parse_from_line(char* line) { // if this is a bool option this implies true register_command(matcher, option, true); return true; - } else if (option == CompileCommand::MemStat) { + } else if (option == CompileCommandEnum::MemStat) { // MemStat default action is to collect data but to not print register_command(matcher, option, (uintx)MemStatAction::collect); return true; @@ -1125,7 +1125,7 @@ bool compilerOracle_init() { default_cc_file, default_cc_file); } } - if (has_command(CompileCommand::Print)) { + if (has_command(CompileCommandEnum::Print)) { if (PrintAssembly) { warning("CompileCommand and/or %s file contains 'print' commands, but PrintAssembly is also enabled", default_cc_file); } @@ -1149,7 +1149,7 @@ bool CompilerOracle::parse_compile_only(char* line) { if (method_pattern != nullptr) { TypedMethodOptionMatcher* matcher = TypedMethodOptionMatcher::parse_method_pattern(method_pattern, error_buf, sizeof(error_buf)); if (matcher != nullptr) { - register_command(matcher, CompileCommand::CompileOnly, true); + register_command(matcher, CompileCommandEnum::CompileOnly, true); continue; } } @@ -1164,7 +1164,7 @@ bool CompilerOracle::parse_compile_only(char* line) { return true; } -enum CompileCommand CompilerOracle::string_to_option(const char* name) { +CompileCommandEnum CompilerOracle::string_to_option(const char* name) { int bytes_read = 0; char errorbuf[1024] = {0}; return match_option_name(name, &bytes_read, errorbuf, sizeof(errorbuf)); diff --git a/src/hotspot/share/compiler/compilerOracle.hpp b/src/hotspot/share/compiler/compilerOracle.hpp index 192e292d35a2b..43a30b30facec 100644 --- a/src/hotspot/share/compiler/compilerOracle.hpp +++ b/src/hotspot/share/compiler/compilerOracle.hpp @@ -101,7 +101,7 @@ NOT_PRODUCT(option(TestOptionDouble, "TestOptionDouble", Double)) \ option(Option, "option", Unknown) \ option(Unknown, "unknown", Unknown) -enum class CompileCommand { +enum class CompileCommandEnum : int { #define enum_of_options(option, name, ctype) option, COMPILECOMMAND_OPTIONS(enum_of_options) #undef enum_of_options @@ -123,7 +123,7 @@ class CompilerOracle : AllStatic { private: static bool _quiet; static void print_parse_error(char* error_msg, char* original_line); - static void print_command(enum CompileCommand option, const char* name, enum OptionType type); + static void print_command(CompileCommandEnum option, const char* name, enum OptionType type); public: // True if the command file has been specified or is implicit @@ -165,16 +165,16 @@ class CompilerOracle : AllStatic { static void tag_blackhole_if_possible(const methodHandle& method); // A wrapper for checking bool options - static bool has_option(const methodHandle& method, enum CompileCommand option); + static bool has_option(const methodHandle& method, CompileCommandEnum option); // Check if method has option and value set. If yes, overwrite value and return true, // otherwise leave value unchanged and return false. template<typename T> - static bool has_option_value(const methodHandle& method, enum CompileCommand option, T& value); + static bool has_option_value(const methodHandle& method, CompileCommandEnum option, T& value); // This check is currently only needed by whitebox API template<typename T> - static bool option_matches_type(enum CompileCommand option, T& value); + static bool option_matches_type(CompileCommandEnum option, T& value); // Reads from string instead of file static bool parse_from_string(const char* option_string, bool (*parser)(char*)); @@ -185,12 +185,12 @@ class CompilerOracle : AllStatic { static bool has_any_command_set(); // convert a string to a proper compilecommand option - used from whitebox. - // returns CompileCommand::Unknown on names not matching an option. - static enum CompileCommand string_to_option(const char* name); + // returns CompileCommandEnum::Unknown on names not matching an option. + static CompileCommandEnum string_to_option(const char* name); // convert a string to a proper compilecommand option - // returns CompileCommand::Unknown if name is not an option. - static enum CompileCommand parse_option_name(const char* name); + // returns CompileCommandEnum::Unknown if name is not an option. + static CompileCommandEnum parse_option_name(const char* name); // convert a string to a proper option type // returns OptionType::Unknown on strings not matching an option type. diff --git a/src/hotspot/share/compiler/methodMatcher.cpp b/src/hotspot/share/compiler/methodMatcher.cpp index de2e4e82bba3f..1a0ade2fadbd3 100644 --- a/src/hotspot/share/compiler/methodMatcher.cpp +++ b/src/hotspot/share/compiler/methodMatcher.cpp @@ -286,7 +286,7 @@ void MethodMatcher::parse_method_pattern(char*& line, const char*& error_msg, Me // In very rare case, the method name happens to be same as option type/name, so look ahead to make sure // it doesn't show up again. if ((OptionType::Unknown != CompilerOracle::parse_option_type(method_name) || - CompileCommand::Unknown != CompilerOracle::parse_option_name(method_name)) && + CompileCommandEnum::Unknown != CompilerOracle::parse_option_name(method_name)) && *(line + bytes_read) != '\0' && strstr(line + bytes_read, method_name) == nullptr) { error_msg = "Did not specify any method name"; diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp index 99d5f9ae58801..0d9c92cad518a 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp @@ -31,6 +31,7 @@ #include "code/scopeDesc.hpp" #include "compiler/compileBroker.hpp" #include "compiler/compilerEvent.hpp" +#include "compiler/compilerOracle.hpp" #include "compiler/disassembler.hpp" #include "compiler/oopMap.hpp" #include "interpreter/bytecodeStream.hpp" diff --git a/src/hotspot/share/oops/methodCounters.cpp b/src/hotspot/share/oops/methodCounters.cpp index e9237b18e6009..00096c5012cbd 100644 --- a/src/hotspot/share/oops/methodCounters.cpp +++ b/src/hotspot/share/oops/methodCounters.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,8 +21,10 @@ * questions. * */ + #include "precompiled.hpp" #include "compiler/compiler_globals.hpp" +#include "compiler/compilerOracle.hpp" #include "oops/method.hpp" #include "oops/methodCounters.hpp" #include "runtime/handles.inline.hpp" @@ -40,7 +42,7 @@ MethodCounters::MethodCounters(const methodHandle& mh) : // Set per-method thresholds. double scale = 1.0; - CompilerOracle::has_option_value(mh, CompileCommand::CompileThresholdScaling, scale); + CompilerOracle::has_option_value(mh, CompileCommandEnum::CompileThresholdScaling, scale); _invoke_mask = right_n_bits(CompilerConfig::scaled_freq_log(Tier0InvokeNotifyFreqLog, scale)) << InvocationCounter::count_shift; _backedge_mask = right_n_bits(CompilerConfig::scaled_freq_log(Tier0BackedgeNotifyFreqLog, scale)) << InvocationCounter::count_shift; diff --git a/src/hotspot/share/oops/methodCounters.hpp b/src/hotspot/share/oops/methodCounters.hpp index d1b2207961f27..80cfb159b50ce 100644 --- a/src/hotspot/share/oops/methodCounters.hpp +++ b/src/hotspot/share/oops/methodCounters.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,6 @@ #include "oops/metadata.hpp" #include "compiler/compilerDefinitions.hpp" -#include "compiler/compilerOracle.hpp" #include "interpreter/invocationCounter.hpp" #include "utilities/align.hpp" diff --git a/src/hotspot/share/oops/methodData.cpp b/src/hotspot/share/oops/methodData.cpp index 008de899bdb25..08dfc1fe95a36 100644 --- a/src/hotspot/share/oops/methodData.cpp +++ b/src/hotspot/share/oops/methodData.cpp @@ -1319,7 +1319,7 @@ void MethodData::init() { // Set per-method invoke- and backedge mask. double scale = 1.0; methodHandle mh(Thread::current(), _method); - CompilerOracle::has_option_value(mh, CompileCommand::CompileThresholdScaling, scale); + CompilerOracle::has_option_value(mh, CompileCommandEnum::CompileThresholdScaling, scale); _invoke_mask = (int)right_n_bits(CompilerConfig::scaled_freq_log(Tier0InvokeNotifyFreqLog, scale)) << InvocationCounter::count_shift; _backedge_mask = (int)right_n_bits(CompilerConfig::scaled_freq_log(Tier0BackedgeNotifyFreqLog, scale)) << InvocationCounter::count_shift; @@ -1336,8 +1336,8 @@ void MethodData::init() { #if INCLUDE_RTM_OPT _rtm_state = NoRTM; // No RTM lock eliding by default if (UseRTMLocking && - !CompilerOracle::has_option(mh, CompileCommand::NoRTMLockEliding)) { - if (CompilerOracle::has_option(mh, CompileCommand::UseRTMLockEliding) || !UseRTMDeopt) { + !CompilerOracle::has_option(mh, CompileCommandEnum::NoRTMLockEliding)) { + if (CompilerOracle::has_option(mh, CompileCommandEnum::UseRTMLockEliding) || !UseRTMDeopt) { // Generate RTM lock eliding code without abort ratio calculation code. _rtm_state = UseRTM; } else if (UseRTMDeopt) { diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp index d8881689678ec..e6a522e36107d 100644 --- a/src/hotspot/share/opto/compile.cpp +++ b/src/hotspot/share/opto/compile.cpp @@ -33,6 +33,7 @@ #include "compiler/compilationMemoryStatistic.hpp" #include "compiler/compileBroker.hpp" #include "compiler/compileLog.hpp" +#include "compiler/compilerOracle.hpp" #include "compiler/compiler_globals.hpp" #include "compiler/disassembler.hpp" #include "compiler/oopMap.hpp" @@ -1082,10 +1083,10 @@ void Compile::Init(bool aliasing) { #if INCLUDE_RTM_OPT if (UseRTMLocking && has_method() && (method()->method_data_or_null() != nullptr)) { int rtm_state = method()->method_data()->rtm_state(); - if (method_has_option(CompileCommand::NoRTMLockEliding) || ((rtm_state & NoRTM) != 0)) { + if (method_has_option(CompileCommandEnum::NoRTMLockEliding) || ((rtm_state & NoRTM) != 0)) { // Don't generate RTM lock eliding code. set_rtm_state(NoRTM); - } else if (method_has_option(CompileCommand::UseRTMLockEliding) || ((rtm_state & UseRTM) != 0) || !UseRTMDeopt) { + } else if (method_has_option(CompileCommandEnum::UseRTMLockEliding) || ((rtm_state & UseRTM) != 0) || !UseRTMDeopt) { // Generate RTM lock eliding code without abort ratio calculation code. set_rtm_state(UseRTM); } else if (UseRTMDeopt) { diff --git a/src/hotspot/share/opto/compile.hpp b/src/hotspot/share/opto/compile.hpp index 0b60a674b4978..8f49c1616726e 100644 --- a/src/hotspot/share/opto/compile.hpp +++ b/src/hotspot/share/opto/compile.hpp @@ -29,7 +29,6 @@ #include "ci/compilerInterface.hpp" #include "code/debugInfoRec.hpp" #include "compiler/compiler_globals.hpp" -#include "compiler/compilerOracle.hpp" #include "compiler/compileBroker.hpp" #include "compiler/compilerEvent.hpp" #include "compiler/cHeapStringHolder.hpp" @@ -46,6 +45,7 @@ #include "runtime/timerTrace.hpp" #include "runtime/vmThread.hpp" #include "utilities/ticks.hpp" +#include "utilities/vmEnums.hpp" class AbstractLockNode; class AddPNode; @@ -678,7 +678,7 @@ class Compile : public Phase { void set_has_monitors(bool v) { _has_monitors = v; } // check the CompilerOracle for special behaviours for this compile - bool method_has_option(enum CompileCommand option) { + bool method_has_option(CompileCommandEnum option) { return method() != nullptr && method()->has_option(option); } diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp index 9ad77658072f7..f8dc972d06836 100644 --- a/src/hotspot/share/prims/whitebox.cpp +++ b/src/hotspot/share/prims/whitebox.cpp @@ -41,6 +41,7 @@ #include "classfile/vmSymbols.hpp" #include "code/codeCache.hpp" #include "compiler/compilationPolicy.hpp" +#include "compiler/compilerOracle.hpp" #include "compiler/directivesParser.hpp" #include "compiler/methodMatcher.hpp" #include "gc/shared/concurrentGCBreakpoints.hpp" @@ -1988,9 +1989,9 @@ static bool GetMethodOption(JavaThread* thread, JNIEnv* env, jobject method, jst ThreadToNativeFromVM ttnfv(thread); const char* flag_name = env->GetStringUTFChars(name, nullptr); CHECK_JNI_EXCEPTION_(env, false); - enum CompileCommand option = CompilerOracle::string_to_option(flag_name); + CompileCommandEnum option = CompilerOracle::string_to_option(flag_name); env->ReleaseStringUTFChars(name, flag_name); - if (option == CompileCommand::Unknown) { + if (option == CompileCommandEnum::Unknown) { return false; } if (!CompilerOracle::option_matches_type(option, *value)) { diff --git a/src/hotspot/share/utilities/vmEnums.hpp b/src/hotspot/share/utilities/vmEnums.hpp index e3d298f24bc0c..79d540762ddff 100644 --- a/src/hotspot/share/utilities/vmEnums.hpp +++ b/src/hotspot/share/utilities/vmEnums.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ // you don't use their members directly. This way you don't need to include the // complex header files that have the full definitions of these enums. +enum class CompileCommandEnum : int; enum class JavaThreadStatus : int; enum class JVMFlagOrigin : int; enum JVMFlagsEnum : int; From 185e711bfe4c4d013b56e867f85cfb4177b3a2cf Mon Sep 17 00:00:00 2001 From: Jatin Bhateja <jbhateja@openjdk.org> Date: Sun, 21 Apr 2024 23:21:17 +0000 Subject: [PATCH 029/141] 8318650: Optimized subword gather for x86 targets. Reviewed-by: sviswanathan, epeter, psandoz --- src/hotspot/cpu/aarch64/aarch64_vector.ad | 8 +- src/hotspot/cpu/aarch64/matcher_aarch64.hpp | 5 + src/hotspot/cpu/arm/matcher_arm.hpp | 5 + src/hotspot/cpu/ppc/matcher_ppc.hpp | 5 + src/hotspot/cpu/riscv/matcher_riscv.hpp | 5 + src/hotspot/cpu/riscv/riscv_v.ad | 5 + src/hotspot/cpu/s390/matcher_s390.hpp | 5 + src/hotspot/cpu/x86/assembler_x86.cpp | 6 +- src/hotspot/cpu/x86/assembler_x86.hpp | 1 + src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp | 124 ++++++ src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp | 12 + src/hotspot/cpu/x86/matcher_x86.hpp | 13 + src/hotspot/cpu/x86/x86.ad | 260 ++++++++++++- src/hotspot/share/opto/loopTransform.cpp | 2 + src/hotspot/share/opto/matcher.cpp | 15 + src/hotspot/share/opto/vectorIntrinsics.cpp | 38 +- src/hotspot/share/opto/vectornode.hpp | 29 +- .../jdk/incubator/vector/Byte128Vector.java | 6 + .../jdk/incubator/vector/Byte256Vector.java | 6 + .../jdk/incubator/vector/Byte512Vector.java | 6 + .../jdk/incubator/vector/Byte64Vector.java | 6 + .../jdk/incubator/vector/ByteMaxVector.java | 6 + .../jdk/incubator/vector/ByteVector.java | 82 +++- .../jdk/incubator/vector/Short128Vector.java | 6 + .../jdk/incubator/vector/Short256Vector.java | 6 + .../jdk/incubator/vector/Short512Vector.java | 6 + .../jdk/incubator/vector/Short64Vector.java | 6 + .../jdk/incubator/vector/ShortMaxVector.java | 6 + .../jdk/incubator/vector/ShortVector.java | 82 +++- .../incubator/vector/X-Vector.java.template | 85 ++++- .../vector/X-VectorBits.java.template | 2 - .../vector/GatherOperationsBenchmark.java | 357 ++++++++++++++++++ 32 files changed, 1157 insertions(+), 49 deletions(-) create mode 100644 test/micro/org/openjdk/bench/jdk/incubator/vector/GatherOperationsBenchmark.java diff --git a/src/hotspot/cpu/aarch64/aarch64_vector.ad b/src/hotspot/cpu/aarch64/aarch64_vector.ad index 467d6ec22508d..4e8eb47ee5fa2 100644 --- a/src/hotspot/cpu/aarch64/aarch64_vector.ad +++ b/src/hotspot/cpu/aarch64/aarch64_vector.ad @@ -169,9 +169,7 @@ source %{ case Op_VectorMaskGen: case Op_LoadVectorMasked: case Op_StoreVectorMasked: - case Op_LoadVectorGather: case Op_StoreVectorScatter: - case Op_LoadVectorGatherMasked: case Op_StoreVectorScatterMasked: case Op_PopulateIndex: case Op_CompressM: @@ -180,6 +178,12 @@ source %{ return false; } break; + case Op_LoadVectorGather: + case Op_LoadVectorGatherMasked: + if (UseSVE == 0 || is_subword_type(bt)) { + return false; + } + break; case Op_MulAddVS2VI: if (length_in_bytes != 16) { return false; diff --git a/src/hotspot/cpu/aarch64/matcher_aarch64.hpp b/src/hotspot/cpu/aarch64/matcher_aarch64.hpp index 08bff22d7d0a2..4d28e5ade6637 100644 --- a/src/hotspot/cpu/aarch64/matcher_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/matcher_aarch64.hpp @@ -133,6 +133,11 @@ return true; } + // Does target support predicated operation emulation. + static bool supports_vector_predicate_op_emulation(int vopc, int vlen, BasicType bt) { + return false; + } + // Does the CPU supports vector variable rotate instructions? static constexpr bool supports_vector_variable_rotates(void) { return false; diff --git a/src/hotspot/cpu/arm/matcher_arm.hpp b/src/hotspot/cpu/arm/matcher_arm.hpp index eb26cbcbd7ada..716a997a72b3b 100644 --- a/src/hotspot/cpu/arm/matcher_arm.hpp +++ b/src/hotspot/cpu/arm/matcher_arm.hpp @@ -126,6 +126,11 @@ return VM_Version::has_simd(); } + // Does target support predicated operation emulation. + static bool supports_vector_predicate_op_emulation(int vopc, int vlen, BasicType bt) { + return false; + } + // Does the CPU supports vector variable rotate instructions? static constexpr bool supports_vector_variable_rotates(void) { return false; // not supported diff --git a/src/hotspot/cpu/ppc/matcher_ppc.hpp b/src/hotspot/cpu/ppc/matcher_ppc.hpp index b195ba4eeb202..0ee4245f27415 100644 --- a/src/hotspot/cpu/ppc/matcher_ppc.hpp +++ b/src/hotspot/cpu/ppc/matcher_ppc.hpp @@ -133,6 +133,11 @@ return false; } + // Does target support predicated operation emulation. + static bool supports_vector_predicate_op_emulation(int vopc, int vlen, BasicType bt) { + return false; + } + // Does the CPU supports vector variable rotate instructions? static constexpr bool supports_vector_variable_rotates(void) { return false; diff --git a/src/hotspot/cpu/riscv/matcher_riscv.hpp b/src/hotspot/cpu/riscv/matcher_riscv.hpp index 08914d4d83431..32665f5922cf5 100644 --- a/src/hotspot/cpu/riscv/matcher_riscv.hpp +++ b/src/hotspot/cpu/riscv/matcher_riscv.hpp @@ -132,6 +132,11 @@ return false; } + // Does target support predicated operation emulation. + static bool supports_vector_predicate_op_emulation(int vopc, int vlen, BasicType bt) { + return false; + } + // Does the CPU supports vector variable rotate instructions? static constexpr bool supports_vector_variable_rotates(void) { return false; diff --git a/src/hotspot/cpu/riscv/riscv_v.ad b/src/hotspot/cpu/riscv/riscv_v.ad index 86309ec912844..01a367a46eaa7 100644 --- a/src/hotspot/cpu/riscv/riscv_v.ad +++ b/src/hotspot/cpu/riscv/riscv_v.ad @@ -73,6 +73,11 @@ source %{ return false; } break; + case Op_LoadVectorGatherMasked: + if (is_subword_type(bt)) { + return false; + } + break; case Op_VectorCastHF2F: case Op_VectorCastF2HF: return UseZvfh; diff --git a/src/hotspot/cpu/s390/matcher_s390.hpp b/src/hotspot/cpu/s390/matcher_s390.hpp index 450ea35a6cb18..6c6cae3c58fc3 100644 --- a/src/hotspot/cpu/s390/matcher_s390.hpp +++ b/src/hotspot/cpu/s390/matcher_s390.hpp @@ -124,6 +124,11 @@ return false; } + // Does target support predicated operation emulation. + static bool supports_vector_predicate_op_emulation(int vopc, int vlen, BasicType bt) { + return false; + } + // Does the CPU supports vector variable rotate instructions? static constexpr bool supports_vector_variable_rotates(void) { return false; diff --git a/src/hotspot/cpu/x86/assembler_x86.cpp b/src/hotspot/cpu/x86/assembler_x86.cpp index dd3f9c64e20ef..6ed04ad5211dc 100644 --- a/src/hotspot/cpu/x86/assembler_x86.cpp +++ b/src/hotspot/cpu/x86/assembler_x86.cpp @@ -13652,9 +13652,13 @@ void Assembler::notq(Register dst) { emit_int16((unsigned char)0xF7, (0xD0 | encode)); } +void Assembler::btq(Register dst, Register src) { + int encode = prefixq_and_encode(src->encoding(), dst->encoding()); + emit_int24(0x0F, (unsigned char)0xA3, (encode | 0xC0)); +} + void Assembler::btq(Register src, int imm8) { assert(isByte(imm8), "not a byte"); - InstructionMark im(this); int encode = prefixq_and_encode(src->encoding()); emit_int16(0x0f, 0xba); emit_int8(0xe0|encode); diff --git a/src/hotspot/cpu/x86/assembler_x86.hpp b/src/hotspot/cpu/x86/assembler_x86.hpp index 656b2a97c7027..64e8cf99bfca1 100644 --- a/src/hotspot/cpu/x86/assembler_x86.hpp +++ b/src/hotspot/cpu/x86/assembler_x86.hpp @@ -1736,6 +1736,7 @@ class Assembler : public AbstractAssembler { void btrq(Address dst, int imm8); void btq(Register src, int imm8); #endif + void btq(Register dst, Register src); void orw(Register dst, Register src); diff --git a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp index c79753618c0ac..d0eb103d81b87 100644 --- a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.cpp @@ -1796,6 +1796,130 @@ void C2_MacroAssembler::vinsert(BasicType typ, XMMRegister dst, XMMRegister src, } } +#ifdef _LP64 +void C2_MacroAssembler::vgather8b_masked_offset(BasicType elem_bt, + XMMRegister dst, Register base, + Register idx_base, + Register offset, Register mask, + Register mask_idx, Register rtmp, + int vlen_enc) { + vpxor(dst, dst, dst, vlen_enc); + if (elem_bt == T_SHORT) { + for (int i = 0; i < 4; i++) { + // dst[i] = mask[i] ? src[offset + idx_base[i]] : 0 + Label skip_load; + btq(mask, mask_idx); + jccb(Assembler::carryClear, skip_load); + movl(rtmp, Address(idx_base, i * 4)); + if (offset != noreg) { + addl(rtmp, offset); + } + pinsrw(dst, Address(base, rtmp, Address::times_2), i); + bind(skip_load); + incq(mask_idx); + } + } else { + assert(elem_bt == T_BYTE, ""); + for (int i = 0; i < 8; i++) { + // dst[i] = mask[i] ? src[offset + idx_base[i]] : 0 + Label skip_load; + btq(mask, mask_idx); + jccb(Assembler::carryClear, skip_load); + movl(rtmp, Address(idx_base, i * 4)); + if (offset != noreg) { + addl(rtmp, offset); + } + pinsrb(dst, Address(base, rtmp), i); + bind(skip_load); + incq(mask_idx); + } + } +} +#endif // _LP64 + +void C2_MacroAssembler::vgather8b_offset(BasicType elem_bt, XMMRegister dst, + Register base, Register idx_base, + Register offset, Register rtmp, + int vlen_enc) { + vpxor(dst, dst, dst, vlen_enc); + if (elem_bt == T_SHORT) { + for (int i = 0; i < 4; i++) { + // dst[i] = src[offset + idx_base[i]] + movl(rtmp, Address(idx_base, i * 4)); + if (offset != noreg) { + addl(rtmp, offset); + } + pinsrw(dst, Address(base, rtmp, Address::times_2), i); + } + } else { + assert(elem_bt == T_BYTE, ""); + for (int i = 0; i < 8; i++) { + // dst[i] = src[offset + idx_base[i]] + movl(rtmp, Address(idx_base, i * 4)); + if (offset != noreg) { + addl(rtmp, offset); + } + pinsrb(dst, Address(base, rtmp), i); + } + } +} + +/* + * Gather using hybrid algorithm, first partially unroll scalar loop + * to accumulate values from gather indices into a quad-word(64bit) slice. + * A slice may hold 8 bytes or 4 short values. This is followed by a vector + * permutation to place the slice into appropriate vector lane + * locations in destination vector. Following pseudo code describes the + * algorithm in detail: + * + * DST_VEC = ZERO_VEC + * PERM_INDEX = {0, 1, 2, 3, 4, 5, 6, 7, 8..} + * TWO_VEC = {2, 2, 2, 2, 2, 2, 2, 2, 2..} + * FOREACH_ITER: + * TMP_VEC_64 = PICK_SUB_WORDS_FROM_GATHER_INDICES + * TEMP_PERM_VEC = PERMUTE TMP_VEC_64 PERM_INDEX + * DST_VEC = DST_VEC OR TEMP_PERM_VEC + * PERM_INDEX = PERM_INDEX - TWO_VEC + * + * With each iteration, doubleword permute indices (0,1) corresponding + * to gathered quadword gets right shifted by two lane positions. + * + */ +void C2_MacroAssembler::vgather_subword(BasicType elem_ty, XMMRegister dst, + Register base, Register idx_base, + Register offset, Register mask, + XMMRegister xtmp1, XMMRegister xtmp2, + XMMRegister temp_dst, Register rtmp, + Register mask_idx, Register length, + int vector_len, int vlen_enc) { + Label GATHER8_LOOP; + assert(is_subword_type(elem_ty), ""); + movl(length, vector_len); + vpxor(xtmp1, xtmp1, xtmp1, vlen_enc); // xtmp1 = {0, ...} + vpxor(dst, dst, dst, vlen_enc); // dst = {0, ...} + vallones(xtmp2, vlen_enc); + vpsubd(xtmp2, xtmp1, xtmp2, vlen_enc); + vpslld(xtmp2, xtmp2, 1, vlen_enc); // xtmp2 = {2, 2, ...} + load_iota_indices(xtmp1, vector_len * type2aelembytes(elem_ty), T_INT); // xtmp1 = {0, 1, 2, ...} + + bind(GATHER8_LOOP); + // TMP_VEC_64(temp_dst) = PICK_SUB_WORDS_FROM_GATHER_INDICES + if (mask == noreg) { + vgather8b_offset(elem_ty, temp_dst, base, idx_base, offset, rtmp, vlen_enc); + } else { + LP64_ONLY(vgather8b_masked_offset(elem_ty, temp_dst, base, idx_base, offset, mask, mask_idx, rtmp, vlen_enc)); + } + // TEMP_PERM_VEC(temp_dst) = PERMUTE TMP_VEC_64(temp_dst) PERM_INDEX(xtmp1) + vpermd(temp_dst, xtmp1, temp_dst, vlen_enc == Assembler::AVX_512bit ? vlen_enc : Assembler::AVX_256bit); + // PERM_INDEX(xtmp1) = PERM_INDEX(xtmp1) - TWO_VEC(xtmp2) + vpsubd(xtmp1, xtmp1, xtmp2, vlen_enc); + // DST_VEC = DST_VEC OR TEMP_PERM_VEC + vpor(dst, dst, temp_dst, vlen_enc); + addptr(idx_base, 32 >> (type2aelembytes(elem_ty) - 1)); + subl(length, 8 >> (type2aelembytes(elem_ty) - 1)); + jcc(Assembler::notEqual, GATHER8_LOOP); +} + void C2_MacroAssembler::vgather(BasicType typ, XMMRegister dst, Register base, XMMRegister idx, XMMRegister mask, int vector_len) { switch(typ) { case T_INT: diff --git a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp index 26f7fb44aa939..8c22990892b01 100644 --- a/src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/c2_MacroAssembler_x86.hpp @@ -500,4 +500,16 @@ void vector_rearrange_int_float(BasicType bt, XMMRegister dst, XMMRegister shuffle, XMMRegister src, int vlen_enc); + + void vgather_subword(BasicType elem_ty, XMMRegister dst, Register base, Register idx_base, Register offset, + Register mask, XMMRegister xtmp1, XMMRegister xtmp2, XMMRegister xtmp3, Register rtmp, + Register midx, Register length, int vector_len, int vlen_enc); + +#ifdef _LP64 + void vgather8b_masked_offset(BasicType elem_bt, XMMRegister dst, Register base, Register idx_base, + Register offset, Register mask, Register midx, Register rtmp, int vlen_enc); +#endif + void vgather8b_offset(BasicType elem_bt, XMMRegister dst, Register base, Register idx_base, + Register offset, Register rtmp, int vlen_enc); + #endif // CPU_X86_C2_MACROASSEMBLER_X86_HPP diff --git a/src/hotspot/cpu/x86/matcher_x86.hpp b/src/hotspot/cpu/x86/matcher_x86.hpp index de844c4be9f3a..192e959451f0e 100644 --- a/src/hotspot/cpu/x86/matcher_x86.hpp +++ b/src/hotspot/cpu/x86/matcher_x86.hpp @@ -154,6 +154,16 @@ return (UseAVX >= 2); } + // Does target support predicated operation emulation. + static bool supports_vector_predicate_op_emulation(int vopc, int vlen, BasicType bt) { + switch(vopc) { + case Op_LoadVectorGatherMasked: + return is_subword_type(bt) && VM_Version::supports_avx2(); + default: + return false; + } + } + // Does the CPU supports vector variable rotate instructions? static constexpr bool supports_vector_variable_rotates(void) { return true; @@ -214,6 +224,9 @@ return 7; case Op_MulVL: return VM_Version::supports_avx512vldq() ? 0 : 6; + case Op_LoadVectorGather: + case Op_LoadVectorGatherMasked: + return is_subword_type(ety) ? 50 : 0; case Op_VectorCastF2X: // fall through case Op_VectorCastD2X: return is_floating_point_type(ety) ? 0 : (is_subword_type(ety) ? 35 : 30); diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index 0b262bb9c37d4..7bbae30c83279 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -1569,6 +1569,7 @@ bool Matcher::match_rule_supported(int opcode) { } break; case Op_LoadVectorGather: + case Op_LoadVectorGatherMasked: if (UseAVX < 2) { return false; } @@ -1906,6 +1907,17 @@ bool Matcher::match_rule_supported_vector(int opcode, int vlen, BasicType bt) { } break; case Op_LoadVectorGatherMasked: + if (!is_subword_type(bt) && size_in_bits < 512 && !VM_Version::supports_avx512vl()) { + return false; + } + if (is_subword_type(bt) && + (!is_LP64 || + (size_in_bits > 256 && !VM_Version::supports_avx512bw()) || + (size_in_bits < 64) || + (bt == T_SHORT && !VM_Version::supports_bmi2()))) { + return false; + } + break; case Op_StoreVectorScatterMasked: case Op_StoreVectorScatter: if (is_subword_type(bt)) { @@ -1915,7 +1927,10 @@ bool Matcher::match_rule_supported_vector(int opcode, int vlen, BasicType bt) { } // fallthrough case Op_LoadVectorGather: - if (size_in_bits == 64 ) { + if (!is_subword_type(bt) && size_in_bits == 64) { + return false; + } + if (is_subword_type(bt) && size_in_bits < 64) { return false; } break; @@ -4024,10 +4039,11 @@ instruct storeV(memory mem, vec src) %{ // ---------------------------------------- Gather ------------------------------------ -// Gather INT, LONG, FLOAT, DOUBLE +// Gather BYTE, SHORT, INT, LONG, FLOAT, DOUBLE instruct gather(legVec dst, memory mem, legVec idx, rRegP tmp, legVec mask) %{ - predicate(!VM_Version::supports_avx512vl() && Matcher::vector_length_in_bytes(n) <= 32); + predicate(!VM_Version::supports_avx512vl() && !is_subword_type(Matcher::vector_element_basic_type(n)) && + Matcher::vector_length_in_bytes(n) <= 32); match(Set dst (LoadVectorGather mem idx)); effect(TEMP dst, TEMP tmp, TEMP mask); format %{ "load_vector_gather $dst, $mem, $idx\t! using $tmp and $mask as TEMP" %} @@ -4044,7 +4060,8 @@ instruct gather(legVec dst, memory mem, legVec idx, rRegP tmp, legVec mask) %{ instruct evgather(vec dst, memory mem, vec idx, rRegP tmp, kReg ktmp) %{ - predicate(VM_Version::supports_avx512vl() || Matcher::vector_length_in_bytes(n) == 64); + predicate((VM_Version::supports_avx512vl() || Matcher::vector_length_in_bytes(n) == 64) && + !is_subword_type(Matcher::vector_element_basic_type(n))); match(Set dst (LoadVectorGather mem idx)); effect(TEMP dst, TEMP tmp, TEMP ktmp); format %{ "load_vector_gather $dst, $mem, $idx\t! using $tmp and ktmp as TEMP" %} @@ -4059,7 +4076,8 @@ instruct evgather(vec dst, memory mem, vec idx, rRegP tmp, kReg ktmp) %{ %} instruct evgather_masked(vec dst, memory mem, vec idx, kReg mask, kReg ktmp, rRegP tmp) %{ - predicate(VM_Version::supports_avx512vl() || Matcher::vector_length_in_bytes(n) == 64); + predicate((VM_Version::supports_avx512vl() || Matcher::vector_length_in_bytes(n) == 64) && + !is_subword_type(Matcher::vector_element_basic_type(n))); match(Set dst (LoadVectorGatherMasked mem (Binary idx mask))); effect(TEMP_DEF dst, TEMP tmp, TEMP ktmp); format %{ "load_vector_gather_masked $dst, $mem, $idx, $mask\t! using $tmp and ktmp as TEMP" %} @@ -4077,6 +4095,238 @@ instruct evgather_masked(vec dst, memory mem, vec idx, kReg mask, kReg ktmp, rRe %} ins_pipe( pipe_slow ); %} + +instruct vgather_subwordLE8B(vec dst, memory mem, rRegP idx_base, immI_0 offset, rRegP tmp, rRegI rtmp) %{ + predicate(is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) <= 8); + match(Set dst (LoadVectorGather mem (Binary idx_base offset))); + effect(TEMP tmp, TEMP rtmp); + format %{ "vector_gatherLE8 $dst, $mem, $idx_base\t! using $tmp and $rtmp as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ lea($tmp$$Register, $mem$$Address); + __ vgather8b_offset(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base$$Register, noreg, $rtmp$$Register, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + +instruct vgather_subwordGT8B(vec dst, memory mem, rRegP idx_base, immI_0 offset, rRegP tmp, rRegP idx_base_temp, + vec xtmp1, vec xtmp2, vec xtmp3, rRegI rtmp, rRegI length, rFlagsReg cr) %{ + predicate(is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) > 8); + match(Set dst (LoadVectorGather mem (Binary idx_base offset))); + effect(TEMP_DEF dst, TEMP tmp, TEMP idx_base_temp, TEMP xtmp1, TEMP xtmp2, TEMP xtmp3, TEMP rtmp, TEMP length, KILL cr); + format %{ "vector_gatherGT8 $dst, $mem, $idx_base\t! using $tmp, $idx_base_temp, $xtmp1, $xtmp2, $xtmp3, $rtmp and $length as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + int vector_len = Matcher::vector_length(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ lea($tmp$$Register, $mem$$Address); + __ movptr($idx_base_temp$$Register, $idx_base$$Register); + __ vgather_subword(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base_temp$$Register, noreg, noreg, $xtmp1$$XMMRegister, + $xtmp2$$XMMRegister, $xtmp3$$XMMRegister, $rtmp$$Register, noreg, $length$$Register, vector_len, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + +instruct vgather_subwordLE8B_off(vec dst, memory mem, rRegP idx_base, rRegI offset, rRegP tmp, rRegI rtmp, rFlagsReg cr) %{ + predicate(is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) <= 8); + match(Set dst (LoadVectorGather mem (Binary idx_base offset))); + effect(TEMP tmp, TEMP rtmp, KILL cr); + format %{ "vector_gatherLE8_off $dst, $mem, $idx_base, $offset\t! using $tmp and $rtmp as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ lea($tmp$$Register, $mem$$Address); + __ vgather8b_offset(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base$$Register, $offset$$Register, $rtmp$$Register, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + + +instruct vgather_subwordGT8B_off(vec dst, memory mem, rRegP idx_base, rRegI offset, rRegP tmp, rRegP idx_base_temp, + vec xtmp1, vec xtmp2, vec xtmp3, rRegI rtmp, rRegI length, rFlagsReg cr) %{ + predicate(is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) > 8); + match(Set dst (LoadVectorGather mem (Binary idx_base offset))); + effect(TEMP_DEF dst, TEMP tmp, TEMP idx_base_temp, TEMP xtmp1, TEMP xtmp2, TEMP xtmp3, TEMP rtmp, TEMP length, KILL cr); + format %{ "vector_gatherGT8_off $dst, $mem, $idx_base, $offset\t! using $tmp, $idx_base_temp, $xtmp1, $xtmp2, $xtmp3, $rtmp and $length as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + int vector_len = Matcher::vector_length(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ lea($tmp$$Register, $mem$$Address); + __ movptr($idx_base_temp$$Register, $idx_base$$Register); + __ vgather_subword(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base_temp$$Register, $offset$$Register, noreg, $xtmp1$$XMMRegister, + $xtmp2$$XMMRegister, $xtmp3$$XMMRegister, $rtmp$$Register, noreg, $length$$Register, vector_len, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + + +#ifdef _LP64 +instruct vgather_masked_subwordLE8B_avx3(vec dst, memory mem, rRegP idx_base, immI_0 offset, kReg mask, rRegL mask_idx, rRegP tmp, rRegI rtmp, rRegL rtmp2, rFlagsReg cr) %{ + predicate(VM_Version::supports_avx512bw() && is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) <= 8); + match(Set dst (LoadVectorGatherMasked mem (Binary idx_base (Binary mask offset)))); + effect(TEMP mask_idx, TEMP tmp, TEMP rtmp, TEMP rtmp2, KILL cr); + format %{ "vector_masked_gatherLE8 $dst, $mem, $idx_base, $mask\t! using $mask_idx, $tmp, $rtmp and $rtmp2 as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ xorq($mask_idx$$Register, $mask_idx$$Register); + __ lea($tmp$$Register, $mem$$Address); + __ kmovql($rtmp2$$Register, $mask$$KRegister); + __ vgather8b_masked_offset(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base$$Register, noreg, $rtmp2$$Register, $mask_idx$$Register, $rtmp$$Register, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + +instruct vgather_masked_subwordGT8B_avx3(vec dst, memory mem, rRegP idx_base, immI_0 offset, kReg mask, rRegP tmp, rRegP idx_base_temp, + vec xtmp1, vec xtmp2, vec xtmp3, rRegI rtmp, rRegL rtmp2, rRegL mask_idx, rRegI length, rFlagsReg cr) %{ + predicate(VM_Version::supports_avx512bw() && is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) > 8); + match(Set dst (LoadVectorGatherMasked mem (Binary idx_base (Binary mask offset)))); + effect(TEMP_DEF dst, TEMP tmp, TEMP idx_base_temp, TEMP xtmp1, TEMP xtmp2, TEMP xtmp3, TEMP rtmp, TEMP rtmp2, TEMP mask_idx, TEMP length, KILL cr); + format %{ "vector_gatherGT8_masked $dst, $mem, $idx_base, $mask\t! using $tmp, $idx_base_temp, $xtmp1, $xtmp2, $xtmp3, $rtmp, $rtmp2, $mask_idx and $length as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + int vector_len = Matcher::vector_length(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ xorq($mask_idx$$Register, $mask_idx$$Register); + __ lea($tmp$$Register, $mem$$Address); + __ movptr($idx_base_temp$$Register, $idx_base$$Register); + __ kmovql($rtmp2$$Register, $mask$$KRegister); + __ vgather_subword(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base_temp$$Register, noreg, $rtmp2$$Register, $xtmp1$$XMMRegister, + $xtmp2$$XMMRegister, $xtmp3$$XMMRegister, $rtmp$$Register, $mask_idx$$Register, $length$$Register, vector_len, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + +instruct vgather_masked_subwordLE8B_off_avx3(vec dst, memory mem, rRegP idx_base, rRegI offset, kReg mask, rRegL mask_idx, rRegP tmp, rRegI rtmp, rRegL rtmp2, rFlagsReg cr) %{ + predicate(VM_Version::supports_avx512bw() && is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) <= 8); + match(Set dst (LoadVectorGatherMasked mem (Binary idx_base (Binary mask offset)))); + effect(TEMP mask_idx, TEMP tmp, TEMP rtmp, TEMP rtmp2, KILL cr); + format %{ "vector_masked_gatherLE8_off $dst, $mem, $idx_base, $offset, $mask\t! using $mask_idx, $tmp, $rtmp and $rtmp2 as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ xorq($mask_idx$$Register, $mask_idx$$Register); + __ lea($tmp$$Register, $mem$$Address); + __ kmovql($rtmp2$$Register, $mask$$KRegister); + __ vgather8b_masked_offset(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base$$Register, $offset$$Register, + $rtmp2$$Register, $mask_idx$$Register, $rtmp$$Register, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + +instruct vgather_masked_subwordGT8B_off_avx3(vec dst, memory mem, rRegP idx_base, rRegI offset, kReg mask, rRegP tmp, rRegP idx_base_temp, + vec xtmp1, vec xtmp2, vec xtmp3, rRegI rtmp, rRegL rtmp2, rRegL mask_idx, rRegI length, rFlagsReg cr) %{ + predicate(VM_Version::supports_avx512bw() && is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) > 8); + match(Set dst (LoadVectorGatherMasked mem (Binary idx_base (Binary mask offset)))); + effect(TEMP_DEF dst, TEMP tmp, TEMP idx_base_temp, TEMP xtmp1, TEMP xtmp2, TEMP xtmp3, TEMP rtmp, TEMP rtmp2, TEMP mask_idx, TEMP length, KILL cr); + format %{ "vector_gatherGT8_masked_off $dst, $mem, $idx_base, $offset, $mask\t! using $tmp, $idx_base_temp, $xtmp1, $xtmp2, $xtmp3, $rtmp, $rtmp2, $mask_idx and $length as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + int vector_len = Matcher::vector_length(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ xorq($mask_idx$$Register, $mask_idx$$Register); + __ lea($tmp$$Register, $mem$$Address); + __ movptr($idx_base_temp$$Register, $idx_base$$Register); + __ kmovql($rtmp2$$Register, $mask$$KRegister); + __ vgather_subword(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base_temp$$Register, $offset$$Register, $rtmp2$$Register, $xtmp1$$XMMRegister, + $xtmp2$$XMMRegister, $xtmp3$$XMMRegister, $rtmp$$Register, $mask_idx$$Register, $length$$Register, vector_len, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + +instruct vgather_masked_subwordLE8B_avx2(vec dst, memory mem, rRegP idx_base, immI_0 offset, vec mask, rRegI mask_idx, rRegP tmp, rRegI rtmp, rRegI rtmp2, rFlagsReg cr) %{ + predicate(!VM_Version::supports_avx512vlbw() && is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) <= 8); + match(Set dst (LoadVectorGatherMasked mem (Binary idx_base (Binary mask offset)))); + effect(TEMP mask_idx, TEMP tmp, TEMP rtmp, TEMP rtmp2, KILL cr); + format %{ "vector_masked_gatherLE8 $dst, $mem, $idx_base, $mask\t! using $mask_idx, $tmp, $rtmp and $rtmp2 as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ lea($tmp$$Register, $mem$$Address); + __ vpmovmskb($rtmp2$$Register, $mask$$XMMRegister, vlen_enc); + if (elem_bt == T_SHORT) { + __ movl($mask_idx$$Register, 0x55555555); + __ pextl($rtmp2$$Register, $rtmp2$$Register, $mask_idx$$Register); + } + __ xorl($mask_idx$$Register, $mask_idx$$Register); + __ vgather8b_masked_offset(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base$$Register, noreg, $rtmp2$$Register, $mask_idx$$Register, $rtmp$$Register, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + +instruct vgather_masked_subwordGT8B_avx2(vec dst, memory mem, rRegP idx_base, immI_0 offset, vec mask, rRegP tmp, rRegP idx_base_temp, + vec xtmp1, vec xtmp2, vec xtmp3, rRegI rtmp, rRegI rtmp2, rRegI mask_idx, rRegI length, rFlagsReg cr) %{ + predicate(!VM_Version::supports_avx512vlbw() && is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) > 8); + match(Set dst (LoadVectorGatherMasked mem (Binary idx_base (Binary mask offset)))); + effect(TEMP_DEF dst, TEMP tmp, TEMP idx_base_temp, TEMP xtmp1, TEMP xtmp2, TEMP xtmp3, TEMP rtmp, TEMP rtmp2, TEMP mask_idx, TEMP length, KILL cr); + format %{ "vector_gatherGT8_masked $dst, $mem, $idx_base, $mask\t! using $tmp, $idx_base_temp, $xtmp1, $xtmp2, $xtmp3, $rtmp, $rtmp2, $mask_idx and $length as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + int vector_len = Matcher::vector_length(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ lea($tmp$$Register, $mem$$Address); + __ movptr($idx_base_temp$$Register, $idx_base$$Register); + __ vpmovmskb($rtmp2$$Register, $mask$$XMMRegister, vlen_enc); + if (elem_bt == T_SHORT) { + __ movl($mask_idx$$Register, 0x55555555); + __ pextl($rtmp2$$Register, $rtmp2$$Register, $mask_idx$$Register); + } + __ xorl($mask_idx$$Register, $mask_idx$$Register); + __ vgather_subword(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base_temp$$Register, noreg, $rtmp2$$Register, $xtmp1$$XMMRegister, + $xtmp2$$XMMRegister, $xtmp3$$XMMRegister, $rtmp$$Register, $mask_idx$$Register, $length$$Register, vector_len, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + +instruct vgather_masked_subwordLE8B_off_avx2(vec dst, memory mem, rRegP idx_base, rRegI offset, vec mask, rRegI mask_idx, rRegP tmp, rRegI rtmp, rRegI rtmp2, rFlagsReg cr) %{ + predicate(!VM_Version::supports_avx512vlbw() && is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) <= 8); + match(Set dst (LoadVectorGatherMasked mem (Binary idx_base (Binary mask offset)))); + effect(TEMP mask_idx, TEMP tmp, TEMP rtmp, TEMP rtmp2, KILL cr); + format %{ "vector_masked_gatherLE8_off $dst, $mem, $idx_base, $offset, $mask\t! using $mask_idx, $tmp, $rtmp and $rtmp2 as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ lea($tmp$$Register, $mem$$Address); + __ vpmovmskb($rtmp2$$Register, $mask$$XMMRegister, vlen_enc); + if (elem_bt == T_SHORT) { + __ movl($mask_idx$$Register, 0x55555555); + __ pextl($rtmp2$$Register, $rtmp2$$Register, $mask_idx$$Register); + } + __ xorl($mask_idx$$Register, $mask_idx$$Register); + __ vgather8b_masked_offset(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base$$Register, $offset$$Register, + $rtmp2$$Register, $mask_idx$$Register, $rtmp$$Register, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} + +instruct vgather_masked_subwordGT8B_off_avx2(vec dst, memory mem, rRegP idx_base, rRegI offset, vec mask, rRegP tmp, rRegP idx_base_temp, + vec xtmp1, vec xtmp2, vec xtmp3, rRegI rtmp, rRegI rtmp2, rRegI mask_idx, rRegI length, rFlagsReg cr) %{ + predicate(!VM_Version::supports_avx512vlbw() && is_subword_type(Matcher::vector_element_basic_type(n)) && Matcher::vector_length_in_bytes(n) > 8); + match(Set dst (LoadVectorGatherMasked mem (Binary idx_base (Binary mask offset)))); + effect(TEMP_DEF dst, TEMP tmp, TEMP idx_base_temp, TEMP xtmp1, TEMP xtmp2, TEMP xtmp3, TEMP rtmp, TEMP rtmp2, TEMP mask_idx, TEMP length, KILL cr); + format %{ "vector_gatherGT8_masked_off $dst, $mem, $idx_base, $offset, $mask\t! using $tmp, $idx_base_temp, $xtmp1, $xtmp2, $xtmp3, $rtmp, $rtmp2, $mask_idx and $length as TEMP" %} + ins_encode %{ + int vlen_enc = vector_length_encoding(this); + int vector_len = Matcher::vector_length(this); + BasicType elem_bt = Matcher::vector_element_basic_type(this); + __ xorl($mask_idx$$Register, $mask_idx$$Register); + __ lea($tmp$$Register, $mem$$Address); + __ movptr($idx_base_temp$$Register, $idx_base$$Register); + __ vpmovmskb($rtmp2$$Register, $mask$$XMMRegister, vlen_enc); + if (elem_bt == T_SHORT) { + __ movl($mask_idx$$Register, 0x55555555); + __ pextl($rtmp2$$Register, $rtmp2$$Register, $mask_idx$$Register); + } + __ xorl($mask_idx$$Register, $mask_idx$$Register); + __ vgather_subword(elem_bt, $dst$$XMMRegister, $tmp$$Register, $idx_base_temp$$Register, $offset$$Register, $rtmp2$$Register, $xtmp1$$XMMRegister, + $xtmp2$$XMMRegister, $xtmp3$$XMMRegister, $rtmp$$Register, $mask_idx$$Register, $length$$Register, vector_len, vlen_enc); + %} + ins_pipe( pipe_slow ); +%} +#endif + // ====================Scatter======================================= // Scatter INT, LONG, FLOAT, DOUBLE diff --git a/src/hotspot/share/opto/loopTransform.cpp b/src/hotspot/share/opto/loopTransform.cpp index d49117beb8767..516036d839baa 100644 --- a/src/hotspot/share/opto/loopTransform.cpp +++ b/src/hotspot/share/opto/loopTransform.cpp @@ -1050,6 +1050,8 @@ bool IdealLoopTree::policy_unroll(PhaseIdealLoop *phase) { } break; case Op_CountTrailingZerosV: case Op_CountLeadingZerosV: + case Op_LoadVectorGather: + case Op_LoadVectorGatherMasked: case Op_ReverseV: case Op_RoundVF: case Op_RoundVD: diff --git a/src/hotspot/share/opto/matcher.cpp b/src/hotspot/share/opto/matcher.cpp index d14dce77208c1..74e2ba603ac94 100644 --- a/src/hotspot/share/opto/matcher.cpp +++ b/src/hotspot/share/opto/matcher.cpp @@ -2474,7 +2474,22 @@ void Matcher::find_shared_post_visit(Node* n, uint opcode) { n->del_req(3); break; } + case Op_LoadVectorGather: + if (is_subword_type(n->bottom_type()->is_vect()->element_basic_type())) { + Node* pair = new BinaryNode(n->in(MemNode::ValueIn), n->in(MemNode::ValueIn+1)); + n->set_req(MemNode::ValueIn, pair); + n->del_req(MemNode::ValueIn+1); + } + break; case Op_LoadVectorGatherMasked: + if (is_subword_type(n->bottom_type()->is_vect()->element_basic_type())) { + Node* pair2 = new BinaryNode(n->in(MemNode::ValueIn + 1), n->in(MemNode::ValueIn + 2)); + Node* pair1 = new BinaryNode(n->in(MemNode::ValueIn), pair2); + n->set_req(MemNode::ValueIn, pair1); + n->del_req(MemNode::ValueIn+2); + n->del_req(MemNode::ValueIn+1); + break; + } // fall-through case Op_StoreVectorScatter: { Node* pair = new BinaryNode(n->in(MemNode::ValueIn), n->in(MemNode::ValueIn+1)); n->set_req(MemNode::ValueIn, pair); diff --git a/src/hotspot/share/opto/vectorIntrinsics.cpp b/src/hotspot/share/opto/vectorIntrinsics.cpp index 5249d8d67afef..cee221c8b758d 100644 --- a/src/hotspot/share/opto/vectorIntrinsics.cpp +++ b/src/hotspot/share/opto/vectorIntrinsics.cpp @@ -302,6 +302,7 @@ bool LibraryCallKit::arch_supports_vector(int sopc, int num_elem, BasicType type is_supported = Matcher::match_rule_supported_vector_masked(sopc, num_elem, type); } } + is_supported |= Matcher::supports_vector_predicate_op_emulation(sopc, num_elem, type); if (!is_supported) { #ifndef PRODUCT @@ -1500,8 +1501,8 @@ bool LibraryCallKit::inline_vector_gather_scatter(bool is_scatter) { } // Check whether the predicated gather/scatter node is supported by architecture. - if (!arch_supports_vector(is_scatter ? Op_StoreVectorScatterMasked : Op_LoadVectorGatherMasked, num_elem, elem_bt, - (VectorMaskUseType) (VecMaskUseLoad | VecMaskUsePred))) { + VectorMaskUseType mask = (VectorMaskUseType) (VecMaskUseLoad | VecMaskUsePred); + if (!arch_supports_vector(is_scatter ? Op_StoreVectorScatterMasked : Op_LoadVectorGatherMasked, num_elem, elem_bt, mask)) { if (C->print_intrinsics()) { tty->print_cr(" ** not supported: arity=%d op=%s vlen=%d etype=%s is_masked_op=1", is_scatter, is_scatter ? "scatterMasked" : "gatherMasked", @@ -1522,7 +1523,8 @@ bool LibraryCallKit::inline_vector_gather_scatter(bool is_scatter) { } // Check that the vector holding indices is supported by architecture - if (!arch_supports_vector(Op_LoadVector, num_elem, T_INT, VecMaskNotUsed)) { + // For sub-word gathers expander receive index array. + if (!is_subword_type(elem_bt) && !arch_supports_vector(Op_LoadVector, num_elem, T_INT, VecMaskNotUsed)) { if (C->print_intrinsics()) { tty->print_cr(" ** not supported: arity=%d op=%s/loadindex vlen=%d etype=int is_masked_op=%d", is_scatter, is_scatter ? "scatter" : "gather", @@ -1564,12 +1566,15 @@ bool LibraryCallKit::inline_vector_gather_scatter(bool is_scatter) { return false; } + Node* index_vect = nullptr; const TypeInstPtr* vbox_idx_type = TypeInstPtr::make_exact(TypePtr::NotNull, vbox_idx_klass); - Node* index_vect = unbox_vector(argument(8), vbox_idx_type, T_INT, num_elem); - if (index_vect == nullptr) { - set_map(old_map); - set_sp(old_sp); - return false; + if (!is_subword_type(elem_bt)) { + index_vect = unbox_vector(argument(8), vbox_idx_type, T_INT, num_elem); + if (index_vect == nullptr) { + set_map(old_map); + set_sp(old_sp); + return false; + } } Node* mask = nullptr; @@ -1608,10 +1613,23 @@ bool LibraryCallKit::inline_vector_gather_scatter(bool is_scatter) { set_memory(vstore, addr_type); } else { Node* vload = nullptr; + Node* index = argument(11); + Node* indexMap = argument(12); + Node* indexM = argument(13); if (mask != nullptr) { - vload = gvn().transform(new LoadVectorGatherMaskedNode(control(), memory(addr), addr, addr_type, vector_type, index_vect, mask)); + if (is_subword_type(elem_bt)) { + Node* index_arr_base = array_element_address(indexMap, indexM, T_INT); + vload = gvn().transform(new LoadVectorGatherMaskedNode(control(), memory(addr), addr, addr_type, vector_type, index_arr_base, mask, index)); + } else { + vload = gvn().transform(new LoadVectorGatherMaskedNode(control(), memory(addr), addr, addr_type, vector_type, index_vect, mask)); + } } else { - vload = gvn().transform(new LoadVectorGatherNode(control(), memory(addr), addr, addr_type, vector_type, index_vect)); + if (is_subword_type(elem_bt)) { + Node* index_arr_base = array_element_address(indexMap, indexM, T_INT); + vload = gvn().transform(new LoadVectorGatherNode(control(), memory(addr), addr, addr_type, vector_type, index_arr_base, index)); + } else { + vload = gvn().transform(new LoadVectorGatherNode(control(), memory(addr), addr, addr_type, vector_type, index_vect)); + } } Node* box = box_vector(vload, vbox_type, elem_bt, num_elem); set_result(box); diff --git a/src/hotspot/share/opto/vectornode.hpp b/src/hotspot/share/opto/vectornode.hpp index ae37202cd257d..ff31d2a51b8bd 100644 --- a/src/hotspot/share/opto/vectornode.hpp +++ b/src/hotspot/share/opto/vectornode.hpp @@ -890,16 +890,26 @@ class LoadVectorNode : public LoadNode { // Load Vector from memory via index map class LoadVectorGatherNode : public LoadVectorNode { public: - LoadVectorGatherNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt, Node* indices) + LoadVectorGatherNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt, Node* indices, Node* offset = nullptr) : LoadVectorNode(c, mem, adr, at, vt) { init_class_id(Class_LoadVectorGather); - assert(indices->bottom_type()->is_vect(), "indices must be in vector"); add_req(indices); - assert(req() == MemNode::ValueIn + 1, "match_edge expects that last input is in MemNode::ValueIn"); + DEBUG_ONLY(bool is_subword = is_subword_type(vt->element_basic_type())); + assert(is_subword || indices->bottom_type()->is_vect(), "indices must be in vector"); + assert(is_subword || !offset, ""); + assert(req() == MemNode::ValueIn + 1, "match_edge expects that index input is in MemNode::ValueIn"); + if (offset) { + add_req(offset); + } } virtual int Opcode() const; - virtual uint match_edge(uint idx) const { return idx == MemNode::Address || idx == MemNode::ValueIn; } + virtual uint match_edge(uint idx) const { + return idx == MemNode::Address || + idx == MemNode::ValueIn || + ((is_subword_type(vect_type()->element_basic_type())) && + idx == MemNode::ValueIn + 1); + } }; //------------------------------StoreVectorNode-------------------------------- @@ -1003,20 +1013,23 @@ class LoadVectorMaskedNode : public LoadVectorNode { // Load Vector from memory via index map under the influence of a predicate register(mask). class LoadVectorGatherMaskedNode : public LoadVectorNode { public: - LoadVectorGatherMaskedNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt, Node* indices, Node* mask) + LoadVectorGatherMaskedNode(Node* c, Node* mem, Node* adr, const TypePtr* at, const TypeVect* vt, Node* indices, Node* mask, Node* offset = nullptr) : LoadVectorNode(c, mem, adr, at, vt) { init_class_id(Class_LoadVectorGatherMasked); - assert(indices->bottom_type()->is_vect(), "indices must be in vector"); - assert(mask->bottom_type()->isa_vectmask(), "sanity"); add_req(indices); add_req(mask); assert(req() == MemNode::ValueIn + 2, "match_edge expects that last input is in MemNode::ValueIn+1"); + if (is_subword_type(vt->element_basic_type())) { + add_req(offset); + } } virtual int Opcode() const; virtual uint match_edge(uint idx) const { return idx == MemNode::Address || idx == MemNode::ValueIn || - idx == MemNode::ValueIn + 1; } + idx == MemNode::ValueIn + 1 || + (is_subword_type(vect_type()->is_vect()->element_basic_type()) && + idx == MemNode::ValueIn + 2); } }; //------------------------------StoreVectorScatterMaskedNode-------------------------------- diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java index af60895899f3e..a889d10fb43b4 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte128Vector.java @@ -893,6 +893,12 @@ ByteVector fromArray0(byte[] a, int offset, VectorMask<Byte> m, int offsetInRang return super.fromArray0Template(Byte128Mask.class, a, offset, (Byte128Mask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ByteVector fromArray0(byte[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Byte> m) { + return super.fromArray0Template(Byte128Mask.class, a, offset, indexMap, mapOffset, (Byte128Mask) m); + } @ForceInline diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte256Vector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte256Vector.java index 1dcbbd26907e3..7f07c32ab1387 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte256Vector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte256Vector.java @@ -925,6 +925,12 @@ ByteVector fromArray0(byte[] a, int offset, VectorMask<Byte> m, int offsetInRang return super.fromArray0Template(Byte256Mask.class, a, offset, (Byte256Mask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ByteVector fromArray0(byte[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Byte> m) { + return super.fromArray0Template(Byte256Mask.class, a, offset, indexMap, mapOffset, (Byte256Mask) m); + } @ForceInline diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte512Vector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte512Vector.java index 9e99a1916a7f6..20bf261999a39 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte512Vector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte512Vector.java @@ -989,6 +989,12 @@ ByteVector fromArray0(byte[] a, int offset, VectorMask<Byte> m, int offsetInRang return super.fromArray0Template(Byte512Mask.class, a, offset, (Byte512Mask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ByteVector fromArray0(byte[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Byte> m) { + return super.fromArray0Template(Byte512Mask.class, a, offset, indexMap, mapOffset, (Byte512Mask) m); + } @ForceInline diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte64Vector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte64Vector.java index 85276b2eb19f3..2756128b469f0 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte64Vector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Byte64Vector.java @@ -877,6 +877,12 @@ ByteVector fromArray0(byte[] a, int offset, VectorMask<Byte> m, int offsetInRang return super.fromArray0Template(Byte64Mask.class, a, offset, (Byte64Mask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ByteVector fromArray0(byte[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Byte> m) { + return super.fromArray0Template(Byte64Mask.class, a, offset, indexMap, mapOffset, (Byte64Mask) m); + } @ForceInline diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteMaxVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteMaxVector.java index ff035f1329468..c2f5e6f85a933 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteMaxVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteMaxVector.java @@ -863,6 +863,12 @@ ByteVector fromArray0(byte[] a, int offset, VectorMask<Byte> m, int offsetInRang return super.fromArray0Template(ByteMaxMask.class, a, offset, (ByteMaxMask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ByteVector fromArray0(byte[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Byte> m) { + return super.fromArray0Template(ByteMaxMask.class, a, offset, indexMap, mapOffset, (ByteMaxMask) m); + } @ForceInline diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java index 4fc8626754ace..8fae8d71b042a 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ByteVector.java @@ -3049,7 +3049,35 @@ ByteVector fromArray(VectorSpecies<Byte> species, byte[] a, int offset, int[] indexMap, int mapOffset) { ByteSpecies vsp = (ByteSpecies) species; - return vsp.vOp(n -> a[offset + indexMap[mapOffset + n]]); + IntVector.IntSpecies isp = IntVector.species(vsp.indexShape()); + Objects.requireNonNull(a); + Objects.requireNonNull(indexMap); + Class<? extends ByteVector> vectorType = vsp.vectorType(); + + + // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; + if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { + lsp = IntVector.SPECIES_PREFERRED; + } else { + lsp = isp; + } + + // Check indices are within array bounds. + for (int i = 0; i < vsp.length(); i += lsp.length()) { + IntVector vix = IntVector + .fromArray(lsp, indexMap, mapOffset + i) + .add(offset); + VectorIntrinsics.checkIndex(vix, a.length); + } + + return VectorSupport.loadWithMap( + vectorType, null, byte.class, vsp.laneCount(), + lsp.vectorType(), + a, ARRAY_BASE, null, null, + a, offset, indexMap, mapOffset, vsp, + (c, idx, iMap, idy, s, vm) -> + s.vOp(n -> c[idx + iMap[idy+n]])); } /** @@ -3094,8 +3122,13 @@ ByteVector fromArray(VectorSpecies<Byte> species, byte[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Byte> m) { - ByteSpecies vsp = (ByteSpecies) species; - return vsp.vOp(m, n -> a[offset + indexMap[mapOffset + n]]); + if (m.allTrue()) { + return fromArray(species, a, offset, indexMap, mapOffset); + } + else { + ByteSpecies vsp = (ByteSpecies) species; + return vsp.dummyVector().fromArray0(a, offset, indexMap, mapOffset, m); + } } @@ -3760,6 +3793,49 @@ a, arrayAddress(a, offset), false, m, offsetInRange, (arr_, off_, i) -> arr_[off_ + i])); } + /*package-private*/ + abstract + ByteVector fromArray0(byte[] a, int offset, + int[] indexMap, int mapOffset, + VectorMask<Byte> m); + @ForceInline + final + <M extends VectorMask<Byte>> + ByteVector fromArray0Template(Class<M> maskClass, byte[] a, int offset, + int[] indexMap, int mapOffset, M m) { + ByteSpecies vsp = vspecies(); + IntVector.IntSpecies isp = IntVector.species(vsp.indexShape()); + Objects.requireNonNull(a); + Objects.requireNonNull(indexMap); + m.check(vsp); + Class<? extends ByteVector> vectorType = vsp.vectorType(); + + + // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; + if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { + lsp = IntVector.SPECIES_PREFERRED; + } else { + lsp = isp; + } + + // Check indices are within array bounds. + // FIXME: Check index under mask controlling. + for (int i = 0; i < vsp.length(); i += lsp.length()) { + IntVector vix = IntVector + .fromArray(lsp, indexMap, mapOffset + i) + .add(offset); + VectorIntrinsics.checkIndex(vix, a.length); + } + + return VectorSupport.loadWithMap( + vectorType, maskClass, byte.class, vsp.laneCount(), + lsp.vectorType(), + a, ARRAY_BASE, null, m, + a, offset, indexMap, mapOffset, vsp, + (c, idx, iMap, idy, s, vm) -> + s.vOp(vm, n -> c[idx + iMap[idy+n]])); + } /*package-private*/ diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short128Vector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short128Vector.java index 8ae0638e4f344..3930826aa0920 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short128Vector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short128Vector.java @@ -877,6 +877,12 @@ ShortVector fromArray0(short[] a, int offset, VectorMask<Short> m, int offsetInR return super.fromArray0Template(Short128Mask.class, a, offset, (Short128Mask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ShortVector fromArray0(short[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m) { + return super.fromArray0Template(Short128Mask.class, a, offset, indexMap, mapOffset, (Short128Mask) m); + } @ForceInline @Override diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short256Vector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short256Vector.java index cd9d8ceb887f4..e39e89f61374f 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short256Vector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short256Vector.java @@ -893,6 +893,12 @@ ShortVector fromArray0(short[] a, int offset, VectorMask<Short> m, int offsetInR return super.fromArray0Template(Short256Mask.class, a, offset, (Short256Mask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ShortVector fromArray0(short[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m) { + return super.fromArray0Template(Short256Mask.class, a, offset, indexMap, mapOffset, (Short256Mask) m); + } @ForceInline @Override diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short512Vector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short512Vector.java index 2a959a8181c5f..1caea78f7485d 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short512Vector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short512Vector.java @@ -925,6 +925,12 @@ ShortVector fromArray0(short[] a, int offset, VectorMask<Short> m, int offsetInR return super.fromArray0Template(Short512Mask.class, a, offset, (Short512Mask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ShortVector fromArray0(short[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m) { + return super.fromArray0Template(Short512Mask.class, a, offset, indexMap, mapOffset, (Short512Mask) m); + } @ForceInline @Override diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short64Vector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short64Vector.java index 6090e9cf0d178..640be746f157d 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short64Vector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/Short64Vector.java @@ -869,6 +869,12 @@ ShortVector fromArray0(short[] a, int offset, VectorMask<Short> m, int offsetInR return super.fromArray0Template(Short64Mask.class, a, offset, (Short64Mask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ShortVector fromArray0(short[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m) { + return super.fromArray0Template(Short64Mask.class, a, offset, indexMap, mapOffset, (Short64Mask) m); + } @ForceInline @Override diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortMaxVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortMaxVector.java index d451cd4443f0e..96683ac53c43b 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortMaxVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortMaxVector.java @@ -863,6 +863,12 @@ ShortVector fromArray0(short[] a, int offset, VectorMask<Short> m, int offsetInR return super.fromArray0Template(ShortMaxMask.class, a, offset, (ShortMaxMask) m, offsetInRange); // specialize } + @ForceInline + @Override + final + ShortVector fromArray0(short[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m) { + return super.fromArray0Template(ShortMaxMask.class, a, offset, indexMap, mapOffset, (ShortMaxMask) m); + } @ForceInline @Override diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java index 84f542f07ff49..ba21e8a9e9563 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/ShortVector.java @@ -3050,7 +3050,35 @@ ShortVector fromArray(VectorSpecies<Short> species, short[] a, int offset, int[] indexMap, int mapOffset) { ShortSpecies vsp = (ShortSpecies) species; - return vsp.vOp(n -> a[offset + indexMap[mapOffset + n]]); + IntVector.IntSpecies isp = IntVector.species(vsp.indexShape()); + Objects.requireNonNull(a); + Objects.requireNonNull(indexMap); + Class<? extends ShortVector> vectorType = vsp.vectorType(); + + + // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; + if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { + lsp = IntVector.SPECIES_PREFERRED; + } else { + lsp = isp; + } + + // Check indices are within array bounds. + for (int i = 0; i < vsp.length(); i += lsp.length()) { + IntVector vix = IntVector + .fromArray(lsp, indexMap, mapOffset + i) + .add(offset); + VectorIntrinsics.checkIndex(vix, a.length); + } + + return VectorSupport.loadWithMap( + vectorType, null, short.class, vsp.laneCount(), + lsp.vectorType(), + a, ARRAY_BASE, null, null, + a, offset, indexMap, mapOffset, vsp, + (c, idx, iMap, idy, s, vm) -> + s.vOp(n -> c[idx + iMap[idy+n]])); } /** @@ -3095,8 +3123,13 @@ ShortVector fromArray(VectorSpecies<Short> species, short[] a, int offset, int[] indexMap, int mapOffset, VectorMask<Short> m) { - ShortSpecies vsp = (ShortSpecies) species; - return vsp.vOp(m, n -> a[offset + indexMap[mapOffset + n]]); + if (m.allTrue()) { + return fromArray(species, a, offset, indexMap, mapOffset); + } + else { + ShortSpecies vsp = (ShortSpecies) species; + return vsp.dummyVector().fromArray0(a, offset, indexMap, mapOffset, m); + } } /** @@ -3746,6 +3779,49 @@ a, arrayAddress(a, offset), false, m, offsetInRange, (arr_, off_, i) -> arr_[off_ + i])); } + /*package-private*/ + abstract + ShortVector fromArray0(short[] a, int offset, + int[] indexMap, int mapOffset, + VectorMask<Short> m); + @ForceInline + final + <M extends VectorMask<Short>> + ShortVector fromArray0Template(Class<M> maskClass, short[] a, int offset, + int[] indexMap, int mapOffset, M m) { + ShortSpecies vsp = vspecies(); + IntVector.IntSpecies isp = IntVector.species(vsp.indexShape()); + Objects.requireNonNull(a); + Objects.requireNonNull(indexMap); + m.check(vsp); + Class<? extends ShortVector> vectorType = vsp.vectorType(); + + + // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; + if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { + lsp = IntVector.SPECIES_PREFERRED; + } else { + lsp = isp; + } + + // Check indices are within array bounds. + // FIXME: Check index under mask controlling. + for (int i = 0; i < vsp.length(); i += lsp.length()) { + IntVector vix = IntVector + .fromArray(lsp, indexMap, mapOffset + i) + .add(offset); + VectorIntrinsics.checkIndex(vix, a.length); + } + + return VectorSupport.loadWithMap( + vectorType, maskClass, short.class, vsp.laneCount(), + lsp.vectorType(), + a, ARRAY_BASE, null, m, + a, offset, indexMap, mapOffset, vsp, + (c, idx, iMap, idy, s, vm) -> + s.vOp(vm, n -> c[idx + iMap[idy+n]])); + } /*package-private*/ abstract diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template index ad87826840489..d7562bae4755a 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-Vector.java.template @@ -3622,7 +3622,35 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { $type$[] a, int offset, int[] indexMap, int mapOffset) { $Type$Species vsp = ($Type$Species) species; - return vsp.vOp(n -> a[offset + indexMap[mapOffset + n]]); + IntVector.IntSpecies isp = IntVector.species(vsp.indexShape()); + Objects.requireNonNull(a); + Objects.requireNonNull(indexMap); + Class<? extends $abstractvectortype$> vectorType = vsp.vectorType(); + + + // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; + if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { + lsp = IntVector.SPECIES_PREFERRED; + } else { + lsp = isp; + } + + // Check indices are within array bounds. + for (int i = 0; i < vsp.length(); i += lsp.length()) { + IntVector vix = IntVector + .fromArray(lsp, indexMap, mapOffset + i) + .add(offset); + VectorIntrinsics.checkIndex(vix, a.length); + } + + return VectorSupport.loadWithMap( + vectorType, null, $type$.class, vsp.laneCount(), + lsp.vectorType(), + a, ARRAY_BASE, null, null, + a, offset, indexMap, mapOffset, vsp, + (c, idx, iMap, idy, s, vm) -> + s.vOp(n -> c[idx + iMap[idy+n]])); } #else[byteOrShort] @ForceInline @@ -3714,17 +3742,6 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { * where the mask is set * @see $abstractvectortype$#toIntArray() */ -#if[byteOrShort] - @ForceInline - public static - $abstractvectortype$ fromArray(VectorSpecies<$Boxtype$> species, - $type$[] a, int offset, - int[] indexMap, int mapOffset, - VectorMask<$Boxtype$> m) { - $Type$Species vsp = ($Type$Species) species; - return vsp.vOp(m, n -> a[offset + indexMap[mapOffset + n]]); - } -#else[byteOrShort] @ForceInline public static $abstractvectortype$ fromArray(VectorSpecies<$Boxtype$> species, @@ -3739,7 +3756,6 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { return vsp.dummyVector().fromArray0(a, offset, indexMap, mapOffset, m); } } -#end[byteOrShort] #if[short] /** @@ -4793,12 +4809,51 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { (arr_, off_, i) -> arr_[off_ + i])); } -#if[!byteOrShort] /*package-private*/ abstract $abstractvectortype$ fromArray0($type$[] a, int offset, int[] indexMap, int mapOffset, VectorMask<$Boxtype$> m); +#if[byteOrShort] + @ForceInline + final + <M extends VectorMask<$Boxtype$>> + $abstractvectortype$ fromArray0Template(Class<M> maskClass, $type$[] a, int offset, + int[] indexMap, int mapOffset, M m) { + $Type$Species vsp = vspecies(); + IntVector.IntSpecies isp = IntVector.species(vsp.indexShape()); + Objects.requireNonNull(a); + Objects.requireNonNull(indexMap); + m.check(vsp); + Class<? extends $abstractvectortype$> vectorType = vsp.vectorType(); + + + // Constant folding should sweep out following conditonal logic. + VectorSpecies<Integer> lsp; + if (isp.length() > IntVector.SPECIES_PREFERRED.length()) { + lsp = IntVector.SPECIES_PREFERRED; + } else { + lsp = isp; + } + + // Check indices are within array bounds. + // FIXME: Check index under mask controlling. + for (int i = 0; i < vsp.length(); i += lsp.length()) { + IntVector vix = IntVector + .fromArray(lsp, indexMap, mapOffset + i) + .add(offset); + VectorIntrinsics.checkIndex(vix, a.length); + } + + return VectorSupport.loadWithMap( + vectorType, maskClass, $type$.class, vsp.laneCount(), + lsp.vectorType(), + a, ARRAY_BASE, null, m, + a, offset, indexMap, mapOffset, vsp, + (c, idx, iMap, idy, s, vm) -> + s.vOp(vm, n -> c[idx + iMap[idy+n]])); + } +#else[byteOrShort] @ForceInline final <M extends VectorMask<$Boxtype$>> @@ -4852,7 +4907,7 @@ public abstract class $abstractvectortype$ extends AbstractVector<$Boxtype$> { (c, idx, iMap, idy, s, vm) -> s.vOp(vm, n -> c[idx + iMap[idy+n]])); } -#end[!byteOrShort] +#end[byteOrShort] #if[short] /*package-private*/ diff --git a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-VectorBits.java.template b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-VectorBits.java.template index f2b36066fa781..cebdc7594d6d6 100644 --- a/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-VectorBits.java.template +++ b/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/X-VectorBits.java.template @@ -1151,14 +1151,12 @@ final class $vectortype$ extends $abstractvectortype$ { return super.fromArray0Template($masktype$.class, a, offset, ($masktype$) m, offsetInRange); // specialize } -#if[!byteOrShort] @ForceInline @Override final $abstractvectortype$ fromArray0($type$[] a, int offset, int[] indexMap, int mapOffset, VectorMask<$Boxtype$> m) { return super.fromArray0Template($masktype$.class, a, offset, indexMap, mapOffset, ($masktype$) m); } -#end[!byteOrShort] #if[short] @ForceInline diff --git a/test/micro/org/openjdk/bench/jdk/incubator/vector/GatherOperationsBenchmark.java b/test/micro/org/openjdk/bench/jdk/incubator/vector/GatherOperationsBenchmark.java new file mode 100644 index 0000000000000..7a7578fcf84b8 --- /dev/null +++ b/test/micro/org/openjdk/bench/jdk/incubator/vector/GatherOperationsBenchmark.java @@ -0,0 +1,357 @@ +/* + * Copyright (c) 2023, 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 org.openjdk.bench.jdk.incubator.vector; + +import jdk.incubator.vector.*; +import java.util.Random; +import java.util.stream.IntStream; +import java.util.concurrent.TimeUnit; +import org.openjdk.jmh.annotations.*; + +@OutputTimeUnit(TimeUnit.MILLISECONDS) +@State(Scope.Thread) +@Fork(jvmArgsPrepend = {"--add-modules=jdk.incubator.vector"}) +public class GatherOperationsBenchmark { + @Param({"64", "256", "1024", "4096"}) + int SIZE; + byte [] barr; + byte [] bres; + short [] sarr; + short [] sres; + int [] index; + + static final VectorSpecies<Short> S64 = ShortVector.SPECIES_64; + static final VectorSpecies<Short> S128 = ShortVector.SPECIES_128; + static final VectorSpecies<Short> S256 = ShortVector.SPECIES_256; + static final VectorSpecies<Short> S512 = ShortVector.SPECIES_512; + static final VectorSpecies<Byte> B64 = ByteVector.SPECIES_64; + static final VectorSpecies<Byte> B128 = ByteVector.SPECIES_128; + static final VectorSpecies<Byte> B256 = ByteVector.SPECIES_256; + static final VectorSpecies<Byte> B512 = ByteVector.SPECIES_512; + + @Setup(Level.Trial) + public void BmSetup() { + Random r = new Random(1245); + index = new int[SIZE]; + barr = new byte[SIZE]; + bres = new byte[SIZE]; + sarr = new short[SIZE]; + sres = new short[SIZE]; + for (int i = 0; i < SIZE; i++) { + barr[i] = (byte)i; + sarr[i] = (short)i; + index[i] = r.nextInt(SIZE-1); + } + } + + + + @Benchmark + public void microByteGather64() { + for (int i = 0; i < SIZE; i += B64.length()) { + ByteVector.fromArray(B64, barr, 0, index, i) + .intoArray(bres, i); + } + } + + + @Benchmark + public void microByteGather64_NZ_OFF() { + for (int i = 0; i < SIZE; i += B64.length()) { + ByteVector.fromArray(B64, barr, 1, index, i) + .intoArray(bres, i); + } + } + + @Benchmark + public void microByteGather64_MASK() { + VectorMask<Byte> VMASK = VectorMask.fromLong(B64, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += B64.length()) { + ByteVector.fromArray(B64, barr, 0, index, i, VMASK) + .intoArray(bres, i); + } + } + + @Benchmark + public void microByteGather64_MASK_NZ_OFF() { + VectorMask<Byte> VMASK = VectorMask.fromLong(B64, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += B64.length()) { + ByteVector.fromArray(B64, barr, 1, index, i, VMASK) + .intoArray(bres, i); + } + } + + + @Benchmark + public void microByteGather128() { + for (int i = 0; i < SIZE; i += B128.length()) { + ByteVector.fromArray(B128, barr, 0, index, i) + .intoArray(bres, i); + } + } + + + @Benchmark + public void microByteGather128_NZ_OFF() { + for (int i = 0; i < SIZE; i += B128.length()) { + ByteVector.fromArray(B128, barr, 1, index, i) + .intoArray(bres, i); + } + } + + @Benchmark + public void microByteGather128_MASK() { + VectorMask<Byte> VMASK = VectorMask.fromLong(B128, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += B128.length()) { + ByteVector.fromArray(B128, barr, 0, index, i, VMASK) + .intoArray(bres, i); + } + } + + @Benchmark + public void microByteGather128_MASK_NZ_OFF() { + VectorMask<Byte> VMASK = VectorMask.fromLong(B128, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += B128.length()) { + ByteVector.fromArray(B128, barr, 1, index, i, VMASK) + .intoArray(bres, i); + } + } + + + @Benchmark + public void microByteGather256() { + for (int i = 0; i < SIZE; i += B256.length()) { + ByteVector.fromArray(B256, barr, 0, index, i) + .intoArray(bres, i); + } + } + + + @Benchmark + public void microByteGather256_NZ_OFF() { + for (int i = 0; i < SIZE; i += B256.length()) { + ByteVector.fromArray(B256, barr, 1, index, i) + .intoArray(bres, i); + } + } + + @Benchmark + public void microByteGather256_MASK() { + VectorMask<Byte> VMASK = VectorMask.fromLong(B256, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += B256.length()) { + ByteVector.fromArray(B256, barr, 0, index, i, VMASK) + .intoArray(bres, i); + } + } + + @Benchmark + public void microByteGather256_MASK_NZ_OFF() { + VectorMask<Byte> VMASK = VectorMask.fromLong(B256, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += B256.length()) { + ByteVector.fromArray(B256, barr, 1, index, i, VMASK) + .intoArray(bres, i); + } + } + + + @Benchmark + public void microByteGather512() { + for (int i = 0; i < SIZE; i += B512.length()) { + ByteVector.fromArray(B512, barr, 0, index, i) + .intoArray(bres, i); + } + } + + + @Benchmark + public void microByteGather512_NZ_OFF() { + for (int i = 0; i < SIZE; i += B512.length()) { + ByteVector.fromArray(B512, barr, 1, index, i) + .intoArray(bres, i); + } + } + + @Benchmark + public void microByteGather512_MASK() { + VectorMask<Byte> VMASK = VectorMask.fromLong(B512, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += B512.length()) { + ByteVector.fromArray(B512, barr, 0, index, i, VMASK) + .intoArray(bres, i); + } + } + + @Benchmark + public void microByteGather512_MASK_NZ_OFF() { + VectorMask<Byte> VMASK = VectorMask.fromLong(B512, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += B512.length()) { + ByteVector.fromArray(B512, barr, 1, index, i, VMASK) + .intoArray(bres, i); + } + } + + + @Benchmark + public void microShortGather64() { + for (int i = 0; i < SIZE; i += S64.length()) { + ShortVector.fromArray(S64, sarr, 0, index, i) + .intoArray(sres, i); + } + } + + + @Benchmark + public void microShortGather64_NZ_OFF() { + for (int i = 0; i < SIZE; i += S64.length()) { + ShortVector.fromArray(S64, sarr, 1, index, i) + .intoArray(sres, i); + } + } + + @Benchmark + public void microShortGather64_MASK() { + VectorMask<Short> VMASK = VectorMask.fromLong(S64, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += S64.length()) { + ShortVector.fromArray(S64, sarr, 0, index, i, VMASK) + .intoArray(sres, i); + } + } + + @Benchmark + public void microShortGather64_MASK_NZ_OFF() { + VectorMask<Short> VMASK = VectorMask.fromLong(S64, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += S64.length()) { + ShortVector.fromArray(S64, sarr, 1, index, i, VMASK) + .intoArray(sres, i); + } + } + + + @Benchmark + public void microShortGather128() { + for (int i = 0; i < SIZE; i += S128.length()) { + ShortVector.fromArray(S128, sarr, 0, index, i) + .intoArray(sres, i); + } + } + + + @Benchmark + public void microShortGather128_NZ_OFF() { + for (int i = 0; i < SIZE; i += S128.length()) { + ShortVector.fromArray(S128, sarr, 1, index, i) + .intoArray(sres, i); + } + } + + @Benchmark + public void microShortGather128_MASK() { + VectorMask<Short> VMASK = VectorMask.fromLong(S128, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += S128.length()) { + ShortVector.fromArray(S128, sarr, 0, index, i, VMASK) + .intoArray(sres, i); + } + } + + @Benchmark + public void microShortGather128_MASK_NZ_OFF() { + VectorMask<Short> VMASK = VectorMask.fromLong(S128, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += S128.length()) { + ShortVector.fromArray(S128, sarr, 1, index, i, VMASK) + .intoArray(sres, i); + } + } + + + @Benchmark + public void microShortGather256() { + for (int i = 0; i < SIZE; i += S256.length()) { + ShortVector.fromArray(S256, sarr, 0, index, i) + .intoArray(sres, i); + } + } + + + @Benchmark + public void microShortGather256_NZ_OFF() { + for (int i = 0; i < SIZE; i += S256.length()) { + ShortVector.fromArray(S256, sarr, 1, index, i) + .intoArray(sres, i); + } + } + + @Benchmark + public void microShortGather256_MASK() { + VectorMask<Short> VMASK = VectorMask.fromLong(S256, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += S256.length()) { + ShortVector.fromArray(S256, sarr, 0, index, i, VMASK) + .intoArray(sres, i); + } + } + + @Benchmark + public void microShortGather256_MASK_NZ_OFF() { + VectorMask<Short> VMASK = VectorMask.fromLong(S256, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += S256.length()) { + ShortVector.fromArray(S256, sarr, 1, index, i, VMASK) + .intoArray(sres, i); + } + } + + + @Benchmark + public void microShortGather512() { + for (int i = 0; i < SIZE; i += S512.length()) { + ShortVector.fromArray(S512, sarr, 0, index, i) + .intoArray(sres, i); + } + } + + + @Benchmark + public void microShortGather512_NZ_OFF() { + for (int i = 0; i < SIZE; i += S512.length()) { + ShortVector.fromArray(S512, sarr, 1, index, i) + .intoArray(sres, i); + } + } + + @Benchmark + public void microShortGather512_MASK() { + VectorMask<Short> VMASK = VectorMask.fromLong(S512, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += S512.length()) { + ShortVector.fromArray(S512, sarr, 0, index, i, VMASK) + .intoArray(sres, i); + } + } + + @Benchmark + public void microShortGather512_MASK_NZ_OFF() { + VectorMask<Short> VMASK = VectorMask.fromLong(S512, 0x5555555555555555L); + for (int i = 0; i < SIZE; i += S512.length()) { + ShortVector.fromArray(S512, sarr, 1, index, i, VMASK) + .intoArray(sres, i); + } + } +} From bd67ac69a234cd1096e534c7d4a45d88715884b4 Mon Sep 17 00:00:00 2001 From: Scott Gibbons <sgibbons@openjdk.org> Date: Sun, 21 Apr 2024 23:24:46 +0000 Subject: [PATCH 030/141] 8329331: Intrinsify Unsafe::setMemory Reviewed-by: sviswanathan, jbhateja, kvn --- .../cpu/aarch64/stubGenerator_aarch64.cpp | 2 +- src/hotspot/cpu/arm/stubGenerator_arm.cpp | 4 +- src/hotspot/cpu/ppc/stubGenerator_ppc.cpp | 4 +- src/hotspot/cpu/riscv/stubGenerator_riscv.cpp | 4 +- src/hotspot/cpu/x86/assembler_x86.cpp | 1 + src/hotspot/cpu/x86/macroAssembler_x86.cpp | 36 +-- src/hotspot/cpu/x86/stubGenerator_x86_32.cpp | 4 +- src/hotspot/cpu/x86/stubGenerator_x86_64.cpp | 2 +- src/hotspot/cpu/x86/stubGenerator_x86_64.hpp | 8 + .../x86/stubGenerator_x86_64_arraycopy.cpp | 206 +++++++++++++++++- src/hotspot/cpu/zero/stubGenerator_zero.cpp | 5 +- src/hotspot/os/windows/os_windows.cpp | 6 +- src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp | 6 +- .../os_cpu/bsd_aarch64/os_bsd_aarch64.cpp | 6 +- src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp | 12 +- .../os_cpu/linux_aarch64/os_linux_aarch64.cpp | 6 +- src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp | 19 +- src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp | 6 +- .../os_cpu/linux_riscv/os_linux_riscv.cpp | 6 +- src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp | 12 +- src/hotspot/share/classfile/vmIntrinsics.cpp | 5 +- src/hotspot/share/classfile/vmIntrinsics.hpp | 3 + src/hotspot/share/jvmci/vmStructs_jvmci.cpp | 1 + src/hotspot/share/opto/c2compiler.cpp | 3 + src/hotspot/share/opto/library_call.cpp | 52 +++++ src/hotspot/share/opto/library_call.hpp | 3 +- src/hotspot/share/opto/runtime.cpp | 23 ++ src/hotspot/share/opto/runtime.hpp | 4 +- src/hotspot/share/prims/unsafe.cpp | 7 +- src/hotspot/share/runtime/sharedRuntime.cpp | 3 +- src/hotspot/share/runtime/sharedRuntime.hpp | 2 + src/hotspot/share/runtime/stubRoutines.cpp | 2 + src/hotspot/share/runtime/stubRoutines.hpp | 7 + src/hotspot/share/utilities/copy.cpp | 25 ++- .../classes/jdk/internal/misc/Unsafe.java | 1 + .../lang/foreign/MemorySegmentZeroUnsafe.java | 93 ++++++++ 36 files changed, 502 insertions(+), 87 deletions(-) create mode 100644 test/micro/org/openjdk/bench/java/lang/foreign/MemorySegmentZeroUnsafe.java diff --git a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp index ece7f8a347af9..4dc674d28c510 100644 --- a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp @@ -8379,7 +8379,7 @@ class StubGenerator: public StubCodeGenerator { // Initialize table for copy memory (arraycopy) check. if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(8); + UnsafeCopyMemory::create_table(8 + 4); // 8 for copyMemory; 4 for setMemory } if (UseCRC32Intrinsics) { diff --git a/src/hotspot/cpu/arm/stubGenerator_arm.cpp b/src/hotspot/cpu/arm/stubGenerator_arm.cpp index 7f9645f749ada..9d526c7ebdca9 100644 --- a/src/hotspot/cpu/arm/stubGenerator_arm.cpp +++ b/src/hotspot/cpu/arm/stubGenerator_arm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -3135,7 +3135,7 @@ class StubGenerator: public StubCodeGenerator { StubRoutines::_throw_StackOverflowError_entry = generate_throw_exception("StackOverflowError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_StackOverflowError)); if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(32); + UnsafeCopyMemory::create_table(32 + 4); // 32 for copyMemory; 4 for setMemory } // integer division used both by interpreter and compiler diff --git a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp index 094757ad3e16c..4a9e5476dce5b 100644 --- a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp +++ b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2012, 2023 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -4746,7 +4746,7 @@ class StubGenerator: public StubCodeGenerator { StubRoutines::_catch_exception_entry = generate_catch_exception(); if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(8); + UnsafeCopyMemory::create_table(8 + 4); // 8 for copyMemory; 4 for setMemory } // Build this early so it's available for the interpreter. diff --git a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp index 7ee17438b284e..8ac8263b30892 100644 --- a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp +++ b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, 2020, Red Hat Inc. All rights reserved. * Copyright (c) 2020, 2023, Huawei Technologies Co., Ltd. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. @@ -5501,7 +5501,7 @@ static const int64_t right_3_bits = right_n_bits(3); StubRoutines::_forward_exception_entry = generate_forward_exception(); if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(8); + UnsafeCopyMemory::create_table(8 + 4); // 8 for copyMemory; 4 for setMemory } StubRoutines::_call_stub_entry = diff --git a/src/hotspot/cpu/x86/assembler_x86.cpp b/src/hotspot/cpu/x86/assembler_x86.cpp index 6ed04ad5211dc..e4885fa946df6 100644 --- a/src/hotspot/cpu/x86/assembler_x86.cpp +++ b/src/hotspot/cpu/x86/assembler_x86.cpp @@ -934,6 +934,7 @@ address Assembler::locate_operand(address inst, WhichOperand which) { case 0x6F: // movdq case 0x7F: // movdq case 0xAE: // ldmxcsr, stmxcsr, fxrstor, fxsave, clflush + case 0xD6: // movq case 0xFE: // paddd debug_only(has_disp32 = true); break; diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.cpp b/src/hotspot/cpu/x86/macroAssembler_x86.cpp index 3d427fd0cdeb6..6c8ca583b10cb 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.cpp @@ -6299,7 +6299,7 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, orl(value, rtmp); } - cmpl(count, 2<<shift); // Short arrays (< 8 bytes) fill by element + cmpptr(count, 2<<shift); // Short arrays (< 8 bytes) fill by element jcc(Assembler::below, L_fill_4_bytes); // use unsigned cmp if (!UseUnalignedLoadStores && !aligned && (t == T_BYTE || t == T_SHORT)) { Label L_skip_align2; @@ -6319,13 +6319,13 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, jccb(Assembler::zero, L_skip_align2); movw(Address(to, 0), value); addptr(to, 2); - subl(count, 1<<(shift-1)); + subptr(count, 1<<(shift-1)); BIND(L_skip_align2); } if (UseSSE < 2) { Label L_fill_32_bytes_loop, L_check_fill_8_bytes, L_fill_8_bytes_loop, L_fill_8_bytes; // Fill 32-byte chunks - subl(count, 8 << shift); + subptr(count, 8 << shift); jcc(Assembler::less, L_check_fill_8_bytes); align(16); @@ -6336,10 +6336,10 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, } addptr(to, 32); - subl(count, 8 << shift); + subptr(count, 8 << shift); jcc(Assembler::greaterEqual, L_fill_32_bytes_loop); BIND(L_check_fill_8_bytes); - addl(count, 8 << shift); + addptr(count, 8 << shift); jccb(Assembler::zero, L_exit); jmpb(L_fill_8_bytes); @@ -6351,7 +6351,7 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, movl(Address(to, 4), value); addptr(to, 8); BIND(L_fill_8_bytes); - subl(count, 1 << (shift + 1)); + subptr(count, 1 << (shift + 1)); jcc(Assembler::greaterEqual, L_fill_8_bytes_loop); // fall through to fill 4 bytes } else { @@ -6362,7 +6362,7 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, jccb(Assembler::zero, L_fill_32_bytes); movl(Address(to, 0), value); addptr(to, 4); - subl(count, 1<<shift); + subptr(count, 1<<shift); } BIND(L_fill_32_bytes); { @@ -6376,19 +6376,19 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, Label L_fill_64_bytes_loop_avx3, L_check_fill_64_bytes_avx2; // If number of bytes to fill < VM_Version::avx3_threshold(), perform fill using AVX2 - cmpl(count, VM_Version::avx3_threshold()); + cmpptr(count, VM_Version::avx3_threshold()); jccb(Assembler::below, L_check_fill_64_bytes_avx2); vpbroadcastd(xtmp, xtmp, Assembler::AVX_512bit); - subl(count, 16 << shift); + subptr(count, 16 << shift); jccb(Assembler::less, L_check_fill_32_bytes); align(16); BIND(L_fill_64_bytes_loop_avx3); evmovdqul(Address(to, 0), xtmp, Assembler::AVX_512bit); addptr(to, 64); - subl(count, 16 << shift); + subptr(count, 16 << shift); jcc(Assembler::greaterEqual, L_fill_64_bytes_loop_avx3); jmpb(L_check_fill_32_bytes); @@ -6398,7 +6398,7 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, Label L_fill_64_bytes_loop; vpbroadcastd(xtmp, xtmp, Assembler::AVX_256bit); - subl(count, 16 << shift); + subptr(count, 16 << shift); jcc(Assembler::less, L_check_fill_32_bytes); align(16); @@ -6406,15 +6406,15 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, vmovdqu(Address(to, 0), xtmp); vmovdqu(Address(to, 32), xtmp); addptr(to, 64); - subl(count, 16 << shift); + subptr(count, 16 << shift); jcc(Assembler::greaterEqual, L_fill_64_bytes_loop); BIND(L_check_fill_32_bytes); - addl(count, 8 << shift); + addptr(count, 8 << shift); jccb(Assembler::less, L_check_fill_8_bytes); vmovdqu(Address(to, 0), xtmp); addptr(to, 32); - subl(count, 8 << shift); + subptr(count, 8 << shift); BIND(L_check_fill_8_bytes); // clean upper bits of YMM registers @@ -6424,7 +6424,7 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, // Fill 32-byte chunks pshufd(xtmp, xtmp, 0); - subl(count, 8 << shift); + subptr(count, 8 << shift); jcc(Assembler::less, L_check_fill_8_bytes); align(16); @@ -6441,12 +6441,12 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, } addptr(to, 32); - subl(count, 8 << shift); + subptr(count, 8 << shift); jcc(Assembler::greaterEqual, L_fill_32_bytes_loop); BIND(L_check_fill_8_bytes); } - addl(count, 8 << shift); + addptr(count, 8 << shift); jccb(Assembler::zero, L_exit); jmpb(L_fill_8_bytes); @@ -6457,7 +6457,7 @@ void MacroAssembler::generate_fill(BasicType t, bool aligned, movq(Address(to, 0), xtmp); addptr(to, 8); BIND(L_fill_8_bytes); - subl(count, 1 << (shift + 1)); + subptr(count, 1 << (shift + 1)); jcc(Assembler::greaterEqual, L_fill_8_bytes_loop); } } diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp index e6305ded69624..13b036a70aa03 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, 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 @@ -4122,7 +4122,7 @@ class StubGenerator: public StubCodeGenerator { // Initialize table for copy memory (arraycopy) check. if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(16); + UnsafeCopyMemory::create_table(16 + 4); // 16 for copyMemory; 4 for setMemory } StubRoutines::x86::_verify_mxcsr_entry = generate_verify_mxcsr(); diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp index fecefcea0eef4..1a66ba6a55b17 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp @@ -4058,7 +4058,7 @@ void StubGenerator::generate_initial_stubs() { // Initialize table for unsafe copy memeory check. if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(16); + UnsafeCopyMemory::create_table(16 + 4); // 16 for copyMemory; 4 for setMemory } // entry points that exist in all platforms Note: This is code diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64.hpp b/src/hotspot/cpu/x86/stubGenerator_x86_64.hpp index e573ea98c14c5..725932b9e0310 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64.hpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.hpp @@ -268,6 +268,14 @@ class StubGenerator: public StubCodeGenerator { address byte_copy_entry, address short_copy_entry, address int_copy_entry, address long_copy_entry); + // Generate 'unsafe' set memory stub + // Though just as safe as the other stubs, it takes an unscaled + // size_t argument instead of an element count. + // + // Examines the alignment of the operands and dispatches + // to an int, short, or byte copy loop. + address generate_unsafe_setmemory(const char *name, address byte_copy_entry); + // Perform range checks on the proposed arraycopy. // Kills temp, but nothing else. // Also, clean the sign bits of src_pos and dst_pos. diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp index 8e77b9cc6c7cd..27406792f60dc 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -152,6 +152,8 @@ void StubGenerator::generate_arraycopy_stubs() { StubRoutines::_arrayof_jshort_fill = generate_fill(T_SHORT, true, "arrayof_jshort_fill"); StubRoutines::_arrayof_jint_fill = generate_fill(T_INT, true, "arrayof_jint_fill"); + StubRoutines::_unsafe_setmemory = generate_unsafe_setmemory("unsafe_setmemory", StubRoutines::_jbyte_fill); + // We don't generate specialized code for HeapWord-aligned source // arrays, so just use the code we've already generated StubRoutines::_arrayof_jbyte_disjoint_arraycopy = StubRoutines::_jbyte_disjoint_arraycopy; @@ -1620,7 +1622,11 @@ address StubGenerator::generate_fill(BasicType t, bool aligned, const char *name __ enter(); // required for proper stackwalking of RuntimeStub frame - __ generate_fill(t, aligned, to, value, r11, rax, xmm0); + { + // Add set memory mark to protect against unsafe accesses faulting + UnsafeCopyMemoryMark usmm(this, ((t == T_BYTE) && !aligned), true); + __ generate_fill(t, aligned, to, value, r11, rax, xmm0); + } __ vzeroupper(); __ leave(); // required for proper stackwalking of RuntimeStub frame @@ -2477,6 +2483,202 @@ address StubGenerator::generate_unsafe_copy(const char *name, } +// Static enum for helper +enum USM_TYPE {USM_SHORT, USM_DWORD, USM_QUADWORD}; +// Helper for generate_unsafe_setmemory +// +// Atomically fill an array of memory using 2-, 4-, or 8-byte chunks +static void do_setmemory_atomic_loop(USM_TYPE type, Register dest, + Register size, Register wide_value, + Register tmp, Label& L_exit, + MacroAssembler *_masm) { + Label L_Loop, L_Tail, L_TailLoop; + + int shiftval = 0; + int incr = 0; + + switch (type) { + case USM_SHORT: + shiftval = 1; + incr = 16; + break; + case USM_DWORD: + shiftval = 2; + incr = 32; + break; + case USM_QUADWORD: + shiftval = 3; + incr = 64; + break; + } + + // At this point, we know the lower bits of size are zero + __ shrq(size, shiftval); + // size now has number of X-byte chunks (2, 4 or 8) + + // Number of (8*X)-byte chunks into tmp + __ movq(tmp, size); + __ shrq(tmp, 3); + __ jccb(Assembler::zero, L_Tail); + + __ BIND(L_Loop); + + // Unroll 8 stores + for (int i = 0; i < 8; i++) { + switch (type) { + case USM_SHORT: + __ movw(Address(dest, (2 * i)), wide_value); + break; + case USM_DWORD: + __ movl(Address(dest, (4 * i)), wide_value); + break; + case USM_QUADWORD: + __ movq(Address(dest, (8 * i)), wide_value); + break; + } + } + __ addq(dest, incr); + __ decrementq(tmp); + __ jccb(Assembler::notZero, L_Loop); + + __ BIND(L_Tail); + + // Find number of remaining X-byte chunks + __ andq(size, 0x7); + + // If zero, then we're done + __ jccb(Assembler::zero, L_exit); + + __ BIND(L_TailLoop); + + switch (type) { + case USM_SHORT: + __ movw(Address(dest, 0), wide_value); + break; + case USM_DWORD: + __ movl(Address(dest, 0), wide_value); + break; + case USM_QUADWORD: + __ movq(Address(dest, 0), wide_value); + break; + } + __ addq(dest, incr >> 3); + __ decrementq(size); + __ jccb(Assembler::notZero, L_TailLoop); +} + +// Generate 'unsafe' set memory stub +// Though just as safe as the other stubs, it takes an unscaled +// size_t (# bytes) argument instead of an element count. +// +// Input: +// c_rarg0 - destination array address +// c_rarg1 - byte count (size_t) +// c_rarg2 - byte value +// +// Examines the alignment of the operands and dispatches +// to an int, short, or byte fill loop. +// +address StubGenerator::generate_unsafe_setmemory(const char *name, + address unsafe_byte_fill) { + __ align(CodeEntryAlignment); + StubCodeMark mark(this, "StubRoutines", name); + address start = __ pc(); + __ enter(); // required for proper stackwalking of RuntimeStub frame + + assert(unsafe_byte_fill != nullptr, "Invalid call"); + + // bump this on entry, not on exit: + INC_COUNTER_NP(SharedRuntime::_unsafe_set_memory_ctr, rscratch1); + + { + Label L_exit, L_fillQuadwords, L_fillDwords, L_fillBytes; + + const Register dest = c_rarg0; + const Register size = c_rarg1; + const Register byteVal = c_rarg2; + const Register wide_value = rax; + const Register rScratch1 = r10; + + assert_different_registers(dest, size, byteVal, wide_value, rScratch1); + + // fill_to_memory_atomic(unsigned char*, unsigned long, unsigned char) + + __ testq(size, size); + __ jcc(Assembler::zero, L_exit); + + // Propagate byte to full Register + __ movzbl(rScratch1, byteVal); + __ mov64(wide_value, 0x0101010101010101ULL); + __ imulq(wide_value, rScratch1); + + // Check for pointer & size alignment + __ movq(rScratch1, dest); + __ orq(rScratch1, size); + + __ testb(rScratch1, 7); + __ jcc(Assembler::equal, L_fillQuadwords); + + __ testb(rScratch1, 3); + __ jcc(Assembler::equal, L_fillDwords); + + __ testb(rScratch1, 1); + __ jcc(Assembler::notEqual, L_fillBytes); + + // Fill words + { + Label L_wordsTail, L_wordsLoop, L_wordsTailLoop; + UnsafeCopyMemoryMark usmm(this, true, true); + + // At this point, we know the lower bit of size is zero and a + // multiple of 2 + do_setmemory_atomic_loop(USM_SHORT, dest, size, wide_value, rScratch1, + L_exit, _masm); + } + __ jmpb(L_exit); + + __ BIND(L_fillQuadwords); + + // Fill QUADWORDs + { + Label L_qwordLoop, L_qwordsTail, L_qwordsTailLoop; + UnsafeCopyMemoryMark usmm(this, true, true); + + // At this point, we know the lower 3 bits of size are zero and a + // multiple of 8 + do_setmemory_atomic_loop(USM_QUADWORD, dest, size, wide_value, rScratch1, + L_exit, _masm); + } + __ BIND(L_exit); + + __ leave(); // required for proper stackwalking of RuntimeStub frame + __ ret(0); + + __ BIND(L_fillDwords); + + // Fill DWORDs + { + Label L_dwordLoop, L_dwordsTail, L_dwordsTailLoop; + UnsafeCopyMemoryMark usmm(this, true, true); + + // At this point, we know the lower 2 bits of size are zero and a + // multiple of 4 + do_setmemory_atomic_loop(USM_DWORD, dest, size, wide_value, rScratch1, + L_exit, _masm); + } + __ jmpb(L_exit); + + __ BIND(L_fillBytes); + // Set up for tail call to previously generated byte fill routine + // Parameter order is (ptr, byteVal, size) + __ xchgq(c_rarg1, c_rarg2); + __ leave(); // Clear effect of enter() + __ jump(RuntimeAddress(unsafe_byte_fill)); + } + + return start; +} + // Perform range checks on the proposed arraycopy. // Kills temp, but nothing else. // Also, clean the sign bits of src_pos and dst_pos. diff --git a/src/hotspot/cpu/zero/stubGenerator_zero.cpp b/src/hotspot/cpu/zero/stubGenerator_zero.cpp index c2d6e82622ce8..5c7772021ea35 100644 --- a/src/hotspot/cpu/zero/stubGenerator_zero.cpp +++ b/src/hotspot/cpu/zero/stubGenerator_zero.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved. * Copyright 2007, 2008, 2010, 2015 Red Hat, Inc. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -148,6 +148,9 @@ class StubGenerator: public StubCodeGenerator { // Shared code tests for "null" to discover the stub is not generated. StubRoutines::_unsafe_arraycopy = nullptr; + // Shared code tests for "null" to discover the stub is not generated. + StubRoutines::_unsafe_setmemory = nullptr; + // We don't generate specialized code for HeapWord-aligned source // arrays, so just use the code we've already generated StubRoutines::_arrayof_jbyte_disjoint_arraycopy = diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index ddc1b1c335d0f..37f40ebe59688 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -2795,11 +2795,11 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) { nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; } - bool is_unsafe_arraycopy = (in_native || in_java) && UnsafeCopyMemory::contains_pc(pc); - if (((in_vm || in_native || is_unsafe_arraycopy) && thread->doing_unsafe_access()) || + bool is_unsafe_memory_access = (in_native || in_java) && UnsafeCopyMemory::contains_pc(pc); + if (((in_vm || in_native || is_unsafe_memory_access) && thread->doing_unsafe_access()) || (nm != nullptr && nm->has_unsafe_access())) { address next_pc = Assembler::locate_next_instruction(pc); - if (is_unsafe_arraycopy) { + if (is_unsafe_memory_access) { next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); } return Handle_Exception(exceptionInfo, SharedRuntime::handle_unsafe_access(thread, next_pc)); diff --git a/src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp b/src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp index 8711c9a89b352..a3101c0228513 100644 --- a/src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp +++ b/src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp @@ -340,10 +340,10 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // underlying file has been truncated. Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = cb ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_arraycopy = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); - if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_arraycopy) { + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = pc + 4; - if (is_unsafe_arraycopy) { + if (is_unsafe_memory_access) { next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); } next_pc = SharedRuntime::handle_unsafe_access(thread, next_pc); diff --git a/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp b/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp index 3dfe9e30f7904..436c68f5a30cf 100644 --- a/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp +++ b/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp @@ -257,10 +257,10 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_arraycopy = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); - if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_arraycopy) { + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = pc + NativeCall::instruction_size; - if (is_unsafe_arraycopy) { + if (is_unsafe_memory_access) { next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); diff --git a/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp b/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp index 593f6494540ee..35ee2de2aa2da 100644 --- a/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp +++ b/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp @@ -441,19 +441,17 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_arraycopy = thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc); - if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_arraycopy) { + bool is_unsafe_memory_access = thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc); + if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = Assembler::locate_next_instruction(pc); - if (is_unsafe_arraycopy) { + if (is_unsafe_memory_access) { next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } - } - else - + } else #ifdef AMD64 - if (sig == SIGFPE && + if (sig == SIGFPE && (info->si_code == FPE_INTDIV || info->si_code == FPE_FLTDIV // Workaround for macOS ARM incorrectly reporting FPE_FLTINV for "div by 0" // instead of the expected FPE_FLTDIV when running x86_64 binary under Rosetta emulation diff --git a/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp b/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp index e1c9dc8a13ab2..fc6cbe5faf0e6 100644 --- a/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp +++ b/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp @@ -240,10 +240,10 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_arraycopy = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); - if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_arraycopy) { + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = pc + NativeCall::instruction_size; - if (is_unsafe_arraycopy) { + if (is_unsafe_memory_access) { next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); diff --git a/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp b/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp index 6f9ac548ce1cd..5b5364e1117f2 100644 --- a/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp +++ b/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp @@ -324,17 +324,22 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - if ((nm != nullptr && nm->has_unsafe_access()) || (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc))) { + if ((nm != nullptr && nm->has_unsafe_access()) || + (thread->doing_unsafe_access() && + UnsafeCopyMemory::contains_pc(pc))) { unsafe_access = true; } } else if (sig == SIGSEGV && MacroAssembler::uses_implicit_null_check(info->si_addr)) { - // Determination of interpreter/vtable stub/compiled code null exception - CodeBlob* cb = CodeCache::find_blob(pc); - if (cb != nullptr) { - stub = SharedRuntime::continuation_for_implicit_exception(thread, pc, SharedRuntime::IMPLICIT_NULL); - } - } else if (sig == SIGILL && *(int *)pc == NativeInstruction::not_entrant_illegal_instruction) { + // Determination of interpreter/vtable stub/compiled code null exception + CodeBlob* cb = CodeCache::find_blob(pc); + if (cb != nullptr) { + stub = SharedRuntime::continuation_for_implicit_exception( + thread, pc, SharedRuntime::IMPLICIT_NULL); + } + } else if (sig == SIGILL && + *(int*)pc == + NativeInstruction::not_entrant_illegal_instruction) { // Not entrant stub = SharedRuntime::get_handle_wrong_method_stub(); } diff --git a/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp b/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp index 90640a6f06a81..89197df449311 100644 --- a/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp +++ b/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp @@ -355,10 +355,10 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // underlying file has been truncated. Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_arraycopy = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); - if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_arraycopy) { + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = pc + 4; - if (is_unsafe_arraycopy) { + if (is_unsafe_memory_access) { next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); } next_pc = SharedRuntime::handle_unsafe_access(thread, next_pc); diff --git a/src/hotspot/os_cpu/linux_riscv/os_linux_riscv.cpp b/src/hotspot/os_cpu/linux_riscv/os_linux_riscv.cpp index 079c3b42a9c3c..ec880236793b6 100644 --- a/src/hotspot/os_cpu/linux_riscv/os_linux_riscv.cpp +++ b/src/hotspot/os_cpu/linux_riscv/os_linux_riscv.cpp @@ -230,10 +230,10 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_arraycopy = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); - if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_arraycopy) { + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = Assembler::locate_next_instruction(pc); - if (is_unsafe_arraycopy) { + if (is_unsafe_memory_access) { next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); diff --git a/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp b/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp index b37a8d1f3a624..9815ff2c6cefa 100644 --- a/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp +++ b/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp @@ -260,19 +260,17 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_arraycopy = thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc); - if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_arraycopy) { + bool is_unsafe_memory_access = thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc); + if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = Assembler::locate_next_instruction(pc); - if (is_unsafe_arraycopy) { + if (is_unsafe_memory_access) { next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } - } - else - + } else #ifdef AMD64 - if (sig == SIGFPE && + if (sig == SIGFPE && (info->si_code == FPE_INTDIV || info->si_code == FPE_FLTDIV)) { stub = SharedRuntime:: diff --git a/src/hotspot/share/classfile/vmIntrinsics.cpp b/src/hotspot/share/classfile/vmIntrinsics.cpp index 6e72b4cbac31a..8d4f57165e151 100644 --- a/src/hotspot/share/classfile/vmIntrinsics.cpp +++ b/src/hotspot/share/classfile/vmIntrinsics.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -506,6 +506,9 @@ bool vmIntrinsics::disabled_by_jvm_flags(vmIntrinsics::ID id) { case vmIntrinsics::_copyMemory: if (!InlineArrayCopy || !InlineUnsafeOps) return true; break; + case vmIntrinsics::_setMemory: + if (!InlineUnsafeOps) return true; + break; #ifdef COMPILER2 case vmIntrinsics::_clone: case vmIntrinsics::_copyOf: diff --git a/src/hotspot/share/classfile/vmIntrinsics.hpp b/src/hotspot/share/classfile/vmIntrinsics.hpp index 6104fb5683b3b..a0db1a65d3a46 100644 --- a/src/hotspot/share/classfile/vmIntrinsics.hpp +++ b/src/hotspot/share/classfile/vmIntrinsics.hpp @@ -620,6 +620,9 @@ class methodHandle; do_intrinsic(_copyMemory, jdk_internal_misc_Unsafe, copyMemory_name, copyMemory_signature, F_RN) \ do_name( copyMemory_name, "copyMemory0") \ do_signature(copyMemory_signature, "(Ljava/lang/Object;JLjava/lang/Object;JJ)V") \ + do_intrinsic(_setMemory, jdk_internal_misc_Unsafe, setMemory_name, setMemory_signature, F_RN) \ + do_name( setMemory_name, "setMemory0") \ + do_signature(setMemory_signature, "(Ljava/lang/Object;JJB)V") \ do_intrinsic(_loadFence, jdk_internal_misc_Unsafe, loadFence_name, loadFence_signature, F_R) \ do_name( loadFence_name, "loadFence") \ do_alias( loadFence_signature, void_method_signature) \ diff --git a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp index a57d1f7e6736f..cadbba27f6e25 100644 --- a/src/hotspot/share/jvmci/vmStructs_jvmci.cpp +++ b/src/hotspot/share/jvmci/vmStructs_jvmci.cpp @@ -342,6 +342,7 @@ static_field(StubRoutines, _generic_arraycopy, address) \ static_field(StubRoutines, _array_sort, address) \ static_field(StubRoutines, _array_partition, address) \ + static_field(StubRoutines, _unsafe_setmemory, address) \ \ static_field(StubRoutines, _aescrypt_encryptBlock, address) \ static_field(StubRoutines, _aescrypt_decryptBlock, address) \ diff --git a/src/hotspot/share/opto/c2compiler.cpp b/src/hotspot/share/opto/c2compiler.cpp index 25dfee91a9105..dc15e82dff8f1 100644 --- a/src/hotspot/share/opto/c2compiler.cpp +++ b/src/hotspot/share/opto/c2compiler.cpp @@ -257,6 +257,9 @@ bool C2Compiler::is_intrinsic_supported(vmIntrinsics::ID id) { case vmIntrinsics::_copyMemory: if (StubRoutines::unsafe_arraycopy() == nullptr) return false; break; + case vmIntrinsics::_setMemory: + if (StubRoutines::unsafe_setmemory() == nullptr) return false; + break; case vmIntrinsics::_electronicCodeBook_encryptAESCrypt: if (StubRoutines::electronicCodeBook_encryptAESCrypt() == nullptr) return false; break; diff --git a/src/hotspot/share/opto/library_call.cpp b/src/hotspot/share/opto/library_call.cpp index 88a395feb6440..b018fcf509713 100644 --- a/src/hotspot/share/opto/library_call.cpp +++ b/src/hotspot/share/opto/library_call.cpp @@ -507,6 +507,7 @@ bool LibraryCallKit::try_to_inline(int predicate) { case vmIntrinsics::_writebackPostSync0: return inline_unsafe_writebackSync0(false); case vmIntrinsics::_allocateInstance: return inline_unsafe_allocate(); case vmIntrinsics::_copyMemory: return inline_unsafe_copyMemory(); + case vmIntrinsics::_setMemory: return inline_unsafe_setMemory(); case vmIntrinsics::_getLength: return inline_native_getLength(); case vmIntrinsics::_copyOf: return inline_array_copyOf(false); case vmIntrinsics::_copyOfRange: return inline_array_copyOf(true); @@ -4948,6 +4949,57 @@ bool LibraryCallKit::inline_unsafe_copyMemory() { return true; } +// unsafe_setmemory(void *base, ulong offset, size_t length, char fill_value); +// Fill 'length' bytes starting from 'base[offset]' with 'fill_value' +bool LibraryCallKit::inline_unsafe_setMemory() { + if (callee()->is_static()) return false; // caller must have the capability! + null_check_receiver(); // null-check receiver + if (stopped()) return true; + + C->set_has_unsafe_access(true); // Mark eventual nmethod as "unsafe". + + Node* dst_base = argument(1); // type: oop + Node* dst_off = ConvL2X(argument(2)); // type: long + Node* size = ConvL2X(argument(4)); // type: long + Node* byte = argument(6); // type: byte + + assert(Unsafe_field_offset_to_byte_offset(11) == 11, + "fieldOffset must be byte-scaled"); + + Node* dst_addr = make_unsafe_address(dst_base, dst_off); + + Node* thread = _gvn.transform(new ThreadLocalNode()); + Node* doing_unsafe_access_addr = basic_plus_adr(top(), thread, in_bytes(JavaThread::doing_unsafe_access_offset())); + BasicType doing_unsafe_access_bt = T_BYTE; + assert((sizeof(bool) * CHAR_BIT) == 8, "not implemented"); + + // update volatile field + store_to_memory(control(), doing_unsafe_access_addr, intcon(1), doing_unsafe_access_bt, Compile::AliasIdxRaw, MemNode::unordered); + + int flags = RC_LEAF | RC_NO_FP; + + const TypePtr* dst_type = TypePtr::BOTTOM; + + // Adjust memory effects of the runtime call based on input values. + if (!has_wide_mem(_gvn, dst_addr, dst_base)) { + dst_type = _gvn.type(dst_addr)->is_ptr(); // narrow out memory + + flags |= RC_NARROW_MEM; // narrow in memory + } + + // Call it. Note that the length argument is not scaled. + make_runtime_call(flags, + OptoRuntime::make_setmemory_Type(), + StubRoutines::unsafe_setmemory(), + "unsafe_setmemory", + dst_type, + dst_addr, size XTOP, byte); + + store_to_memory(control(), doing_unsafe_access_addr, intcon(0), doing_unsafe_access_bt, Compile::AliasIdxRaw, MemNode::unordered); + + return true; +} + #undef XTOP //------------------------clone_coping----------------------------------- diff --git a/src/hotspot/share/opto/library_call.hpp b/src/hotspot/share/opto/library_call.hpp index 47f9d7d47133a..cb4f34a0db6b9 100644 --- a/src/hotspot/share/opto/library_call.hpp +++ b/src/hotspot/share/opto/library_call.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -231,6 +231,7 @@ class LibraryCallKit : public GraphKit { bool inline_unsafe_writeback0(); bool inline_unsafe_writebackSync0(bool is_pre); bool inline_unsafe_copyMemory(); + bool inline_unsafe_setMemory(); bool inline_native_currentCarrierThread(); bool inline_native_currentThread(); diff --git a/src/hotspot/share/opto/runtime.cpp b/src/hotspot/share/opto/runtime.cpp index 605c95316e24b..2c0215047857c 100644 --- a/src/hotspot/share/opto/runtime.cpp +++ b/src/hotspot/share/opto/runtime.cpp @@ -771,6 +771,29 @@ const TypeFunc* OptoRuntime::void_void_Type() { } +// Takes as parameters: +// void *dest +// long size +// uchar byte +const TypeFunc* OptoRuntime::make_setmemory_Type() { + // create input type (domain) + int argcnt = NOT_LP64(3) LP64_ONLY(4); + const Type** fields = TypeTuple::fields(argcnt); + int argp = TypeFunc::Parms; + fields[argp++] = TypePtr::NOTNULL; // dest + fields[argp++] = TypeX_X; // size + LP64_ONLY(fields[argp++] = Type::HALF); // size + fields[argp++] = TypeInt::UBYTE; // bytevalue + assert(argp == TypeFunc::Parms+argcnt, "correct decoding"); + const TypeTuple* domain = TypeTuple::make(TypeFunc::Parms+argcnt, fields); + + // no result type needed + fields = TypeTuple::fields(1); + fields[TypeFunc::Parms+0] = nullptr; // void + const TypeTuple* range = TypeTuple::make(TypeFunc::Parms, fields); + return TypeFunc::make(domain, range); +} + // arraycopy stub variations: enum ArrayCopyType { ac_fast, // void(ptr, ptr, size_t) diff --git a/src/hotspot/share/opto/runtime.hpp b/src/hotspot/share/opto/runtime.hpp index b85542423e848..30656044cbb20 100644 --- a/src/hotspot/share/opto/runtime.hpp +++ b/src/hotspot/share/opto/runtime.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, 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 @@ -266,6 +266,8 @@ class OptoRuntime : public AllStatic { static const TypeFunc* generic_arraycopy_Type(); static const TypeFunc* slow_arraycopy_Type(); // the full routine + static const TypeFunc* make_setmemory_Type(); + static const TypeFunc* array_fill_Type(); static const TypeFunc* array_sort_Type(); diff --git a/src/hotspot/share/prims/unsafe.cpp b/src/hotspot/share/prims/unsafe.cpp index dcc47f0f64e95..88672fe16b90e 100644 --- a/src/hotspot/share/prims/unsafe.cpp +++ b/src/hotspot/share/prims/unsafe.cpp @@ -393,7 +393,12 @@ UNSAFE_ENTRY_SCOPED(void, Unsafe_SetMemory0(JNIEnv *env, jobject unsafe, jobject { GuardUnsafeAccess guard(thread); - Copy::fill_to_memory_atomic(p, sz, value); + if (StubRoutines::unsafe_setmemory() != nullptr) { + MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXExec, thread)); + StubRoutines::UnsafeSetMemory_stub()(p, sz, value); + } else { + Copy::fill_to_memory_atomic(p, sz, value); + } } } UNSAFE_END diff --git a/src/hotspot/share/runtime/sharedRuntime.cpp b/src/hotspot/share/runtime/sharedRuntime.cpp index 299f1900906d9..802ef22ed6263 100644 --- a/src/hotspot/share/runtime/sharedRuntime.cpp +++ b/src/hotspot/share/runtime/sharedRuntime.cpp @@ -176,6 +176,7 @@ uint SharedRuntime::_generic_array_copy_ctr=0; uint SharedRuntime::_slow_array_copy_ctr=0; uint SharedRuntime::_find_handler_ctr=0; uint SharedRuntime::_rethrow_ctr=0; +uint SharedRuntime::_unsafe_set_memory_ctr=0; int SharedRuntime::_ICmiss_index = 0; int SharedRuntime::_ICmiss_count[SharedRuntime::maxICmiss_count]; @@ -541,7 +542,6 @@ address SharedRuntime::raw_exception_handler_for_return_address(JavaThread* curr tty->print_cr("b) other problem"); } #endif // PRODUCT - ShouldNotReachHere(); return nullptr; } @@ -1983,6 +1983,7 @@ void SharedRuntime::print_statistics() { if (_slow_array_copy_ctr) tty->print_cr("%5u slow array copies", _slow_array_copy_ctr); if (_find_handler_ctr) tty->print_cr("%5u find exception handler", _find_handler_ctr); if (_rethrow_ctr) tty->print_cr("%5u rethrow handler", _rethrow_ctr); + if (_unsafe_set_memory_ctr) tty->print_cr("%5u unsafe set memorys", _unsafe_set_memory_ctr); AdapterHandlerLibrary::print_statistics(); diff --git a/src/hotspot/share/runtime/sharedRuntime.hpp b/src/hotspot/share/runtime/sharedRuntime.hpp index 93182a10126e9..46a2046565666 100644 --- a/src/hotspot/share/runtime/sharedRuntime.hpp +++ b/src/hotspot/share/runtime/sharedRuntime.hpp @@ -546,6 +546,8 @@ class SharedRuntime: AllStatic { static uint _generic_array_copy_ctr; // Slow-path includes type decoding static uint _slow_array_copy_ctr; // Slow-path failed out to a method call + static uint _unsafe_set_memory_ctr; // Slow-path includes alignment checks + static uint _new_instance_ctr; // 'new' object requires GC static uint _new_array_ctr; // 'new' array requires GC static uint _multi2_ctr, _multi3_ctr, _multi4_ctr, _multi5_ctr; diff --git a/src/hotspot/share/runtime/stubRoutines.cpp b/src/hotspot/share/runtime/stubRoutines.cpp index 4e5cd7f03895d..550f289bf3cbb 100644 --- a/src/hotspot/share/runtime/stubRoutines.cpp +++ b/src/hotspot/share/runtime/stubRoutines.cpp @@ -110,6 +110,8 @@ address StubRoutines::_checkcast_arraycopy_uninit = nullptr; address StubRoutines::_unsafe_arraycopy = nullptr; address StubRoutines::_generic_arraycopy = nullptr; +address StubRoutines::_unsafe_setmemory = nullptr; + address StubRoutines::_jbyte_fill; address StubRoutines::_jshort_fill; address StubRoutines::_jint_fill; diff --git a/src/hotspot/share/runtime/stubRoutines.hpp b/src/hotspot/share/runtime/stubRoutines.hpp index d7adf320131ae..4cb031799e4b9 100644 --- a/src/hotspot/share/runtime/stubRoutines.hpp +++ b/src/hotspot/share/runtime/stubRoutines.hpp @@ -193,6 +193,8 @@ class StubRoutines: AllStatic { static address _unsafe_arraycopy; static address _generic_arraycopy; + static address _unsafe_setmemory; + static address _jbyte_fill; static address _jshort_fill; static address _jint_fill; @@ -384,6 +386,11 @@ class StubRoutines: AllStatic { typedef void (*UnsafeArrayCopyStub)(const void* src, void* dst, size_t count); static UnsafeArrayCopyStub UnsafeArrayCopy_stub() { return CAST_TO_FN_PTR(UnsafeArrayCopyStub, _unsafe_arraycopy); } + static address unsafe_setmemory() { return _unsafe_setmemory; } + + typedef void (*UnsafeSetMemoryStub)(const void* src, size_t count, char byte); + static UnsafeSetMemoryStub UnsafeSetMemory_stub() { return CAST_TO_FN_PTR(UnsafeSetMemoryStub, _unsafe_setmemory); } + static address generic_arraycopy() { return _generic_arraycopy; } static address select_arraysort_function() { return _array_sort; } static address select_array_partition_function() { return _array_partition; } diff --git a/src/hotspot/share/utilities/copy.cpp b/src/hotspot/share/utilities/copy.cpp index ed7797969438b..2eda39fae54d3 100644 --- a/src/hotspot/share/utilities/copy.cpp +++ b/src/hotspot/share/utilities/copy.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2024, 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 @@ -211,42 +211,43 @@ void Copy::conjoint_swap(const void* src, void* dst, size_t byte_count, size_t e // Fill bytes; larger units are filled atomically if everything is aligned. void Copy::fill_to_memory_atomic(void* to, size_t size, jubyte value) { - address dst = (address) to; - uintptr_t bits = (uintptr_t) to | (uintptr_t) size; + address dst = (address)to; + uintptr_t bits = (uintptr_t)to | (uintptr_t)size; if (bits % sizeof(jlong) == 0) { - jlong fill = (julong)( (jubyte)value ); // zero-extend + jlong fill = (julong)((jubyte)value); // zero-extend if (fill != 0) { fill += fill << 8; fill += fill << 16; fill += fill << 32; } - //Copy::fill_to_jlongs_atomic((jlong*) dst, size / sizeof(jlong)); + // Copy::fill_to_jlongs_atomic((jlong*) dst, size / sizeof(jlong)); for (uintptr_t off = 0; off < size; off += sizeof(jlong)) { *(jlong*)(dst + off) = fill; } } else if (bits % sizeof(jint) == 0) { - jint fill = (juint)( (jubyte)value ); // zero-extend + jint fill = (juint)((jubyte)value); // zero-extend if (fill != 0) { fill += fill << 8; fill += fill << 16; } - //Copy::fill_to_jints_atomic((jint*) dst, size / sizeof(jint)); + // Copy::fill_to_jints_atomic((jint*) dst, size / sizeof(jint)); for (uintptr_t off = 0; off < size; off += sizeof(jint)) { *(jint*)(dst + off) = fill; } } else if (bits % sizeof(jshort) == 0) { - jshort fill = (jushort)( (jubyte)value ); // zero-extend + jshort fill = (jushort)((jubyte)value); // zero-extend fill += (jshort)(fill << 8); - //Copy::fill_to_jshorts_atomic((jshort*) dst, size / sizeof(jshort)); + // Copy::fill_to_jshorts_atomic((jshort*) dst, size / sizeof(jshort)); for (uintptr_t off = 0; off < size; off += sizeof(jshort)) { *(jshort*)(dst + off) = fill; } } else { // Not aligned, so no need to be atomic. #ifdef MUSL_LIBC - // This code is used by Unsafe and may hit the next page after truncation of mapped memory. - // Therefore, we use volatile to prevent compilers from replacing the loop by memset which - // may not trigger SIGBUS as needed (observed on Alpine Linux x86_64) + // This code is used by Unsafe and may hit the next page after truncation + // of mapped memory. Therefore, we use volatile to prevent compilers from + // replacing the loop by memset which may not trigger SIGBUS as needed + // (observed on Alpine Linux x86_64) jbyte fill = value; for (uintptr_t off = 0; off < size; off += sizeof(jbyte)) { *(volatile jbyte*)(dst + off) = fill; diff --git a/src/java.base/share/classes/jdk/internal/misc/Unsafe.java b/src/java.base/share/classes/jdk/internal/misc/Unsafe.java index eab07313da273..9c81c053e57ca 100644 --- a/src/java.base/share/classes/jdk/internal/misc/Unsafe.java +++ b/src/java.base/share/classes/jdk/internal/misc/Unsafe.java @@ -3824,6 +3824,7 @@ private void putShortParts(Object o, long offset, byte i0, byte i1) { private native long allocateMemory0(long bytes); private native long reallocateMemory0(long address, long bytes); private native void freeMemory0(long address); + @IntrinsicCandidate private native void setMemory0(Object o, long offset, long bytes, byte value); @IntrinsicCandidate private native void copyMemory0(Object srcBase, long srcOffset, Object destBase, long destOffset, long bytes); diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/MemorySegmentZeroUnsafe.java b/test/micro/org/openjdk/bench/java/lang/foreign/MemorySegmentZeroUnsafe.java new file mode 100644 index 0000000000000..ba705e2ecd4db --- /dev/null +++ b/test/micro/org/openjdk/bench/java/lang/foreign/MemorySegmentZeroUnsafe.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2024, 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 org.openjdk.bench.java.lang.foreign; + +import sun.misc.Unsafe; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Setup; +import java.lang.foreign.Arena; +import java.lang.foreign.MemorySegment; + +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS) +@Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS) +@State(org.openjdk.jmh.annotations.Scope.Thread) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Fork(value = 3, jvmArgsAppend = {"--enable-native-access=ALL-UNNAMED"}) +public class MemorySegmentZeroUnsafe { + + static final Unsafe UNSAFE = Utils.unsafe; + long src; + + @Param({"1", "2", "3", "4", "5", "6", "7", "8", "15", "16", "63", "64", "255", "256"}) + public int size; + + @Param({"true", "false"}) + public boolean aligned; + + private MemorySegment segment; + private long address; + + @Setup + public void setup() throws Throwable { + Arena arena = Arena.global(); + long alignment = 1; + // this complex logic is to ensure that if in the future we decide to batch writes with different + // batches based on alignment, we would spot it here + if (size == 2 || size == 3) { + alignment = 2; + } else if (size >= 4 && size <= 7) { + alignment = 4; + } else { + alignment = 8; + } + if (aligned) { + segment = arena.allocate(size, alignment); + } else { + // forcibly misaligned in both address AND size, given that would be the worst case + segment = arena.allocate(size + 1, alignment).asSlice(1); + } + address = segment.address(); + } + + @Benchmark + public void panama() { + segment.fill((byte) 0); + } + + @Benchmark + public void unsafe() { + UNSAFE.setMemory(address, size, (byte) 0); + } +} From 20546c1ea064daa8e2faa71142904ea2c62b3311 Mon Sep 17 00:00:00 2001 From: Christian Hagedorn <chagedorn@openjdk.org> Date: Mon, 22 Apr 2024 06:07:07 +0000 Subject: [PATCH 031/141] 8330004: Refactor cloning down code in Split If for Template Assertion Predicates Reviewed-by: epeter, kvn --- src/hotspot/share/opto/loopTransform.cpp | 56 ++------- src/hotspot/share/opto/loopnode.hpp | 11 +- src/hotspot/share/opto/node.hpp | 16 +++ src/hotspot/share/opto/predicates.cpp | 24 +++- src/hotspot/share/opto/predicates.hpp | 73 +++++++++-- src/hotspot/share/opto/split_if.cpp | 41 +++--- .../assertion/TestSplitIfCloningDown.java | 117 ++++++++++++++++++ 7 files changed, 255 insertions(+), 83 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/predicates/assertion/TestSplitIfCloningDown.java diff --git a/src/hotspot/share/opto/loopTransform.cpp b/src/hotspot/share/opto/loopTransform.cpp index 516036d839baa..24861cf2725ef 100644 --- a/src/hotspot/share/opto/loopTransform.cpp +++ b/src/hotspot/share/opto/loopTransform.cpp @@ -1430,40 +1430,6 @@ void PhaseIdealLoop::copy_assertion_predicates_to_main_loop_helper(const Predica } } -// Is 'n' a node that can be found on the input chain of a Template Assertion Predicate bool (i.e. between a Template -// Assertion Predicate If node and the OpaqueLoop* nodes)? -static bool is_part_of_template_assertion_predicate_bool(Node* n) { - int op = n->Opcode(); - return (n->is_Bool() || - n->is_Cmp() || - op == Op_AndL || - op == Op_OrL || - op == Op_RShiftL || - op == Op_LShiftL || - op == Op_LShiftI || - op == Op_AddL || - op == Op_AddI || - op == Op_MulL || - op == Op_MulI || - op == Op_SubL || - op == Op_SubI || - op == Op_ConvI2L || - op == Op_CastII); -} - -bool PhaseIdealLoop::subgraph_has_opaque(Node* n) { - if (n->Opcode() == Op_OpaqueLoopInit || n->Opcode() == Op_OpaqueLoopStride) { - return true; - } - if (!is_part_of_template_assertion_predicate_bool(n)) { - return false; - } - uint init; - uint stride; - count_opaque_loop_nodes(n, init, stride); - return init != 0 || stride != 0; -} - bool PhaseIdealLoop::assertion_predicate_has_loop_opaque_node(IfNode* iff) { uint init; uint stride; @@ -1507,19 +1473,19 @@ void PhaseIdealLoop::count_opaque_loop_nodes(Node* n, uint& init, uint& stride) wq.push(n); for (uint i = 0; i < wq.size(); i++) { Node* n = wq.at(i); - if (is_part_of_template_assertion_predicate_bool(n)) { - for (uint j = 1; j < n->req(); j++) { - Node* m = n->in(j); - if (m != nullptr) { - wq.push(m); + if (TemplateAssertionPredicateExpressionNode::is_maybe_in_expression(n)) { + if (n->is_OpaqueLoopInit()) { + init++; + } else if (n->is_OpaqueLoopStride()) { + stride++; + } else { + for (uint j = 1; j < n->req(); j++) { + Node* m = n->in(j); + if (m != nullptr) { + wq.push(m); + } } } - continue; - } - if (n->Opcode() == Op_OpaqueLoopInit) { - init++; - } else if (n->Opcode() == Op_OpaqueLoopStride) { - stride++; } } } diff --git a/src/hotspot/share/opto/loopnode.hpp b/src/hotspot/share/opto/loopnode.hpp index 658da04f2093b..75276aae36d22 100644 --- a/src/hotspot/share/opto/loopnode.hpp +++ b/src/hotspot/share/opto/loopnode.hpp @@ -951,7 +951,6 @@ class PhaseIdealLoop : public PhaseTransform { Node* uncommon_proj, Node* control, IdealLoopTree* outer_loop, Node* input_proj); static void count_opaque_loop_nodes(Node* n, uint& init, uint& stride); - static bool subgraph_has_opaque(Node* n); static bool assertion_predicate_has_loop_opaque_node(IfNode* iff); static void get_assertion_predicates(Node* predicate, Unique_Node_List& list, bool get_opaque = false); void update_main_loop_assertion_predicates(Node* ctrl, CountedLoopNode* loop_head, Node* init, int stride_con); @@ -1759,14 +1758,12 @@ class PhaseIdealLoop : public PhaseTransform { void finish_clone_loop(Node_List* split_if_set, Node_List* split_bool_set, Node_List* split_cex_set); - bool clone_cmp_down(Node* n, const Node* blk1, const Node* blk2); - - void clone_loadklass_nodes_at_cmp_index(const Node* n, Node* cmp, int i); - - bool clone_cmp_loadklass_down(Node* n, const Node* blk1, const Node* blk2); - bool at_relevant_ctrl(Node* n, const Node* blk1, const Node* blk2); + bool clone_cmp_loadklass_down(Node* n, const Node* blk1, const Node* blk2); + void clone_loadklass_nodes_at_cmp_index(const Node* n, Node* cmp, int i); + bool clone_cmp_down(Node* n, const Node* blk1, const Node* blk2); + void clone_template_assertion_predicate_expression_down(Node* node); Node* similar_subtype_check(const Node* x, Node* r_in); diff --git a/src/hotspot/share/opto/node.hpp b/src/hotspot/share/opto/node.hpp index 19b9a11d9ce4e..bb58c2ff8cee6 100644 --- a/src/hotspot/share/opto/node.hpp +++ b/src/hotspot/share/opto/node.hpp @@ -1708,6 +1708,22 @@ class Unique_Node_List : public Node_List { if( !_in_worklist.test_set(b->_idx) ) Node_List::push(b); } + void push_non_cfg_inputs_of(const Node* node) { + for (uint i = 1; i < node->req(); i++) { + Node* input = node->in(i); + if (input != nullptr && !input->is_CFG()) { + push(input); + } + } + } + + void push_outputs_of(const Node* node) { + for (DUIterator_Fast imax, i = node->fast_outs(imax); i < imax; i++) { + Node* output = node->fast_out(i); + push(output); + } + } + Node *pop() { if( _clock_index >= size() ) _clock_index = 0; Node *b = at(_clock_index); diff --git a/src/hotspot/share/opto/predicates.cpp b/src/hotspot/share/opto/predicates.cpp index 997a05dc1f25a..7f873e1fb6fbd 100644 --- a/src/hotspot/share/opto/predicates.cpp +++ b/src/hotspot/share/opto/predicates.cpp @@ -323,7 +323,7 @@ Opaque4Node* TemplateAssertionPredicateExpression::clone(const TransformStrategy auto is_opaque_loop_node = [](const Node* node) { return node->is_Opaque1(); }; - DataNodesOnPathsToTargets data_nodes_on_path_to_targets(TemplateAssertionPredicateExpression::maybe_contains, + DataNodesOnPathsToTargets data_nodes_on_path_to_targets(TemplateAssertionPredicateExpressionNode::is_maybe_in_expression, is_opaque_loop_node); const Unique_Node_List& collected_nodes = data_nodes_on_path_to_targets.collect(_opaque4_node); DataNodeGraph data_node_graph(collected_nodes, phase); @@ -332,3 +332,25 @@ Opaque4Node* TemplateAssertionPredicateExpression::clone(const TransformStrategy Node* opaque4_clone = *orig_to_new.get(_opaque4_node); return opaque4_clone->as_Opaque4(); } + +// Check if this node belongs a Template Assertion Predicate Expression (including OpaqueLoop* nodes). +bool TemplateAssertionPredicateExpressionNode::is_in_expression(Node* node) { + if (is_maybe_in_expression(node)) { + ResourceMark rm; + Unique_Node_List list; + list.push(node); + for (uint i = 0; i < list.size(); i++) { + Node* next = list.at(i); + if (next->is_OpaqueLoopInit() || next->is_OpaqueLoopStride()) { + return true; + } else if (is_maybe_in_expression(next)) { + list.push_non_cfg_inputs_of(next); + } + } + } + return false; +} + +bool TemplateAssertionPredicateExpressionNode::is_template_assertion_predicate(Node* node) { + return node->is_If() && node->in(1)->is_Opaque4(); +} diff --git a/src/hotspot/share/opto/predicates.hpp b/src/hotspot/share/opto/predicates.hpp index a794e31ac3b12..670ca58cc47f5 100644 --- a/src/hotspot/share/opto/predicates.hpp +++ b/src/hotspot/share/opto/predicates.hpp @@ -283,14 +283,41 @@ class TemplateAssertionPredicateExpression : public StackObj { Opaque4Node* clone(const TransformStrategyForOpaqueLoopNodes& transform_strategy, Node* new_ctrl, PhaseIdealLoop* phase); public: - // Is 'n' a node that could be part of a Template Assertion Predicate Expression (i.e. could be found on the input - // chain of a Template Assertion Predicate Opaque4Node up to and including the OpaqueLoop* nodes)? - static bool maybe_contains(const Node* n) { - const int opcode = n->Opcode(); - return (opcode == Op_OpaqueLoopInit || - opcode == Op_OpaqueLoopStride || - n->is_Bool() || - n->is_Cmp() || + Opaque4Node* clone(Node* new_ctrl, PhaseIdealLoop* phase); + Opaque4Node* clone_and_replace_init(Node* new_init, Node* new_ctrl,PhaseIdealLoop* phase); + Opaque4Node* clone_and_replace_init_and_stride(Node* new_init, Node* new_stride, Node* new_ctrl, PhaseIdealLoop* phase); +}; + +// Class to represent a node being part of a Template Assertion Predicate Expression. +// +// The expression itself can belong to no, one, or two Template Assertion Predicates: +// - None: This node is already dead (i.e. we replaced the Bool condition of the Template Assertion Predicate). +// - Two: A OpaqueLoopInitNode could be part of two Template Assertion Predicates. +// - One: In all other cases. +class TemplateAssertionPredicateExpressionNode : public StackObj { + Node* const _node; + + public: + explicit TemplateAssertionPredicateExpressionNode(Node* node) : _node(node) { + assert(is_in_expression(node), "must be valid"); + } + NONCOPYABLE(TemplateAssertionPredicateExpressionNode); + + private: + static bool is_template_assertion_predicate(Node* node); + + public: + // Check whether the provided node is part of a Template Assertion Predicate Expression or not. + static bool is_in_expression(Node* node); + + // Check if the opcode of node could be found in a Template Assertion Predicate Expression. + // This also provides a fast check whether a node is unrelated. + static bool is_maybe_in_expression(const Node* node) { + const int opcode = node->Opcode(); + return (node->is_OpaqueLoopInit() || + node->is_OpaqueLoopStride() || + node->is_Bool() || + node->is_Cmp() || opcode == Op_AndL || opcode == Op_OrL || opcode == Op_RShiftL || @@ -306,9 +333,33 @@ class TemplateAssertionPredicateExpression : public StackObj { opcode == Op_CastII); } - Opaque4Node* clone(Node* new_ctrl, PhaseIdealLoop* phase); - Opaque4Node* clone_and_replace_init(Node* new_init, Node* new_ctrl,PhaseIdealLoop* phase); - Opaque4Node* clone_and_replace_init_and_stride(Node* new_init, Node* new_stride, Node* new_ctrl, PhaseIdealLoop* phase); + // Apply the given function to all Template Assertion Predicates (if any) to which this Template Assertion Predicate + // Expression Node belongs to. + template <class Callback> + void for_each_template_assertion_predicate(Callback callback) { + ResourceMark rm; + Unique_Node_List list; + list.push(_node); + DEBUG_ONLY(int template_counter = 0;) + for (uint i = 0; i < list.size(); i++) { + Node* next = list.at(i); + if (is_template_assertion_predicate(next)) { + callback(next->as_If()); + DEBUG_ONLY(template_counter++;) + } else { + assert(!next->is_CFG(), "no CFG expected in Template Assertion Predicate Expression"); + list.push_outputs_of(next); + } + } + + // Each node inside a Template Assertion Predicate Expression is in between a Template Assertion Predicate and + // its OpaqueLoop* nodes (or an OpaqueLoop* node itself). The OpaqueLoop* nodes do not common up. Therefore, each + // Template Assertion Predicate Expression node belongs to a single expression - except for OpaqueLoopInitNodes. + // An OpaqueLoopInitNode is shared between the init and last value Template Assertion Predicate at creation. + // Later, when cloning the expressions, they are no longer shared. + assert(template_counter <= 2, "a node cannot be part of more than two templates"); + assert(template_counter <= 1 || _node->is_OpaqueLoopInit(), "only OpaqueLoopInit nodes can be part of two templates"); + } }; // This class represents a Predicate Block (i.e. either a Loop Predicate Block, a Profiled Loop Predicate Block, diff --git a/src/hotspot/share/opto/split_if.cpp b/src/hotspot/share/opto/split_if.cpp index 0b7faffda00fa..70369a2c9c49a 100644 --- a/src/hotspot/share/opto/split_if.cpp +++ b/src/hotspot/share/opto/split_if.cpp @@ -95,25 +95,7 @@ bool PhaseIdealLoop::split_up( Node *n, Node *blk1, Node *blk2 ) { return true; } - if (subgraph_has_opaque(n)) { - Unique_Node_List wq; - wq.push(n); - for (uint i = 0; i < wq.size(); i++) { - Node* m = wq.at(i); - if (m->is_If()) { - assert(assertion_predicate_has_loop_opaque_node(m->as_If()), "opaque node not reachable from if?"); - TemplateAssertionPredicateExpression template_assertion_predicate_expression(m->in(1)->as_Opaque4()); - Opaque4Node* cloned_opaque4_node = template_assertion_predicate_expression.clone(m->in(0), this); - _igvn.replace_input_of(m, 1, cloned_opaque4_node); - } else { - assert(!m->is_CFG(), "not CFG expected"); - for (DUIterator_Fast jmax, j = m->fast_outs(jmax); j < jmax; j++) { - Node* u = m->fast_out(j); - wq.push(u); - } - } - } - } + clone_template_assertion_predicate_expression_down(n); if (n->Opcode() == Op_OpaqueZeroTripGuard) { // If this Opaque1 is part of the zero trip guard for a loop: @@ -427,6 +409,27 @@ bool PhaseIdealLoop::clone_cmp_down(Node* n, const Node* blk1, const Node* blk2) return false; } +// 'n' could be a node belonging to a Template Assertion Predicate Expression (i.e. any node between a Template +// Assertion Predicate and its OpaqueLoop* nodes (included)). We cannot simply split this node up since this would +// create a phi node inside the Template Assertion Predicate Expression - making it unrecognizable as such. Therefore, +// we completely clone the entire Template Assertion Predicate Expression "down". This ensures that we have an +// untouched copy that is still recognized by the Template Assertion Predicate matching code. +void PhaseIdealLoop::clone_template_assertion_predicate_expression_down(Node* node) { + if (!TemplateAssertionPredicateExpressionNode::is_in_expression(node)) { + return; + } + + TemplateAssertionPredicateExpressionNode template_assertion_predicate_expression_node(node); + auto clone_expression = [&](IfNode* template_assertion_predicate) { + Opaque4Node* opaque4_node = template_assertion_predicate->in(1)->as_Opaque4(); + TemplateAssertionPredicateExpression template_assertion_predicate_expression(opaque4_node); + Node* new_ctrl = template_assertion_predicate->in(0); + Opaque4Node* cloned_opaque4_node = template_assertion_predicate_expression.clone(new_ctrl, this); + igvn().replace_input_of(template_assertion_predicate, 1, cloned_opaque4_node); + }; + template_assertion_predicate_expression_node.for_each_template_assertion_predicate(clone_expression); +} + //------------------------------register_new_node------------------------------ void PhaseIdealLoop::register_new_node( Node *n, Node *blk ) { assert(!n->is_CFG(), "must be data node"); diff --git a/test/hotspot/jtreg/compiler/predicates/assertion/TestSplitIfCloningDown.java b/test/hotspot/jtreg/compiler/predicates/assertion/TestSplitIfCloningDown.java new file mode 100644 index 0000000000000..2e7a887a7ad7e --- /dev/null +++ b/test/hotspot/jtreg/compiler/predicates/assertion/TestSplitIfCloningDown.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2024, 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 8330004 + * @summary Sanity test to exercise code to clone a Template Assertion Predicate down in Split If. + * @requires vm.compiler2.enabled + * @run main/othervm -Xcomp -XX:LoopMaxUnroll=0 + * -XX:CompileCommand=compileonly,compiler.predicates.assertion.TestSplitIfCloningDown::* + * compiler.predicates.assertion.TestSplitIfCloningDown + */ + +/* + * @test id=no-flags + * @bug 8330004 + * @summary Sanity test to exercise code to clone a Template Assertion Predicate down in Split If. + * @run main compiler.predicates.assertion.TestSplitIfCloningDown + */ + +package compiler.predicates.assertion; + +public class TestSplitIfCloningDown { + static int[] iArr = new int[100]; + static boolean flag; + static int iFld; + + public static void main(String[] args) { + for (int i = 0; i < 10000; i++) { + testPhiIntoNonOpaqueLoopExpressionNode(); + testPhiIntoOpaqueLoopExpressionNode(); + } + } + + + static void testPhiIntoNonOpaqueLoopExpressionNode() { + int zero = 34; + int limit = 2; + for (; limit < 4; limit *= 2); + for (int i = 2; i < limit; i++) { + zero = 0; + } + + + for (int t = 0; t < 100; t++) { // Use outer loop such that OpaqueLoop* will get an earlier ctrl. + iArr = new int[1000]; + + // Replaced by CMove which is an input into Template Assertion Predicate Expression which + // is not an OpaqueLoop* node. Split If will create a phi and tries to split a Template + // Assertion Predicate Expression node -> Need to clone template down. + int a; + if (flag) { + a = 4; + } else { + a = 3; + } + + for (int i = 0; i < 100; i++) { + iArr[i+a] = 34; // Hoisted with Hoisted Check Predicate and Template Assertion Predicate + if (i * zero < iFld) { // Unswitched after Split If to check further template cloning. + return; + } + } + } + } + + // Same as test above but this time the phi inputs into an OpaqueLoop* node and not a node in between. + static void testPhiIntoOpaqueLoopExpressionNode() { + int zero = 34; + int limit = 2; + for (; limit < 4; limit *= 2); + for (int i = 2; i < limit; i++) { + zero = 0; + } + + iArr = new int[1000]; + + // Replaced by CMove which is an input into Template Assertion Predicate Expression which + // is not an OpaqueLoop* node. Split If will create a phi and tries to split a Template + // Assertion Predicate Expression node -> Need to clone template down. + int a; + if (flag) { + a = 4; + } else { + a = 3; + } + + for (int i = 0; i < 100; i++) { + iArr[i+a] = 34; // Hoisted with Hoisted Check Predicate and Template Assertion Predicate + if (i * zero < iFld) { // Unswitched after Split If to check further template cloning. + return; + } + } + } +} + From 5394f57f002c066021d811382a336253ae9f2014 Mon Sep 17 00:00:00 2001 From: Evgeny Nikitin <enikitin@openjdk.org> Date: Mon, 22 Apr 2024 07:41:06 +0000 Subject: [PATCH 032/141] 8330621: Make 5 compiler tests use ProcessTools.executeProcess Reviewed-by: chagedorn, stefank, thartmann --- test/hotspot/jtreg/compiler/c2/Test7068051.java | 8 ++++---- .../jtreg/compiler/c2/unloaded/TestInlineUnloaded.java | 7 ++++--- .../jtreg/compiler/jsr292/NonInlinedCall/Agent.java | 6 +++--- .../profiling/spectrapredefineclass/Launcher.java | 8 ++++---- .../spectrapredefineclass_classloaders/Launcher.java | 8 ++++---- 5 files changed, 19 insertions(+), 18 deletions(-) diff --git a/test/hotspot/jtreg/compiler/c2/Test7068051.java b/test/hotspot/jtreg/compiler/c2/Test7068051.java index 6e8b936108424..f9cb813aa7532 100644 --- a/test/hotspot/jtreg/compiler/c2/Test7068051.java +++ b/test/hotspot/jtreg/compiler/c2/Test7068051.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,6 +36,7 @@ import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; import java.io.IOException; import java.io.InputStream; @@ -133,11 +134,10 @@ private static void runJar(List<String> params) { for (String p : params) { jar.addToolArg(p); } - ProcessBuilder pb = new ProcessBuilder(jar.getCommand()); try { - OutputAnalyzer output = new OutputAnalyzer(pb.start()); + OutputAnalyzer output = ProcessTools.executeProcess(jar.getCommand()); output.shouldHaveExitValue(0); - } catch (IOException ex) { + } catch (Exception ex) { throw new AssertionError("TESTBUG: jar failed.", ex); } } diff --git a/test/hotspot/jtreg/compiler/c2/unloaded/TestInlineUnloaded.java b/test/hotspot/jtreg/compiler/c2/unloaded/TestInlineUnloaded.java index a77f79c7dfbb0..d33676bd7f675 100644 --- a/test/hotspot/jtreg/compiler/c2/unloaded/TestInlineUnloaded.java +++ b/test/hotspot/jtreg/compiler/c2/unloaded/TestInlineUnloaded.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, 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 @@ -56,6 +56,7 @@ import jdk.test.lib.JDKToolFinder; import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; import java.io.IOException; import java.net.URL; @@ -179,7 +180,7 @@ public static void main(String... args) throws Exception { } } - static void run(String testCaseName, Consumer<OutputAnalyzer> processor) throws IOException { + static void run(String testCaseName, Consumer<OutputAnalyzer> processor) throws Exception { ProcessBuilder pb = new ProcessBuilder(); pb.command(JDKToolFinder.getJDKTool("java"), @@ -192,7 +193,7 @@ static void run(String testCaseName, Consumer<OutputAnalyzer> processor) throws System.out.println("Command line: [" + pb.command() + "]"); - OutputAnalyzer analyzer = new OutputAnalyzer(pb.start()); + OutputAnalyzer analyzer = ProcessTools.executeProcess(pb); analyzer.shouldHaveExitValue(0); diff --git a/test/hotspot/jtreg/compiler/jsr292/NonInlinedCall/Agent.java b/test/hotspot/jtreg/compiler/jsr292/NonInlinedCall/Agent.java index 32f29dff973ea..76b66f9bc1e1a 100644 --- a/test/hotspot/jtreg/compiler/jsr292/NonInlinedCall/Agent.java +++ b/test/hotspot/jtreg/compiler/jsr292/NonInlinedCall/Agent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; import java.io.File; import java.io.PrintStream; @@ -51,8 +52,7 @@ public static void main(String[] args) throws Exception { System.out.println("Running jar " + Arrays.toString(jar.getCommand())); - ProcessBuilder pb = new ProcessBuilder(jar.getCommand()); - OutputAnalyzer output = new OutputAnalyzer(pb.start()); + OutputAnalyzer output = ProcessTools.executeProcess(jar.getCommand()); output.shouldHaveExitValue(0); } } diff --git a/test/hotspot/jtreg/compiler/profiling/spectrapredefineclass/Launcher.java b/test/hotspot/jtreg/compiler/profiling/spectrapredefineclass/Launcher.java index 85d5f2b96d5e7..1a8ed4c789332 100644 --- a/test/hotspot/jtreg/compiler/profiling/spectrapredefineclass/Launcher.java +++ b/test/hotspot/jtreg/compiler/profiling/spectrapredefineclass/Launcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -41,6 +41,7 @@ import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; import java.io.File; import java.io.IOException; @@ -60,11 +61,10 @@ public static void main(String[] args) throws Exception { .addToolArg(Agent.AGENT_JAR) .addToolArg(Agent.class.getName().replace('.', File.separatorChar) + ".class"); - ProcessBuilder pb = new ProcessBuilder(jar.getCommand()); try { - OutputAnalyzer output = new OutputAnalyzer(pb.start()); + OutputAnalyzer output = ProcessTools.executeProcess(jar.getCommand()); output.shouldHaveExitValue(0); - } catch (IOException ex) { + } catch (Exception ex) { throw new Error("TESTBUG: jar failed.", ex); } } diff --git a/test/hotspot/jtreg/compiler/profiling/spectrapredefineclass_classloaders/Launcher.java b/test/hotspot/jtreg/compiler/profiling/spectrapredefineclass_classloaders/Launcher.java index 2489e62bdb186..08765e911c02e 100644 --- a/test/hotspot/jtreg/compiler/profiling/spectrapredefineclass_classloaders/Launcher.java +++ b/test/hotspot/jtreg/compiler/profiling/spectrapredefineclass_classloaders/Launcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -44,6 +44,7 @@ import jdk.test.lib.JDKToolLauncher; import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; import java.io.File; import java.io.IOException; @@ -63,11 +64,10 @@ public static void main(String[] args) throws Exception { .addToolArg(Agent.AGENT_JAR) .addToolArg(Agent.class.getName().replace('.', File.separatorChar) + ".class"); - ProcessBuilder pb = new ProcessBuilder(jar.getCommand()); try { - OutputAnalyzer output = new OutputAnalyzer(pb.start()); + OutputAnalyzer output = ProcessTools.executeProcess(jar.getCommand()); output.shouldHaveExitValue(0); - } catch (IOException ex) { + } catch (Exception ex) { throw new Error("TESTBUG: jar failed.", ex); } } From 5313dcc8f9c5bf54a2a44a1d68a690f13f15882a Mon Sep 17 00:00:00 2001 From: Guoxiong Li <gli@openjdk.org> Date: Mon, 22 Apr 2024 08:14:53 +0000 Subject: [PATCH 033/141] 8330733: Generational ZGC: Remove ZBarrier::verify_old_object_live_slow_path Reviewed-by: stefank, tschatzl --- src/hotspot/share/gc/z/zBarrier.cpp | 12 ------------ src/hotspot/share/gc/z/zBarrier.hpp | 2 -- 2 files changed, 14 deletions(-) diff --git a/src/hotspot/share/gc/z/zBarrier.cpp b/src/hotspot/share/gc/z/zBarrier.cpp index 6e1d3ee009365..c4b6e0f8239e1 100644 --- a/src/hotspot/share/gc/z/zBarrier.cpp +++ b/src/hotspot/share/gc/z/zBarrier.cpp @@ -141,18 +141,6 @@ zaddress ZBarrier::blocking_load_barrier_on_phantom_slow_path(volatile zpointer* return addr; } -// -// Clean barrier -// - -zaddress ZBarrier::verify_old_object_live_slow_path(zaddress addr) { - // Verify that the object was indeed alive - assert(ZHeap::heap()->is_young(addr) || ZHeap::heap()->is_object_live(addr), "Should be live"); - - return addr; -} - -// // Mark barrier // diff --git a/src/hotspot/share/gc/z/zBarrier.hpp b/src/hotspot/share/gc/z/zBarrier.hpp index 14ad0a655f774..4a271c1469fc9 100644 --- a/src/hotspot/share/gc/z/zBarrier.hpp +++ b/src/hotspot/share/gc/z/zBarrier.hpp @@ -108,8 +108,6 @@ class ZBarrier : public AllStatic { static zaddress blocking_load_barrier_on_weak_slow_path(volatile zpointer* p, zaddress addr); static zaddress blocking_load_barrier_on_phantom_slow_path(volatile zpointer* p, zaddress addr); - static zaddress verify_old_object_live_slow_path(zaddress addr); - static zaddress mark_slow_path(zaddress addr); static zaddress mark_young_slow_path(zaddress addr); static zaddress mark_from_young_slow_path(zaddress addr); From 3d62bbf4f2ea1b37d59c8307225239a88d9e66c0 Mon Sep 17 00:00:00 2001 From: Claes Redestad <redestad@openjdk.org> Date: Mon, 22 Apr 2024 08:54:29 +0000 Subject: [PATCH 034/141] 8330681: Explicit hashCode and equals for java.lang.runtime.SwitchBootstraps$TypePairs Reviewed-by: jlahoda, mchung --- .../java/lang/runtime/SwitchBootstraps.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java b/src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java index b7c9cb48812ac..f91a9ad4de3b4 100644 --- a/src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java +++ b/src/java.base/share/classes/java/lang/runtime/SwitchBootstraps.java @@ -82,8 +82,6 @@ private SwitchBootstraps() {} private static final MethodTypeDesc TYPES_SWITCH_DESCRIPTOR = MethodTypeDesc.ofDescriptor("(Ljava/lang/Object;ILjava/util/function/BiPredicate;Ljava/util/List;)I"); - private static final Map<TypePairs, String> typePairToName; - static { try { NULL_CHECK = LOOKUP.findStatic(Objects.class, "isNull", @@ -99,7 +97,6 @@ private SwitchBootstraps() {} catch (ReflectiveOperationException e) { throw new ExceptionInInitializerError(e); } - typePairToName = TypePairs.initialize(); } /** @@ -507,7 +504,7 @@ record Element(Label target, Label next, Object caseLabel) { } } TypePairs typePair = TypePairs.of(Wrapper.asPrimitiveType(selectorType), classLabel); - String methodName = typePairToName.get(typePair); + String methodName = TypePairs.typePairToName.get(typePair); cb.invokestatic(ExactConversionsSupport.class.describeConstable().orElseThrow(), methodName, MethodTypeDesc.of(ConstantDescs.CD_boolean, typePair.from.describeConstable().orElseThrow())); @@ -684,6 +681,9 @@ else if (selectorType.equals(targetType) || // TypePairs should be in sync with the corresponding record in Lower record TypePairs(Class<?> from, Class<?> to) { + + private static final Map<TypePairs, String> typePairToName = initialize(); + public static TypePairs of(Class<?> from, Class<?> to) { if (from == byte.class || from == short.class || from == char.class) { from = int.class; @@ -691,6 +691,17 @@ public static TypePairs of(Class<?> from, Class<?> to) { return new TypePairs(from, to); } + public int hashCode() { + return 31 * from.hashCode() + to.hashCode(); + } + + public boolean equals(Object other) { + if (other instanceof TypePairs otherPair) { + return otherPair.from == from && otherPair.to == to; + } + return false; + } + public static Map<TypePairs, String> initialize() { Map<TypePairs, String> typePairToName = new HashMap<>(); typePairToName.put(new TypePairs(byte.class, char.class), "isIntToCharExact"); // redirected From 35b30c81e0153a12881e622b861ee38c8166ef72 Mon Sep 17 00:00:00 2001 From: Claes Redestad <redestad@openjdk.org> Date: Mon, 22 Apr 2024 08:55:46 +0000 Subject: [PATCH 035/141] 8330595: Invoke ObjectMethods::bootstrap method exactly Reviewed-by: mchung --- .../lang/invoke/BootstrapMethodInvoker.java | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/lang/invoke/BootstrapMethodInvoker.java b/src/java.base/share/classes/java/lang/invoke/BootstrapMethodInvoker.java index c9734a07fa040..11e9b72042148 100644 --- a/src/java.base/share/classes/java/lang/invoke/BootstrapMethodInvoker.java +++ b/src/java.base/share/classes/java/lang/invoke/BootstrapMethodInvoker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, 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 @@ -145,6 +145,9 @@ else if (info.getClass() == int[].class) { } else if (isLambdaMetafactoryAltMetafactoryBSM(bsmType)) { maybeReBoxElements(argv); result = (CallSite)bootstrapMethod.invokeExact(caller, name, (MethodType)type, argv); + } else if (isObjectMethodsBootstrapBSM(bsmType)) { + MethodHandle[] mhs = Arrays.copyOfRange(argv, 2, argv.length, MethodHandle[].class); + result = bootstrapMethod.invokeExact(caller, name, (TypeDescriptor)type, (Class<?>)argv[0], (String)argv[1], mhs); } else { maybeReBoxElements(argv); if (type instanceof Class<?> c) { @@ -189,7 +192,6 @@ else if (info.getClass() == int[].class) { } } - /** * If resultType is a reference type, do Class::cast on the result through * an identity function of that type, as-type converted to return @@ -247,6 +249,9 @@ private static Object invokeWithManyArguments(MethodHandle bootstrapMethod, Look private static final MethodType LMF_ALT_MT = MethodType.methodType(CallSite.class, Lookup.class, String.class, MethodType.class, Object[].class); + private static final MethodType OBJECT_METHODS_MT = MethodType.methodType(Object.class, + Lookup.class, String.class, TypeDescriptor.class, Class.class, String.class, MethodHandle[].class); + private static final MethodType LMF_CONDY_MT = MethodType.methodType(Object.class, Lookup.class, String.class, Class.class, MethodType.class, MethodHandle.class, MethodType.class); @@ -289,6 +294,15 @@ private static boolean isLambdaMetafactoryAltMetafactoryBSM(MethodType bsmType) return bsmType == LMF_ALT_MT; } + /** + * @return true iff the BSM method type exactly matches + * {@link java.lang.runtime.ObjectMethods#bootstrap( + * MethodHandles.Lookup,String,TypeDescriptor,Class,String,MethodHandle[])} + */ + private static boolean isObjectMethodsBootstrapBSM(MethodType bsmType) { + return bsmType == OBJECT_METHODS_MT; + } + /** The JVM produces java.lang.Integer values to box * CONSTANT_Integer boxes but does not intern them. * Let's intern them. This is slightly wrong for From 70acade9f1bd0c7bba25abad0f0d8199715d66d0 Mon Sep 17 00:00:00 2001 From: Guoxiong Li <gli@openjdk.org> Date: Mon, 22 Apr 2024 08:58:38 +0000 Subject: [PATCH 036/141] 8330339: G1: Move some public methods to private in G1BlockOffsetTable APIs Reviewed-by: ayang, iwalulya --- .../share/gc/g1/g1BlockOffsetTable.cpp | 24 +++++++++++++++++++ .../share/gc/g1/g1BlockOffsetTable.hpp | 18 +++++++------- .../share/gc/g1/g1BlockOffsetTable.inline.hpp | 24 ------------------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp b/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp index ac546faafd919..bc14730594d22 100644 --- a/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp +++ b/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp @@ -43,6 +43,30 @@ G1BlockOffsetTable::G1BlockOffsetTable(MemRegion heap, G1RegionToSpaceMapper* st p2i(bot_reserved.start()), bot_reserved.byte_size(), p2i(bot_reserved.end())); } +void G1BlockOffsetTable::set_offset_array_raw(uint8_t* addr, uint8_t offset) { + Atomic::store(addr, offset); +} + +void G1BlockOffsetTable::set_offset_array(uint8_t* addr, uint8_t offset) { + check_address(addr, "Block offset table address out of range"); + set_offset_array_raw(addr, offset); +} + +void G1BlockOffsetTable::set_offset_array(uint8_t* addr, HeapWord* high, HeapWord* low) { + check_address(addr, "Block offset table address out of range"); + assert(high >= low, "addresses out of order"); + size_t offset = pointer_delta(high, low); + check_offset(offset, "offset too large"); + set_offset_array(addr, (uint8_t)offset); +} + +void G1BlockOffsetTable::set_offset_array(uint8_t* left, uint8_t* right, uint8_t offset) { + check_address(right, "Right block offset table address out of range"); + assert(left <= right, "indexes out of order"); + size_t num_cards = right - left + 1; + memset_with_concurrent_readers(left, offset, num_cards); +} + #ifdef ASSERT void G1BlockOffsetTable::check_address(uint8_t* addr, const char* msg) const { uint8_t* start_addr = const_cast<uint8_t*>(_offset_base + (uintptr_t(_reserved.start()) >> CardTable::card_shift())); diff --git a/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp b/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp index 6a359a2cc9ee5..a0e6129f1a099 100644 --- a/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp +++ b/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp @@ -63,6 +63,12 @@ class G1BlockOffsetTable: public CHeapObj<mtGC> { inline void set_offset_array(uint8_t* left, uint8_t* right, uint8_t offset); + // Mapping from address to object start array entry + inline uint8_t* entry_for_addr(const void* const p) const; + + // Mapping from object start array entry to address of first word + inline HeapWord* addr_for_entry(const uint8_t* const p) const; + void check_address(uint8_t* addr, const char* msg) const NOT_DEBUG_RETURN; // Sets the entries corresponding to the cards starting at "start" and ending @@ -74,6 +80,9 @@ class G1BlockOffsetTable: public CHeapObj<mtGC> { void check_all_cards(uint8_t* left_card, uint8_t* right_card) const NOT_DEBUG_RETURN; + void verify_offset(uint8_t* card_index, uint8_t upper) const NOT_DEBUG_RETURN; + void verify_for_block(HeapWord* blk_start, HeapWord* blk_end) const NOT_DEBUG_RETURN; + static HeapWord* align_up_by_card_size(HeapWord* const addr) { return align_up(addr, CardTable::card_size()); } @@ -96,12 +105,6 @@ class G1BlockOffsetTable: public CHeapObj<mtGC> { // in the heap parameter. G1BlockOffsetTable(MemRegion heap, G1RegionToSpaceMapper* storage); - // Mapping from address to object start array entry - uint8_t* entry_for_addr(const void* const p) const; - - // Mapping from object start array entry to address of first word - HeapWord* addr_for_entry(const uint8_t* const p) const; - static bool is_crossing_card_boundary(HeapWord* const obj_start, HeapWord* const obj_end) { HeapWord* cur_card_boundary = align_up_by_card_size(obj_start); @@ -109,9 +112,6 @@ class G1BlockOffsetTable: public CHeapObj<mtGC> { return obj_end > cur_card_boundary; } - void verify_offset(uint8_t* card_index, uint8_t upper) const NOT_DEBUG_RETURN; - void verify_for_block(HeapWord* blk_start, HeapWord* blk_end) const NOT_DEBUG_RETURN; - // Returns the address of the start of the block reaching into the card containing // "addr". inline HeapWord* block_start_reaching_into_card(const void* addr) const; diff --git a/src/hotspot/share/gc/g1/g1BlockOffsetTable.inline.hpp b/src/hotspot/share/gc/g1/g1BlockOffsetTable.inline.hpp index ba2348e38b2db..b875f2f5c6d95 100644 --- a/src/hotspot/share/gc/g1/g1BlockOffsetTable.inline.hpp +++ b/src/hotspot/share/gc/g1/g1BlockOffsetTable.inline.hpp @@ -54,30 +54,6 @@ uint8_t G1BlockOffsetTable::offset_array(uint8_t* addr) const { return Atomic::load(addr); } -void G1BlockOffsetTable::set_offset_array_raw(uint8_t* addr, uint8_t offset) { - Atomic::store(addr, offset); -} - -void G1BlockOffsetTable::set_offset_array(uint8_t* addr, uint8_t offset) { - check_address(addr, "Block offset table address out of range"); - set_offset_array_raw(addr, offset); -} - -void G1BlockOffsetTable::set_offset_array(uint8_t* addr, HeapWord* high, HeapWord* low) { - check_address(addr, "Block offset table address out of range"); - assert(high >= low, "addresses out of order"); - size_t offset = pointer_delta(high, low); - check_offset(offset, "offset too large"); - set_offset_array(addr, (uint8_t)offset); -} - -void G1BlockOffsetTable::set_offset_array(uint8_t* left, uint8_t* right, uint8_t offset) { - check_address(right, "Right block offset table address out of range"); - assert(left <= right, "indexes out of order"); - size_t num_cards = right - left + 1; - memset_with_concurrent_readers(left, offset, num_cards); -} - inline uint8_t* G1BlockOffsetTable::entry_for_addr(const void* const p) const { assert(_reserved.contains(p), "out of bounds access to block offset table"); From c4f5c5140a85818152c6e17414a36deabe491f7b Mon Sep 17 00:00:00 2001 From: Jonas Norlinder <jonas@norlinder.nu> Date: Mon, 22 Apr 2024 09:00:24 +0000 Subject: [PATCH 037/141] 8330576: ZYoungCompactionLimit should have range check Reviewed-by: eosterlund, stefank --- src/hotspot/share/gc/z/z_globals.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hotspot/share/gc/z/z_globals.hpp b/src/hotspot/share/gc/z/z_globals.hpp index d606c4ca14e6c..c3e4bde73e44c 100644 --- a/src/hotspot/share/gc/z/z_globals.hpp +++ b/src/hotspot/share/gc/z/z_globals.hpp @@ -36,6 +36,7 @@ \ product(double, ZYoungCompactionLimit, 25.0, \ "Maximum allowed garbage in young pages") \ + range(0, 100) \ \ product(double, ZCollectionIntervalMinor, -1, \ "Force Minor GC at a fixed time interval (in seconds)") \ From f889797e1fa6bc3824d97912643a33696d367af3 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang <ayang@openjdk.org> Date: Mon, 22 Apr 2024 10:05:32 +0000 Subject: [PATCH 038/141] 8330463: Rename invalidate() to write_region() in ModRefBarrierSet Reviewed-by: gli, tschatzl --- src/hotspot/share/gc/g1/g1BarrierSet.cpp | 2 +- src/hotspot/share/gc/g1/g1BarrierSet.hpp | 6 ++---- src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp | 10 +++------- src/hotspot/share/gc/shared/cardTableBarrierSet.cpp | 4 ++-- src/hotspot/share/gc/shared/cardTableBarrierSet.hpp | 4 ++-- src/hotspot/share/gc/shared/modRefBarrierSet.hpp | 2 +- .../share/gc/shared/modRefBarrierSet.inline.hpp | 2 +- 7 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.cpp b/src/hotspot/share/gc/g1/g1BarrierSet.cpp index 448f2f5fccf04..8b87fc3d78a3b 100644 --- a/src/hotspot/share/gc/g1/g1BarrierSet.cpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.cpp @@ -102,7 +102,7 @@ void G1BarrierSet::write_ref_field_post_slow(volatile CardValue* byte) { } } -void G1BarrierSet::invalidate(JavaThread* thread, MemRegion mr) { +void G1BarrierSet::write_region(JavaThread* thread, MemRegion mr) { if (mr.is_empty()) { return; } diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.hpp b/src/hotspot/share/gc/g1/g1BarrierSet.hpp index f641fabf7c3df..c2f5b9dc06846 100644 --- a/src/hotspot/share/gc/g1/g1BarrierSet.hpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.hpp @@ -48,8 +48,6 @@ class G1BarrierSet: public CardTableBarrierSet { return barrier_set_cast<G1BarrierSet>(BarrierSet::barrier_set()); } - void invalidate(JavaThread* thread, MemRegion mr); - public: G1BarrierSet(G1CardTable* table); ~G1BarrierSet() { } @@ -73,8 +71,8 @@ class G1BarrierSet: public CardTableBarrierSet { template <DecoratorSet decorators, typename T> void write_ref_field_pre(T* field); - inline void invalidate(MemRegion mr); - inline void write_region(JavaThread* thread, MemRegion mr); + inline void write_region(MemRegion mr); + void write_region(JavaThread* thread, MemRegion mr); inline void write_ref_array_work(MemRegion mr); diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp b/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp index e5b477ad156f0..19901a76ae843 100644 --- a/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp @@ -68,16 +68,12 @@ inline void G1BarrierSet::write_ref_field_pre(T* field) { enqueue(field); } -inline void G1BarrierSet::invalidate(MemRegion mr) { - invalidate(JavaThread::current(), mr); -} - -inline void G1BarrierSet::write_region(JavaThread* thread, MemRegion mr) { - invalidate(thread, mr); +inline void G1BarrierSet::write_region(MemRegion mr) { + write_region(JavaThread::current(), mr); } inline void G1BarrierSet::write_ref_array_work(MemRegion mr) { - invalidate(mr); + write_region(mr); } template <DecoratorSet decorators, typename T> diff --git a/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp b/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp index 1aab76d5ab55b..d7a84b1ca56d2 100644 --- a/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp +++ b/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp @@ -84,7 +84,7 @@ void CardTableBarrierSet::write_ref_array_work(MemRegion mr) { _card_table->dirty_MemRegion(mr); } -void CardTableBarrierSet::invalidate(MemRegion mr) { +void CardTableBarrierSet::write_region(MemRegion mr) { _card_table->dirty_MemRegion(mr); } @@ -141,7 +141,7 @@ void CardTableBarrierSet::on_slowpath_allocation_exit(JavaThread* thread, oop ne thread->set_deferred_card_mark(mr); } else { // Do the card mark - invalidate(mr); + write_region(mr); } } #endif // COMPILER2_OR_JVMCI diff --git a/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp b/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp index c650e2a1fd9cb..b52cfef9a5993 100644 --- a/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp +++ b/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp @@ -67,7 +67,7 @@ class CardTableBarrierSet: public ModRefBarrierSet { void initialize(); void write_region(JavaThread* thread, MemRegion mr) { - invalidate(mr); + write_region(mr); } void write_ref_array_work(MemRegion mr); @@ -80,7 +80,7 @@ class CardTableBarrierSet: public ModRefBarrierSet { template <DecoratorSet decorators, typename T> void write_ref_field_post(T* field); - virtual void invalidate(MemRegion mr); + virtual void write_region(MemRegion mr); // ReduceInitialCardMarks void initialize_deferred_card_mark_barriers(); diff --git a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp b/src/hotspot/share/gc/shared/modRefBarrierSet.hpp index b490524feedb6..8355e8fc50f96 100644 --- a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp +++ b/src/hotspot/share/gc/shared/modRefBarrierSet.hpp @@ -52,7 +52,7 @@ class ModRefBarrierSet: public BarrierSet { inline void write_ref_field_post(T *addr) {} // Causes all refs in "mr" to be assumed to be modified (by this JavaThread). - virtual void invalidate(MemRegion mr) = 0; + virtual void write_region(MemRegion mr) = 0; // Causes all refs in "mr" to be assumed to be modified by the given JavaThread. virtual void write_region(JavaThread* thread, MemRegion mr) = 0; diff --git a/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp b/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp index e17ed4f6bdba2..45422167eadc5 100644 --- a/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp @@ -138,7 +138,7 @@ inline void ModRefBarrierSet::AccessBarrier<decorators, BarrierSetT>:: clone_in_heap(oop src, oop dst, size_t size) { Raw::clone(src, dst, size); BarrierSetT *bs = barrier_set_cast<BarrierSetT>(barrier_set()); - bs->invalidate(MemRegion((HeapWord*)(void*)dst, size)); + bs->write_region(MemRegion((HeapWord*)(void*)dst, size)); } #endif // SHARE_GC_SHARED_MODREFBARRIERSET_INLINE_HPP From 3e185c70feef3febf75c58a5d4d394a4b772105f Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang <ayang@openjdk.org> Date: Mon, 22 Apr 2024 10:08:52 +0000 Subject: [PATCH 039/141] 8330154: Serial: Remove TenuredSpace::update_for_block Reviewed-by: gli, tschatzl --- src/hotspot/share/gc/serial/serialFullGC.cpp | 7 ++++++- src/hotspot/share/gc/serial/tenuredGeneration.cpp | 2 +- src/hotspot/share/gc/serial/tenuredGeneration.hpp | 1 + src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp | 4 ++++ src/hotspot/share/gc/shared/space.hpp | 2 -- src/hotspot/share/gc/shared/space.inline.hpp | 3 --- 6 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/hotspot/share/gc/serial/serialFullGC.cpp b/src/hotspot/share/gc/serial/serialFullGC.cpp index e9e4ad4046f8a..296874abcd023 100644 --- a/src/hotspot/share/gc/serial/serialFullGC.cpp +++ b/src/hotspot/share/gc/serial/serialFullGC.cpp @@ -39,6 +39,7 @@ #include "gc/serial/serialGcRefProcProxyTask.hpp" #include "gc/serial/serialHeap.hpp" #include "gc/serial/serialStringDedup.hpp" +#include "gc/serial/tenuredGeneration.inline.hpp" #include "gc/shared/classUnloadingContext.hpp" #include "gc/shared/collectedHeap.inline.hpp" #include "gc/shared/continuationGCSupport.inline.hpp" @@ -171,6 +172,9 @@ class Compacter { uint _index; + // Used for BOT update + TenuredGeneration* _old_gen; + HeapWord* get_compaction_top(uint index) const { return _spaces[index]._compaction_top; } @@ -196,7 +200,7 @@ class Compacter { _spaces[_index]._compaction_top += words; if (_index == 0) { // old-gen requires BOT update - static_cast<TenuredSpace*>(_spaces[0]._space)->update_for_block(result, result + words); + _old_gen->update_for_block(result, result + words); } return result; } @@ -280,6 +284,7 @@ class Compacter { _num_spaces = 3; } _index = 0; + _old_gen = heap->old_gen(); } void phase2_calculate_new_addr() { diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index ddbb7b8403be8..a86450249a784 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -499,7 +499,7 @@ void TenuredGeneration::complete_loaded_archive_space(MemRegion archive_space) { HeapWord* start = archive_space.start(); while (start < archive_space.end()) { size_t word_size = cast_to_oop(start)->size();; - space->update_for_block(start, start + word_size); + _bts->update_for_block(start, start + word_size); start += word_size; } } diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.hpp index 04d5d61207432..dce6609a19b47 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.hpp @@ -134,6 +134,7 @@ class TenuredGeneration: public Generation { void object_iterate(ObjectClosure* blk); void complete_loaded_archive_space(MemRegion archive_space); + inline void update_for_block(HeapWord* start, HeapWord* end); virtual inline HeapWord* allocate(size_t word_size, bool is_tlab); virtual inline HeapWord* par_allocate(size_t word_size, bool is_tlab); diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp index d03c97fc50841..62bd523d2d9ed 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp @@ -45,6 +45,10 @@ inline bool TenuredGeneration::is_in(const void* p) const { return space()->is_in(p); } +inline void TenuredGeneration::update_for_block(HeapWord* start, HeapWord* end) { + _bts->update_for_block(start, end); +} + HeapWord* TenuredGeneration::allocate(size_t word_size, bool is_tlab) { assert(!is_tlab, "TenuredGeneration does not support TLAB allocation"); diff --git a/src/hotspot/share/gc/shared/space.hpp b/src/hotspot/share/gc/shared/space.hpp index 36b96a9632509..3b30a557f3c5c 100644 --- a/src/hotspot/share/gc/shared/space.hpp +++ b/src/hotspot/share/gc/shared/space.hpp @@ -179,8 +179,6 @@ class TenuredSpace: public ContiguousSpace { // Add offset table update. inline HeapWord* allocate(size_t word_size) override; inline HeapWord* par_allocate(size_t word_size) override; - - inline void update_for_block(HeapWord* start, HeapWord* end); }; #endif //INCLUDE_SERIALGC diff --git a/src/hotspot/share/gc/shared/space.inline.hpp b/src/hotspot/share/gc/shared/space.inline.hpp index 741263e668a95..fa88be9aa51d8 100644 --- a/src/hotspot/share/gc/shared/space.inline.hpp +++ b/src/hotspot/share/gc/shared/space.inline.hpp @@ -51,9 +51,6 @@ inline HeapWord* TenuredSpace::par_allocate(size_t size) { return res; } -inline void TenuredSpace::update_for_block(HeapWord* start, HeapWord* end) { - _offsets->update_for_block(start, end); -} #endif // INCLUDE_SERIALGC #endif // SHARE_GC_SHARED_SPACE_INLINE_HPP From ee7b2e9b3bd2b4607476ae03bb6c9f7e49a43d0e Mon Sep 17 00:00:00 2001 From: Coleen Phillimore <coleenp@openjdk.org> Date: Mon, 22 Apr 2024 11:25:53 +0000 Subject: [PATCH 040/141] 8330051: Small ObjectMonitor spinning code cleanups Reviewed-by: dcubed, eosterlund, fbredberg --- src/hotspot/share/runtime/objectMonitor.cpp | 169 +++++++++++--------- src/hotspot/share/runtime/objectMonitor.hpp | 10 +- 2 files changed, 104 insertions(+), 75 deletions(-) diff --git a/src/hotspot/share/runtime/objectMonitor.cpp b/src/hotspot/share/runtime/objectMonitor.cpp index b1fe22444ae8f..d281acdf00699 100644 --- a/src/hotspot/share/runtime/objectMonitor.cpp +++ b/src/hotspot/share/runtime/objectMonitor.cpp @@ -108,19 +108,6 @@ #endif // ndef DTRACE_ENABLED -// Tunables ... -// The knob* variables are effectively final. Once set they should -// never be modified hence. Consider using __read_mostly with GCC. - -int ObjectMonitor::Knob_SpinLimit = 5000; // derived by an external tool - - -static int Knob_Bonus = 100; // spin success bonus -static int Knob_BonusB = 100; // spin success bonus -static int Knob_Penalty = 200; // spin failure penalty -static int Knob_Poverty = 1000; -static int Knob_FixedSpin = 0; -static int Knob_PreSpin = 10; // 20-100 likely better - DEBUG_ONLY(static volatile bool InitDone = false;) OopStorage* ObjectMonitor::_oop_storage = nullptr; @@ -406,7 +393,7 @@ bool ObjectMonitor::enter(JavaThread* current) { // transitions. The following spin is strictly optional ... // Note that if we acquire the monitor from an initial spin // we forgo posting JVMTI events and firing DTRACE probes. - if (TrySpin(current) > 0) { + if (TrySpin(current)) { assert(owner_raw() == current, "must be current: owner=" INTPTR_FORMAT, p2i(owner_raw())); assert(_recursions == 0, "must be 0: recursions=" INTX_FORMAT, _recursions); assert(object()->mark() == markWord::encode(this), @@ -535,18 +522,18 @@ bool ObjectMonitor::enter(JavaThread* current) { // Caveat: TryLock() is not necessarily serializing if it returns failure. // Callers must compensate as needed. -int ObjectMonitor::TryLock(JavaThread* current) { +ObjectMonitor::TryLockResult ObjectMonitor::TryLock(JavaThread* current) { void* own = owner_raw(); - if (own != nullptr) return 0; + if (own != nullptr) return TryLockResult::HasOwner; if (try_set_owner_from(nullptr, current) == nullptr) { assert(_recursions == 0, "invariant"); - return 1; + return TryLockResult::Success; } // The lock had been free momentarily, but we lost the race to the lock. // Interference -- the CAS failed. // We can either return -1 or retry. // Retry doesn't make as much sense because the lock was just acquired. - return -1; + return TryLockResult::Interference; } // Deflate the specified ObjectMonitor if not in-use. Returns true if it @@ -723,7 +710,7 @@ void ObjectMonitor::EnterI(JavaThread* current) { assert(current->thread_state() == _thread_blocked, "invariant"); // Try the lock - TATAS - if (TryLock (current) > 0) { + if (TryLock(current) == TryLockResult::Success) { assert(_succ != current, "invariant"); assert(owner_raw() == current, "invariant"); assert(_Responsible != current, "invariant"); @@ -757,7 +744,7 @@ void ObjectMonitor::EnterI(JavaThread* current) { // to the owner. This has subtle but beneficial affinity // effects. - if (TrySpin(current) > 0) { + if (TrySpin(current)) { assert(owner_raw() == current, "invariant"); assert(_succ != current, "invariant"); assert(_Responsible != current, "invariant"); @@ -794,7 +781,7 @@ void ObjectMonitor::EnterI(JavaThread* current) { // Interference - the CAS failed because _cxq changed. Just retry. // As an optional optimization we retry the lock. - if (TryLock (current) > 0) { + if (TryLock(current) == TryLockResult::Success) { assert(_succ != current, "invariant"); assert(owner_raw() == current, "invariant"); assert(_Responsible != current, "invariant"); @@ -847,7 +834,9 @@ void ObjectMonitor::EnterI(JavaThread* current) { for (;;) { - if (TryLock(current) > 0) break; + if (TryLock(current) == TryLockResult::Success) { + break; + } assert(owner_raw() != current, "invariant"); // park self @@ -862,7 +851,9 @@ void ObjectMonitor::EnterI(JavaThread* current) { current->_ParkEvent->park(); } - if (TryLock(current) > 0) break; + if (TryLock(current) == TryLockResult::Success) { + break; + } if (try_set_owner_from(DEFLATER_MARKER, current) == DEFLATER_MARKER) { // Cancelled the in-progress async deflation by changing owner from @@ -895,7 +886,9 @@ void ObjectMonitor::EnterI(JavaThread* current) { // We can defer clearing _succ until after the spin completes // TrySpin() must tolerate being called with _succ == current. // Try yet another round of adaptive spinning. - if (TrySpin(current) > 0) break; + if (TrySpin(current)) { + break; + } // We can find that we were unpark()ed and redesignated _succ while // we were spinning. That's harmless. If we iterate and call park(), @@ -994,8 +987,9 @@ void ObjectMonitor::ReenterI(JavaThread* current, ObjectWaiter* currentNode) { guarantee(v == ObjectWaiter::TS_ENTER || v == ObjectWaiter::TS_CXQ, "invariant"); assert(owner_raw() != current, "invariant"); - if (TryLock(current) > 0) break; - if (TrySpin(current) > 0) break; + if (TrySpin(current)) { + break; + } { OSThreadContendState osts(current->osthread()); @@ -1012,7 +1006,9 @@ void ObjectMonitor::ReenterI(JavaThread* current, ObjectWaiter* currentNode) { // Try again, but just so we distinguish between futile wakeups and // successful wakeups. The following test isn't algorithmically // necessary, but it helps us maintain sensible statistics. - if (TryLock(current) > 0) break; + if (TryLock(current) == TryLockResult::Success) { + break; + } // The lock is still contested. // Keep a tally of the # of futile wakeups. @@ -1854,32 +1850,65 @@ void ObjectMonitor::notifyAll(TRAPS) { // hysteresis control to damp the transition rate between spinning and // not spinning. -// Spinning: Fixed frequency (100%), vary duration -int ObjectMonitor::TrySpin(JavaThread* current) { - // Dumb, brutal spin. Good for comparative measurements against adaptive spinning. - int ctr = Knob_FixedSpin; - if (ctr != 0) { - while (--ctr >= 0) { - if (TryLock(current) > 0) return 1; - SpinPause(); +int ObjectMonitor::Knob_SpinLimit = 5000; // derived by an external tool + +static int Knob_Bonus = 100; // spin success bonus +static int Knob_Penalty = 200; // spin failure penalty +static int Knob_Poverty = 1000; +static int Knob_FixedSpin = 0; +static int Knob_PreSpin = 10; // 20-100 likely better, but it's not better in my testing. + +inline static int adjust_up(int spin_duration) { + int x = spin_duration; + if (x < ObjectMonitor::Knob_SpinLimit) { + if (x < Knob_Poverty) { + x = Knob_Poverty; } - return 0; + return x + Knob_Bonus; + } else { + return spin_duration; } +} + +inline static int adjust_down(int spin_duration) { + // TODO: Use an AIMD-like policy to adjust _SpinDuration. + // AIMD is globally stable. + int x = spin_duration; + if (x > 0) { + // Consider an AIMD scheme like: x -= (x >> 3) + 100 + // This is globally sample and tends to damp the response. + x -= Knob_Penalty; + if (x < 0) { x = 0; } + return x; + } else { + return spin_duration; + } +} - for (ctr = Knob_PreSpin + 1; --ctr >= 0;) { - if (TryLock(current) > 0) { - // Increase _SpinDuration ... - // Note that we don't clamp SpinDuration precisely at SpinLimit. - // Raising _SpurDuration to the poverty line is key. - int x = _SpinDuration; - if (x < Knob_SpinLimit) { - if (x < Knob_Poverty) x = Knob_Poverty; - _SpinDuration = x + Knob_BonusB; +bool ObjectMonitor::short_fixed_spin(JavaThread* current, int spin_count, bool adapt) { + for (int ctr = 0; ctr < spin_count; ctr++) { + TryLockResult status = TryLock(current); + if (status == TryLockResult::Success) { + if (adapt) { + _SpinDuration = adjust_up(_SpinDuration); } - return 1; + return true; + } else if (status == TryLockResult::Interference) { + break; } SpinPause(); } + return false; +} + +// Spinning: Fixed frequency (100%), vary duration +bool ObjectMonitor::TrySpin(JavaThread* current) { + + // Dumb, brutal spin. Good for comparative measurements against adaptive spinning. + int knob_fixed_spin = Knob_FixedSpin; // 0 (don't spin: default), 2000 good test + if (knob_fixed_spin > 0) { + return short_fixed_spin(current, knob_fixed_spin, false); + } // Admission control - verify preconditions for spinning // @@ -1887,6 +1916,12 @@ int ObjectMonitor::TrySpin(JavaThread* current) { // becoming an absorbing state. Put another way, we spin briefly to // sample, just in case the system load, parallelism, contention, or lock // modality changed. + + int knob_pre_spin = Knob_PreSpin; // 10 (default), 100, 1000 or 2000 + if (short_fixed_spin(current, knob_pre_spin, true)) { + return true; + } + // // Consider the following alternative: // Periodically set _SpinDuration = _SpinLimit and try a long/full @@ -1895,8 +1930,8 @@ int ObjectMonitor::TrySpin(JavaThread* current) { // This takes us into the realm of 1-out-of-N spinning, where we // hold the duration constant but vary the frequency. - ctr = _SpinDuration; - if (ctr <= 0) return 0; + int ctr = _SpinDuration; + if (ctr <= 0) return false; // We're good to spin ... spin ingress. // CONSIDER: use Prefetch::write() to avoid RTS->RTO upgrades @@ -1928,7 +1963,7 @@ int ObjectMonitor::TrySpin(JavaThread* current) { // might update the poll values and we could be in a thread_blocked // state here which is not allowed so just check the poll. if (SafepointMechanism::local_poll_armed(current)) { - goto Abort; // abrupt spin egress + break; } SpinPause(); } @@ -1960,26 +1995,21 @@ int ObjectMonitor::TrySpin(JavaThread* current) { // If we acquired the lock early in the spin cycle it // makes sense to increase _SpinDuration proportionally. // Note that we don't clamp SpinDuration precisely at SpinLimit. - int x = _SpinDuration; - if (x < Knob_SpinLimit) { - if (x < Knob_Poverty) x = Knob_Poverty; - _SpinDuration = x + Knob_Bonus; - } - return 1; + _SpinDuration = adjust_up(_SpinDuration); + return true; } // The CAS failed ... we can take any of the following actions: // * penalize: ctr -= CASPenalty - // * exit spin with prejudice -- goto Abort; + // * exit spin with prejudice -- abort without adapting spinner // * exit spin without prejudice. // * Since CAS is high-latency, retry again immediately. - prv = ox; - goto Abort; + break; } // Did lock ownership change hands ? if (ox != prv && prv != nullptr) { - goto Abort; + break; } prv = ox; @@ -1989,20 +2019,10 @@ int ObjectMonitor::TrySpin(JavaThread* current) { } // Spin failed with prejudice -- reduce _SpinDuration. - // TODO: Use an AIMD-like policy to adjust _SpinDuration. - // AIMD is globally stable. - { - int x = _SpinDuration; - if (x > 0) { - // Consider an AIMD scheme like: x -= (x >> 3) + 100 - // This is globally sample and tends to damp the response. - x -= Knob_Penalty; - if (x < 0) x = 0; - _SpinDuration = x; - } + if (ctr < 0) { + _SpinDuration = adjust_down(_SpinDuration); } - Abort: if (_succ == current) { _succ = nullptr; // Invariant: after setting succ=null a contending thread @@ -2010,9 +2030,12 @@ int ObjectMonitor::TrySpin(JavaThread* current) { // in the normal usage of TrySpin(), but it's safest // to make TrySpin() as foolproof as possible. OrderAccess::fence(); - if (TryLock(current) > 0) return 1; + if (TryLock(current) == TryLockResult::Success) { + return true; + } } - return 0; + + return false; } diff --git a/src/hotspot/share/runtime/objectMonitor.hpp b/src/hotspot/share/runtime/objectMonitor.hpp index 6c0d5213605ad..fdc482a3555d6 100644 --- a/src/hotspot/share/runtime/objectMonitor.hpp +++ b/src/hotspot/share/runtime/objectMonitor.hpp @@ -353,8 +353,14 @@ class ObjectMonitor : public CHeapObj<mtObjectMonitor> { void EnterI(JavaThread* current); void ReenterI(JavaThread* current, ObjectWaiter* current_node); void UnlinkAfterAcquire(JavaThread* current, ObjectWaiter* current_node); - int TryLock(JavaThread* current); - int TrySpin(JavaThread* current); + + + enum class TryLockResult { Interference = -1, HasOwner = 0, Success = 1 }; + + TryLockResult TryLock(JavaThread* current); + + bool TrySpin(JavaThread* current); + bool short_fixed_spin(JavaThread* current, int spin_count, bool adapt); void ExitEpilog(JavaThread* current, ObjectWaiter* Wakee); // Deflation support From 936a47d7d68c7305993f68db844dc76006b674b1 Mon Sep 17 00:00:00 2001 From: Coleen Phillimore <coleenp@openjdk.org> Date: Mon, 22 Apr 2024 11:40:22 +0000 Subject: [PATCH 041/141] 8330607: Deprecate -XX:+UseEmptySlotsInSupers Reviewed-by: shade, dcubed --- src/hotspot/share/runtime/arguments.cpp | 1 + src/hotspot/share/runtime/globals.hpp | 3 ++- .../hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 9ff8b87869236..2ea044a97df77 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -502,6 +502,7 @@ static SpecialFlag const special_jvm_flags[] = { { "UseSharedSpaces", JDK_Version::jdk(18), JDK_Version::jdk(19), JDK_Version::undefined() }, { "RegisterFinalizersAtInit", JDK_Version::jdk(22), JDK_Version::jdk(23), JDK_Version::jdk(24) }, { "PreserveAllAnnotations", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, + { "UseEmptySlotsInSupers", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, #if defined(X86) { "UseRTMLocking", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "UseRTMDeopt", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 693e5660c24bf..9087cb9b4a33e 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -1958,7 +1958,8 @@ const int ObjectAlignmentInBytes = 8; "Use platform unstable time where supported for timestamps only") \ \ product(bool, UseEmptySlotsInSupers, true, \ - "Allow allocating fields in empty slots of super-classes") \ + "(Deprecated) Allow allocating fields in empty slots of " \ + "super-classes") \ \ product(bool, DeoptimizeNMethodBarriersALot, false, DIAGNOSTIC, \ "Make nmethod barriers deoptimise a lot.") \ diff --git a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java index 0f93ee0f43a10..7dc49a051865c 100644 --- a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java +++ b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java @@ -58,6 +58,7 @@ public class VMDeprecatedOptions { // deprecated non-alias flags: {"PreserveAllAnnotations", "true"}, {"AllowRedefinitionToAddDeleteMethods", "true"}, + {"UseEmptySlotsInSupers", "true"}, // deprecated alias flags (see also aliased_jvm_flags): {"CreateMinidumpOnCrash", "false"} From 3e65d90b4ddb52878ebdc2150790c0333b9c0920 Mon Sep 17 00:00:00 2001 From: Magnus Ihse Bursie <ihse@openjdk.org> Date: Mon, 22 Apr 2024 13:32:02 +0000 Subject: [PATCH 042/141] 8330820: Remove remnants of operator_new.cpp in build system Reviewed-by: tbell --- make/hotspot/lib/CompileGtest.gmk | 3 +-- make/hotspot/lib/CompileJvm.gmk | 8 -------- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/make/hotspot/lib/CompileGtest.gmk b/make/hotspot/lib/CompileGtest.gmk index b59ed049cbcbd..696adb0c95f10 100644 --- a/make/hotspot/lib/CompileGtest.gmk +++ b/make/hotspot/lib/CompileGtest.gmk @@ -89,8 +89,7 @@ $(eval $(call SetupJdkLibrary, BUILD_GTEST_LIBJVM, \ EXCLUDES := $(JVM_EXCLUDES), \ EXCLUDE_FILES := gtestLauncher.cpp, \ EXCLUDE_PATTERNS := $(JVM_EXCLUDE_PATTERNS), \ - EXTRA_OBJECT_FILES := $(filter-out %/operator_new$(OBJ_SUFFIX), \ - $(BUILD_LIBJVM_ALL_OBJS)), \ + EXTRA_OBJECT_FILES := $(BUILD_LIBJVM_ALL_OBJS), \ DEFAULT_CFLAGS := false, \ CFLAGS := $(JVM_CFLAGS) \ -I$(GTEST_FRAMEWORK_SRC)/googletest/include \ diff --git a/make/hotspot/lib/CompileJvm.gmk b/make/hotspot/lib/CompileJvm.gmk index 47f987092f902..c2ff006402529 100644 --- a/make/hotspot/lib/CompileJvm.gmk +++ b/make/hotspot/lib/CompileJvm.gmk @@ -137,13 +137,6 @@ JVM_STRIPFLAGS ?= $(STRIPFLAGS) # This source set is reused so save in cache. $(call FillFindCache, $(JVM_SRC_DIRS)) -# The global operator new functions defined in operator_new.cpp are intended -# to detect and prevent the VM code from calling them. See more details in -# operator_new.cpp. Exclude operator_new.o when statically linking the VM -# code with JDK natives, as the JDK natives might need to call the global -# operator new. -LIBJVM_STATIC_EXCLUDE_OBJS := operator_new.o - ifeq ($(call isTargetOs, windows), true) ifeq ($(STATIC_LIBS), true) WIN_EXPORT_FILE := $(JVM_OUTPUTDIR)/static-win-exports.def @@ -217,7 +210,6 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBJVM, \ RC_FILEDESC := $(HOTSPOT_VM_DISTRO) $(OPENJDK_TARGET_CPU_BITS)-Bit $(JVM_VARIANT) VM, \ PRECOMPILED_HEADER := $(JVM_PRECOMPILED_HEADER), \ PRECOMPILED_HEADER_EXCLUDE := $(JVM_PRECOMPILED_HEADER_EXCLUDE), \ - STATIC_LIB_EXCLUDE_OBJS := $(LIBJVM_STATIC_EXCLUDE_OBJS), \ )) ifeq ($(call isTargetOs, windows), true) From 7e421ce9d089ce3e36336fca0f603bcbfbbda6c5 Mon Sep 17 00:00:00 2001 From: Roman Kennke <rkennke@openjdk.org> Date: Mon, 22 Apr 2024 15:03:09 +0000 Subject: [PATCH 043/141] 8330585: Refactor/rename forwardee handling Reviewed-by: stefank, ayang --- src/hotspot/share/gc/g1/g1OopClosures.inline.hpp | 4 ++-- src/hotspot/share/gc/g1/g1ParScanThreadState.cpp | 4 ++-- .../share/gc/parallel/psPromotionManager.inline.hpp | 4 ++-- src/hotspot/share/gc/shared/preservedMarks.inline.hpp | 2 +- src/hotspot/share/oops/markWord.hpp | 11 +++++++++-- src/hotspot/share/oops/oop.inline.hpp | 7 ++----- 6 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1OopClosures.inline.hpp b/src/hotspot/share/gc/g1/g1OopClosures.inline.hpp index 9eebfbd6a8682..50b3ab203d706 100644 --- a/src/hotspot/share/gc/g1/g1OopClosures.inline.hpp +++ b/src/hotspot/share/gc/g1/g1OopClosures.inline.hpp @@ -227,8 +227,8 @@ void G1ParCopyClosure<barrier, should_mark>::do_oop_work(T* p) { if (state.is_in_cset()) { oop forwardee; markWord m = obj->mark(); - if (m.is_marked()) { - forwardee = cast_to_oop(m.decode_pointer()); + if (m.is_forwarded()) { + forwardee = m.forwardee(); } else { forwardee = _par_scan_state->copy_to_survivor_space(state, obj, m); } diff --git a/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp b/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp index 81169f89a0799..c495889faade6 100644 --- a/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp +++ b/src/hotspot/share/gc/g1/g1ParScanThreadState.cpp @@ -211,8 +211,8 @@ void G1ParScanThreadState::do_oop_evac(T* p) { } markWord m = obj->mark(); - if (m.is_marked()) { - obj = cast_to_oop(m.decode_pointer()); + if (m.is_forwarded()) { + obj = m.forwardee(); } else { obj = do_copy_to_survivor_space(region_attr, obj, m); } diff --git a/src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp b/src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp index 730d31893d54c..eb27e9776ed9b 100644 --- a/src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp +++ b/src/hotspot/share/gc/parallel/psPromotionManager.inline.hpp @@ -145,7 +145,7 @@ inline oop PSPromotionManager::copy_to_survivor_space(oop o) { // in o. There may be multiple threads racing on it, and it may be forwarded // at any time. markWord m = o->mark(); - if (!m.is_marked()) { + if (!m.is_forwarded()) { return copy_unmarked_to_survivor_space<promote_immediately>(o, m); } else { // Ensure any loads from the forwardee follow all changes that precede @@ -153,7 +153,7 @@ inline oop PSPromotionManager::copy_to_survivor_space(oop o) { // other thread. OrderAccess::acquire(); // Return the already installed forwardee. - return cast_to_oop(m.decode_pointer()); + return m.forwardee(); } } diff --git a/src/hotspot/share/gc/shared/preservedMarks.inline.hpp b/src/hotspot/share/gc/shared/preservedMarks.inline.hpp index aa181b408aefc..fc732fee53402 100644 --- a/src/hotspot/share/gc/shared/preservedMarks.inline.hpp +++ b/src/hotspot/share/gc/shared/preservedMarks.inline.hpp @@ -43,7 +43,7 @@ inline void PreservedMarks::push_if_necessary(oop obj, markWord m) { } inline void PreservedMarks::push_always(oop obj, markWord m) { - assert(!m.is_marked(), "precondition"); + assert(!m.is_forwarded(), "precondition"); PreservedMark elem(obj, m); _stack.push(elem); } diff --git a/src/hotspot/share/oops/markWord.hpp b/src/hotspot/share/oops/markWord.hpp index ba89f947dcfa0..12d6ee73acf94 100644 --- a/src/hotspot/share/oops/markWord.hpp +++ b/src/hotspot/share/oops/markWord.hpp @@ -143,6 +143,9 @@ class markWord { bool is_marked() const { return (mask_bits(value(), lock_mask_in_place) == marked_value); } + bool is_forwarded() const { + return (mask_bits(value(), lock_mask_in_place) == marked_value); + } bool is_neutral() const { // Not locked, or marked - a "clean" neutral state return (mask_bits(value(), lock_mask_in_place) == unlocked_value); } @@ -225,7 +228,7 @@ class markWord { } // used to encode pointers during GC - markWord clear_lock_bits() { return markWord(value() & ~lock_mask_in_place); } + markWord clear_lock_bits() const { return markWord(value() & ~lock_mask_in_place); } // age operations markWord set_marked() { return markWord((value() & ~lock_mask_in_place) | marked_value); } @@ -259,7 +262,11 @@ class markWord { inline static markWord encode_pointer_as_mark(void* p) { return from_pointer(p).set_marked(); } // Recover address of oop from encoded form used in mark - inline void* decode_pointer() { return (void*)clear_lock_bits().value(); } + inline void* decode_pointer() const { return (void*)clear_lock_bits().value(); } + + inline oop forwardee() const { + return cast_to_oop(decode_pointer()); + } }; // Support atomic operations. diff --git a/src/hotspot/share/oops/oop.inline.hpp b/src/hotspot/share/oops/oop.inline.hpp index bd00847869d65..b7dbc7b2224b7 100644 --- a/src/hotspot/share/oops/oop.inline.hpp +++ b/src/hotspot/share/oops/oop.inline.hpp @@ -262,9 +262,7 @@ bool oopDesc::is_gc_marked() const { // Used by scavengers bool oopDesc::is_forwarded() const { - // The extra heap check is needed since the obj might be locked, in which case the - // mark would point to a stack location and have the sentinel bit cleared - return mark().is_marked(); + return mark().is_forwarded(); } // Used by scavengers @@ -289,8 +287,7 @@ oop oopDesc::forward_to_atomic(oop p, markWord compare, atomic_memory_order orde // The forwardee is used when copying during scavenge and mark-sweep. // It does need to clear the low two locking- and GC-related bits. oop oopDesc::forwardee() const { - assert(is_forwarded(), "only decode when actually forwarded"); - return cast_to_oop(mark().decode_pointer()); + return mark().forwardee(); } // The following method needs to be MT safe. From 20be5e095f85d92215df68bb6eeb621b4ed249a1 Mon Sep 17 00:00:00 2001 From: Ioi Lam <iklam@openjdk.org> Date: Mon, 22 Apr 2024 15:53:14 +0000 Subject: [PATCH 044/141] 8314846: Do not store Klass::_secondary_super_cache in CDS archive Reviewed-by: stuefe, aph --- src/hotspot/share/oops/klass.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/oops/klass.cpp b/src/hotspot/share/oops/klass.cpp index 5b1919a5c4ccd..23a6770251a3d 100644 --- a/src/hotspot/share/oops/klass.cpp +++ b/src/hotspot/share/oops/klass.cpp @@ -726,7 +726,6 @@ void Klass::metaspace_pointers_do(MetaspaceClosure* it) { } it->push(&_name); - it->push(&_secondary_super_cache); it->push(&_secondary_supers); for (int i = 0; i < _primary_super_limit; i++) { it->push(&_primary_supers[i]); @@ -757,6 +756,11 @@ void Klass::remove_unshareable_info() { log_trace(cds, unshareable)("remove: %s", external_name()); } + // _secondary_super_cache may be updated by an is_subtype_of() call + // while ArchiveBuilder is copying metaspace objects. Let's reset it to + // null and let it be repopulated at runtime. + set_secondary_super_cache(nullptr); + set_subklass(nullptr); set_next_sibling(nullptr); set_next_link(nullptr); From 0b9350e8b619bc556f36652cde6f73211be5b85b Mon Sep 17 00:00:00 2001 From: Vicente Romero <vromero@openjdk.org> Date: Mon, 22 Apr 2024 16:31:32 +0000 Subject: [PATCH 045/141] 8322992: Javac fails with StackOverflowError when compiling deeply nested synchronized blocks Reviewed-by: jlahoda --- .../classes/com/sun/tools/javac/jvm/Gen.java | 45 +- .../patterns/SOEDeeplyNestedBlocksTest.java | 1187 +++++++++++++++++ 2 files changed, 1214 insertions(+), 18 deletions(-) create mode 100644 test/langtools/tools/javac/patterns/SOEDeeplyNestedBlocksTest.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java index 8a546cd3f42ec..37846b8b966aa 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/jvm/Gen.java @@ -1074,29 +1074,38 @@ public void visitSkip(JCSkip tree) { } public void visitBlock(JCBlock tree) { + /* this method is heavily invoked, as expected, for deeply nested blocks, if blocks doesn't happen to have + * patterns there will be an unnecessary tax on memory consumption every time this method is executed, for this + * reason we have created helper methods and here at a higher level we just discriminate depending on the + * presence, or not, of patterns in a given block + */ if (tree.patternMatchingCatch != null) { - Set<JCMethodInvocation> prevInvocationsWithPatternMatchingCatch = invocationsWithPatternMatchingCatch; - ListBuffer<int[]> prevRanges = patternMatchingInvocationRanges; - State startState = code.state.dup(); - try { - invocationsWithPatternMatchingCatch = tree.patternMatchingCatch.calls2Handle(); - patternMatchingInvocationRanges = new ListBuffer<>(); - doVisitBlock(tree); - } finally { - Chain skipCatch = code.branch(goto_); - JCCatch handler = tree.patternMatchingCatch.handler(); - code.entryPoint(startState, handler.param.sym.type); - genPatternMatchingCatch(handler, env, patternMatchingInvocationRanges.toList()); - code.resolve(skipCatch); - invocationsWithPatternMatchingCatch = prevInvocationsWithPatternMatchingCatch; - patternMatchingInvocationRanges = prevRanges; - } + visitBlockWithPatterns(tree); } else { - doVisitBlock(tree); + internalVisitBlock(tree); + } + } + + private void visitBlockWithPatterns(JCBlock tree) { + Set<JCMethodInvocation> prevInvocationsWithPatternMatchingCatch = invocationsWithPatternMatchingCatch; + ListBuffer<int[]> prevRanges = patternMatchingInvocationRanges; + State startState = code.state.dup(); + try { + invocationsWithPatternMatchingCatch = tree.patternMatchingCatch.calls2Handle(); + patternMatchingInvocationRanges = new ListBuffer<>(); + internalVisitBlock(tree); + } finally { + Chain skipCatch = code.branch(goto_); + JCCatch handler = tree.patternMatchingCatch.handler(); + code.entryPoint(startState, handler.param.sym.type); + genPatternMatchingCatch(handler, env, patternMatchingInvocationRanges.toList()); + code.resolve(skipCatch); + invocationsWithPatternMatchingCatch = prevInvocationsWithPatternMatchingCatch; + patternMatchingInvocationRanges = prevRanges; } } - private void doVisitBlock(JCBlock tree) { + private void internalVisitBlock(JCBlock tree) { int limit = code.nextreg; Env<GenContext> localEnv = env.dup(tree, new GenContext()); genStats(tree.stats, localEnv); diff --git a/test/langtools/tools/javac/patterns/SOEDeeplyNestedBlocksTest.java b/test/langtools/tools/javac/patterns/SOEDeeplyNestedBlocksTest.java new file mode 100644 index 0000000000000..e521f062748cf --- /dev/null +++ b/test/langtools/tools/javac/patterns/SOEDeeplyNestedBlocksTest.java @@ -0,0 +1,1187 @@ +/* + * Copyright (c) 2024, 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 8322992 + * @summary Javac fails with StackOverflowError when compiling deeply nested synchronized blocks + * @compile SOEDeeplyNestedBlocksTest.java + */ + +public class SOEDeeplyNestedBlocksTest { + + public static void test() { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + synchronized (SOEDeeplyNestedBlocksTest.class) { + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} From 83c74d7307e258441abb171552e953f1c6d9b98a Mon Sep 17 00:00:00 2001 From: Nizar Benalla <nizar.benalla@oracle.com> Date: Mon, 22 Apr 2024 20:36:43 +0000 Subject: [PATCH 046/141] 8329717: Missing `@since` tags in elements in DocumentationTool and Taglet Reviewed-by: prappo --- .../share/classes/javax/tools/DocumentationTool.java | 4 +++- src/jdk.javadoc/share/classes/jdk/javadoc/doclet/Taglet.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/java.compiler/share/classes/javax/tools/DocumentationTool.java b/src/java.compiler/share/classes/javax/tools/DocumentationTool.java index 4fc5e8db50585..91850b1edf79f 100644 --- a/src/java.compiler/share/classes/javax/tools/DocumentationTool.java +++ b/src/java.compiler/share/classes/javax/tools/DocumentationTool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, 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 @@ -188,6 +188,8 @@ enum Location implements JavaFileManager.Location { /** * Location to search for snippets. + * + * @since 18 */ SNIPPET_PATH; diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/doclet/Taglet.java b/src/jdk.javadoc/share/classes/jdk/javadoc/doclet/Taglet.java index b8b9132f6cd4b..1ad67a89fefc4 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/doclet/Taglet.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/doclet/Taglet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2024, 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 @@ -96,6 +96,8 @@ public interface Taglet { * @return true if this taglet supports block tags * @implSpec This implementation returns the inverse * result to {@code isInlineTag}. + * + * @since 15 */ default boolean isBlockTag() { return !isInlineTag(); From 1d52234e199c7a38c059c0aa88aea2910f749d48 Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons <jjg@openjdk.org> Date: Mon, 22 Apr 2024 21:52:22 +0000 Subject: [PATCH 047/141] 8330704: Clean up non-standard use of /** comments in some langtools tests Reviewed-by: iris --- test/langtools/jdk/javadoc/tool/EnablePreviewOption.java | 4 ++-- test/langtools/jdk/javadoc/tool/ReleaseOption.java | 4 ++-- test/langtools/jdk/javadoc/tool/T4696488.java | 4 ++-- test/langtools/jdk/javadoc/tool/T4994049/T4994049.java | 4 ++-- test/langtools/jdk/javadoc/tool/T6551367.java | 4 ++-- test/langtools/jdk/javadoc/tool/TestScriptInComment.java | 4 ++-- test/langtools/jdk/javadoc/tool/modules/CommandLineFiles.java | 4 ++-- test/langtools/jdk/javadoc/tool/modules/FilterOptions.java | 4 ++-- test/langtools/jdk/javadoc/tool/modules/PackageOptions.java | 4 ++-- test/langtools/jdk/javadoc/tool/modules/PatchModules.java | 4 ++-- test/langtools/jdk/javadoc/tool/modules/ReleaseOptions.java | 4 ++-- test/langtools/jdk/javadoc/tool/nonConstExprs/Test.java | 4 ++-- test/langtools/jdk/javadoc/tool/parser/7091528/T7091528.java | 4 ++-- test/langtools/jdk/jshell/HighlightUITest.java | 4 ++-- test/langtools/jdk/jshell/HistoryUITest.java | 4 ++-- test/langtools/jdk/jshell/IndentUITest.java | 4 ++-- test/langtools/jdk/jshell/PasteAndMeasurementsUITest.java | 4 ++-- .../langtools/jdk/jshell/ToolMultilineSnippetHistoryTest.java | 4 ++-- test/langtools/jdk/jshell/ToolShiftTabTest.java | 4 ++-- test/langtools/jdk/jshell/ToolTabCommandTest.java | 4 ++-- test/langtools/jdk/jshell/ToolTabSnippetTest.java | 4 ++-- test/langtools/jdk/jshell/UndefinedClassTest.java | 4 ++-- 22 files changed, 44 insertions(+), 44 deletions(-) diff --git a/test/langtools/jdk/javadoc/tool/EnablePreviewOption.java b/test/langtools/jdk/javadoc/tool/EnablePreviewOption.java index 971a2dd546fb8..5b01f50772313 100644 --- a/test/langtools/jdk/javadoc/tool/EnablePreviewOption.java +++ b/test/langtools/jdk/javadoc/tool/EnablePreviewOption.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8199196 * @summary Test --enable-preview option in javadoc diff --git a/test/langtools/jdk/javadoc/tool/ReleaseOption.java b/test/langtools/jdk/javadoc/tool/ReleaseOption.java index dfee8726f30bb..5a7955099ca02 100644 --- a/test/langtools/jdk/javadoc/tool/ReleaseOption.java +++ b/test/langtools/jdk/javadoc/tool/ReleaseOption.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,7 +34,7 @@ import static jdk.javadoc.internal.tool.Main.Result.*; -/** +/* * @test * @bug 8086737 * @summary Test --release option in javadoc diff --git a/test/langtools/jdk/javadoc/tool/T4696488.java b/test/langtools/jdk/javadoc/tool/T4696488.java index b48c7fac93d22..715f738f53b71 100644 --- a/test/langtools/jdk/javadoc/tool/T4696488.java +++ b/test/langtools/jdk/javadoc/tool/T4696488.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 4696488 * @summary javadoc doesn't handle UNC paths for destination directory diff --git a/test/langtools/jdk/javadoc/tool/T4994049/T4994049.java b/test/langtools/jdk/javadoc/tool/T4994049/T4994049.java index 47fb2aa179edd..247db2732cc41 100644 --- a/test/langtools/jdk/javadoc/tool/T4994049/T4994049.java +++ b/test/langtools/jdk/javadoc/tool/T4994049/T4994049.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 4994049 * @summary Unit test for SourcePosition.column with respect to tab expansion diff --git a/test/langtools/jdk/javadoc/tool/T6551367.java b/test/langtools/jdk/javadoc/tool/T6551367.java index 875c91a1cf152..815b0b121e4e0 100644 --- a/test/langtools/jdk/javadoc/tool/T6551367.java +++ b/test/langtools/jdk/javadoc/tool/T6551367.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 6551367 * @summary javadoc throws ClassCastException when an link tag tries to reference constructor. diff --git a/test/langtools/jdk/javadoc/tool/TestScriptInComment.java b/test/langtools/jdk/javadoc/tool/TestScriptInComment.java index 3eaa47a36d56f..638e4c180597c 100644 --- a/test/langtools/jdk/javadoc/tool/TestScriptInComment.java +++ b/test/langtools/jdk/javadoc/tool/TestScriptInComment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8138725 8226765 * @summary test --allow-script-in-comments diff --git a/test/langtools/jdk/javadoc/tool/modules/CommandLineFiles.java b/test/langtools/jdk/javadoc/tool/modules/CommandLineFiles.java index 006a6489f8d3b..229d729bf402c 100644 --- a/test/langtools/jdk/javadoc/tool/modules/CommandLineFiles.java +++ b/test/langtools/jdk/javadoc/tool/modules/CommandLineFiles.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8176539 * @summary Test use case when all java files are listed diff --git a/test/langtools/jdk/javadoc/tool/modules/FilterOptions.java b/test/langtools/jdk/javadoc/tool/modules/FilterOptions.java index 8fd9b26cc12e5..e510ea83bc410 100644 --- a/test/langtools/jdk/javadoc/tool/modules/FilterOptions.java +++ b/test/langtools/jdk/javadoc/tool/modules/FilterOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8159305 8167383 * @summary Tests elements filtering options diff --git a/test/langtools/jdk/javadoc/tool/modules/PackageOptions.java b/test/langtools/jdk/javadoc/tool/modules/PackageOptions.java index b6e16dc592d46..2c6624ca19aa8 100644 --- a/test/langtools/jdk/javadoc/tool/modules/PackageOptions.java +++ b/test/langtools/jdk/javadoc/tool/modules/PackageOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8159305 * @summary Test modules with packages and subpackages filtering diff --git a/test/langtools/jdk/javadoc/tool/modules/PatchModules.java b/test/langtools/jdk/javadoc/tool/modules/PatchModules.java index 10101a33ec641..ec9e6b3b8940e 100644 --- a/test/langtools/jdk/javadoc/tool/modules/PatchModules.java +++ b/test/langtools/jdk/javadoc/tool/modules/PatchModules.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8175346 * @summary Test patch module options diff --git a/test/langtools/jdk/javadoc/tool/modules/ReleaseOptions.java b/test/langtools/jdk/javadoc/tool/modules/ReleaseOptions.java index 2e0d4778401ed..ce86d073e3305 100644 --- a/test/langtools/jdk/javadoc/tool/modules/ReleaseOptions.java +++ b/test/langtools/jdk/javadoc/tool/modules/ReleaseOptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8175346 8175277 * @summary Test release option interactions diff --git a/test/langtools/jdk/javadoc/tool/nonConstExprs/Test.java b/test/langtools/jdk/javadoc/tool/nonConstExprs/Test.java index 889945b236d08..cba4792f16603 100644 --- a/test/langtools/jdk/javadoc/tool/nonConstExprs/Test.java +++ b/test/langtools/jdk/javadoc/tool/nonConstExprs/Test.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2013, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8010310 * @summary Error processing sources with -private diff --git a/test/langtools/jdk/javadoc/tool/parser/7091528/T7091528.java b/test/langtools/jdk/javadoc/tool/parser/7091528/T7091528.java index 39a726e3261c7..598b1b63c022b 100644 --- a/test/langtools/jdk/javadoc/tool/parser/7091528/T7091528.java +++ b/test/langtools/jdk/javadoc/tool/parser/7091528/T7091528.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2009, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 7091528 8029145 8037484 * @summary ensures javadoc parses unique source files and ignores all class files diff --git a/test/langtools/jdk/jshell/HighlightUITest.java b/test/langtools/jdk/jshell/HighlightUITest.java index ede22e8f01079..954cb33117abb 100644 --- a/test/langtools/jdk/jshell/HighlightUITest.java +++ b/test/langtools/jdk/jshell/HighlightUITest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8274148 * @summary Check the UI behavior of snippet highligting diff --git a/test/langtools/jdk/jshell/HistoryUITest.java b/test/langtools/jdk/jshell/HistoryUITest.java index 42e242fe1e6e8..3083fe46688c5 100644 --- a/test/langtools/jdk/jshell/HistoryUITest.java +++ b/test/langtools/jdk/jshell/HistoryUITest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8178077 8232856 * @summary Check the UI behavior of editing history. diff --git a/test/langtools/jdk/jshell/IndentUITest.java b/test/langtools/jdk/jshell/IndentUITest.java index 6858277a179fd..d7534b3e6b924 100644 --- a/test/langtools/jdk/jshell/IndentUITest.java +++ b/test/langtools/jdk/jshell/IndentUITest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8241950 8247932 * @summary Check the UI behavior of indentation diff --git a/test/langtools/jdk/jshell/PasteAndMeasurementsUITest.java b/test/langtools/jdk/jshell/PasteAndMeasurementsUITest.java index 409965e2e682e..8ec8ded1741c9 100644 --- a/test/langtools/jdk/jshell/PasteAndMeasurementsUITest.java +++ b/test/langtools/jdk/jshell/PasteAndMeasurementsUITest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8182297 8242919 8267459 * @summary Verify that pasting multi-line snippets works properly. diff --git a/test/langtools/jdk/jshell/ToolMultilineSnippetHistoryTest.java b/test/langtools/jdk/jshell/ToolMultilineSnippetHistoryTest.java index 8a7b46fc1c77c..1850f6c363958 100644 --- a/test/langtools/jdk/jshell/ToolMultilineSnippetHistoryTest.java +++ b/test/langtools/jdk/jshell/ToolMultilineSnippetHistoryTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8182489 * @summary test history with multiline snippets diff --git a/test/langtools/jdk/jshell/ToolShiftTabTest.java b/test/langtools/jdk/jshell/ToolShiftTabTest.java index 4c36d79c16a40..87f616678cb95 100644 --- a/test/langtools/jdk/jshell/ToolShiftTabTest.java +++ b/test/langtools/jdk/jshell/ToolShiftTabTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8166334 8188894 * @summary test shift-tab shortcuts "fixes" diff --git a/test/langtools/jdk/jshell/ToolTabCommandTest.java b/test/langtools/jdk/jshell/ToolTabCommandTest.java index 9a429bb725300..f2f3111c4faa9 100644 --- a/test/langtools/jdk/jshell/ToolTabCommandTest.java +++ b/test/langtools/jdk/jshell/ToolTabCommandTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8177076 8185840 8178109 8192863 * @modules diff --git a/test/langtools/jdk/jshell/ToolTabSnippetTest.java b/test/langtools/jdk/jshell/ToolTabSnippetTest.java index 86338938c2cdd..252d57f4a6f66 100644 --- a/test/langtools/jdk/jshell/ToolTabSnippetTest.java +++ b/test/langtools/jdk/jshell/ToolTabSnippetTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8177076 8185426 8189595 8188072 8221759 8255273 * @modules diff --git a/test/langtools/jdk/jshell/UndefinedClassTest.java b/test/langtools/jdk/jshell/UndefinedClassTest.java index 5c509252bd6fb..eb0cf3699cff9 100644 --- a/test/langtools/jdk/jshell/UndefinedClassTest.java +++ b/test/langtools/jdk/jshell/UndefinedClassTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8292755 * @summary InternalError seen while throwing undefined exception From 58ad399d196bf2dd701df451004b7815b0820675 Mon Sep 17 00:00:00 2001 From: Scott Gibbons <sgibbons@openjdk.org> Date: Mon, 22 Apr 2024 22:54:19 +0000 Subject: [PATCH 048/141] 8330821: Rename UnsafeCopyMemory Reviewed-by: kvn, sviswanathan --- .../cpu/aarch64/stubGenerator_aarch64.cpp | 12 +-- src/hotspot/cpu/arm/stubGenerator_arm.cpp | 34 ++++----- src/hotspot/cpu/ppc/stubGenerator_ppc.cpp | 40 +++++----- src/hotspot/cpu/riscv/stubGenerator_riscv.cpp | 12 +-- src/hotspot/cpu/x86/stubGenerator_x86_32.cpp | 20 ++--- src/hotspot/cpu/x86/stubGenerator_x86_64.cpp | 4 +- .../x86/stubGenerator_x86_64_arraycopy.cpp | 76 +++++++++---------- src/hotspot/os/windows/os_windows.cpp | 4 +- src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp | 8 +- .../os_cpu/bsd_aarch64/os_bsd_aarch64.cpp | 8 +- src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp | 8 +- .../os_cpu/linux_aarch64/os_linux_aarch64.cpp | 8 +- src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp | 6 +- src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp | 8 +- .../os_cpu/linux_riscv/os_linux_riscv.cpp | 8 +- src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp | 8 +- src/hotspot/share/runtime/stubRoutines.cpp | 34 ++++----- src/hotspot/share/runtime/stubRoutines.hpp | 20 ++--- 18 files changed, 159 insertions(+), 159 deletions(-) diff --git a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp index 4dc674d28c510..29b95fdb2dd0c 100644 --- a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp @@ -1519,9 +1519,9 @@ class StubGenerator: public StubCodeGenerator { __ push(RegSet::of(d, count), sp); } { - // UnsafeCopyMemory page error: continue after ucm + // UnsafeMemoryAccess page error: continue after unsafe access bool add_entry = !is_oop && (!aligned || sizeof(jlong) == size); - UnsafeCopyMemoryMark ucmm(this, add_entry, true); + UnsafeMemoryAccessMark umam(this, add_entry, true); copy_memory(decorators, is_oop ? T_OBJECT : T_BYTE, aligned, s, d, count, size); } @@ -1590,9 +1590,9 @@ class StubGenerator: public StubCodeGenerator { __ push(RegSet::of(d, count), sp); } { - // UnsafeCopyMemory page error: continue after ucm + // UnsafeMemoryAccess page error: continue after unsafe access bool add_entry = !is_oop && (!aligned || sizeof(jlong) == size); - UnsafeCopyMemoryMark ucmm(this, add_entry, true); + UnsafeMemoryAccessMark umam(this, add_entry, true); copy_memory(decorators, is_oop ? T_OBJECT : T_BYTE, aligned, s, d, count, -size); } if (is_oop) { @@ -8378,8 +8378,8 @@ class StubGenerator: public StubCodeGenerator { SharedRuntime::throw_delayed_StackOverflowError)); // Initialize table for copy memory (arraycopy) check. - if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(8 + 4); // 8 for copyMemory; 4 for setMemory + if (UnsafeMemoryAccess::_table == nullptr) { + UnsafeMemoryAccess::create_table(8 + 4); // 8 for copyMemory; 4 for setMemory } if (UseCRC32Intrinsics) { diff --git a/src/hotspot/cpu/arm/stubGenerator_arm.cpp b/src/hotspot/cpu/arm/stubGenerator_arm.cpp index 9d526c7ebdca9..0d66a2fbb0a51 100644 --- a/src/hotspot/cpu/arm/stubGenerator_arm.cpp +++ b/src/hotspot/cpu/arm/stubGenerator_arm.cpp @@ -956,8 +956,8 @@ class StubGenerator: public StubCodeGenerator { Label L_skip_pld; { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, unsafe_copy, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, unsafe_copy, true); // predecrease to exit when there is less than count_per_loop __ sub_32(count, count, count_per_loop); @@ -1105,8 +1105,8 @@ class StubGenerator: public StubCodeGenerator { __ push(RegisterSet(R4,R10)); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, unsafe_copy, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, unsafe_copy, true); __ sub_32(count, count, count_per_loop); const bool prefetch_before = pld_offset < 0; @@ -1761,8 +1761,8 @@ class StubGenerator: public StubCodeGenerator { assert_different_registers(from, to, count, tmp); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, unsafe_copy, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, unsafe_copy, true); __ align(OptoLoopAlignment); Label L_small_loop; __ BIND(L_small_loop); @@ -1900,8 +1900,8 @@ class StubGenerator: public StubCodeGenerator { __ push(RegisterSet(R4,R10)); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, unsafe_copy, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, unsafe_copy, true); load_one(Rval, from, wordSize, forward); switch (bytes_per_count) { @@ -2058,8 +2058,8 @@ class StubGenerator: public StubCodeGenerator { int count_required_to_align = 0; { - // UnsafeCopyMemoryMark page error: continue at UnsafeCopyMemory common_error_exit - UnsafeCopyMemoryMark ucmm(this, !aligned, false); + // UnsafeMemoryAccessMark page error: continue at UnsafeMemoryAccess common_error_exit + UnsafeMemoryAccessMark umam(this, !aligned, false); count_required_to_align = from_is_aligned ? 0 : align_src(from, to, count, tmp1, bytes_per_count, forward); assert (small_copy_limit >= count_required_to_align, "alignment could exhaust count"); } @@ -2092,9 +2092,9 @@ class StubGenerator: public StubCodeGenerator { int min_copy; if (forward) { - min_copy = generate_forward_aligned_copy_loop(from, to, count, bytes_per_count, !aligned /*add UnsafeCopyMemory entry*/); + min_copy = generate_forward_aligned_copy_loop(from, to, count, bytes_per_count, !aligned /*add UnsafeMemoryAccess entry*/); } else { - min_copy = generate_backward_aligned_copy_loop(from, to, count, bytes_per_count, !aligned /*add UnsafeCopyMemory entry*/); + min_copy = generate_backward_aligned_copy_loop(from, to, count, bytes_per_count, !aligned /*add UnsafeMemoryAccess entry*/); } assert(small_copy_limit >= count_required_to_align + min_copy, "first loop might exhaust count"); @@ -2105,7 +2105,7 @@ class StubGenerator: public StubCodeGenerator { __ ret(); { - copy_small_array(from, to, count, tmp1, tmp2, bytes_per_count, forward, L_small_array /* entry */, !aligned /*add UnsafeCopyMemory entry*/); + copy_small_array(from, to, count, tmp1, tmp2, bytes_per_count, forward, L_small_array /* entry */, !aligned /*add UnsafeMemoryAccess entry*/); if (status) { __ mov(R0, 0); // OK @@ -2116,7 +2116,7 @@ class StubGenerator: public StubCodeGenerator { if (! to_is_aligned) { __ BIND(L_unaligned_dst); - int min_copy_shifted = align_dst_and_generate_shifted_copy_loop(from, to, count, bytes_per_count, forward, !aligned /*add UnsafeCopyMemory entry*/); + int min_copy_shifted = align_dst_and_generate_shifted_copy_loop(from, to, count, bytes_per_count, forward, !aligned /*add UnsafeMemoryAccess entry*/); assert (small_copy_limit >= count_required_to_align + min_copy_shifted, "first loop might exhaust count"); if (status) { @@ -2862,7 +2862,7 @@ class StubGenerator: public StubCodeGenerator { #endif address ucm_common_error_exit = generate_unsafecopy_common_error_exit(); - UnsafeCopyMemory::set_common_exit_stub_pc(ucm_common_error_exit); + UnsafeMemoryAccess::set_common_exit_stub_pc(ucm_common_error_exit); // these need always status in case they are called from generic_arraycopy StubRoutines::_jbyte_disjoint_arraycopy = generate_primitive_copy(false, "jbyte_disjoint_arraycopy", true, 1, true); @@ -3134,8 +3134,8 @@ class StubGenerator: public StubCodeGenerator { // stub for throwing stack overflow error used both by interpreter and compiler StubRoutines::_throw_StackOverflowError_entry = generate_throw_exception("StackOverflowError throw_exception", CAST_FROM_FN_PTR(address, SharedRuntime::throw_StackOverflowError)); - if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(32 + 4); // 32 for copyMemory; 4 for setMemory + if (UnsafeMemoryAccess::_table == nullptr) { + UnsafeMemoryAccess::create_table(32 + 4); // 32 for copyMemory; 4 for setMemory } // integer division used both by interpreter and compiler diff --git a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp index 4a9e5476dce5b..63502c00b2341 100644 --- a/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp +++ b/src/hotspot/cpu/ppc/stubGenerator_ppc.cpp @@ -961,7 +961,7 @@ class StubGenerator: public StubCodeGenerator { // need to copy backwards } - // This is common errorexit stub for UnsafeCopyMemory. + // This is common errorexit stub for UnsafeMemoryAccess. address generate_unsafecopy_common_error_exit() { address start_pc = __ pc(); Register tmp1 = R6_ARG4; @@ -1013,8 +1013,8 @@ class StubGenerator: public StubCodeGenerator { Label l_1, l_2, l_3, l_4, l_5, l_6, l_7, l_8, l_9, l_10; { - // UnsafeCopyMemory page error: continue at UnsafeCopyMemory common_error_exit - UnsafeCopyMemoryMark ucmm(this, !aligned, false); + // UnsafeMemoryAccess page error: continue at UnsafeMemoryAccess common_error_exit + UnsafeMemoryAccessMark umam(this, !aligned, false); // Don't try anything fancy if arrays don't have many elements. __ li(tmp3, 0); @@ -1195,8 +1195,8 @@ class StubGenerator: public StubCodeGenerator { // that we don't have to optimize it. Label l_1, l_2; { - // UnsafeCopyMemory page error: continue at UnsafeCopyMemory common_error_exit - UnsafeCopyMemoryMark ucmm(this, !aligned, false); + // UnsafeMemoryAccess page error: continue at UnsafeMemoryAccess common_error_exit + UnsafeMemoryAccessMark umam(this, !aligned, false); __ b(l_2); __ bind(l_1); __ stbx(tmp1, R4_ARG2, R5_ARG3); @@ -1282,8 +1282,8 @@ class StubGenerator: public StubCodeGenerator { Label l_1, l_2, l_3, l_4, l_5, l_6, l_7, l_8, l_9; { - // UnsafeCopyMemory page error: continue at UnsafeCopyMemory common_error_exit - UnsafeCopyMemoryMark ucmm(this, !aligned, false); + // UnsafeMemoryAccess page error: continue at UnsafeMemoryAccess common_error_exit + UnsafeMemoryAccessMark umam(this, !aligned, false); // don't try anything fancy if arrays don't have many elements __ li(tmp3, 0); __ cmpwi(CCR0, R5_ARG3, 9); @@ -1466,8 +1466,8 @@ class StubGenerator: public StubCodeGenerator { Label l_1, l_2; { - // UnsafeCopyMemory page error: continue at UnsafeCopyMemory common_error_exit - UnsafeCopyMemoryMark ucmm(this, !aligned, false); + // UnsafeMemoryAccess page error: continue at UnsafeMemoryAccess common_error_exit + UnsafeMemoryAccessMark umam(this, !aligned, false); __ sldi(tmp1, R5_ARG3, 1); __ b(l_2); __ bind(l_1); @@ -1625,8 +1625,8 @@ class StubGenerator: public StubCodeGenerator { address start = __ function_entry(); assert_positive_int(R5_ARG3); { - // UnsafeCopyMemory page error: continue at UnsafeCopyMemory common_error_exit - UnsafeCopyMemoryMark ucmm(this, !aligned, false); + // UnsafeMemoryAccess page error: continue at UnsafeMemoryAccess common_error_exit + UnsafeMemoryAccessMark umam(this, !aligned, false); generate_disjoint_int_copy_core(aligned); } __ li(R3_RET, 0); // return 0 @@ -1777,8 +1777,8 @@ class StubGenerator: public StubCodeGenerator { array_overlap_test(nooverlap_target, 2); { - // UnsafeCopyMemory page error: continue at UnsafeCopyMemory common_error_exit - UnsafeCopyMemoryMark ucmm(this, !aligned, false); + // UnsafeMemoryAccess page error: continue at UnsafeMemoryAccess common_error_exit + UnsafeMemoryAccessMark umam(this, !aligned, false); generate_conjoint_int_copy_core(aligned); } @@ -1903,8 +1903,8 @@ class StubGenerator: public StubCodeGenerator { address start = __ function_entry(); assert_positive_int(R5_ARG3); { - // UnsafeCopyMemory page error: continue at UnsafeCopyMemory common_error_exit - UnsafeCopyMemoryMark ucmm(this, !aligned, false); + // UnsafeMemoryAccess page error: continue at UnsafeMemoryAccess common_error_exit + UnsafeMemoryAccessMark umam(this, !aligned, false); generate_disjoint_long_copy_core(aligned); } __ li(R3_RET, 0); // return 0 @@ -2034,8 +2034,8 @@ class StubGenerator: public StubCodeGenerator { array_overlap_test(nooverlap_target, 3); { - // UnsafeCopyMemory page error: continue at UnsafeCopyMemory common_error_exit - UnsafeCopyMemoryMark ucmm(this, !aligned, false); + // UnsafeMemoryAccess page error: continue at UnsafeMemoryAccess common_error_exit + UnsafeMemoryAccessMark umam(this, !aligned, false); generate_conjoint_long_copy_core(aligned); } __ li(R3_RET, 0); // return 0 @@ -3129,7 +3129,7 @@ class StubGenerator: public StubCodeGenerator { // the conjoint stubs use them. address ucm_common_error_exit = generate_unsafecopy_common_error_exit(); - UnsafeCopyMemory::set_common_exit_stub_pc(ucm_common_error_exit); + UnsafeMemoryAccess::set_common_exit_stub_pc(ucm_common_error_exit); // non-aligned disjoint versions StubRoutines::_jbyte_disjoint_arraycopy = generate_disjoint_byte_copy(false, "jbyte_disjoint_arraycopy"); @@ -4745,8 +4745,8 @@ class StubGenerator: public StubCodeGenerator { StubRoutines::_call_stub_entry = generate_call_stub(StubRoutines::_call_stub_return_address); StubRoutines::_catch_exception_entry = generate_catch_exception(); - if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(8 + 4); // 8 for copyMemory; 4 for setMemory + if (UnsafeMemoryAccess::_table == nullptr) { + UnsafeMemoryAccess::create_table(8 + 4); // 8 for copyMemory; 4 for setMemory } // Build this early so it's available for the interpreter. diff --git a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp index 8ac8263b30892..a4a92047eaefc 100644 --- a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp +++ b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp @@ -1136,9 +1136,9 @@ class StubGenerator: public StubCodeGenerator { } { - // UnsafeCopyMemory page error: continue after ucm + // UnsafeMemoryAccess page error: continue after unsafe access bool add_entry = !is_oop && (!aligned || sizeof(jlong) == size); - UnsafeCopyMemoryMark ucmm(this, add_entry, true); + UnsafeMemoryAccessMark umam(this, add_entry, true); copy_memory(decorators, is_oop ? T_OBJECT : T_BYTE, aligned, s, d, count, size); } @@ -1212,9 +1212,9 @@ class StubGenerator: public StubCodeGenerator { } { - // UnsafeCopyMemory page error: continue after ucm + // UnsafeMemoryAccess page error: continue after unsafe access bool add_entry = !is_oop && (!aligned || sizeof(jlong) == size); - UnsafeCopyMemoryMark ucmm(this, add_entry, true); + UnsafeMemoryAccessMark umam(this, add_entry, true); copy_memory(decorators, is_oop ? T_OBJECT : T_BYTE, aligned, s, d, count, -size); } @@ -5500,8 +5500,8 @@ static const int64_t right_3_bits = right_n_bits(3); StubRoutines::_forward_exception_entry = generate_forward_exception(); - if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(8 + 4); // 8 for copyMemory; 4 for setMemory + if (UnsafeMemoryAccess::_table == nullptr) { + UnsafeMemoryAccess::create_table(8 + 4); // 8 for copyMemory; 4 for setMemory } StubRoutines::_call_stub_entry = diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp index 13b036a70aa03..d8067a39177f1 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_32.cpp @@ -1131,8 +1131,8 @@ class StubGenerator: public StubCodeGenerator { bs->arraycopy_prologue(_masm, decorators, t, from, to, count); { bool add_entry = (t != T_OBJECT && (!aligned || t == T_INT)); - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, add_entry, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, add_entry, true); __ subptr(to, from); // to --> to_from __ cmpl(count, 2<<shift); // Short arrays (< 8 bytes) copy by element __ jcc(Assembler::below, L_copy_4_bytes); // use unsigned cmp @@ -1321,8 +1321,8 @@ class StubGenerator: public StubCodeGenerator { { bool add_entry = (t != T_OBJECT && (!aligned || t == T_INT)); - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, add_entry, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, add_entry, true); // copy from high to low __ cmpl(count, 2<<shift); // Short arrays (< 8 bytes) copy by element __ jcc(Assembler::below, L_copy_4_bytes); // use unsigned cmp @@ -1450,8 +1450,8 @@ class StubGenerator: public StubCodeGenerator { BLOCK_COMMENT("Entry:"); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, true, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, true, true); __ subptr(to, from); // to --> to_from if (UseXMMForArrayCopy) { xmm_copy_forward(from, to_from, count); @@ -1505,8 +1505,8 @@ class StubGenerator: public StubCodeGenerator { __ jump_cc(Assembler::aboveEqual, nooverlap); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, true, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, true, true); __ jmpb(L_copy_8_bytes); @@ -4121,8 +4121,8 @@ class StubGenerator: public StubCodeGenerator { create_control_words(); // Initialize table for copy memory (arraycopy) check. - if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(16 + 4); // 16 for copyMemory; 4 for setMemory + if (UnsafeMemoryAccess::_table == nullptr) { + UnsafeMemoryAccess::create_table(16 + 4); // 16 for copyMemory; 4 for setMemory } StubRoutines::x86::_verify_mxcsr_entry = generate_verify_mxcsr(); diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp index 1a66ba6a55b17..63226a560f4df 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64.cpp @@ -4057,8 +4057,8 @@ void StubGenerator::generate_initial_stubs() { create_control_words(); // Initialize table for unsafe copy memeory check. - if (UnsafeCopyMemory::_table == nullptr) { - UnsafeCopyMemory::create_table(16 + 4); // 16 for copyMemory; 4 for setMemory + if (UnsafeMemoryAccess::_table == nullptr) { + UnsafeMemoryAccess::create_table(16 + 4); // 16 for copyMemory; 4 for setMemory } // entry points that exist in all platforms Note: This is code diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp index 27406792f60dc..d8f7a6b272bc9 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64_arraycopy.cpp @@ -560,8 +560,8 @@ address StubGenerator::generate_disjoint_copy_avx3_masked(address* entry, const int loop_size[] = { 192, 96, 48, 24}; int threshold[] = { 4096, 2048, 1024, 512}; - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, true); // 'from', 'to' and 'count' are now valid // temp1 holds remaining count and temp4 holds running count used to compute @@ -730,7 +730,7 @@ address StubGenerator::generate_disjoint_copy_avx3_masked(address* entry, const if (MaxVectorSize == 64) { __ BIND(L_copy_large); - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, false, ucme_exit_pc); + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, false, ucme_exit_pc); arraycopy_avx3_large(to, from, temp1, temp2, temp3, temp4, count, xmm1, xmm2, xmm3, xmm4, shift); __ jmp(L_finish); } @@ -859,8 +859,8 @@ address StubGenerator::generate_conjoint_copy_avx3_masked(address* entry, const int loop_size[] = { 192, 96, 48, 24}; int threshold[] = { 4096, 2048, 1024, 512}; - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, true); // 'from', 'to' and 'count' are now valid // temp1 holds remaining count. @@ -1318,8 +1318,8 @@ address StubGenerator::generate_disjoint_byte_copy(bool aligned, address* entry, // r9 and r10 may be used to save non-volatile registers { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !aligned, true); // 'from', 'to' and 'count' are now valid __ movptr(byte_count, count); __ shrptr(count, 3); // count => qword_count @@ -1374,7 +1374,7 @@ __ BIND(L_exit); __ ret(0); { - UnsafeCopyMemoryMark ucmm(this, !aligned, false, ucme_exit_pc); + UnsafeMemoryAccessMark umam(this, !aligned, false, ucme_exit_pc); // Copy in multi-bytes chunks copy_bytes_forward(end_from, end_to, qword_count, rax, r10, L_copy_bytes, L_copy_8_bytes, decorators, T_BYTE); __ jmp(L_copy_4_bytes); @@ -1432,8 +1432,8 @@ address StubGenerator::generate_conjoint_byte_copy(bool aligned, address nooverl // r9 and r10 may be used to save non-volatile registers { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !aligned, true); // 'from', 'to' and 'count' are now valid __ movptr(byte_count, count); __ shrptr(count, 3); // count => qword_count @@ -1477,8 +1477,8 @@ address StubGenerator::generate_conjoint_byte_copy(bool aligned, address nooverl __ ret(0); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !aligned, true); // Copy in multi-bytes chunks copy_bytes_backward(from, to, qword_count, rax, r10, L_copy_bytes, L_copy_8_bytes, decorators, T_BYTE); } @@ -1549,8 +1549,8 @@ address StubGenerator::generate_disjoint_short_copy(bool aligned, address *entry // r9 and r10 may be used to save non-volatile registers { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !aligned, true); // 'from', 'to' and 'count' are now valid __ movptr(word_count, count); __ shrptr(count, 2); // count => qword_count @@ -1598,7 +1598,7 @@ __ BIND(L_exit); __ ret(0); { - UnsafeCopyMemoryMark ucmm(this, !aligned, false, ucme_exit_pc); + UnsafeMemoryAccessMark umam(this, !aligned, false, ucme_exit_pc); // Copy in multi-bytes chunks copy_bytes_forward(end_from, end_to, qword_count, rax, r10, L_copy_bytes, L_copy_8_bytes, decorators, T_SHORT); __ jmp(L_copy_4_bytes); @@ -1624,7 +1624,7 @@ address StubGenerator::generate_fill(BasicType t, bool aligned, const char *name { // Add set memory mark to protect against unsafe accesses faulting - UnsafeCopyMemoryMark usmm(this, ((t == T_BYTE) && !aligned), true); + UnsafeMemoryAccessMark umam(this, ((t == T_BYTE) && !aligned), true); __ generate_fill(t, aligned, to, value, r11, rax, xmm0); } @@ -1685,8 +1685,8 @@ address StubGenerator::generate_conjoint_short_copy(bool aligned, address noover // r9 and r10 may be used to save non-volatile registers { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !aligned, true); // 'from', 'to' and 'count' are now valid __ movptr(word_count, count); __ shrptr(count, 2); // count => qword_count @@ -1722,8 +1722,8 @@ address StubGenerator::generate_conjoint_short_copy(bool aligned, address noover __ ret(0); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !aligned, true); // Copy in multi-bytes chunks copy_bytes_backward(from, to, qword_count, rax, r10, L_copy_bytes, L_copy_8_bytes, decorators, T_SHORT); } @@ -1806,8 +1806,8 @@ address StubGenerator::generate_disjoint_int_oop_copy(bool aligned, bool is_oop, bs->arraycopy_prologue(_masm, decorators, type, from, to, count); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, true); // 'from', 'to' and 'count' are now valid __ movptr(dword_count, count); __ shrptr(count, 1); // count => qword_count @@ -1843,7 +1843,7 @@ __ BIND(L_exit); __ ret(0); { - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, false, ucme_exit_pc); + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, false, ucme_exit_pc); // Copy in multi-bytes chunks copy_bytes_forward(end_from, end_to, qword_count, rax, r10, L_copy_bytes, L_copy_8_bytes, decorators, is_oop ? T_OBJECT : T_INT); __ jmp(L_copy_4_bytes); @@ -1916,8 +1916,8 @@ address StubGenerator::generate_conjoint_int_oop_copy(bool aligned, bool is_oop, assert_clean_int(count, rax); // Make sure 'count' is clean int. { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, true); // 'from', 'to' and 'count' are now valid __ movptr(dword_count, count); __ shrptr(count, 1); // count => qword_count @@ -1949,8 +1949,8 @@ address StubGenerator::generate_conjoint_int_oop_copy(bool aligned, bool is_oop, __ ret(0); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, true); // Copy in multi-bytes chunks copy_bytes_backward(from, to, qword_count, rax, r10, L_copy_bytes, L_copy_8_bytes, decorators, is_oop ? T_OBJECT : T_INT); } @@ -2031,8 +2031,8 @@ address StubGenerator::generate_disjoint_long_oop_copy(bool aligned, bool is_oop BasicType type = is_oop ? T_OBJECT : T_LONG; bs->arraycopy_prologue(_masm, decorators, type, from, to, qword_count); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, true); // Copy from low to high addresses. Use 'to' as scratch. __ lea(end_from, Address(from, qword_count, Address::times_8, -8)); @@ -2063,8 +2063,8 @@ address StubGenerator::generate_disjoint_long_oop_copy(bool aligned, bool is_oop } { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, true); // Copy in multi-bytes chunks copy_bytes_forward(end_from, end_to, qword_count, rax, r10, L_copy_bytes, L_copy_8_bytes, decorators, is_oop ? T_OBJECT : T_LONG); } @@ -2140,8 +2140,8 @@ address StubGenerator::generate_conjoint_long_oop_copy(bool aligned, bool is_oop BasicType type = is_oop ? T_OBJECT : T_LONG; bs->arraycopy_prologue(_masm, decorators, type, from, to, qword_count); { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, true); __ jmp(L_copy_bytes); @@ -2167,8 +2167,8 @@ address StubGenerator::generate_conjoint_long_oop_copy(bool aligned, bool is_oop __ ret(0); } { - // UnsafeCopyMemory page error: continue after ucm - UnsafeCopyMemoryMark ucmm(this, !is_oop && !aligned, true); + // UnsafeMemoryAccess page error: continue after unsafe access + UnsafeMemoryAccessMark umam(this, !is_oop && !aligned, true); // Copy in multi-bytes chunks copy_bytes_backward(from, to, qword_count, rax, r10, L_copy_bytes, L_copy_8_bytes, decorators, is_oop ? T_OBJECT : T_LONG); @@ -2628,7 +2628,7 @@ address StubGenerator::generate_unsafe_setmemory(const char *name, // Fill words { Label L_wordsTail, L_wordsLoop, L_wordsTailLoop; - UnsafeCopyMemoryMark usmm(this, true, true); + UnsafeMemoryAccessMark umam(this, true, true); // At this point, we know the lower bit of size is zero and a // multiple of 2 @@ -2642,7 +2642,7 @@ address StubGenerator::generate_unsafe_setmemory(const char *name, // Fill QUADWORDs { Label L_qwordLoop, L_qwordsTail, L_qwordsTailLoop; - UnsafeCopyMemoryMark usmm(this, true, true); + UnsafeMemoryAccessMark umam(this, true, true); // At this point, we know the lower 3 bits of size are zero and a // multiple of 8 @@ -2659,7 +2659,7 @@ address StubGenerator::generate_unsafe_setmemory(const char *name, // Fill DWORDs { Label L_dwordLoop, L_dwordsTail, L_dwordsTailLoop; - UnsafeCopyMemoryMark usmm(this, true, true); + UnsafeMemoryAccessMark umam(this, true, true); // At this point, we know the lower 2 bits of size are zero and a // multiple of 4 diff --git a/src/hotspot/os/windows/os_windows.cpp b/src/hotspot/os/windows/os_windows.cpp index 37f40ebe59688..ccd7a8f10ce4c 100644 --- a/src/hotspot/os/windows/os_windows.cpp +++ b/src/hotspot/os/windows/os_windows.cpp @@ -2795,12 +2795,12 @@ LONG WINAPI topLevelExceptionFilter(struct _EXCEPTION_POINTERS* exceptionInfo) { nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; } - bool is_unsafe_memory_access = (in_native || in_java) && UnsafeCopyMemory::contains_pc(pc); + bool is_unsafe_memory_access = (in_native || in_java) && UnsafeMemoryAccess::contains_pc(pc); if (((in_vm || in_native || is_unsafe_memory_access) && thread->doing_unsafe_access()) || (nm != nullptr && nm->has_unsafe_access())) { address next_pc = Assembler::locate_next_instruction(pc); if (is_unsafe_memory_access) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } return Handle_Exception(exceptionInfo, SharedRuntime::handle_unsafe_access(thread, next_pc)); } diff --git a/src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp b/src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp index a3101c0228513..b45d38650c076 100644 --- a/src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp +++ b/src/hotspot/os_cpu/aix_ppc/os_aix_ppc.cpp @@ -340,11 +340,11 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // underlying file has been truncated. Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = cb ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeMemoryAccess::contains_pc(pc)); if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = pc + 4; if (is_unsafe_memory_access) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } next_pc = SharedRuntime::handle_unsafe_access(thread, next_pc); os::Posix::ucontext_set_pc(uc, next_pc); @@ -368,8 +368,8 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, thread->thread_state() == _thread_in_native) && sig == SIGBUS && thread->doing_unsafe_access()) { address next_pc = pc + 4; - if (UnsafeCopyMemory::contains_pc(pc)) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + if (UnsafeMemoryAccess::contains_pc(pc)) { + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } next_pc = SharedRuntime::handle_unsafe_access(thread, next_pc); os::Posix::ucontext_set_pc(uc, next_pc); diff --git a/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp b/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp index 436c68f5a30cf..ba14cb2ac1280 100644 --- a/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp +++ b/src/hotspot/os_cpu/bsd_aarch64/os_bsd_aarch64.cpp @@ -257,11 +257,11 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeMemoryAccess::contains_pc(pc)); if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = pc + NativeCall::instruction_size; if (is_unsafe_memory_access) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } @@ -299,8 +299,8 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, sig == SIGBUS && /* info->si_code == BUS_OBJERR && */ thread->doing_unsafe_access()) { address next_pc = pc + NativeCall::instruction_size; - if (UnsafeCopyMemory::contains_pc(pc)) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + if (UnsafeMemoryAccess::contains_pc(pc)) { + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } diff --git a/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp b/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp index 35ee2de2aa2da..4e7316e06610a 100644 --- a/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp +++ b/src/hotspot/os_cpu/bsd_x86/os_bsd_x86.cpp @@ -441,11 +441,11 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_memory_access = thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc); + bool is_unsafe_memory_access = thread->doing_unsafe_access() && UnsafeMemoryAccess::contains_pc(pc); if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = Assembler::locate_next_instruction(pc); if (is_unsafe_memory_access) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } @@ -521,8 +521,8 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, sig == SIGBUS && /* info->si_code == BUS_OBJERR && */ thread->doing_unsafe_access()) { address next_pc = Assembler::locate_next_instruction(pc); - if (UnsafeCopyMemory::contains_pc(pc)) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + if (UnsafeMemoryAccess::contains_pc(pc)) { + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } diff --git a/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp b/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp index fc6cbe5faf0e6..9f44fe3aa2520 100644 --- a/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp +++ b/src/hotspot/os_cpu/linux_aarch64/os_linux_aarch64.cpp @@ -240,11 +240,11 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeMemoryAccess::contains_pc(pc)); if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = pc + NativeCall::instruction_size; if (is_unsafe_memory_access) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } @@ -286,8 +286,8 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, sig == SIGBUS && /* info->si_code == BUS_OBJERR && */ thread->doing_unsafe_access()) { address next_pc = pc + NativeCall::instruction_size; - if (UnsafeCopyMemory::contains_pc(pc)) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + if (UnsafeMemoryAccess::contains_pc(pc)) { + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } diff --git a/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp b/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp index 5b5364e1117f2..807fa76589713 100644 --- a/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp +++ b/src/hotspot/os_cpu/linux_arm/os_linux_arm.cpp @@ -326,7 +326,7 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; if ((nm != nullptr && nm->has_unsafe_access()) || (thread->doing_unsafe_access() && - UnsafeCopyMemory::contains_pc(pc))) { + UnsafeMemoryAccess::contains_pc(pc))) { unsafe_access = true; } } else if (sig == SIGSEGV && @@ -364,8 +364,8 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // any other suitable exception reason, // so assume it is an unsafe access. address next_pc = pc + Assembler::InstructionSize; - if (UnsafeCopyMemory::contains_pc(pc)) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + if (UnsafeMemoryAccess::contains_pc(pc)) { + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } #ifdef __thumb__ if (uc->uc_mcontext.arm_cpsr & PSR_T_BIT) { diff --git a/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp b/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp index 89197df449311..1857097bd52cd 100644 --- a/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp +++ b/src/hotspot/os_cpu/linux_ppc/os_linux_ppc.cpp @@ -355,11 +355,11 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // underlying file has been truncated. Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeMemoryAccess::contains_pc(pc)); if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = pc + 4; if (is_unsafe_memory_access) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } next_pc = SharedRuntime::handle_unsafe_access(thread, next_pc); os::Posix::ucontext_set_pc(uc, next_pc); @@ -379,8 +379,8 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, thread->thread_state() == _thread_in_native) && sig == SIGBUS && thread->doing_unsafe_access()) { address next_pc = pc + 4; - if (UnsafeCopyMemory::contains_pc(pc)) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + if (UnsafeMemoryAccess::contains_pc(pc)) { + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } next_pc = SharedRuntime::handle_unsafe_access(thread, next_pc); os::Posix::ucontext_set_pc(uc, next_pc); diff --git a/src/hotspot/os_cpu/linux_riscv/os_linux_riscv.cpp b/src/hotspot/os_cpu/linux_riscv/os_linux_riscv.cpp index ec880236793b6..fcb0e170af16a 100644 --- a/src/hotspot/os_cpu/linux_riscv/os_linux_riscv.cpp +++ b/src/hotspot/os_cpu/linux_riscv/os_linux_riscv.cpp @@ -230,11 +230,11 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc)); + bool is_unsafe_memory_access = (thread->doing_unsafe_access() && UnsafeMemoryAccess::contains_pc(pc)); if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = Assembler::locate_next_instruction(pc); if (is_unsafe_memory_access) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } @@ -272,8 +272,8 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, sig == SIGBUS && /* info->si_code == BUS_OBJERR && */ thread->doing_unsafe_access()) { address next_pc = Assembler::locate_next_instruction(pc); - if (UnsafeCopyMemory::contains_pc(pc)) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + if (UnsafeMemoryAccess::contains_pc(pc)) { + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } diff --git a/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp b/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp index 9815ff2c6cefa..6cdb2a5e3f66a 100644 --- a/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp +++ b/src/hotspot/os_cpu/linux_x86/os_linux_x86.cpp @@ -260,11 +260,11 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, // Do not crash the VM in such a case. CodeBlob* cb = CodeCache::find_blob(pc); nmethod* nm = (cb != nullptr) ? cb->as_nmethod_or_null() : nullptr; - bool is_unsafe_memory_access = thread->doing_unsafe_access() && UnsafeCopyMemory::contains_pc(pc); + bool is_unsafe_memory_access = thread->doing_unsafe_access() && UnsafeMemoryAccess::contains_pc(pc); if ((nm != nullptr && nm->has_unsafe_access()) || is_unsafe_memory_access) { address next_pc = Assembler::locate_next_instruction(pc); if (is_unsafe_memory_access) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } @@ -315,8 +315,8 @@ bool PosixSignals::pd_hotspot_signal_handler(int sig, siginfo_t* info, (sig == SIGBUS && /* info->si_code == BUS_OBJERR && */ thread->doing_unsafe_access())) { address next_pc = Assembler::locate_next_instruction(pc); - if (UnsafeCopyMemory::contains_pc(pc)) { - next_pc = UnsafeCopyMemory::page_error_continue_pc(pc); + if (UnsafeMemoryAccess::contains_pc(pc)) { + next_pc = UnsafeMemoryAccess::page_error_continue_pc(pc); } stub = SharedRuntime::handle_unsafe_access(thread, next_pc); } diff --git a/src/hotspot/share/runtime/stubRoutines.cpp b/src/hotspot/share/runtime/stubRoutines.cpp index 550f289bf3cbb..f52255f504d90 100644 --- a/src/hotspot/share/runtime/stubRoutines.cpp +++ b/src/hotspot/share/runtime/stubRoutines.cpp @@ -41,10 +41,10 @@ #include "opto/runtime.hpp" #endif -UnsafeCopyMemory* UnsafeCopyMemory::_table = nullptr; -int UnsafeCopyMemory::_table_length = 0; -int UnsafeCopyMemory::_table_max_length = 0; -address UnsafeCopyMemory::_common_exit_stub_pc = nullptr; +UnsafeMemoryAccess* UnsafeMemoryAccess::_table = nullptr; +int UnsafeMemoryAccess::_table_length = 0; +int UnsafeMemoryAccess::_table_max_length = 0; +address UnsafeMemoryAccess::_common_exit_stub_pc = nullptr; // Implementation of StubRoutines - for a description // of how to extend it, see the header file. @@ -206,14 +206,14 @@ address StubRoutines::_lookup_secondary_supers_table_stubs[Klass::SECONDARY_SUPE extern void StubGenerator_generate(CodeBuffer* code, StubCodeGenerator::StubsKind kind); // only interface to generators -void UnsafeCopyMemory::create_table(int max_size) { - UnsafeCopyMemory::_table = new UnsafeCopyMemory[max_size]; - UnsafeCopyMemory::_table_max_length = max_size; +void UnsafeMemoryAccess::create_table(int max_size) { + UnsafeMemoryAccess::_table = new UnsafeMemoryAccess[max_size]; + UnsafeMemoryAccess::_table_max_length = max_size; } -bool UnsafeCopyMemory::contains_pc(address pc) { - for (int i = 0; i < UnsafeCopyMemory::_table_length; i++) { - UnsafeCopyMemory* entry = &UnsafeCopyMemory::_table[i]; +bool UnsafeMemoryAccess::contains_pc(address pc) { + for (int i = 0; i < UnsafeMemoryAccess::_table_length; i++) { + UnsafeMemoryAccess* entry = &UnsafeMemoryAccess::_table[i]; if (pc >= entry->start_pc() && pc < entry->end_pc()) { return true; } @@ -221,9 +221,9 @@ bool UnsafeCopyMemory::contains_pc(address pc) { return false; } -address UnsafeCopyMemory::page_error_continue_pc(address pc) { - for (int i = 0; i < UnsafeCopyMemory::_table_length; i++) { - UnsafeCopyMemory* entry = &UnsafeCopyMemory::_table[i]; +address UnsafeMemoryAccess::page_error_continue_pc(address pc) { + for (int i = 0; i < UnsafeMemoryAccess::_table_length; i++) { + UnsafeMemoryAccess* entry = &UnsafeMemoryAccess::_table[i]; if (pc >= entry->start_pc() && pc < entry->end_pc()) { return entry->error_exit_pc(); } @@ -523,20 +523,20 @@ StubRoutines::select_arraycopy_function(BasicType t, bool aligned, bool disjoint #undef RETURN_STUB_PARM } -UnsafeCopyMemoryMark::UnsafeCopyMemoryMark(StubCodeGenerator* cgen, bool add_entry, bool continue_at_scope_end, address error_exit_pc) { +UnsafeMemoryAccessMark::UnsafeMemoryAccessMark(StubCodeGenerator* cgen, bool add_entry, bool continue_at_scope_end, address error_exit_pc) { _cgen = cgen; _ucm_entry = nullptr; if (add_entry) { address err_exit_pc = nullptr; if (!continue_at_scope_end) { - err_exit_pc = error_exit_pc != nullptr ? error_exit_pc : UnsafeCopyMemory::common_exit_stub_pc(); + err_exit_pc = error_exit_pc != nullptr ? error_exit_pc : UnsafeMemoryAccess::common_exit_stub_pc(); } assert(err_exit_pc != nullptr || continue_at_scope_end, "error exit not set"); - _ucm_entry = UnsafeCopyMemory::add_to_table(_cgen->assembler()->pc(), nullptr, err_exit_pc); + _ucm_entry = UnsafeMemoryAccess::add_to_table(_cgen->assembler()->pc(), nullptr, err_exit_pc); } } -UnsafeCopyMemoryMark::~UnsafeCopyMemoryMark() { +UnsafeMemoryAccessMark::~UnsafeMemoryAccessMark() { if (_ucm_entry != nullptr) { _ucm_entry->set_end_pc(_cgen->assembler()->pc()); if (_ucm_entry->error_exit_pc() == nullptr) { diff --git a/src/hotspot/share/runtime/stubRoutines.hpp b/src/hotspot/share/runtime/stubRoutines.hpp index 4cb031799e4b9..fe32c9613c814 100644 --- a/src/hotspot/share/runtime/stubRoutines.hpp +++ b/src/hotspot/share/runtime/stubRoutines.hpp @@ -76,17 +76,17 @@ // 4. implement the corresponding generator function in the platform-dependent // stubGenerator_<arch>.cpp file and call the function in generate_all() of that file -class UnsafeCopyMemory : public CHeapObj<mtCode> { +class UnsafeMemoryAccess : public CHeapObj<mtCode> { private: address _start_pc; address _end_pc; address _error_exit_pc; public: static address _common_exit_stub_pc; - static UnsafeCopyMemory* _table; + static UnsafeMemoryAccess* _table; static int _table_length; static int _table_max_length; - UnsafeCopyMemory() : _start_pc(nullptr), _end_pc(nullptr), _error_exit_pc(nullptr) {} + UnsafeMemoryAccess() : _start_pc(nullptr), _end_pc(nullptr), _error_exit_pc(nullptr) {} void set_start_pc(address pc) { _start_pc = pc; } void set_end_pc(address pc) { _end_pc = pc; } void set_error_exit_pc(address pc) { _error_exit_pc = pc; } @@ -97,9 +97,9 @@ class UnsafeCopyMemory : public CHeapObj<mtCode> { static void set_common_exit_stub_pc(address pc) { _common_exit_stub_pc = pc; } static address common_exit_stub_pc() { return _common_exit_stub_pc; } - static UnsafeCopyMemory* add_to_table(address start_pc, address end_pc, address error_exit_pc) { - guarantee(_table_length < _table_max_length, "Incorrect UnsafeCopyMemory::_table_max_length"); - UnsafeCopyMemory* entry = &_table[_table_length]; + static UnsafeMemoryAccess* add_to_table(address start_pc, address end_pc, address error_exit_pc) { + guarantee(_table_length < _table_max_length, "Incorrect UnsafeMemoryAccess::_table_max_length"); + UnsafeMemoryAccess* entry = &_table[_table_length]; entry->set_start_pc(start_pc); entry->set_end_pc(end_pc); entry->set_error_exit_pc(error_exit_pc); @@ -113,13 +113,13 @@ class UnsafeCopyMemory : public CHeapObj<mtCode> { static void create_table(int max_size); }; -class UnsafeCopyMemoryMark : public StackObj { +class UnsafeMemoryAccessMark : public StackObj { private: - UnsafeCopyMemory* _ucm_entry; + UnsafeMemoryAccess* _ucm_entry; StubCodeGenerator* _cgen; public: - UnsafeCopyMemoryMark(StubCodeGenerator* cgen, bool add_entry, bool continue_at_scope_end, address error_exit_pc = nullptr); - ~UnsafeCopyMemoryMark(); + UnsafeMemoryAccessMark(StubCodeGenerator* cgen, bool add_entry, bool continue_at_scope_end, address error_exit_pc = nullptr); + ~UnsafeMemoryAccessMark(); }; class StubRoutines: AllStatic { From 57ebd045eae8ef1bdb5ec96d5eb11d252e08e6bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Casta=C3=B1eda=20Lozano?= <rcastanedalo@openjdk.org> Date: Tue, 23 Apr 2024 04:18:23 +0000 Subject: [PATCH 049/141] 8330153: C2: dump barrier information for all Mach nodes Reviewed-by: kvn, thartmann --- src/hotspot/share/opto/machnode.cpp | 11 +-- .../compiler/lib/ir_framework/IRNode.java | 6 ++ .../examples/GCBarrierIRExample.java | 75 +++++++++++++++++++ 3 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 test/hotspot/jtreg/testlibrary_tests/ir_framework/examples/GCBarrierIRExample.java diff --git a/src/hotspot/share/opto/machnode.cpp b/src/hotspot/share/opto/machnode.cpp index b2c0028b1a3ab..57361313f8533 100644 --- a/src/hotspot/share/opto/machnode.cpp +++ b/src/hotspot/share/opto/machnode.cpp @@ -548,6 +548,11 @@ void MachNode::dump_spec(outputStream *st) const { if( C->alias_type(t)->is_volatile() ) st->print(" Volatile!"); } + if (barrier_data() != 0) { + st->print(" barrier("); + BarrierSet::barrier_set()->barrier_set_c2()->dump_barrier_data(this, st); + st->print(") "); + } } //------------------------------dump_format------------------------------------ @@ -560,16 +565,12 @@ void MachNode::dump_format(PhaseRegAlloc *ra, outputStream *st) const { //============================================================================= #ifndef PRODUCT void MachTypeNode::dump_spec(outputStream *st) const { + MachNode::dump_spec(st); if (_bottom_type != nullptr) { _bottom_type->dump_on(st); } else { st->print(" null"); } - if (barrier_data() != 0) { - st->print(" barrier("); - BarrierSet::barrier_set()->barrier_set_c2()->dump_barrier_data(this, st); - st->print(")"); - } } #endif diff --git a/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java b/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java index b9a6bcccf1292..366b17786ad58 100644 --- a/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java +++ b/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java @@ -2076,6 +2076,12 @@ public class IRNode { machOnly(Z_STORE_P_WITH_BARRIER_FLAG, regex); } + public static final String Z_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG = COMPOSITE_PREFIX + "Z_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG" + POSTFIX; + static { + String regex = START + "zCompareAndSwapP" + MID + "barrier\\(\\s*" + IS_REPLACED + "\\s*\\)" + END; + machOnly(Z_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, regex); + } + public static final String Z_GET_AND_SET_P_WITH_BARRIER_FLAG = COMPOSITE_PREFIX + "Z_GET_AND_SET_P_WITH_BARRIER_FLAG" + POSTFIX; static { String regex = START + "(zXChgP)|(zGetAndSetP\\S*)" + MID + "barrier\\(\\s*" + IS_REPLACED + "\\s*\\)" + END; diff --git a/test/hotspot/jtreg/testlibrary_tests/ir_framework/examples/GCBarrierIRExample.java b/test/hotspot/jtreg/testlibrary_tests/ir_framework/examples/GCBarrierIRExample.java new file mode 100644 index 0000000000000..5d714c513f14e --- /dev/null +++ b/test/hotspot/jtreg/testlibrary_tests/ir_framework/examples/GCBarrierIRExample.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2024, 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 ir_framework.examples; + +import compiler.lib.ir_framework.*; +import java.lang.invoke.VarHandle; +import java.lang.invoke.MethodHandles; + +/** + * @test + * @bug 8330153 + * @summary Example test that illustrates the use of the IR test framework for + * verification of late-expanded GC barriers. + * @library /test/lib / + * @run driver ir_framework.examples.GCBarrierIRExample + */ + +public class GCBarrierIRExample { + + static class Outer { + Object f; + } + + static final VarHandle fVarHandle; + static { + MethodHandles.Lookup l = MethodHandles.lookup(); + try { + fVarHandle = l.findVarHandle(Outer.class, "f", Object.class); + } catch (Exception e) { + throw new Error(e); + } + } + static Outer o = new Outer(); + static Object oldVal = new Object(); + static Object newVal = new Object(); + + public static void main(String[] args) { + // These rules apply only to collectors that expand barriers at code + // emission, such as ZGC. Because the collector selection flags are not + // whitelisted (see IR framework's README.md file), the user (as opposed + // to jtreg) needs to set these flags here. + TestFramework.runWithFlags("-XX:+UseZGC", "-XX:+ZGenerational"); + } + + @Test + // IR rules can be used to verify collector-specific barrier info (in this + // case, that a ZGC barrier corresponds to a strong OOP reference). Barrier + // info can only be verified after matching, e.g. at the FINAL_CODE phase. + @IR(counts = {IRNode.Z_COMPARE_AND_SWAP_P_WITH_BARRIER_FLAG, "strong", "1"}, + phase = CompilePhase.FINAL_CODE) + static boolean testBarrierOfCompareAndSwap() { + return fVarHandle.compareAndSet(o, oldVal, newVal); + } +} From 550a1386222462cca10f79a66453d2f08431dfdf Mon Sep 17 00:00:00 2001 From: Nizar Benalla <nizar.benalla@oracle.com> Date: Tue, 23 Apr 2024 05:54:50 +0000 Subject: [PATCH 050/141] 8306928: Duplicate variable assignement in jdk.internal.net.http.AuthenticationFilter#getCredentials Reviewed-by: clanger, jpai --- .../classes/jdk/internal/net/http/AuthenticationFilter.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/AuthenticationFilter.java b/src/java.net.http/share/classes/jdk/internal/net/http/AuthenticationFilter.java index 6e6182a1fb2a2..81acd83c423a7 100644 --- a/src/java.net.http/share/classes/jdk/internal/net/http/AuthenticationFilter.java +++ b/src/java.net.http/share/classes/jdk/internal/net/http/AuthenticationFilter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, 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 @@ -89,7 +89,6 @@ private PasswordAuthentication getCredentials(String header, InetSocketAddress proxyAddress; if (proxy && (proxyAddress = req.proxy()) != null) { // request sent to server through proxy - proxyAddress = req.proxy(); host = proxyAddress.getHostString(); port = proxyAddress.getPort(); protocol = "http"; // we don't support https connection to proxy From 574ba1400e015bf579190828fbdf0618eed48bdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Casta=C3=B1eda=20Lozano?= <rcastanedalo@openjdk.org> Date: Tue, 23 Apr 2024 06:52:58 +0000 Subject: [PATCH 051/141] 8330862: GCBarrierIRExample fails when a different GC is selected via the command line Reviewed-by: thartmann, dholmes, stefank --- .../ir_framework/examples/GCBarrierIRExample.java | 1 + 1 file changed, 1 insertion(+) diff --git a/test/hotspot/jtreg/testlibrary_tests/ir_framework/examples/GCBarrierIRExample.java b/test/hotspot/jtreg/testlibrary_tests/ir_framework/examples/GCBarrierIRExample.java index 5d714c513f14e..e0287fc39fe0a 100644 --- a/test/hotspot/jtreg/testlibrary_tests/ir_framework/examples/GCBarrierIRExample.java +++ b/test/hotspot/jtreg/testlibrary_tests/ir_framework/examples/GCBarrierIRExample.java @@ -33,6 +33,7 @@ * @summary Example test that illustrates the use of the IR test framework for * verification of late-expanded GC barriers. * @library /test/lib / + * @requires vm.gc.ZGenerational * @run driver ir_framework.examples.GCBarrierIRExample */ From 896107705615a3b9363b7a0a3e6703b20fedef70 Mon Sep 17 00:00:00 2001 From: Nizar Benalla <nizar.benalla@oracle.com> Date: Tue, 23 Apr 2024 07:18:52 +0000 Subject: [PATCH 052/141] 8309259: Reduce calls to MethodHandles.lookup() in jdk.internal.net.http.Stream Reviewed-by: pminborg, jpai --- .../share/classes/jdk/internal/net/http/Stream.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java b/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java index c4a7abe2816a5..1bb520a6fb13b 100644 --- a/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java +++ b/src/java.net.http/share/classes/jdk/internal/net/http/Stream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, 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 @@ -1724,9 +1724,10 @@ protected void unregister() { private static final VarHandle DEREGISTERED; static { try { - STREAM_STATE = MethodHandles.lookup() + MethodHandles.Lookup lookup = MethodHandles.lookup(); + STREAM_STATE = lookup .findVarHandle(Stream.class, "streamState", int.class); - DEREGISTERED = MethodHandles.lookup() + DEREGISTERED = lookup .findVarHandle(Stream.class, "deRegistered", boolean.class); } catch (Exception x) { throw new ExceptionInInitializerError(x); From daa5a4bd124d539daa3c67a3e29dcd0eee20c44d Mon Sep 17 00:00:00 2001 From: Claes Redestad <redestad@openjdk.org> Date: Tue, 23 Apr 2024 08:00:07 +0000 Subject: [PATCH 053/141] 8330802: Desugar switch in Locale::createLocale Reviewed-by: alanb, liach, rriggs, naoto, mchung --- src/java.base/share/classes/java/util/Locale.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/java.base/share/classes/java/util/Locale.java b/src/java.base/share/classes/java/util/Locale.java index bcdf32d6f8bcb..0f8474ec12d48 100644 --- a/src/java.base/share/classes/java/util/Locale.java +++ b/src/java.base/share/classes/java/util/Locale.java @@ -995,11 +995,11 @@ static Locale getInstance(BaseLocale baseloc, LocaleExtensions extensions) { private static final ReferencedKeyMap<Object, Locale> LOCALE_CACHE = ReferencedKeyMap.create(true, ConcurrentHashMap::new); private static Locale createLocale(Object key) { - return switch (key) { - case BaseLocale base -> new Locale(base, null); - case LocaleKey lk -> new Locale(lk.base, lk.exts); - default -> throw new InternalError("should not happen"); - }; + if (key instanceof BaseLocale base) { + return new Locale(base, null); + } + LocaleKey lk = (LocaleKey)key; + return new Locale(lk.base, lk.exts); } private static final class LocaleKey { From 281f9bdeb9d6870346b12e6c62a58f7984b1b133 Mon Sep 17 00:00:00 2001 From: Feilong Jiang <fjiang@openjdk.org> Date: Tue, 23 Apr 2024 08:00:18 +0000 Subject: [PATCH 054/141] 8330735: RISC-V: No need to move sp to tmp register in set_last_Java_frame Reviewed-by: fyang --- src/hotspot/cpu/riscv/macroAssembler_riscv.cpp | 16 ++++++---------- src/hotspot/cpu/riscv/macroAssembler_riscv.hpp | 2 +- src/hotspot/cpu/riscv/stubGenerator_riscv.cpp | 2 +- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp index 1b5a3cf571f96..1cd7ac98b3490 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.cpp @@ -228,20 +228,16 @@ void MacroAssembler::check_and_handle_popframe(Register java_thread) {} // has to be reset to 0. This is required to allow proper stack traversal. void MacroAssembler::set_last_Java_frame(Register last_java_sp, Register last_java_fp, - Register last_java_pc, - Register tmp) { + Register last_java_pc) { if (last_java_pc->is_valid()) { - sd(last_java_pc, Address(xthread, - JavaThread::frame_anchor_offset() + - JavaFrameAnchor::last_Java_pc_offset())); + sd(last_java_pc, Address(xthread, + JavaThread::frame_anchor_offset() + + JavaFrameAnchor::last_Java_pc_offset())); } // determine last_java_sp register - if (last_java_sp == sp) { - mv(tmp, sp); - last_java_sp = tmp; - } else if (!last_java_sp->is_valid()) { + if (!last_java_sp->is_valid()) { last_java_sp = esp; } @@ -262,7 +258,7 @@ void MacroAssembler::set_last_Java_frame(Register last_java_sp, la(tmp, last_java_pc); sd(tmp, Address(xthread, JavaThread::frame_anchor_offset() + JavaFrameAnchor::last_Java_pc_offset())); - set_last_Java_frame(last_java_sp, last_java_fp, noreg, tmp); + set_last_Java_frame(last_java_sp, last_java_fp, noreg); } void MacroAssembler::set_last_Java_frame(Register last_java_sp, diff --git a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp index 1abf156070786..a46f3d5779e09 100644 --- a/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp +++ b/src/hotspot/cpu/riscv/macroAssembler_riscv.hpp @@ -146,7 +146,7 @@ class MacroAssembler: public Assembler { // last Java Frame (fills frame anchor) void set_last_Java_frame(Register last_java_sp, Register last_java_fp, address last_java_pc, Register tmp); void set_last_Java_frame(Register last_java_sp, Register last_java_fp, Label &last_java_pc, Register tmp); - void set_last_Java_frame(Register last_java_sp, Register last_java_fp, Register last_java_pc, Register tmp); + void set_last_Java_frame(Register last_java_sp, Register last_java_fp, Register last_java_pc); // thread in the default location (xthread) void reset_last_Java_frame(bool clear_fp); diff --git a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp index a4a92047eaefc..9712f8c326c02 100644 --- a/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp +++ b/src/hotspot/cpu/riscv/stubGenerator_riscv.cpp @@ -2434,7 +2434,7 @@ class StubGenerator: public StubCodeGenerator { __ membar(__ LoadLoad); } - __ set_last_Java_frame(sp, fp, ra, t0); + __ set_last_Java_frame(sp, fp, ra); __ enter(); __ add(t1, sp, wordSize); From 1a6da3d5f0ac57e173340a117a9368c190a34e8b Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang <ayang@openjdk.org> Date: Tue, 23 Apr 2024 11:05:23 +0000 Subject: [PATCH 055/141] 8330822: Remove ModRefBarrierSet::write_ref_array_work Reviewed-by: gli, tschatzl --- src/hotspot/share/gc/g1/g1BarrierSet.hpp | 2 -- src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp | 4 ---- src/hotspot/share/gc/shared/cardTableBarrierSet.cpp | 4 ---- src/hotspot/share/gc/shared/cardTableBarrierSet.hpp | 2 -- src/hotspot/share/gc/shared/modRefBarrierSet.hpp | 3 --- src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp | 2 +- 6 files changed, 1 insertion(+), 16 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.hpp b/src/hotspot/share/gc/g1/g1BarrierSet.hpp index c2f5b9dc06846..6984fcc4953ab 100644 --- a/src/hotspot/share/gc/g1/g1BarrierSet.hpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.hpp @@ -74,8 +74,6 @@ class G1BarrierSet: public CardTableBarrierSet { inline void write_region(MemRegion mr); void write_region(JavaThread* thread, MemRegion mr); - inline void write_ref_array_work(MemRegion mr); - template <DecoratorSet decorators, typename T> void write_ref_field_post(T* field); void write_ref_field_post_slow(volatile CardValue* byte); diff --git a/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp b/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp index 19901a76ae843..2fcbd5a173130 100644 --- a/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp +++ b/src/hotspot/share/gc/g1/g1BarrierSet.inline.hpp @@ -72,10 +72,6 @@ inline void G1BarrierSet::write_region(MemRegion mr) { write_region(JavaThread::current(), mr); } -inline void G1BarrierSet::write_ref_array_work(MemRegion mr) { - write_region(mr); -} - template <DecoratorSet decorators, typename T> inline void G1BarrierSet::write_ref_field_post(T* field) { volatile CardValue* byte = _card_table->byte_for(field); diff --git a/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp b/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp index d7a84b1ca56d2..1d4c4775b33f7 100644 --- a/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp +++ b/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp @@ -80,10 +80,6 @@ CardTableBarrierSet::~CardTableBarrierSet() { delete _card_table; } -void CardTableBarrierSet::write_ref_array_work(MemRegion mr) { - _card_table->dirty_MemRegion(mr); -} - void CardTableBarrierSet::write_region(MemRegion mr) { _card_table->dirty_MemRegion(mr); } diff --git a/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp b/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp index b52cfef9a5993..f21b99d3c8def 100644 --- a/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp +++ b/src/hotspot/share/gc/shared/cardTableBarrierSet.hpp @@ -70,8 +70,6 @@ class CardTableBarrierSet: public ModRefBarrierSet { write_region(mr); } - void write_ref_array_work(MemRegion mr); - public: // Record a reference update. Note that these versions are precise! // The scanning code has to handle the fact that the write barrier may be diff --git a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp b/src/hotspot/share/gc/shared/modRefBarrierSet.hpp index 8355e8fc50f96..fb66c2fa0110b 100644 --- a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp +++ b/src/hotspot/share/gc/shared/modRefBarrierSet.hpp @@ -68,9 +68,6 @@ class ModRefBarrierSet: public BarrierSet { // at the address "start", which may not necessarily be HeapWord-aligned inline void write_ref_array(HeapWord* start, size_t count); - protected: - virtual void write_ref_array_work(MemRegion mr) = 0; - public: // The ModRef abstraction introduces pre and post barriers template <DecoratorSet decorators, typename BarrierSetT> diff --git a/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp b/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp index 45422167eadc5..fab8ba5766967 100644 --- a/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp +++ b/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp @@ -54,7 +54,7 @@ void ModRefBarrierSet::write_ref_array(HeapWord* start, size_t count) { // If compressed oops were not being used, these should already be aligned assert(UseCompressedOops || (aligned_start == start && aligned_end == end), "Expected heap word alignment of start and end"); - write_ref_array_work(MemRegion(aligned_start, aligned_end)); + write_region(MemRegion(aligned_start, aligned_end)); } template <DecoratorSet decorators, typename BarrierSetT> From d9d926d6699b7b2e1fcce206cbe03e1de661c2ac Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang <ayang@openjdk.org> Date: Tue, 23 Apr 2024 11:05:35 +0000 Subject: [PATCH 056/141] 8330145: Serial: Refactor SerialHeap::scan_evacuated_objs Reviewed-by: gli, tschatzl --- src/hotspot/share/gc/serial/cardTableRS.cpp | 5 +-- src/hotspot/share/gc/serial/cardTableRS.hpp | 2 +- .../share/gc/serial/defNewGeneration.cpp | 23 +--------- .../share/gc/serial/defNewGeneration.hpp | 15 ------- .../gc/serial/defNewGeneration.inline.hpp | 43 ------------------- src/hotspot/share/gc/serial/generation.hpp | 26 ----------- src/hotspot/share/gc/serial/serialFullGC.cpp | 4 -- src/hotspot/share/gc/serial/serialHeap.cpp | 33 ++++++++++---- src/hotspot/share/gc/serial/serialHeap.hpp | 7 +-- .../share/gc/serial/serialHeap.inline.hpp | 1 - .../share/gc/serial/tenuredGeneration.cpp | 12 +----- .../share/gc/serial/tenuredGeneration.hpp | 11 +---- .../gc/serial/tenuredGeneration.inline.hpp | 6 --- 13 files changed, 34 insertions(+), 154 deletions(-) delete mode 100644 src/hotspot/share/gc/serial/defNewGeneration.inline.hpp diff --git a/src/hotspot/share/gc/serial/cardTableRS.cpp b/src/hotspot/share/gc/serial/cardTableRS.cpp index 71492a8468dee..2ed384f124fd7 100644 --- a/src/hotspot/share/gc/serial/cardTableRS.cpp +++ b/src/hotspot/share/gc/serial/cardTableRS.cpp @@ -31,12 +31,11 @@ #include "memory/iterator.inline.hpp" #include "utilities/align.hpp" -void CardTableRS::scan_old_to_young_refs(TenuredGeneration* tg, HeapWord* saved_mark_word) { +void CardTableRS::scan_old_to_young_refs(TenuredGeneration* tg, HeapWord* saved_top) { const MemRegion ur = tg->used_region(); - const MemRegion urasm = MemRegion(tg->space()->bottom(), saved_mark_word); + const MemRegion urasm = MemRegion(tg->space()->bottom(), saved_top); assert(ur.contains(urasm), - "Did you forget to call save_marks()? " "[" PTR_FORMAT ", " PTR_FORMAT ") is not contained in " "[" PTR_FORMAT ", " PTR_FORMAT ")", p2i(urasm.start()), p2i(urasm.end()), p2i(ur.start()), p2i(ur.end())); diff --git a/src/hotspot/share/gc/serial/cardTableRS.hpp b/src/hotspot/share/gc/serial/cardTableRS.hpp index c12cd906482bd..ee4ac31bf5f5e 100644 --- a/src/hotspot/share/gc/serial/cardTableRS.hpp +++ b/src/hotspot/share/gc/serial/cardTableRS.hpp @@ -60,7 +60,7 @@ class CardTableRS : public CardTable { public: CardTableRS(MemRegion whole_heap); - void scan_old_to_young_refs(TenuredGeneration* tg, HeapWord* saved_mark_word); + void scan_old_to_young_refs(TenuredGeneration* tg, HeapWord* saved_top); void inline_write_ref_field_gc(void* field) { CardValue* byte = byte_for(field); diff --git a/src/hotspot/share/gc/serial/defNewGeneration.cpp b/src/hotspot/share/gc/serial/defNewGeneration.cpp index 008ea957b9e79..b0641c7d69f6e 100644 --- a/src/hotspot/share/gc/serial/defNewGeneration.cpp +++ b/src/hotspot/share/gc/serial/defNewGeneration.cpp @@ -24,7 +24,6 @@ #include "precompiled.hpp" #include "gc/serial/cardTableRS.hpp" -#include "gc/serial/defNewGeneration.inline.hpp" #include "gc/serial/serialGcRefProcProxyTask.hpp" #include "gc/serial/serialHeap.inline.hpp" #include "gc/serial/serialStringDedup.inline.hpp" @@ -678,9 +677,6 @@ void DefNewGeneration::collect(bool full, // The preserved marks should be empty at the start of the GC. _preserved_marks_set.init(1); - assert(heap->no_allocs_since_save_marks(), - "save marks have not been newly set."); - YoungGenScanClosure young_gen_cl(this); OldGenScanClosure old_gen_cl(this); @@ -688,9 +684,6 @@ void DefNewGeneration::collect(bool full, &young_gen_cl, &old_gen_cl); - assert(heap->no_allocs_since_save_marks(), - "save marks have not been newly set."); - { StrongRootsScope srs(0); RootScanClosure root_cl{this}; @@ -700,13 +693,14 @@ void DefNewGeneration::collect(bool full, NMethodToOopClosure::FixRelocations, false /* keepalive_nmethods */); + HeapWord* saved_top_in_old_gen = _old_gen->space()->top(); heap->process_roots(SerialHeap::SO_ScavengeCodeCache, &root_cl, &cld_cl, &cld_cl, &code_cl); - _old_gen->scan_old_to_young_refs(); + _old_gen->scan_old_to_young_refs(saved_top_in_old_gen); } // "evacuate followers". @@ -723,16 +717,12 @@ void DefNewGeneration::collect(bool full, _gc_tracer->report_tenuring_threshold(tenuring_threshold()); pt.print_all_references(); } - assert(heap->no_allocs_since_save_marks(), "save marks have not been newly set."); { AdjustWeakRootClosure cl{this}; WeakProcessor::weak_oops_do(&is_alive, &cl); } - // Verify that the usage of keep_alive didn't copy any objects. - assert(heap->no_allocs_since_save_marks(), "save marks have not been newly set."); - _string_dedup_requests.flush(); if (!_promotion_failed) { @@ -892,15 +882,6 @@ void DefNewGeneration::drain_promo_failure_scan_stack() { } } -void DefNewGeneration::save_marks() { - set_saved_mark_word(); -} - - -bool DefNewGeneration::no_allocs_since_save_marks() { - return saved_mark_at_top(); -} - void DefNewGeneration::contribute_scratch(void*& scratch, size_t& num_words) { if (_promotion_failed) { return; diff --git a/src/hotspot/share/gc/serial/defNewGeneration.hpp b/src/hotspot/share/gc/serial/defNewGeneration.hpp index bdcb34b6389e4..0418d6e459fab 100644 --- a/src/hotspot/share/gc/serial/defNewGeneration.hpp +++ b/src/hotspot/share/gc/serial/defNewGeneration.hpp @@ -171,10 +171,6 @@ class DefNewGeneration: public Generation { ContiguousSpace* from() const { return _from_space; } ContiguousSpace* to() const { return _to_space; } - HeapWord* saved_mark_word() const { return _saved_mark_word; } - void set_saved_mark_word() { _saved_mark_word = to()->top(); } - bool saved_mark_at_top() { return _saved_mark_word == _to_space->top(); } - // Space enquiries size_t capacity() const; size_t used() const; @@ -243,17 +239,6 @@ class DefNewGeneration: public Generation { // Save the tops for eden, from, and to void record_spaces_top(); - // Accessing marks - void save_marks(); - - bool no_allocs_since_save_marks(); - - // Need to declare the full complement of closures, whether we'll - // override them or not, or get message from the compiler: - // oop_since_save_marks_iterate_nv hides virtual function... - template <typename OopClosureType> - void oop_since_save_marks_iterate(OopClosureType* cl); - // For Old collection (part of running Full GC), the DefNewGeneration can // contribute the free part of "to-space" as the scratch space. void contribute_scratch(void*& scratch, size_t& num_words); diff --git a/src/hotspot/share/gc/serial/defNewGeneration.inline.hpp b/src/hotspot/share/gc/serial/defNewGeneration.inline.hpp deleted file mode 100644 index 3b129ade49986..0000000000000 --- a/src/hotspot/share/gc/serial/defNewGeneration.inline.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2001, 2024, 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. - * - */ - -#ifndef SHARE_GC_SERIAL_DEFNEWGENERATION_INLINE_HPP -#define SHARE_GC_SERIAL_DEFNEWGENERATION_INLINE_HPP - -#include "gc/serial/defNewGeneration.hpp" - -#include "gc/serial/cardTableRS.hpp" -#include "gc/shared/space.inline.hpp" -#include "oops/access.inline.hpp" -#include "utilities/devirtualizer.inline.hpp" - -// Methods of protected closure types - -template <typename OopClosureType> -void DefNewGeneration::oop_since_save_marks_iterate(OopClosureType* cl) { - Generation::oop_since_save_marks_iterate_impl(cl, to(), _saved_mark_word); - set_saved_mark_word(); -} - -#endif // SHARE_GC_SERIAL_DEFNEWGENERATION_INLINE_HPP diff --git a/src/hotspot/share/gc/serial/generation.hpp b/src/hotspot/share/gc/serial/generation.hpp index 800abc2e3c428..70978f358797a 100644 --- a/src/hotspot/share/gc/serial/generation.hpp +++ b/src/hotspot/share/gc/serial/generation.hpp @@ -200,32 +200,6 @@ class Generation: public CHeapObj<mtGC> { void set_gc_manager(GCMemoryManager* gc_manager) { _gc_manager = gc_manager; } - - // Apply "blk->do_oop" to the addresses of all reference fields in objects - // starting with the _saved_mark_word, which was noted during a generation's - // save_marks and is required to denote the head of an object. - // Fields in objects allocated by applications of the closure - // *are* included in the iteration. - // Updates saved_mark_word to point to just after the last object iterated over. - template <typename OopClosureType> - void oop_since_save_marks_iterate_impl(OopClosureType* blk, ContiguousSpace* space, HeapWord* saved_mark_word); }; -template <typename OopClosureType> -void Generation::oop_since_save_marks_iterate_impl(OopClosureType* blk, ContiguousSpace* space, HeapWord* saved_mark_word) { - HeapWord* t; - HeapWord* p = saved_mark_word; - assert(p != nullptr, "expected saved mark"); - - const intx interval = PrefetchScanIntervalInBytes; - do { - t = space->top(); - while (p < t) { - Prefetch::write(p, interval); - oop m = cast_to_oop(p); - p += m->oop_iterate_size(blk); - } - } while (t < space->top()); -} - #endif // SHARE_GC_SERIAL_GENERATION_HPP diff --git a/src/hotspot/share/gc/serial/serialFullGC.cpp b/src/hotspot/share/gc/serial/serialFullGC.cpp index 296874abcd023..88284fd63c054 100644 --- a/src/hotspot/share/gc/serial/serialFullGC.cpp +++ b/src/hotspot/share/gc/serial/serialFullGC.cpp @@ -748,10 +748,6 @@ void SerialFullGC::invoke_at_safepoint(bool clear_all_softrefs) { restore_marks(); - // Set saved marks for allocation profiler (and other things? -- dld) - // (Should this be in general part?) - gch->save_marks(); - deallocate_stacks(); SerialFullGC::_string_dedup_requests->flush(); diff --git a/src/hotspot/share/gc/serial/serialHeap.cpp b/src/hotspot/share/gc/serial/serialHeap.cpp index 84d941fbdb764..44fedd3f94063 100644 --- a/src/hotspot/share/gc/serial/serialHeap.cpp +++ b/src/hotspot/share/gc/serial/serialHeap.cpp @@ -30,7 +30,6 @@ #include "code/codeCache.hpp" #include "compiler/oopMap.hpp" #include "gc/serial/cardTableRS.hpp" -#include "gc/serial/defNewGeneration.inline.hpp" #include "gc/serial/serialFullGC.hpp" #include "gc/serial/serialHeap.inline.hpp" #include "gc/serial/serialMemoryPools.hpp" @@ -757,17 +756,33 @@ void SerialHeap::process_roots(ScanningOption so, } } -bool SerialHeap::no_allocs_since_save_marks() { - return _young_gen->no_allocs_since_save_marks() && - _old_gen->no_allocs_since_save_marks(); +template <typename OopClosureType> +static void oop_iterate_from(OopClosureType* blk, ContiguousSpace* space, HeapWord** from) { + assert(*from != nullptr, "precondition"); + HeapWord* t; + HeapWord* p = *from; + + const intx interval = PrefetchScanIntervalInBytes; + do { + t = space->top(); + while (p < t) { + Prefetch::write(p, interval); + p += cast_to_oop(p)->oop_iterate_size(blk); + } + } while (t < space->top()); + + *from = space->top(); } void SerialHeap::scan_evacuated_objs(YoungGenScanClosure* young_cl, OldGenScanClosure* old_cl) { + ContiguousSpace* to_space = young_gen()->to(); do { - young_gen()->oop_since_save_marks_iterate(young_cl); - old_gen()->oop_since_save_marks_iterate(old_cl); - } while (!no_allocs_since_save_marks()); + oop_iterate_from(young_cl, to_space, &_young_gen_saved_top); + oop_iterate_from(old_cl, old_gen()->space(), &_old_gen_saved_top); + // Recheck to-space only, because postcondition of oop_iterate_from is no + // unscanned objs + } while (_young_gen_saved_top != to_space->top()); guarantee(young_gen()->promo_failure_scan_is_complete(), "Failed to finish scan"); } @@ -934,8 +949,8 @@ bool SerialHeap::is_maximal_no_gc() const { } void SerialHeap::save_marks() { - _young_gen->save_marks(); - _old_gen->save_marks(); + _young_gen_saved_top = _young_gen->to()->top(); + _old_gen_saved_top = _old_gen->space()->top(); } void SerialHeap::verify(VerifyOption option /* ignored */) { diff --git a/src/hotspot/share/gc/serial/serialHeap.hpp b/src/hotspot/share/gc/serial/serialHeap.hpp index d13b8706c22e2..4a88412ced680 100644 --- a/src/hotspot/share/gc/serial/serialHeap.hpp +++ b/src/hotspot/share/gc/serial/serialHeap.hpp @@ -85,7 +85,8 @@ class SerialHeap : public CollectedHeap { private: DefNewGeneration* _young_gen; TenuredGeneration* _old_gen; - + HeapWord* _young_gen_saved_top; + HeapWord* _old_gen_saved_top; private: // The singleton CardTable Remembered Set. CardTableRS* _rem_set; @@ -279,10 +280,6 @@ class SerialHeap : public CollectedHeap { // in other generations, it should call this method. void save_marks(); - // Returns "true" iff no allocations have occurred since the last - // call to "save_marks". - bool no_allocs_since_save_marks(); - // Returns true if an incremental collection is likely to fail. // We optionally consult the young gen, if asked to do so; // otherwise we base our answer on whether the previous incremental diff --git a/src/hotspot/share/gc/serial/serialHeap.inline.hpp b/src/hotspot/share/gc/serial/serialHeap.inline.hpp index 750c0e9c31134..3279f24881e54 100644 --- a/src/hotspot/share/gc/serial/serialHeap.inline.hpp +++ b/src/hotspot/share/gc/serial/serialHeap.inline.hpp @@ -27,7 +27,6 @@ #include "gc/serial/serialHeap.hpp" -#include "gc/serial/defNewGeneration.inline.hpp" #include "gc/serial/tenuredGeneration.inline.hpp" class ScavengeHelper { diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index a86450249a784..3e9dde0942d88 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -280,8 +280,8 @@ HeapWord* TenuredGeneration::block_start(const void* addr) const { } } -void TenuredGeneration::scan_old_to_young_refs() { - _rs->scan_old_to_young_refs(this, saved_mark_word()); +void TenuredGeneration::scan_old_to_young_refs(HeapWord* saved_top_in_old_gen) { + _rs->scan_old_to_young_refs(this, saved_top_in_old_gen); } TenuredGeneration::TenuredGeneration(ReservedSpace rs, @@ -504,14 +504,6 @@ void TenuredGeneration::complete_loaded_archive_space(MemRegion archive_space) { } } -void TenuredGeneration::save_marks() { - set_saved_mark_word(); -} - -bool TenuredGeneration::no_allocs_since_save_marks() { - return saved_mark_at_top(); -} - void TenuredGeneration::gc_epilogue() { // update the generation and space performance counters update_counters(); diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.hpp index dce6609a19b47..bb34ad8d2c282 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.hpp @@ -90,8 +90,6 @@ class TenuredGeneration: public Generation { TenuredSpace* space() const { return _the_space; } HeapWord* saved_mark_word() const { return _saved_mark_word; } - void set_saved_mark_word() { _saved_mark_word = _the_space->top(); } - bool saved_mark_at_top() { return _saved_mark_word == space()->top(); } // Grow generation with specified size (returns false if unable to grow) bool grow_by(size_t bytes); @@ -114,7 +112,7 @@ class TenuredGeneration: public Generation { HeapWord* block_start(const void* addr) const; - void scan_old_to_young_refs(); + void scan_old_to_young_refs(HeapWord* saved_top_in_old_gen); bool is_in(const void* p) const; @@ -139,13 +137,6 @@ class TenuredGeneration: public Generation { virtual inline HeapWord* allocate(size_t word_size, bool is_tlab); virtual inline HeapWord* par_allocate(size_t word_size, bool is_tlab); - template <typename OopClosureType> - void oop_since_save_marks_iterate(OopClosureType* cl); - - void save_marks(); - - bool no_allocs_since_save_marks(); - virtual void collect(bool full, bool clear_all_soft_refs, size_t size, diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp index 62bd523d2d9ed..253a72d3c28f4 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp @@ -61,10 +61,4 @@ HeapWord* TenuredGeneration::par_allocate(size_t word_size, return _the_space->par_allocate(word_size); } -template <typename OopClosureType> -void TenuredGeneration::oop_since_save_marks_iterate(OopClosureType* blk) { - Generation::oop_since_save_marks_iterate_impl(blk, _the_space, _saved_mark_word); - set_saved_mark_word(); -} - #endif // SHARE_GC_SERIAL_TENUREDGENERATION_INLINE_HPP From 3bd6982ec3dd48970450cc0da9c25d755924f449 Mon Sep 17 00:00:00 2001 From: Adam Sotona <asotona@openjdk.org> Date: Tue, 23 Apr 2024 11:07:58 +0000 Subject: [PATCH 057/141] 8326150: Typo in the documentation for jdk.jshell Reviewed-by: jlahoda --- src/jdk.jshell/share/classes/module-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jdk.jshell/share/classes/module-info.java b/src/jdk.jshell/share/classes/module-info.java index fa44d2996f101..9266fd0fed55e 100644 --- a/src/jdk.jshell/share/classes/module-info.java +++ b/src/jdk.jshell/share/classes/module-info.java @@ -35,7 +35,7 @@ * and programmatically launching the existing Java shell tool. * <p> * The {@link jdk.jshell} is the package for creating 'snippet' evaluating tools. - * Generally, this is only package that would be needed for creating tools. + * Generally, this is the only package that would be needed for creating tools. * </p> * <p> * The {@link jdk.jshell.spi} package specifies a Service Provider Interface (SPI) From fcb4a8ba26fe1de596331b0a2f89c5c7c24e7f9e Mon Sep 17 00:00:00 2001 From: Coleen Phillimore <coleenp@openjdk.org> Date: Tue, 23 Apr 2024 11:31:11 +0000 Subject: [PATCH 058/141] 8330578: The VM creates instance of abstract class VirtualMachineError Reviewed-by: iklam, dlong, jwaters, dholmes --- src/hotspot/share/cds/heapShared.cpp | 2 +- src/hotspot/share/classfile/systemDictionary.cpp | 4 ++-- src/hotspot/share/classfile/verifier.cpp | 4 ++-- src/hotspot/share/memory/universe.cpp | 16 ++++++++-------- src/hotspot/share/memory/universe.hpp | 4 ++-- src/hotspot/share/oops/instanceKlass.cpp | 1 + src/hotspot/share/oops/method.cpp | 2 +- 7 files changed, 17 insertions(+), 16 deletions(-) diff --git a/src/hotspot/share/cds/heapShared.cpp b/src/hotspot/share/cds/heapShared.cpp index a9dd5de9f4adf..202042e622e0b 100644 --- a/src/hotspot/share/cds/heapShared.cpp +++ b/src/hotspot/share/cds/heapShared.cpp @@ -1395,7 +1395,7 @@ void HeapShared::check_default_subgraph_classes() { name == vmSymbols::java_lang_String() || name == vmSymbols::java_lang_ArithmeticException() || name == vmSymbols::java_lang_NullPointerException() || - name == vmSymbols::java_lang_VirtualMachineError() || + name == vmSymbols::java_lang_InternalError() || name == vmSymbols::object_array_signature() || name == vmSymbols::byte_array_signature() || name == vmSymbols::char_array_signature(), diff --git a/src/hotspot/share/classfile/systemDictionary.cpp b/src/hotspot/share/classfile/systemDictionary.cpp index 71ede3d9e0071..3a6c372cc501d 100644 --- a/src/hotspot/share/classfile/systemDictionary.cpp +++ b/src/hotspot/share/classfile/systemDictionary.cpp @@ -2009,9 +2009,9 @@ Method* SystemDictionary::find_method_handle_intrinsic(vmIntrinsicID iid, } } - // Throw VirtualMachineError or the pending exception in the JavaThread + // Throw OOM or the pending exception in the JavaThread if (throw_error && !HAS_PENDING_EXCEPTION) { - THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(), + THROW_MSG_NULL(vmSymbols::java_lang_OutOfMemoryError(), "Out of space in CodeCache for method handle intrinsic"); } return nullptr; diff --git a/src/hotspot/share/classfile/verifier.cpp b/src/hotspot/share/classfile/verifier.cpp index 743bd9d06ba6c..a66fbf645f55f 100644 --- a/src/hotspot/share/classfile/verifier.cpp +++ b/src/hotspot/share/classfile/verifier.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, 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 @@ -255,7 +255,7 @@ bool Verifier::verify(InstanceKlass* klass, bool should_verify_class, TRAPS) { // or one of it's superclasses, we're in trouble and are going // to infinitely recurse when we try to initialize the exception. // So bail out here by throwing the preallocated VM error. - THROW_OOP_(Universe::virtual_machine_error_instance(), false); + THROW_OOP_(Universe::internal_error_instance(), false); } kls = kls->super(); } diff --git a/src/hotspot/share/memory/universe.cpp b/src/hotspot/share/memory/universe.cpp index 237eac5017cb2..e640482aa04da 100644 --- a/src/hotspot/share/memory/universe.cpp +++ b/src/hotspot/share/memory/universe.cpp @@ -229,7 +229,7 @@ class BuiltinException { static BuiltinException _null_ptr_exception; static BuiltinException _arithmetic_exception; -static BuiltinException _virtual_machine_error; +static BuiltinException _internal_error; objArrayOop Universe::the_empty_class_array () { return (objArrayOop)_the_empty_class_array.resolve(); @@ -246,7 +246,7 @@ oop Universe::the_min_jint_string() { return _the_min_jint_string. oop Universe::null_ptr_exception_instance() { return _null_ptr_exception.instance(); } oop Universe::arithmetic_exception_instance() { return _arithmetic_exception.instance(); } -oop Universe::virtual_machine_error_instance() { return _virtual_machine_error.instance(); } +oop Universe::internal_error_instance() { return _internal_error.instance(); } oop Universe::the_null_sentinel() { return _the_null_sentinel.resolve(); } @@ -302,7 +302,7 @@ void Universe::set_archived_basic_type_mirror_index(BasicType t, int index) { void Universe::archive_exception_instances() { _null_ptr_exception.store_in_cds(); _arithmetic_exception.store_in_cds(); - _virtual_machine_error.store_in_cds(); + _internal_error.store_in_cds(); } void Universe::load_archived_object_instances() { @@ -318,7 +318,7 @@ void Universe::load_archived_object_instances() { _null_ptr_exception.load_from_cds(); _arithmetic_exception.load_from_cds(); - _virtual_machine_error.load_from_cds(); + _internal_error.load_from_cds(); } } #endif @@ -334,7 +334,7 @@ void Universe::serialize(SerializeClosure* f) { } _null_ptr_exception.serialize(f); _arithmetic_exception.serialize(f); - _virtual_machine_error.serialize(f); + _internal_error.serialize(f); #endif f->do_ptr(&_fillerArrayKlass); @@ -1092,13 +1092,13 @@ bool universe_post_init() { _arithmetic_exception.init_if_empty(vmSymbols::java_lang_ArithmeticException(), CHECK_false); // Virtual Machine Error for when we get into a situation we can't resolve - Klass* k = vmClasses::VirtualMachineError_klass(); + Klass* k = vmClasses::InternalError_klass(); bool linked = InstanceKlass::cast(k)->link_class_or_fail(CHECK_false); if (!linked) { - tty->print_cr("Unable to link/verify VirtualMachineError class"); + tty->print_cr("Unable to link/verify InternalError class"); return false; // initialization failed } - _virtual_machine_error.init_if_empty(vmSymbols::java_lang_VirtualMachineError(), CHECK_false); + _internal_error.init_if_empty(vmSymbols::java_lang_InternalError(), CHECK_false); Handle msg = java_lang_String::create_from_str("/ by zero", CHECK_false); java_lang_Throwable::set_message(Universe::arithmetic_exception_instance(), msg()); diff --git a/src/hotspot/share/memory/universe.hpp b/src/hotspot/share/memory/universe.hpp index 09e00bb24a0b7..19acbdc09b21b 100644 --- a/src/hotspot/share/memory/universe.hpp +++ b/src/hotspot/share/memory/universe.hpp @@ -229,8 +229,8 @@ class Universe: AllStatic { static oop null_ptr_exception_instance(); static oop arithmetic_exception_instance(); - static oop virtual_machine_error_instance(); - static oop vm_exception() { return virtual_machine_error_instance(); } + static oop internal_error_instance(); + static oop vm_exception() { return internal_error_instance(); } static Array<Klass*>* the_array_interfaces_array() { return _the_array_interfaces_array; } static uintx the_array_interfaces_bitmap() { return _the_array_interfaces_bitmap; } diff --git a/src/hotspot/share/oops/instanceKlass.cpp b/src/hotspot/share/oops/instanceKlass.cpp index 0b5c975931026..0069f336e886b 100644 --- a/src/hotspot/share/oops/instanceKlass.cpp +++ b/src/hotspot/share/oops/instanceKlass.cpp @@ -1509,6 +1509,7 @@ instanceOop InstanceKlass::register_finalizer(instanceOop i, TRAPS) { } instanceOop InstanceKlass::allocate_instance(TRAPS) { + assert(!is_abstract() && !is_interface(), "Should not create this object"); size_t size = size_helper(); // Query before forming handle. return (instanceOop)Universe::heap()->obj_allocate(this, size, CHECK_NULL); } diff --git a/src/hotspot/share/oops/method.cpp b/src/hotspot/share/oops/method.cpp index d2e25feef4022..f5c35abb683a2 100644 --- a/src/hotspot/share/oops/method.cpp +++ b/src/hotspot/share/oops/method.cpp @@ -1276,7 +1276,7 @@ address Method::make_adapters(const methodHandle& mh, TRAPS) { // Java exception object. vm_exit_during_initialization("Out of space in CodeCache for adapters"); } else { - THROW_MSG_NULL(vmSymbols::java_lang_VirtualMachineError(), "Out of space in CodeCache for adapters"); + THROW_MSG_NULL(vmSymbols::java_lang_OutOfMemoryError(), "Out of space in CodeCache for adapters"); } } From a92ad03946d296510c8c2ac18278608e8032b3f3 Mon Sep 17 00:00:00 2001 From: Jaroslav Bachorik <jbachorik@openjdk.org> Date: Tue, 23 Apr 2024 12:14:57 +0000 Subject: [PATCH 059/141] 8329995: Restricted access to `/proc` can cause JFR initialization to crash Reviewed-by: dholmes, egahlin --- src/hotspot/os/linux/os_perf_linux.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/os/linux/os_perf_linux.cpp b/src/hotspot/os/linux/os_perf_linux.cpp index cca41a12ee199..87abbebe25faf 100644 --- a/src/hotspot/os/linux/os_perf_linux.cpp +++ b/src/hotspot/os/linux/os_perf_linux.cpp @@ -847,7 +847,7 @@ SystemProcessInterface::SystemProcesses::ProcessIterator::ProcessIterator() { bool SystemProcessInterface::SystemProcesses::ProcessIterator::initialize() { _dir = os::opendir("/proc"); _entry = nullptr; - _valid = true; + _valid = _dir != nullptr; // May be null if /proc is not accessible. next_process(); return true; From 6158da5e9569f4260bd6d968c940c9979583118a Mon Sep 17 00:00:00 2001 From: Oli Gillespie <ogillespie@openjdk.org> Date: Tue, 23 Apr 2024 12:37:36 +0000 Subject: [PATCH 060/141] 8330108: Increase CipherInputStream buffer size Reviewed-by: ascarpino, shade --- .../share/classes/javax/crypto/CipherInputStream.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/java.base/share/classes/javax/crypto/CipherInputStream.java b/src/java.base/share/classes/javax/crypto/CipherInputStream.java index d9b8c989b547b..546bdf0808db2 100644 --- a/src/java.base/share/classes/javax/crypto/CipherInputStream.java +++ b/src/java.base/share/classes/javax/crypto/CipherInputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, 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 @@ -84,8 +84,8 @@ public class CipherInputStream extends FilterInputStream { /* the buffer holding data that have been read in from the underlying stream, but have not been processed by the cipher - engine. the size 512 bytes is somewhat randomly chosen */ - private final byte[] ibuffer = new byte[512]; + engine. */ + private final byte[] ibuffer = new byte[8192]; // having reached the end of the underlying input stream private boolean done = false; From 3d5eeac3a38ece4a23ea6da2dfe5939d64e81cea Mon Sep 17 00:00:00 2001 From: Alexey Ivanov <aivanov@openjdk.org> Date: Tue, 23 Apr 2024 12:57:24 +0000 Subject: [PATCH 061/141] 8289770: Remove Windows version macro from ShellFolder2.cpp Reviewed-by: jwaters, tr, serb --- .../native/libawt/windows/ShellFolder2.cpp | 23 ++++--------------- 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/src/java.desktop/windows/native/libawt/windows/ShellFolder2.cpp b/src/java.desktop/windows/native/libawt/windows/ShellFolder2.cpp index b3f13a5bf8260..335281ad5d720 100644 --- a/src/java.desktop/windows/native/libawt/windows/ShellFolder2.cpp +++ b/src/java.desktop/windows/native/libawt/windows/ShellFolder2.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -119,17 +119,6 @@ static jstring lsSize; static jstring lsType; static jstring lsDate; -// Some macros from awt.h, because it is not included in release -#ifndef IS_WIN2000 -#define IS_WIN2000 (LOBYTE(LOWORD(::GetVersion())) >= 5) -#endif -#ifndef IS_WINXP -#define IS_WINXP ((IS_WIN2000 && HIBYTE(LOWORD(::GetVersion())) >= 1) || LOBYTE(LOWORD(::GetVersion())) > 5) -#endif -#ifndef IS_WINVISTA -#define IS_WINVISTA (!(::GetVersion() & 0x80000000) && LOBYTE(LOWORD(::GetVersion())) >= 6) -#endif - extern "C" { @@ -1090,12 +1079,10 @@ JNIEXPORT jintArray JNICALL Java_sun_awt_shell_Win32ShellFolder2_getIconBits // XP supports alpha in some icons, and depending on device. // This should take precedence over the icon mask bits. BOOL hasAlpha = FALSE; - if (IS_WINXP) { - for (int i = 0; i < nBits; i++) { - if ((colorBits[i] & 0xff000000) != 0) { - hasAlpha = TRUE; - break; - } + for (int i = 0; i < nBits; i++) { + if ((colorBits[i] & 0xff000000) != 0) { + hasAlpha = TRUE; + break; } } if (!hasAlpha) { From 2ea89268a1af501fef4c1505a487e9ef5d5bda87 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang <ayang@openjdk.org> Date: Tue, 23 Apr 2024 15:01:09 +0000 Subject: [PATCH 062/141] 8330961: Remove redundant public specifier in ModRefBarrierSet Reviewed-by: tschatzl --- src/hotspot/share/gc/shared/modRefBarrierSet.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp b/src/hotspot/share/gc/shared/modRefBarrierSet.hpp index fb66c2fa0110b..395ebbc3d1830 100644 --- a/src/hotspot/share/gc/shared/modRefBarrierSet.hpp +++ b/src/hotspot/share/gc/shared/modRefBarrierSet.hpp @@ -68,7 +68,6 @@ class ModRefBarrierSet: public BarrierSet { // at the address "start", which may not necessarily be HeapWord-aligned inline void write_ref_array(HeapWord* start, size_t count); - public: // The ModRef abstraction introduces pre and post barriers template <DecoratorSet decorators, typename BarrierSetT> class AccessBarrier: public BarrierSet::AccessBarrier<decorators, BarrierSetT> { From 383fe6eaab423a1218c9915362f691472e3773e7 Mon Sep 17 00:00:00 2001 From: Matias Saavedra Silva <matsaave@openjdk.org> Date: Tue, 23 Apr 2024 15:02:27 +0000 Subject: [PATCH 063/141] 8330388: Remove invokedynamic cache index encoding Reviewed-by: cjplummer, dlong, coleenp --- .../cpu/aarch64/interp_masm_aarch64.cpp | 5 -- src/hotspot/cpu/arm/interp_masm_arm.cpp | 5 -- src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp | 2 - src/hotspot/cpu/riscv/interp_masm_riscv.cpp | 7 --- src/hotspot/cpu/s390/interp_masm_s390.cpp | 6 -- src/hotspot/cpu/x86/interp_masm_x86.cpp | 5 -- src/hotspot/share/c1/c1_Runtime1.cpp | 3 +- src/hotspot/share/cds/classListParser.cpp | 2 +- src/hotspot/share/ci/ciEnv.cpp | 13 ++-- src/hotspot/share/ci/ciReplay.cpp | 1 - src/hotspot/share/ci/ciStreams.cpp | 7 +-- .../share/classfile/resolutionErrors.hpp | 3 +- .../share/interpreter/abstractInterpreter.cpp | 5 +- .../share/interpreter/bootstrapInfo.cpp | 2 +- .../share/interpreter/bootstrapInfo.hpp | 1 - src/hotspot/share/interpreter/bytecode.cpp | 2 +- .../share/interpreter/bytecodeTracer.cpp | 3 +- .../share/interpreter/interpreterRuntime.cpp | 2 +- .../share/interpreter/linkResolver.cpp | 5 +- src/hotspot/share/interpreter/rewriter.cpp | 5 +- .../interpreter/zero/bytecodeInterpreter.cpp | 2 +- src/hotspot/share/jvmci/jvmciCompilerToVM.cpp | 23 +++----- src/hotspot/share/jvmci/jvmciRuntime.cpp | 5 +- src/hotspot/share/oops/constantPool.cpp | 23 +++----- src/hotspot/share/oops/constantPool.hpp | 14 +---- .../share/oops/constantPool.inline.hpp | 2 +- src/hotspot/share/oops/cpCache.cpp | 6 +- .../prims/jvmtiClassFileReconstituter.cpp | 2 +- src/hotspot/share/prims/methodComparator.cpp | 7 +-- src/hotspot/share/prims/whitebox.cpp | 6 -- .../interpreter/BytecodeWithCPIndex.java | 11 +--- .../sun/jvm/hotspot/oops/ConstantPool.java | 12 ---- .../hotspot/tools/jcore/ByteCodeRewriter.java | 16 +++-- .../jdk/vm/ci/hotspot/CompilerToVM.java | 20 +++---- .../vm/ci/hotspot/HotSpotConstantPool.java | 59 ++++--------------- .../jdk/vm/ci/hotspot/CompilerToVMHelper.java | 4 +- .../compilerToVM/ConstantPoolTestsHelper.java | 2 +- 37 files changed, 88 insertions(+), 210 deletions(-) diff --git a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp index b5625b7fc6134..da38f1d12e70f 100644 --- a/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/interp_masm_aarch64.cpp @@ -190,11 +190,6 @@ void InterpreterMacroAssembler::get_cache_index_at_bcp(Register index, } else if (index_size == sizeof(u4)) { // assert(EnableInvokeDynamic, "giant index used only for JSR 292"); ldrw(index, Address(rbcp, bcp_offset)); - // Check if the secondary index definition is still ~x, otherwise - // we have to change the following assembler code to calculate the - // plain index. - assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); - eonw(index, index, zr); // convert to plain index } else if (index_size == sizeof(u1)) { load_unsigned_byte(index, Address(rbcp, bcp_offset)); } else { diff --git a/src/hotspot/cpu/arm/interp_masm_arm.cpp b/src/hotspot/cpu/arm/interp_masm_arm.cpp index 635acd781f9f1..ba161e360bee4 100644 --- a/src/hotspot/cpu/arm/interp_masm_arm.cpp +++ b/src/hotspot/cpu/arm/interp_masm_arm.cpp @@ -211,11 +211,6 @@ void InterpreterMacroAssembler::get_index_at_bcp(Register index, int bcp_offset, orr(index, tmp_reg, AsmOperand(index, lsl, BitsPerByte)); ldrb(tmp_reg, Address(Rbcp, bcp_offset)); orr(index, tmp_reg, AsmOperand(index, lsl, BitsPerByte)); - // Check if the secondary index definition is still ~x, otherwise - // we have to change the following assembler code to calculate the - // plain index. - assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); - mvn_32(index, index); // convert to plain index } else if (index_size == sizeof(u1)) { ldrb(index, Address(Rbcp, bcp_offset)); } else { diff --git a/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp b/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp index 94ef1b3c9d2be..cdb8a742dcdf8 100644 --- a/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp +++ b/src/hotspot/cpu/ppc/interp_masm_ppc_64.cpp @@ -444,8 +444,6 @@ void InterpreterMacroAssembler::get_cache_index_at_bcp(Register Rdst, int bcp_of } else { lwa(Rdst, bcp_offset, R14_bcp); } - assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); - nand(Rdst, Rdst, Rdst); // convert to plain index } else if (index_size == sizeof(u1)) { lbz(Rdst, bcp_offset, R14_bcp); } else { diff --git a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp index 497918e6c05c6..a770482b12189 100644 --- a/src/hotspot/cpu/riscv/interp_masm_riscv.cpp +++ b/src/hotspot/cpu/riscv/interp_masm_riscv.cpp @@ -216,13 +216,6 @@ void InterpreterMacroAssembler::get_cache_index_at_bcp(Register index, } } else if (index_size == sizeof(u4)) { load_int_misaligned(index, Address(xbcp, bcp_offset), tmp, false); - - // Check if the secondary index definition is still ~x, otherwise - // we have to change the following assembler code to calculate the - // plain index. - assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); - xori(index, index, -1); - sign_extend(index, index, 32); } else if (index_size == sizeof(u1)) { load_unsigned_byte(index, Address(xbcp, bcp_offset)); } else { diff --git a/src/hotspot/cpu/s390/interp_masm_s390.cpp b/src/hotspot/cpu/s390/interp_masm_s390.cpp index 9ee38c619f0b0..bc7996c270fa0 100644 --- a/src/hotspot/cpu/s390/interp_masm_s390.cpp +++ b/src/hotspot/cpu/s390/interp_masm_s390.cpp @@ -324,12 +324,6 @@ void InterpreterMacroAssembler::get_cache_index_at_bcp(Register index, int bcp_o } else if (index_size == sizeof(u4)) { load_sized_value(index, param, 4, false); - - // Check if the secondary index definition is still ~x, otherwise - // we have to change the following assembler code to calculate the - // plain index. - assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); - not_(index); // Convert to plain index. } else if (index_size == sizeof(u1)) { z_llgc(index, param); } else { diff --git a/src/hotspot/cpu/x86/interp_masm_x86.cpp b/src/hotspot/cpu/x86/interp_masm_x86.cpp index 33570f3155b15..4329b0b6411bb 100644 --- a/src/hotspot/cpu/x86/interp_masm_x86.cpp +++ b/src/hotspot/cpu/x86/interp_masm_x86.cpp @@ -463,11 +463,6 @@ void InterpreterMacroAssembler::get_cache_index_at_bcp(Register index, load_unsigned_short(index, Address(_bcp_register, bcp_offset)); } else if (index_size == sizeof(u4)) { movl(index, Address(_bcp_register, bcp_offset)); - // Check if the secondary index definition is still ~x, otherwise - // we have to change the following assembler code to calculate the - // plain index. - assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line"); - notl(index); // convert to plain index } else if (index_size == sizeof(u1)) { load_unsigned_byte(index, Address(_bcp_register, bcp_offset)); } else { diff --git a/src/hotspot/share/c1/c1_Runtime1.cpp b/src/hotspot/share/c1/c1_Runtime1.cpp index ffebe38964495..31ae3f6bee09d 100644 --- a/src/hotspot/share/c1/c1_Runtime1.cpp +++ b/src/hotspot/share/c1/c1_Runtime1.cpp @@ -1059,8 +1059,7 @@ JRT_ENTRY(void, Runtime1::patch_code(JavaThread* current, Runtime1::StubID stub_ break; } case Bytecodes::_invokedynamic: { - int indy_index = pool->decode_invokedynamic_index(index); - appendix = Handle(current, pool->cache()->set_dynamic_call(info, indy_index)); + appendix = Handle(current, pool->cache()->set_dynamic_call(info, index)); break; } default: fatal("unexpected bytecode for load_appendix_patching_id"); diff --git a/src/hotspot/share/cds/classListParser.cpp b/src/hotspot/share/cds/classListParser.cpp index e2099620a7761..b17da725deb3f 100644 --- a/src/hotspot/share/cds/classListParser.cpp +++ b/src/hotspot/share/cds/classListParser.cpp @@ -591,7 +591,7 @@ void ClassListParser::resolve_indy_impl(Symbol* class_name_symbol, TRAPS) { LinkResolver::resolve_invoke(info, recv, pool, - ConstantPool::encode_invokedynamic_index(indy_index), + indy_index, Bytecodes::_invokedynamic, CHECK); break; } diff --git a/src/hotspot/share/ci/ciEnv.cpp b/src/hotspot/share/ci/ciEnv.cpp index 40abaa06df269..5861ac3ac3395 100644 --- a/src/hotspot/share/ci/ciEnv.cpp +++ b/src/hotspot/share/ci/ciEnv.cpp @@ -869,10 +869,8 @@ ciMethod* ciEnv::get_method_by_index_impl(const constantPoolHandle& cpool, // Jump through a patchable call site, which is initially a deopt routine. // Patch the call site to the nmethod entry point of the static compiled lambda form. // As with other two-component call sites, both values must be independently verified. - int indy_index = cpool->decode_invokedynamic_index(index); - assert (indy_index >= 0, "should be"); - assert(indy_index < cpool->cache()->resolved_indy_entries_length(), "impossible"); - Method* adapter = cpool->resolved_indy_entry_at(indy_index)->method(); + assert(index < cpool->cache()->resolved_indy_entries_length(), "impossible"); + Method* adapter = cpool->resolved_indy_entry_at(index)->method(); // Resolved if the adapter is non null. if (adapter != nullptr) { return get_method(adapter); @@ -1499,21 +1497,20 @@ void ciEnv::record_call_site_method(Thread* thread, Method* adapter) { // Process an invokedynamic call site and record any dynamic locations. void ciEnv::process_invokedynamic(const constantPoolHandle &cp, int indy_index, JavaThread* thread) { - int index = cp->decode_invokedynamic_index(indy_index); - ResolvedIndyEntry* indy_info = cp->resolved_indy_entry_at(index); + ResolvedIndyEntry* indy_info = cp->resolved_indy_entry_at(indy_index); if (indy_info->method() != nullptr) { // process the adapter Method* adapter = indy_info->method(); record_call_site_method(thread, adapter); // process the appendix - oop appendix = cp->resolved_reference_from_indy(index); + oop appendix = cp->resolved_reference_from_indy(indy_index); { RecordLocation fp(this, "<appendix>"); record_call_site_obj(thread, appendix); } // process the BSM int pool_index = indy_info->constant_pool_index(); - BootstrapInfo bootstrap_specifier(cp, pool_index, index); + BootstrapInfo bootstrap_specifier(cp, pool_index, indy_index); oop bsm = cp->resolve_possibly_cached_constant_at(bootstrap_specifier.bsm_index(), thread); { RecordLocation fp(this, "<bsm>"); diff --git a/src/hotspot/share/ci/ciReplay.cpp b/src/hotspot/share/ci/ciReplay.cpp index 6edbadcec4f2f..5fa30f864114f 100644 --- a/src/hotspot/share/ci/ciReplay.cpp +++ b/src/hotspot/share/ci/ciReplay.cpp @@ -416,7 +416,6 @@ class CompileReplay : public StackObj { int pool_index = 0; if (bytecode.is_invokedynamic()) { - index = cp->decode_invokedynamic_index(index); cp->cache()->set_dynamic_call(callInfo, index); appendix = cp->resolved_reference_from_indy(index); diff --git a/src/hotspot/share/ci/ciStreams.cpp b/src/hotspot/share/ci/ciStreams.cpp index 47c1ee76bf38e..8220910d74c34 100644 --- a/src/hotspot/share/ci/ciStreams.cpp +++ b/src/hotspot/share/ci/ciStreams.cpp @@ -470,7 +470,7 @@ ciMethod* ciBytecodeStream::get_method(bool& will_link, ciSignature* *declared_s bool ciBytecodeStream::has_appendix() { VM_ENTRY_MARK; constantPoolHandle cpool(THREAD, _method->get_Method()->constants()); - return ConstantPool::has_appendix_at_if_loaded(cpool, get_method_index()); + return ConstantPool::has_appendix_at_if_loaded(cpool, get_method_index(), cur_bc()); } // ------------------------------------------------------------------ @@ -481,7 +481,7 @@ bool ciBytecodeStream::has_appendix() { ciObject* ciBytecodeStream::get_appendix() { VM_ENTRY_MARK; constantPoolHandle cpool(THREAD, _method->get_Method()->constants()); - oop appendix_oop = ConstantPool::appendix_at_if_loaded(cpool, get_method_index()); + oop appendix_oop = ConstantPool::appendix_at_if_loaded(cpool, get_method_index(), cur_bc()); return CURRENT_ENV->get_object(appendix_oop); } @@ -493,7 +493,7 @@ ciObject* ciBytecodeStream::get_appendix() { bool ciBytecodeStream::has_local_signature() { GUARDED_VM_ENTRY( constantPoolHandle cpool(Thread::current(), _method->get_Method()->constants()); - return ConstantPool::has_local_signature_at_if_loaded(cpool, get_method_index()); + return ConstantPool::has_local_signature_at_if_loaded(cpool, get_method_index(), cur_bc()); ) } @@ -543,4 +543,3 @@ int ciBytecodeStream::get_method_signature_index(const constantPoolHandle& cpool return cpool->signature_ref_index_at(name_and_type_index); ) } - diff --git a/src/hotspot/share/classfile/resolutionErrors.hpp b/src/hotspot/share/classfile/resolutionErrors.hpp index ad6d793c6c0f7..7eff7816b2e33 100644 --- a/src/hotspot/share/classfile/resolutionErrors.hpp +++ b/src/hotspot/share/classfile/resolutionErrors.hpp @@ -58,9 +58,8 @@ class ResolutionErrorTable : AllStatic { static const int CPCACHE_INDEX_MANGLE_VALUE = 1000000; // This function is used to encode an invokedynamic index to differentiate it from a - // constant pool index. It assumes it is being called with a index that is less than 0 + // constant pool index. static int encode_indy_index(int index) { - assert(index < 0, "Unexpected non-negative cpCache index"); return index + CPCACHE_INDEX_MANGLE_VALUE; } }; diff --git a/src/hotspot/share/interpreter/abstractInterpreter.cpp b/src/hotspot/share/interpreter/abstractInterpreter.cpp index 0b67ea4a8f9c1..2fad5ba39ef5c 100644 --- a/src/hotspot/share/interpreter/abstractInterpreter.cpp +++ b/src/hotspot/share/interpreter/abstractInterpreter.cpp @@ -261,7 +261,7 @@ bool AbstractInterpreter::is_not_reached(const methodHandle& method, int bci) { switch (code) { case Bytecodes::_invokedynamic: { assert(invoke_bc.has_index_u4(code), "sanity"); - int method_index = cpool->decode_invokedynamic_index(invoke_bc.get_index_u4(code)); + int method_index = invoke_bc.get_index_u4(code); return cpool->resolved_indy_entry_at(method_index)->is_resolved(); } case Bytecodes::_invokevirtual: // fall-through @@ -394,8 +394,7 @@ address AbstractInterpreter::deopt_continue_after_entry(Method* method, address // (NOT needed for the old calling convention) if (!is_top_frame) { int index = Bytes::get_native_u4(bcp+1); - int indy_index = method->constants()->decode_invokedynamic_index(index); - method->constants()->resolved_indy_entry_at(indy_index)->set_num_parameters(callee_parameters); + method->constants()->resolved_indy_entry_at(index)->set_num_parameters(callee_parameters); } break; } diff --git a/src/hotspot/share/interpreter/bootstrapInfo.cpp b/src/hotspot/share/interpreter/bootstrapInfo.cpp index 7efbbeb284ef5..e3efe2a750436 100644 --- a/src/hotspot/share/interpreter/bootstrapInfo.cpp +++ b/src/hotspot/share/interpreter/bootstrapInfo.cpp @@ -74,7 +74,7 @@ bool BootstrapInfo::resolve_previously_linked_invokedynamic(CallInfo& result, TR Exceptions::wrap_dynamic_exception(/* is_indy */ true, CHECK_false); return true; } else if (indy_entry->resolution_failed()) { - int encoded_index = ResolutionErrorTable::encode_indy_index(ConstantPool::encode_invokedynamic_index(_indy_index)); + int encoded_index = ResolutionErrorTable::encode_indy_index(_indy_index); ConstantPool::throw_resolution_error(_pool, encoded_index, CHECK_false); // Doesn't necessarily need to be resolved yet return true; } else { diff --git a/src/hotspot/share/interpreter/bootstrapInfo.hpp b/src/hotspot/share/interpreter/bootstrapInfo.hpp index d73d43893293a..d480e69f3688d 100644 --- a/src/hotspot/share/interpreter/bootstrapInfo.hpp +++ b/src/hotspot/share/interpreter/bootstrapInfo.hpp @@ -76,7 +76,6 @@ class BootstrapInfo : public StackObj { // derived accessors InstanceKlass* caller() const { return _pool->pool_holder(); } oop caller_mirror() const { return caller()->java_mirror(); } - int decode_indy_index() const { return ConstantPool::decode_invokedynamic_index(_indy_index); } int bsms_attr_index() const { return _pool->bootstrap_methods_attribute_index(_bss_index); } int bsm_index() const { return _pool->bootstrap_method_ref_index_at(_bss_index); } //int argc() is eagerly cached in _argc diff --git a/src/hotspot/share/interpreter/bytecode.cpp b/src/hotspot/share/interpreter/bytecode.cpp index fdaf022c69f2f..de45e8ae3db6f 100644 --- a/src/hotspot/share/interpreter/bytecode.cpp +++ b/src/hotspot/share/interpreter/bytecode.cpp @@ -179,7 +179,7 @@ int Bytecode_member_ref::pool_index() const { ResolvedIndyEntry* Bytecode_member_ref::resolved_indy_entry() const { int index = this->index(); assert(invoke_code() == Bytecodes::_invokedynamic, "should not call this"); - return cpcache()->resolved_indy_entry_at(ConstantPool::decode_invokedynamic_index(index)); + return cpcache()->resolved_indy_entry_at(index); } ResolvedMethodEntry* Bytecode_member_ref::resolved_method_entry() const { diff --git a/src/hotspot/share/interpreter/bytecodeTracer.cpp b/src/hotspot/share/interpreter/bytecodeTracer.cpp index 624f2b621c161..b7617c38602d2 100644 --- a/src/hotspot/share/interpreter/bytecodeTracer.cpp +++ b/src/hotspot/share/interpreter/bytecodeTracer.cpp @@ -555,8 +555,7 @@ void BytecodePrinter::print_attributes(int bci, outputStream* st) { int indy_index; int cp_index; if (is_linked()) { - int i = get_native_index_u4(); - indy_index = ConstantPool::decode_invokedynamic_index(i); + indy_index = get_native_index_u4(); cp_index = constants()->resolved_indy_entry_at(indy_index)->constant_pool_index(); } else { indy_index = -1; diff --git a/src/hotspot/share/interpreter/interpreterRuntime.cpp b/src/hotspot/share/interpreter/interpreterRuntime.cpp index 5f8dcbbf2adad..7d12797007b69 100644 --- a/src/hotspot/share/interpreter/interpreterRuntime.cpp +++ b/src/hotspot/share/interpreter/interpreterRuntime.cpp @@ -959,7 +959,7 @@ void InterpreterRuntime::resolve_invokedynamic(JavaThread* current) { index, bytecode, CHECK); } // end JvmtiHideSingleStepping - pool->cache()->set_dynamic_call(info, pool->decode_invokedynamic_index(index)); + pool->cache()->set_dynamic_call(info, index); } // This function is the interface to the assembly code. It returns the resolved diff --git a/src/hotspot/share/interpreter/linkResolver.cpp b/src/hotspot/share/interpreter/linkResolver.cpp index 7b5b62ac07576..9b80550130fec 100644 --- a/src/hotspot/share/interpreter/linkResolver.cpp +++ b/src/hotspot/share/interpreter/linkResolver.cpp @@ -1779,11 +1779,10 @@ void LinkResolver::resolve_handle_call(CallInfo& result, } void LinkResolver::resolve_invokedynamic(CallInfo& result, const constantPoolHandle& pool, int indy_index, TRAPS) { - int index = pool->decode_invokedynamic_index(indy_index); - int pool_index = pool->resolved_indy_entry_at(index)->constant_pool_index(); + int pool_index = pool->resolved_indy_entry_at(indy_index)->constant_pool_index(); // Resolve the bootstrap specifier (BSM + optional arguments). - BootstrapInfo bootstrap_specifier(pool, pool_index, index); + BootstrapInfo bootstrap_specifier(pool, pool_index, indy_index); // Check if CallSite has been bound already or failed already, and short circuit: { diff --git a/src/hotspot/share/interpreter/rewriter.cpp b/src/hotspot/share/interpreter/rewriter.cpp index 07ea1e2e2044b..6266ffcd2276e 100644 --- a/src/hotspot/share/interpreter/rewriter.cpp +++ b/src/hotspot/share/interpreter/rewriter.cpp @@ -305,15 +305,14 @@ void Rewriter::rewrite_invokedynamic(address bcp, int offset, bool reverse) { // must have a five-byte instruction format. (Of course, other JVM // implementations can use the bytes for other purposes.) // Note: We use native_u4 format exclusively for 4-byte indexes. - Bytes::put_native_u4(p, ConstantPool::encode_invokedynamic_index(_invokedynamic_index)); + Bytes::put_native_u4(p, (u2)_invokedynamic_index); _invokedynamic_index++; // Collect invokedynamic information before creating ResolvedInvokeDynamicInfo array _initialized_indy_entries.push(ResolvedIndyEntry((u2)resolved_index, (u2)cp_index)); } else { // Should do nothing since we are not patching this bytecode - int cache_index = ConstantPool::decode_invokedynamic_index( - Bytes::get_native_u4(p)); + int cache_index = Bytes::get_native_u4(p); int cp_index = _initialized_indy_entries.at(cache_index).constant_pool_index(); assert(_pool->tag_at(cp_index).is_invoke_dynamic(), "wrong index"); // zero out 4 bytes diff --git a/src/hotspot/share/interpreter/zero/bytecodeInterpreter.cpp b/src/hotspot/share/interpreter/zero/bytecodeInterpreter.cpp index f8b194da7b7e8..abebfc998fdf7 100644 --- a/src/hotspot/share/interpreter/zero/bytecodeInterpreter.cpp +++ b/src/hotspot/share/interpreter/zero/bytecodeInterpreter.cpp @@ -2247,7 +2247,7 @@ void BytecodeInterpreter::run(interpreterState istate) { } CASE(_invokedynamic): { - u4 index = cp->constant_pool()->decode_invokedynamic_index(Bytes::get_native_u4(pc+1)); // index is originally negative + u4 index = Bytes::get_native_u4(pc+1); ResolvedIndyEntry* indy_info = cp->resolved_indy_entry_at(index); if (!indy_info->is_resolved()) { CALL_VM(InterpreterRuntime::resolve_from_cache(THREAD, (Bytecodes::Code)opcode), diff --git a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp index 0d9c92cad518a..fb06abe9174ef 100644 --- a/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp +++ b/src/hotspot/share/jvmci/jvmciCompilerToVM.cpp @@ -910,9 +910,9 @@ C2V_VMENTRY_NULL(jobject, lookupKlassInPool, (JNIEnv* env, jobject, ARGUMENT_PAI return JVMCIENV->get_jobject(result); C2V_END -C2V_VMENTRY_NULL(jobject, lookupAppendixInPool, (JNIEnv* env, jobject, ARGUMENT_PAIR(cp), jint which)) +C2V_VMENTRY_NULL(jobject, lookupAppendixInPool, (JNIEnv* env, jobject, ARGUMENT_PAIR(cp), jint which, jint opcode)) constantPoolHandle cp(THREAD, UNPACK_PAIR(ConstantPool, cp)); - oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, which); + oop appendix_oop = ConstantPool::appendix_at_if_loaded(cp, which, Bytecodes::Code(opcode)); return JVMCIENV->get_jobject(JVMCIENV->get_object_constant(appendix_oop)); C2V_END @@ -1629,16 +1629,11 @@ C2V_VMENTRY_NULL(jobject, iterateFrames, (JNIEnv* env, jobject compilerToVM, job return nullptr; C2V_END -C2V_VMENTRY_0(int, decodeIndyIndexToCPIndex, (JNIEnv* env, jobject, ARGUMENT_PAIR(cp), jint encoded_indy_index, jboolean resolve)) - if (!ConstantPool::is_invokedynamic_index(encoded_indy_index)) { - JVMCI_THROW_MSG_0(IllegalStateException, err_msg("not an encoded indy index %d", encoded_indy_index)); - } - +C2V_VMENTRY_0(int, decodeIndyIndexToCPIndex, (JNIEnv* env, jobject, ARGUMENT_PAIR(cp), jint indy_index, jboolean resolve)) constantPoolHandle cp(THREAD, UNPACK_PAIR(ConstantPool, cp)); CallInfo callInfo; - int indy_index = cp->decode_invokedynamic_index(encoded_indy_index); if (resolve) { - LinkResolver::resolve_invoke(callInfo, Handle(), cp, encoded_indy_index, Bytecodes::_invokedynamic, CHECK_0); + LinkResolver::resolve_invoke(callInfo, Handle(), cp, indy_index, Bytecodes::_invokedynamic, CHECK_0); cp->cache()->set_dynamic_call(callInfo, indy_index); } return cp->resolved_indy_entry_at(indy_index)->constant_pool_index(); @@ -1671,7 +1666,7 @@ C2V_VMENTRY(void, resolveInvokeHandleInPool, (JNIEnv* env, jobject, ARGUMENT_PAI } C2V_END -C2V_VMENTRY_0(jint, isResolvedInvokeHandleInPool, (JNIEnv* env, jobject, ARGUMENT_PAIR(cp), jint index)) +C2V_VMENTRY_0(jint, isResolvedInvokeHandleInPool, (JNIEnv* env, jobject, ARGUMENT_PAIR(cp), jint index, jint opcode)) constantPoolHandle cp(THREAD, UNPACK_PAIR(ConstantPool, cp)); ResolvedMethodEntry* entry = cp->cache()->resolved_method_entry_at(index); if (entry->is_resolved(Bytecodes::_invokehandle)) { @@ -1705,8 +1700,8 @@ C2V_VMENTRY_0(jint, isResolvedInvokeHandleInPool, (JNIEnv* env, jobject, ARGUMEN return Bytecodes::_invokevirtual; } - if (cp->is_invokedynamic_index(index)) { - if (cp->resolved_indy_entry_at(cp->decode_invokedynamic_index(index))->is_resolved()) { + if ((Bytecodes::Code)opcode == Bytecodes::_invokedynamic) { + if (cp->resolved_indy_entry_at(index)->is_resolved()) { return Bytecodes::_invokedynamic; } } @@ -3228,7 +3223,7 @@ JNINativeMethod CompilerToVM::methods[] = { {CC "lookupSignatureInPool", CC "(" HS_CONSTANT_POOL2 "II)" STRING, FN_PTR(lookupSignatureInPool)}, {CC "lookupKlassRefIndexInPool", CC "(" HS_CONSTANT_POOL2 "II)I", FN_PTR(lookupKlassRefIndexInPool)}, {CC "lookupKlassInPool", CC "(" HS_CONSTANT_POOL2 "I)Ljava/lang/Object;", FN_PTR(lookupKlassInPool)}, - {CC "lookupAppendixInPool", CC "(" HS_CONSTANT_POOL2 "I)" OBJECTCONSTANT, FN_PTR(lookupAppendixInPool)}, + {CC "lookupAppendixInPool", CC "(" HS_CONSTANT_POOL2 "II)" OBJECTCONSTANT, FN_PTR(lookupAppendixInPool)}, {CC "lookupMethodInPool", CC "(" HS_CONSTANT_POOL2 "IB" HS_METHOD2 ")" HS_METHOD, FN_PTR(lookupMethodInPool)}, {CC "lookupConstantInPool", CC "(" HS_CONSTANT_POOL2 "IZ)" JAVACONSTANT, FN_PTR(lookupConstantInPool)}, {CC "resolveBootstrapMethod", CC "(" HS_CONSTANT_POOL2 "I)[" OBJECT, FN_PTR(resolveBootstrapMethod)}, @@ -3240,7 +3235,7 @@ JNINativeMethod CompilerToVM::methods[] = { {CC "decodeMethodIndexToCPIndex", CC "(" HS_CONSTANT_POOL2 "I)I", FN_PTR(decodeMethodIndexToCPIndex)}, {CC "decodeIndyIndexToCPIndex", CC "(" HS_CONSTANT_POOL2 "IZ)I", FN_PTR(decodeIndyIndexToCPIndex)}, {CC "resolveInvokeHandleInPool", CC "(" HS_CONSTANT_POOL2 "I)V", FN_PTR(resolveInvokeHandleInPool)}, - {CC "isResolvedInvokeHandleInPool", CC "(" HS_CONSTANT_POOL2 "I)I", FN_PTR(isResolvedInvokeHandleInPool)}, + {CC "isResolvedInvokeHandleInPool", CC "(" HS_CONSTANT_POOL2 "II)I", FN_PTR(isResolvedInvokeHandleInPool)}, {CC "resolveMethod", CC "(" HS_KLASS2 HS_METHOD2 HS_KLASS2 ")" HS_METHOD, FN_PTR(resolveMethod)}, {CC "getSignaturePolymorphicHolders", CC "()[" STRING, FN_PTR(getSignaturePolymorphicHolders)}, {CC "getVtableIndexForInterfaceMethod", CC "(" HS_KLASS2 HS_METHOD2 ")I", FN_PTR(getVtableIndexForInterfaceMethod)}, diff --git a/src/hotspot/share/jvmci/jvmciRuntime.cpp b/src/hotspot/share/jvmci/jvmciRuntime.cpp index 6bab80ddae6a1..2e588373cdf1d 100644 --- a/src/hotspot/share/jvmci/jvmciRuntime.cpp +++ b/src/hotspot/share/jvmci/jvmciRuntime.cpp @@ -1856,9 +1856,8 @@ Method* JVMCIRuntime::get_method_by_index_impl(const constantPoolHandle& cpool, int index, Bytecodes::Code bc, InstanceKlass* accessor) { if (bc == Bytecodes::_invokedynamic) { - int indy_index = cpool->decode_invokedynamic_index(index); - if (cpool->resolved_indy_entry_at(indy_index)->is_resolved()) { - return cpool->resolved_indy_entry_at(indy_index)->method(); + if (cpool->resolved_indy_entry_at(index)->is_resolved()) { + return cpool->resolved_indy_entry_at(index)->method(); } return nullptr; diff --git a/src/hotspot/share/oops/constantPool.cpp b/src/hotspot/share/oops/constantPool.cpp index 9d521e032ff76..b540ec6c160ac 100644 --- a/src/hotspot/share/oops/constantPool.cpp +++ b/src/hotspot/share/oops/constantPool.cpp @@ -652,32 +652,29 @@ Method* ConstantPool::method_at_if_loaded(const constantPoolHandle& cpool, } -bool ConstantPool::has_appendix_at_if_loaded(const constantPoolHandle& cpool, int which) { +bool ConstantPool::has_appendix_at_if_loaded(const constantPoolHandle& cpool, int which, Bytecodes::Code code) { if (cpool->cache() == nullptr) return false; // nothing to load yet - if (is_invokedynamic_index(which)) { - int indy_index = decode_invokedynamic_index(which); - return cpool->resolved_indy_entry_at(indy_index)->has_appendix(); + if (code == Bytecodes::_invokedynamic) { + return cpool->resolved_indy_entry_at(which)->has_appendix(); } else { return cpool->resolved_method_entry_at(which)->has_appendix(); } } -oop ConstantPool::appendix_at_if_loaded(const constantPoolHandle& cpool, int which) { +oop ConstantPool::appendix_at_if_loaded(const constantPoolHandle& cpool, int which, Bytecodes::Code code) { if (cpool->cache() == nullptr) return nullptr; // nothing to load yet - if (is_invokedynamic_index(which)) { - int indy_index = decode_invokedynamic_index(which); - return cpool->resolved_reference_from_indy(indy_index); + if (code == Bytecodes::_invokedynamic) { + return cpool->resolved_reference_from_indy(which); } else { return cpool->cache()->appendix_if_resolved(which); } } -bool ConstantPool::has_local_signature_at_if_loaded(const constantPoolHandle& cpool, int which) { +bool ConstantPool::has_local_signature_at_if_loaded(const constantPoolHandle& cpool, int which, Bytecodes::Code code) { if (cpool->cache() == nullptr) return false; // nothing to load yet - if (is_invokedynamic_index(which)) { - int indy_index = decode_invokedynamic_index(which); - return cpool->resolved_indy_entry_at(indy_index)->has_local_signature(); + if (code == Bytecodes::_invokedynamic) { + return cpool->resolved_indy_entry_at(which)->has_local_signature(); } else { return cpool->resolved_method_entry_at(which)->has_local_signature(); } @@ -739,8 +736,6 @@ u2 ConstantPool::uncached_klass_ref_index_at(int cp_index) { } u2 ConstantPool::klass_ref_index_at(int index, Bytecodes::Code code) { - guarantee(!ConstantPool::is_invokedynamic_index(index), - "an invokedynamic instruction does not have a klass"); assert(code != Bytecodes::_invokedynamic, "an invokedynamic instruction does not have a klass"); return uncached_klass_ref_index_at(to_cp_index(index, code)); diff --git a/src/hotspot/share/oops/constantPool.hpp b/src/hotspot/share/oops/constantPool.hpp index eec628b1e5bd3..e48229749f387 100644 --- a/src/hotspot/share/oops/constantPool.hpp +++ b/src/hotspot/share/oops/constantPool.hpp @@ -248,14 +248,6 @@ class ConstantPool : public Metadata { void allocate_resolved_klasses(ClassLoaderData* loader_data, int num_klasses, TRAPS); void initialize_unresolved_klasses(ClassLoaderData* loader_data, TRAPS); - // Invokedynamic indexes. - // They must look completely different from normal indexes. - // The main reason is that byte swapping is sometimes done on normal indexes. - // Finally, it is helpful for debugging to tell the two apart. - static bool is_invokedynamic_index(int i) { return (i < 0); } - static int decode_invokedynamic_index(int i) { assert(is_invokedynamic_index(i), ""); return ~i; } - static int encode_invokedynamic_index(int i) { assert(!is_invokedynamic_index(i), ""); return ~i; } - // Given the per-instruction index of an indy instruction, report the // main constant pool entry for its bootstrap specifier. // From there, uncached_name/signature_ref_at will get the name/type. @@ -761,9 +753,9 @@ class ConstantPool : public Metadata { // Used by compiler to prevent classloading. static Method* method_at_if_loaded (const constantPoolHandle& this_cp, int which); - static bool has_appendix_at_if_loaded (const constantPoolHandle& this_cp, int which); - static oop appendix_at_if_loaded (const constantPoolHandle& this_cp, int which); - static bool has_local_signature_at_if_loaded (const constantPoolHandle& this_cp, int which); + static bool has_appendix_at_if_loaded (const constantPoolHandle& this_cp, int which, Bytecodes::Code code); + static oop appendix_at_if_loaded (const constantPoolHandle& this_cp, int which, Bytecodes::Code code); + static bool has_local_signature_at_if_loaded (const constantPoolHandle& this_cp, int which, Bytecodes::Code code); static Klass* klass_at_if_loaded (const constantPoolHandle& this_cp, int which); // Routines currently used for annotations (only called by jvm.cpp) but which might be used in the diff --git a/src/hotspot/share/oops/constantPool.inline.hpp b/src/hotspot/share/oops/constantPool.inline.hpp index 6700e6678e640..e216f33c896d6 100644 --- a/src/hotspot/share/oops/constantPool.inline.hpp +++ b/src/hotspot/share/oops/constantPool.inline.hpp @@ -69,7 +69,7 @@ inline oop ConstantPool::appendix_if_resolved(int method_index) const { } inline u2 ConstantPool::invokedynamic_bootstrap_ref_index_at(int indy_index) const { - return cache()->resolved_indy_entry_at(decode_invokedynamic_index(indy_index))->constant_pool_index(); + return cache()->resolved_indy_entry_at(indy_index)->constant_pool_index(); } inline ResolvedIndyEntry* ConstantPool::resolved_indy_entry_at(int index) { diff --git a/src/hotspot/share/oops/cpCache.cpp b/src/hotspot/share/oops/cpCache.cpp index ccab0a04a0bf8..03dbce19f2e7e 100644 --- a/src/hotspot/share/oops/cpCache.cpp +++ b/src/hotspot/share/oops/cpCache.cpp @@ -570,8 +570,7 @@ bool ConstantPoolCache::save_and_throw_indy_exc( Symbol* error = PENDING_EXCEPTION->klass()->name(); const char* message = java_lang_Throwable::message_as_utf8(PENDING_EXCEPTION); - int encoded_index = ResolutionErrorTable::encode_indy_index( - ConstantPool::encode_invokedynamic_index(index)); + int encoded_index = ResolutionErrorTable::encode_indy_index(index); SystemDictionary::add_resolution_error(cpool, encoded_index, error, message); resolved_indy_entry_at(index)->set_resolution_failed(); return true; @@ -590,8 +589,7 @@ oop ConstantPoolCache::set_dynamic_call(const CallInfo &call_info, int index) { // Before we got here, another thread got a LinkageError exception during // resolution. Ignore our success and throw their exception. guarantee(index >= 0, "Invalid indy index"); - int encoded_index = ResolutionErrorTable::encode_indy_index( - ConstantPool::encode_invokedynamic_index(index)); + int encoded_index = ResolutionErrorTable::encode_indy_index(index); JavaThread* THREAD = JavaThread::current(); // For exception macros. constantPoolHandle cp(THREAD, constant_pool()); ConstantPool::throw_resolution_error(cp, encoded_index, THREAD); diff --git a/src/hotspot/share/prims/jvmtiClassFileReconstituter.cpp b/src/hotspot/share/prims/jvmtiClassFileReconstituter.cpp index 08e25c793a621..8d7ffdf4835ba 100644 --- a/src/hotspot/share/prims/jvmtiClassFileReconstituter.cpp +++ b/src/hotspot/share/prims/jvmtiClassFileReconstituter.cpp @@ -1066,7 +1066,7 @@ void JvmtiClassFileReconstituter::copy_bytecodes(const methodHandle& mh, int pool_index; if (is_invokedynamic) { cpci = Bytes::get_native_u4(bcp+1); - pool_index = mh->constants()->resolved_indy_entry_at(mh->constants()->decode_invokedynamic_index(cpci))->constant_pool_index(); + pool_index = mh->constants()->resolved_indy_entry_at(cpci)->constant_pool_index(); } else { // cache cannot be pre-fetched since some classes won't have it yet pool_index = mh->constants()->resolved_method_entry_at(cpci)->constant_pool_index(); diff --git a/src/hotspot/share/prims/methodComparator.cpp b/src/hotspot/share/prims/methodComparator.cpp index c681ec42a0144..ac4b59a6d9a25 100644 --- a/src/hotspot/share/prims/methodComparator.cpp +++ b/src/hotspot/share/prims/methodComparator.cpp @@ -120,9 +120,6 @@ bool MethodComparator::args_same(Bytecodes::Code const c_old, Bytecodes::Code c int index_old = s_old->get_index_u4(); int index_new = s_new->get_index_u4(); - int indy_index_old = old_cp->decode_invokedynamic_index(index_old); - int indy_index_new = new_cp->decode_invokedynamic_index(index_new); - // Check if the names of classes, field/method names and signatures at these indexes // are the same. Indices which are really into constantpool cache (rather than constant // pool itself) are accepted by the constantpool query routines below. @@ -131,8 +128,8 @@ bool MethodComparator::args_same(Bytecodes::Code const c_old, Bytecodes::Code c (old_cp->signature_ref_at(index_old, c_old) != new_cp->signature_ref_at(index_new, c_old))) return false; - int cpi_old = old_cp->cache()->resolved_indy_entry_at(indy_index_old)->constant_pool_index(); - int cpi_new = new_cp->cache()->resolved_indy_entry_at(indy_index_new)->constant_pool_index(); + int cpi_old = old_cp->cache()->resolved_indy_entry_at(index_old)->constant_pool_index(); + int cpi_new = new_cp->cache()->resolved_indy_entry_at(index_new)->constant_pool_index(); if ((old_cp->uncached_name_ref_at(cpi_old) != new_cp->uncached_name_ref_at(cpi_new)) || (old_cp->uncached_signature_ref_at(cpi_old) != new_cp->uncached_signature_ref_at(cpi_new))) return false; diff --git a/src/hotspot/share/prims/whitebox.cpp b/src/hotspot/share/prims/whitebox.cpp index f8dc972d06836..54fb62180bf17 100644 --- a/src/hotspot/share/prims/whitebox.cpp +++ b/src/hotspot/share/prims/whitebox.cpp @@ -1884,10 +1884,6 @@ WB_ENTRY(jobjectArray, WB_GetResolvedReferences(JNIEnv* env, jobject wb, jclass return (jobjectArray)JNIHandles::make_local(THREAD, resolved_refs); WB_END -WB_ENTRY(jint, WB_ConstantPoolEncodeIndyIndex(JNIEnv* env, jobject wb, jint index)) - return ConstantPool::encode_invokedynamic_index(index); -WB_END - WB_ENTRY(jint, WB_getFieldEntriesLength(JNIEnv* env, jobject wb, jclass klass)) InstanceKlass* ik = InstanceKlass::cast(java_lang_Class::as_Klass(JNIHandles::resolve(klass))); ConstantPool* cp = ik->constants(); @@ -2845,8 +2841,6 @@ static JNINativeMethod methods[] = { {CC"forceClassLoaderStatsSafepoint", CC"()V", (void*)&WB_ForceClassLoaderStatsSafepoint }, {CC"getConstantPool0", CC"(Ljava/lang/Class;)J", (void*)&WB_GetConstantPool }, {CC"getResolvedReferences0", CC"(Ljava/lang/Class;)[Ljava/lang/Object;", (void*)&WB_GetResolvedReferences}, - {CC"encodeConstantPoolIndyIndex0", - CC"(I)I", (void*)&WB_ConstantPoolEncodeIndyIndex}, {CC"getFieldEntriesLength0", CC"(Ljava/lang/Class;)I", (void*)&WB_getFieldEntriesLength}, {CC"getFieldCPIndex0", CC"(Ljava/lang/Class;I)I", (void*)&WB_getFieldCPIndex}, {CC"getMethodEntriesLength0", CC"(Ljava/lang/Class;)I", (void*)&WB_getMethodEntriesLength}, diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithCPIndex.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithCPIndex.java index ba37332c8519d..3647a951b8dc3 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithCPIndex.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/interpreter/BytecodeWithCPIndex.java @@ -24,8 +24,8 @@ package sun.jvm.hotspot.interpreter; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.runtime.*; +import sun.jvm.hotspot.oops.ConstantPoolCache; +import sun.jvm.hotspot.oops.Method; // any bytecode with constant pool index @@ -37,12 +37,7 @@ public abstract class BytecodeWithCPIndex extends Bytecode { // the constant pool index for this bytecode public int index() { if (code() == Bytecodes._invokedynamic) { - int index = getIndexU4(); - if (ConstantPool.isInvokedynamicIndex(index)) { - return ConstantPool.decodeInvokedynamicIndex(index); - } else { - return index; - } + return getIndexU4(); } else { return getIndexU2(code(), false); } diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstantPool.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstantPool.java index 70ccc01533e09..8c25f54d92c62 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstantPool.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/oops/ConstantPool.java @@ -306,18 +306,6 @@ public Symbol uncachedGetSignatureRefAt(int cp_index) { return getSymbolAt(signatureIndex); } - public static boolean isInvokedynamicIndex(int i) { return (i < 0); } - - public static int decodeInvokedynamicIndex(int i) { Assert.that(isInvokedynamicIndex(i), ""); return ~i; } - - // The invokedynamic points at a CP cache entry. This entry points back - // at the original CP entry (CONSTANT_InvokeDynamic) and also (via f2) at an entry - // in the resolved_references array (which provides the appendix argument). - public int invokedynamicCPCacheIndex(int index) { - Assert.that(isInvokedynamicIndex(index), "should be a invokedynamic index"); - return decodeInvokedynamicIndex(index); - } - public int uncachedGetNameAndTypeRefIndexAt(int cp_index) { if (getTagAt(cp_index).isInvokeDynamic() || getTagAt(cp_index).isDynamicConstant()) { int poolIndex = invokeDynamicNameAndTypeRefIndexAt(cp_index); diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java index 60d2a3edafe7e..2ed2106c02d33 100644 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java +++ b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/jcore/ByteCodeRewriter.java @@ -24,13 +24,17 @@ package sun.jvm.hotspot.tools.jcore; -import sun.jvm.hotspot.oops.*; -import sun.jvm.hotspot.interpreter.*; -import sun.jvm.hotspot.utilities.*; -import sun.jvm.hotspot.runtime.*; import java.security.AccessController; import java.security.PrivilegedAction; +import sun.jvm.hotspot.interpreter.Bytecodes; +import sun.jvm.hotspot.oops.ConstantPool; +import sun.jvm.hotspot.oops.ConstantPoolCache; +import sun.jvm.hotspot.oops.Method; +import sun.jvm.hotspot.runtime.Bytes; +import sun.jvm.hotspot.runtime.VM; +import sun.jvm.hotspot.utilities.Assert; + public class ByteCodeRewriter { private Method method; @@ -133,8 +137,8 @@ public void rewrite() { } case Bytecodes._invokedynamic: { - int cpci = method.getNativeIntArg(bci + 1); - cpoolIndex = (short) cpCache.getIndyEntryAt(~cpci).getConstantPoolIndex(); + int indy_index = method.getNativeIntArg(bci + 1); + cpoolIndex = (short) cpCache.getIndyEntryAt(indy_index).getConstantPoolIndex(); writeShort(code, bci + 1, cpoolIndex); writeShort(code, bci + 3, (short)0); // clear out trailing bytes break; diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/CompilerToVM.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/CompilerToVM.java index e9fea0ce6ca64..14646fd027521 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/CompilerToVM.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/CompilerToVM.java @@ -23,9 +23,6 @@ package jdk.vm.ci.hotspot; -import static jdk.vm.ci.common.InitTimer.timer; -import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime; - import java.lang.reflect.Executable; import java.lang.reflect.Field; @@ -35,8 +32,10 @@ import jdk.vm.ci.code.InvalidInstalledCodeException; import jdk.vm.ci.code.stack.InspectedFrameVisitor; import jdk.vm.ci.common.InitTimer; +import static jdk.vm.ci.common.InitTimer.timer; import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.Option; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime; import jdk.vm.ci.meta.Constant; import jdk.vm.ci.meta.ConstantReflectionProvider; import jdk.vm.ci.meta.JavaConstant; @@ -429,11 +428,10 @@ private native HotSpotResolvedJavaMethodImpl lookupMethodInPool(HotSpotConstantP long callerMethodPointer); /** - * Converts the encoded indy index operand of an invokedynamic instruction + * Converts the indy index operand of an invokedynamic instruction * to an index directly into {@code constantPool}. * * @param resolve if {@true}, then resolve the entry (which may call a bootstrap method) - * @throws IllegalArgumentException if {@code encoded_indy_index} is not an encoded indy index * @return {@code JVM_CONSTANT_InvokeDynamic} constant pool entry index for the invokedynamic */ int decodeIndyIndexToCPIndex(HotSpotConstantPool constantPool, int encoded_indy_index, boolean resolve) { @@ -535,11 +533,11 @@ void resolveInvokeHandleInPool(HotSpotConstantPool constantPool, int cpi) { * opcode of the instruction for which the resolution was performed ({@code invokedynamic} or * {@code invokevirtual}), or {@code -1} otherwise. */ - int isResolvedInvokeHandleInPool(HotSpotConstantPool constantPool, int cpi) { - return isResolvedInvokeHandleInPool(constantPool, constantPool.getConstantPoolPointer(), cpi); + int isResolvedInvokeHandleInPool(HotSpotConstantPool constantPool, int cpi, int opcode) { + return isResolvedInvokeHandleInPool(constantPool, constantPool.getConstantPoolPointer(), cpi, opcode); } - private native int isResolvedInvokeHandleInPool(HotSpotConstantPool constantPool, long constantPoolPointer, int cpi); + private native int isResolvedInvokeHandleInPool(HotSpotConstantPool constantPool, long constantPoolPointer, int cpi, int opcode); /** * Gets the list of type names (in the format of {@link JavaType#getName()}) denoting the @@ -596,11 +594,11 @@ private native HotSpotResolvedObjectTypeImpl resolveFieldInPool(HotSpotConstantP * Otherwise, it's treated as a constant pool cache index * for INVOKE{VIRTUAL,SPECIAL,STATIC,INTERFACE}. */ - HotSpotObjectConstantImpl lookupAppendixInPool(HotSpotConstantPool constantPool, int which) { - return lookupAppendixInPool(constantPool, constantPool.getConstantPoolPointer(), which); + HotSpotObjectConstantImpl lookupAppendixInPool(HotSpotConstantPool constantPool, int which, int opcode) { + return lookupAppendixInPool(constantPool, constantPool.getConstantPoolPointer(), which, opcode); } - private native HotSpotObjectConstantImpl lookupAppendixInPool(HotSpotConstantPool constantPool, long constantPoolPointer, int which); + private native HotSpotObjectConstantImpl lookupAppendixInPool(HotSpotConstantPool constantPool, long constantPoolPointer, int which, int opcode); /** * Installs the result of a compilation into the code cache. diff --git a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotConstantPool.java b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotConstantPool.java index 1065d45a4fc52..f4f8736a2feda 100644 --- a/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotConstantPool.java +++ b/src/jdk.internal.vm.ci/share/classes/jdk/vm/ci/hotspot/HotSpotConstantPool.java @@ -22,19 +22,16 @@ */ package jdk.vm.ci.hotspot; -import static jdk.vm.ci.hotspot.CompilerToVM.compilerToVM; -import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime; -import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; -import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE; - import java.util.AbstractList; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.common.NativeImageReinitialize; +import static jdk.vm.ci.hotspot.CompilerToVM.compilerToVM; +import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime; +import static jdk.vm.ci.hotspot.HotSpotVMConfig.config; +import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE; import jdk.vm.ci.meta.ConstantPool; import jdk.vm.ci.meta.JavaConstant; import jdk.vm.ci.meta.JavaField; @@ -259,13 +256,6 @@ private HotSpotResolvedObjectType getHolder() { return holder; } - /** - * See {@code ConstantPool::is_invokedynamic_index}. - */ - private static boolean isInvokedynamicIndex(int index) { - return index < 0; - } - /** * Gets the raw {@code ConstantPool*} value for the this constant pool. */ @@ -708,15 +698,7 @@ public JavaConstant lookupAppendix(int rawIndex, int opcode) { if (!Bytecodes.isInvoke(opcode)) { throw new IllegalArgumentException("expected an invoke bytecode for " + rawIndex + ", got " + opcode); } - - if (opcode == Bytecodes.INVOKEDYNAMIC) { - if (!isInvokedynamicIndex(rawIndex)) { - throw new IllegalArgumentException("expected a raw index for INVOKEDYNAMIC but got " + rawIndex); - } - return compilerToVM().lookupAppendixInPool(this, rawIndex); - } else { - return compilerToVM().lookupAppendixInPool(this, rawIndex); - } + return compilerToVM().lookupAppendixInPool(this, rawIndex, opcode); } /** @@ -735,26 +717,17 @@ private static JavaType getJavaType(final Object type) { @Override public JavaMethod lookupMethod(int rawIndex, int opcode, ResolvedJavaMethod caller) { - int which; // interpretation depends on opcode - if (opcode == Bytecodes.INVOKEDYNAMIC) { - if (!isInvokedynamicIndex(rawIndex)) { - throw new IllegalArgumentException("expected a raw index for INVOKEDYNAMIC but got " + rawIndex); - } - which = rawIndex; - } else { - which = rawIndex; - } - final HotSpotResolvedJavaMethod method = compilerToVM().lookupMethodInPool(this, which, (byte) opcode, (HotSpotResolvedJavaMethodImpl) caller); + final HotSpotResolvedJavaMethod method = compilerToVM().lookupMethodInPool(this, rawIndex, (byte) opcode, (HotSpotResolvedJavaMethodImpl) caller); if (method != null) { return method; } else { // Get the method's name and signature. - String name = compilerToVM().lookupNameInPool(this, which, opcode); - HotSpotSignature signature = new HotSpotSignature(runtime(), compilerToVM().lookupSignatureInPool(this, which, opcode)); + String name = compilerToVM().lookupNameInPool(this, rawIndex, opcode); + HotSpotSignature signature = new HotSpotSignature(runtime(), compilerToVM().lookupSignatureInPool(this, rawIndex, opcode)); if (opcode == Bytecodes.INVOKEDYNAMIC) { return new UnresolvedJavaMethod(name, signature, runtime().getMethodHandleClass()); } else { - final int klassIndex = getKlassRefIndexAt(which, opcode); + final int klassIndex = getKlassRefIndexAt(rawIndex, opcode); final Object type = compilerToVM().lookupKlassInPool(this, klassIndex); return new UnresolvedJavaMethod(name, signature, getJavaType(type)); } @@ -853,14 +826,10 @@ public JavaField lookupField(int rawIndex, ResolvedJavaMethod method, int opcode * @return constant pool index */ private int indyIndexConstantPoolIndex(int rawIndex, int opcode) { - if (isInvokedynamicIndex(rawIndex)) { - if (opcode != Bytecodes.INVOKEDYNAMIC) { - throw new IllegalArgumentException("expected INVOKEDYNAMIC at " + rawIndex + ", got " + opcode); - } - return compilerToVM().decodeIndyIndexToCPIndex(this, rawIndex, false); - } else { - throw new IllegalArgumentException("expected a raw index for INVOKEDYNAMIC but got " + rawIndex); + if (opcode != Bytecodes.INVOKEDYNAMIC) { + throw new IllegalArgumentException("expected INVOKEDYNAMIC at " + rawIndex + ", got " + opcode); } + return compilerToVM().decodeIndyIndexToCPIndex(this, rawIndex, false); } @Override @@ -884,10 +853,6 @@ public void loadReferencedType(int rawIndex, int opcode, boolean initialize) { cpi = rawIndex; break; case Bytecodes.INVOKEDYNAMIC: { - // invokedynamic indices are different from constant pool cache indices - if (!isInvokedynamicIndex(rawIndex)) { - throw new IllegalArgumentException("must use invokedynamic index but got " + rawIndex); - } cpi = compilerToVM().decodeIndyIndexToCPIndex(this, rawIndex, true); break; } diff --git a/test/hotspot/jtreg/compiler/jvmci/common/patches/jdk.internal.vm.ci/jdk/vm/ci/hotspot/CompilerToVMHelper.java b/test/hotspot/jtreg/compiler/jvmci/common/patches/jdk.internal.vm.ci/jdk/vm/ci/hotspot/CompilerToVMHelper.java index 7310f37f8ab91..6e1a8221a7375 100644 --- a/test/hotspot/jtreg/compiler/jvmci/common/patches/jdk.internal.vm.ci/jdk/vm/ci/hotspot/CompilerToVMHelper.java +++ b/test/hotspot/jtreg/compiler/jvmci/common/patches/jdk.internal.vm.ci/jdk/vm/ci/hotspot/CompilerToVMHelper.java @@ -144,8 +144,8 @@ public static HotSpotResolvedObjectType resolveFieldInPool( } public static Object lookupAppendixInPool( - ConstantPool constantPool, int cpi) { - return CTVM.lookupAppendixInPool((HotSpotConstantPool) constantPool, cpi); + ConstantPool constantPool, int cpi, int opcode) { + return CTVM.lookupAppendixInPool((HotSpotConstantPool) constantPool, cpi, opcode); } public static int installCode(TargetDescription target, diff --git a/test/hotspot/jtreg/compiler/jvmci/compilerToVM/ConstantPoolTestsHelper.java b/test/hotspot/jtreg/compiler/jvmci/compilerToVM/ConstantPoolTestsHelper.java index bbbdf79fdafa5..2a222c0a0eca5 100644 --- a/test/hotspot/jtreg/compiler/jvmci/compilerToVM/ConstantPoolTestsHelper.java +++ b/test/hotspot/jtreg/compiler/jvmci/compilerToVM/ConstantPoolTestsHelper.java @@ -80,7 +80,7 @@ public int getCPCacheIndex(int cpi) { if (constantPoolSS.getTagAt(cpi).equals(Tag.INVOKEDYNAMIC)) { for (int indy_index = 0; indy_index < WB.getIndyInfoLength(this.klass); indy_index++) { if (WB.getIndyCPIndex(this.klass, indy_index) == cpi) { - return ~indy_index; + return indy_index; } } } From b6518a5db08959a5d1a22ccff9c1795ce7f9bf85 Mon Sep 17 00:00:00 2001 From: Matias Saavedra Silva <matsaave@openjdk.org> Date: Tue, 23 Apr 2024 15:07:55 +0000 Subject: [PATCH 064/141] 8329417: Remove objects with no pointers from relocation bitmap Reviewed-by: ccheung, iklam --- src/hotspot/share/cds/archiveBuilder.cpp | 22 ++++++++++++++++++++++ src/hotspot/share/cds/archiveBuilder.hpp | 13 +++++++++++-- src/hotspot/share/cds/filemap.cpp | 17 +++++++++++------ src/hotspot/share/cds/filemap.hpp | 12 +++++++++--- src/hotspot/share/cds/metaspaceShared.cpp | 1 + 5 files changed, 54 insertions(+), 11 deletions(-) diff --git a/src/hotspot/share/cds/archiveBuilder.cpp b/src/hotspot/share/cds/archiveBuilder.cpp index 0eee36eec2110..51399f03434f6 100644 --- a/src/hotspot/share/cds/archiveBuilder.cpp +++ b/src/hotspot/share/cds/archiveBuilder.cpp @@ -77,6 +77,7 @@ ArchiveBuilder::SourceObjList::~SourceObjList() { void ArchiveBuilder::SourceObjList::append(SourceObjInfo* src_info) { // Save this source object for copying + src_info->set_id(_objs->length()); _objs->append(src_info); // Prepare for marking the pointers in this source object @@ -94,6 +95,7 @@ void ArchiveBuilder::SourceObjList::append(SourceObjInfo* src_info) { void ArchiveBuilder::SourceObjList::remember_embedded_pointer(SourceObjInfo* src_info, MetaspaceClosure::Ref* ref) { // src_obj contains a pointer. Remember the location of this pointer in _ptrmap, // so that we can copy/relocate it later. + src_info->set_has_embedded_pointer(); address src_obj = src_info->source_addr(); address* field_addr = ref->addr(); assert(src_info->ptrmap_start() < _total_bytes, "sanity"); @@ -589,6 +591,26 @@ char* ArchiveBuilder::ro_strdup(const char* s) { return archived_str; } +// The objects that have embedded pointers will sink +// towards the end of the list. This ensures we have a maximum +// number of leading zero bits in the relocation bitmap. +int ArchiveBuilder::compare_src_objs(SourceObjInfo** a, SourceObjInfo** b) { + if ((*a)->has_embedded_pointer() && !(*b)->has_embedded_pointer()) { + return 1; + } else if (!(*a)->has_embedded_pointer() && (*b)->has_embedded_pointer()) { + return -1; + } else { + // This is necessary to keep the sorting order stable. Otherwise the + // archive's contents may not be deterministic. + return (*a)->id() - (*b)->id(); + } +} + +void ArchiveBuilder::sort_metadata_objs() { + _rw_src_objs.objs()->sort(compare_src_objs); + _ro_src_objs.objs()->sort(compare_src_objs); +} + void ArchiveBuilder::dump_rw_metadata() { ResourceMark rm; log_info(cds)("Allocating RW objects ... "); diff --git a/src/hotspot/share/cds/archiveBuilder.hpp b/src/hotspot/share/cds/archiveBuilder.hpp index e6ac2e7ac4ea6..dab369265b0b4 100644 --- a/src/hotspot/share/cds/archiveBuilder.hpp +++ b/src/hotspot/share/cds/archiveBuilder.hpp @@ -126,15 +126,18 @@ class ArchiveBuilder : public StackObj { uintx _ptrmap_start; // The bit-offset of the start of this object (inclusive) uintx _ptrmap_end; // The bit-offset of the end of this object (exclusive) bool _read_only; + bool _has_embedded_pointer; FollowMode _follow_mode; int _size_in_bytes; + int _id; // Each object has a unique serial ID, starting from zero. The ID is assigned + // when the object is added into _source_objs. MetaspaceObj::Type _msotype; address _source_addr; // The source object to be copied. address _buffered_addr; // The copy of this object insider the buffer. public: SourceObjInfo(MetaspaceClosure::Ref* ref, bool read_only, FollowMode follow_mode) : - _ptrmap_start(0), _ptrmap_end(0), _read_only(read_only), _follow_mode(follow_mode), - _size_in_bytes(ref->size() * BytesPerWord), _msotype(ref->msotype()), + _ptrmap_start(0), _ptrmap_end(0), _read_only(read_only), _has_embedded_pointer(false), _follow_mode(follow_mode), + _size_in_bytes(ref->size() * BytesPerWord), _id(0), _msotype(ref->msotype()), _source_addr(ref->obj()) { if (follow_mode == point_to_it) { _buffered_addr = ref->obj(); @@ -164,7 +167,11 @@ class ArchiveBuilder : public StackObj { uintx ptrmap_start() const { return _ptrmap_start; } // inclusive uintx ptrmap_end() const { return _ptrmap_end; } // exclusive bool read_only() const { return _read_only; } + bool has_embedded_pointer() const { return _has_embedded_pointer; } + void set_has_embedded_pointer() { _has_embedded_pointer = true; } int size_in_bytes() const { return _size_in_bytes; } + int id() const { return _id; } + void set_id(int i) { _id = i; } address source_addr() const { return _source_addr; } address buffered_addr() const { if (_follow_mode != set_to_null) { @@ -384,6 +391,8 @@ class ArchiveBuilder : public StackObj { char* ro_strdup(const char* s); + static int compare_src_objs(SourceObjInfo** a, SourceObjInfo** b); + void sort_metadata_objs(); void dump_rw_metadata(); void dump_ro_metadata(); void relocate_metaspaceobj_embedded_pointers(); diff --git a/src/hotspot/share/cds/filemap.cpp b/src/hotspot/share/cds/filemap.cpp index 707a1de6fd1e5..2182865ebaacc 100644 --- a/src/hotspot/share/cds/filemap.cpp +++ b/src/hotspot/share/cds/filemap.cpp @@ -293,6 +293,8 @@ void FileMapHeader::print(outputStream* st) { st->print_cr("- heap_roots_offset: " SIZE_FORMAT, _heap_roots_offset); st->print_cr("- _heap_oopmap_start_pos: " SIZE_FORMAT, _heap_oopmap_start_pos); st->print_cr("- _heap_ptrmap_start_pos: " SIZE_FORMAT, _heap_ptrmap_start_pos); + st->print_cr("- _rw_ptrmap_start_pos: " SIZE_FORMAT, _rw_ptrmap_start_pos); + st->print_cr("- _ro_ptrmap_start_pos: " SIZE_FORMAT, _ro_ptrmap_start_pos); st->print_cr("- allow_archiving_with_java_agent:%d", _allow_archiving_with_java_agent); st->print_cr("- use_optimized_module_handling: %d", _use_optimized_module_handling); st->print_cr("- has_full_module_graph %d", _has_full_module_graph); @@ -1580,7 +1582,7 @@ static size_t write_bitmap(const CHeapBitMap* map, char* output, size_t offset) // lots of leading zeros. size_t FileMapInfo::remove_bitmap_leading_zeros(CHeapBitMap* map) { size_t old_zeros = map->find_first_set_bit(0); - size_t old_size = map->size_in_bytes(); + size_t old_size = map->size(); // Slice and resize bitmap map->truncate(old_zeros, map->size()); @@ -1589,13 +1591,16 @@ size_t FileMapInfo::remove_bitmap_leading_zeros(CHeapBitMap* map) { size_t new_zeros = map->find_first_set_bit(0); assert(new_zeros == 0, "Should have removed leading zeros"); ) - - assert(map->size_in_bytes() < old_size, "Map size should have decreased"); + assert(map->size() <= old_size, "sanity"); return old_zeros; } -char* FileMapInfo::write_bitmap_region(const CHeapBitMap* rw_ptrmap, const CHeapBitMap* ro_ptrmap, ArchiveHeapInfo* heap_info, +char* FileMapInfo::write_bitmap_region(CHeapBitMap* rw_ptrmap, CHeapBitMap* ro_ptrmap, ArchiveHeapInfo* heap_info, size_t &size_in_bytes) { + size_t removed_rw_zeros = remove_bitmap_leading_zeros(rw_ptrmap); + size_t removed_ro_zeros = remove_bitmap_leading_zeros(ro_ptrmap); + header()->set_rw_ptrmap_start_pos(removed_rw_zeros); + header()->set_ro_ptrmap_start_pos(removed_ro_zeros); size_in_bytes = rw_ptrmap->size_in_bytes() + ro_ptrmap->size_in_bytes(); if (heap_info->is_used()) { @@ -1942,9 +1947,9 @@ bool FileMapInfo::relocate_pointers_in_core_regions(intx addr_delta) { address valid_new_base = (address)header()->mapped_base_address(); address valid_new_end = (address)mapped_end(); - SharedDataRelocator rw_patcher((address*)rw_patch_base, (address*)rw_patch_end, valid_old_base, valid_old_end, + SharedDataRelocator rw_patcher((address*)rw_patch_base + header()->rw_ptrmap_start_pos(), (address*)rw_patch_end, valid_old_base, valid_old_end, valid_new_base, valid_new_end, addr_delta); - SharedDataRelocator ro_patcher((address*)ro_patch_base, (address*)ro_patch_end, valid_old_base, valid_old_end, + SharedDataRelocator ro_patcher((address*)ro_patch_base + header()->ro_ptrmap_start_pos(), (address*)ro_patch_end, valid_old_base, valid_old_end, valid_new_base, valid_new_end, addr_delta); rw_ptrmap.iterate(&rw_patcher); ro_ptrmap.iterate(&ro_patcher); diff --git a/src/hotspot/share/cds/filemap.hpp b/src/hotspot/share/cds/filemap.hpp index a7f1c23d00a8e..54881b8d2375d 100644 --- a/src/hotspot/share/cds/filemap.hpp +++ b/src/hotspot/share/cds/filemap.hpp @@ -229,6 +229,8 @@ class FileMapHeader: private CDSFileMapHeaderBase { // of the archived heap objects, in bytes. size_t _heap_oopmap_start_pos; // The first bit in the oopmap corresponds to this position in the heap. size_t _heap_ptrmap_start_pos; // The first bit in the ptrmap corresponds to this position in the heap. + size_t _rw_ptrmap_start_pos; // The first bit in the ptrmap corresponds to this position in the rw region + size_t _ro_ptrmap_start_pos; // The first bit in the ptrmap corresponds to this position in the ro region char* from_mapped_offset(size_t offset) const { return mapped_base_address() + offset; } @@ -269,8 +271,10 @@ class FileMapHeader: private CDSFileMapHeaderBase { bool compressed_oops() const { return _compressed_oops; } bool compressed_class_pointers() const { return _compressed_class_ptrs; } size_t heap_roots_offset() const { return _heap_roots_offset; } - size_t heap_oopmap_start_pos() const { return _heap_oopmap_start_pos;} - size_t heap_ptrmap_start_pos() const { return _heap_ptrmap_start_pos;} + size_t heap_oopmap_start_pos() const { return _heap_oopmap_start_pos; } + size_t heap_ptrmap_start_pos() const { return _heap_ptrmap_start_pos; } + size_t rw_ptrmap_start_pos() const { return _rw_ptrmap_start_pos; } + size_t ro_ptrmap_start_pos() const { return _ro_ptrmap_start_pos; } // FIXME: These should really return int jshort max_used_path_index() const { return _max_used_path_index; } jshort app_module_paths_start_index() const { return _app_module_paths_start_index; } @@ -284,6 +288,8 @@ class FileMapHeader: private CDSFileMapHeaderBase { void set_heap_roots_offset(size_t n) { _heap_roots_offset = n; } void set_heap_oopmap_start_pos(size_t n) { _heap_oopmap_start_pos = n; } void set_heap_ptrmap_start_pos(size_t n) { _heap_ptrmap_start_pos = n; } + void set_rw_ptrmap_start_pos(size_t n) { _rw_ptrmap_start_pos = n; } + void set_ro_ptrmap_start_pos(size_t n) { _ro_ptrmap_start_pos = n; } void copy_base_archive_name(const char* name); void set_shared_path_table(SharedPathTable table) { @@ -440,7 +446,7 @@ class FileMapInfo : public CHeapObj<mtInternal> { void write_region(int region, char* base, size_t size, bool read_only, bool allow_exec); size_t remove_bitmap_leading_zeros(CHeapBitMap* map); - char* write_bitmap_region(const CHeapBitMap* rw_ptrmap, const CHeapBitMap* ro_ptrmap, ArchiveHeapInfo* heap_info, + char* write_bitmap_region(CHeapBitMap* rw_ptrmap, CHeapBitMap* ro_ptrmap, ArchiveHeapInfo* heap_info, size_t &size_in_bytes); size_t write_heap_region(ArchiveHeapInfo* heap_info); void write_bytes(const void* buffer, size_t count); diff --git a/src/hotspot/share/cds/metaspaceShared.cpp b/src/hotspot/share/cds/metaspaceShared.cpp index b13ef2101a9bf..c7d14f83d036a 100644 --- a/src/hotspot/share/cds/metaspaceShared.cpp +++ b/src/hotspot/share/cds/metaspaceShared.cpp @@ -513,6 +513,7 @@ void VM_PopulateDumpSharedSpace::doit() { char* cloned_vtables = CppVtables::dumptime_init(&builder); + builder.sort_metadata_objs(); builder.dump_rw_metadata(); builder.dump_ro_metadata(); builder.relocate_metaspaceobj_embedded_pointers(); From b07e1531b375b9d8117e218355e70272e27e1225 Mon Sep 17 00:00:00 2001 From: Guoxiong Li <gli@openjdk.org> Date: Tue, 23 Apr 2024 15:22:17 +0000 Subject: [PATCH 065/141] 8330362: G1: Inline offset array element accessor in G1BlockOffsetTable Reviewed-by: ayang, tschatzl --- src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp | 7 +------ src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp | 1 - 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp b/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp index bc14730594d22..ff66c2af4090b 100644 --- a/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp +++ b/src/hotspot/share/gc/g1/g1BlockOffsetTable.cpp @@ -43,17 +43,12 @@ G1BlockOffsetTable::G1BlockOffsetTable(MemRegion heap, G1RegionToSpaceMapper* st p2i(bot_reserved.start()), bot_reserved.byte_size(), p2i(bot_reserved.end())); } -void G1BlockOffsetTable::set_offset_array_raw(uint8_t* addr, uint8_t offset) { - Atomic::store(addr, offset); -} - void G1BlockOffsetTable::set_offset_array(uint8_t* addr, uint8_t offset) { check_address(addr, "Block offset table address out of range"); - set_offset_array_raw(addr, offset); + Atomic::store(addr, offset); } void G1BlockOffsetTable::set_offset_array(uint8_t* addr, HeapWord* high, HeapWord* low) { - check_address(addr, "Block offset table address out of range"); assert(high >= low, "addresses out of order"); size_t offset = pointer_delta(high, low); check_offset(offset, "offset too large"); diff --git a/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp b/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp index a0e6129f1a099..4b254c7e42a5f 100644 --- a/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp +++ b/src/hotspot/share/gc/g1/g1BlockOffsetTable.hpp @@ -56,7 +56,6 @@ class G1BlockOffsetTable: public CHeapObj<mtGC> { // For performance these have to devolve to array accesses in product builds. inline uint8_t offset_array(uint8_t* addr) const; - inline void set_offset_array_raw(uint8_t* addr, uint8_t offset); inline void set_offset_array(uint8_t* addr, uint8_t offset); inline void set_offset_array(uint8_t* addr, HeapWord* high, HeapWord* low); From 412e306d81209c05f55aee7663f7abb80286e361 Mon Sep 17 00:00:00 2001 From: Alan Bateman <alanb@openjdk.org> Date: Tue, 23 Apr 2024 16:10:13 +0000 Subject: [PATCH 066/141] 8329593: Drop adjustments to target parallelism when virtual threads do I/O on files opened for buffered I/O Reviewed-by: bpb, jpai --- .../classes/sun/nio/ch/EPollSelectorImpl.java | 6 +- .../sun/nio/ch/KQueueSelectorImpl.java | 6 +- .../sun/nio/fs/BsdNativeDispatcher.java | 29 +- .../share/classes/java/io/FileDescriptor.java | 6 +- .../classes/java/io/FileInputStream.java | 63 +--- .../classes/java/io/FileOutputStream.java | 35 +-- .../classes/java/io/RandomAccessFile.java | 65 ++--- .../share/classes/java/lang/Object.java | 17 +- .../share/classes/java/lang/Process.java | 72 ++++- .../share/classes/java/lang/System.java | 84 +++++- .../classes/java/lang/VirtualThread.java | 5 + .../share/classes/java/net/InetAddress.java | 8 +- .../classes/java/nio/MappedMemoryUtils.java | 6 +- .../classes/jdk/internal/misc/Blocker.java | 63 +--- .../jdk/internal/misc/CarrierThread.java | 77 +++-- .../classes/sun/nio/ch/FileChannelImpl.java | 120 +++----- .../unix/classes/java/io/UnixFileSystem.java | 110 +------ .../unix/classes/java/lang/ProcessImpl.java | 4 +- .../classes/sun/nio/ch/PollSelectorImpl.java | 6 +- .../sun/nio/fs/UnixChannelFactory.java | 6 +- .../classes/sun/nio/fs/UnixFileSystem.java | 7 - .../sun/nio/fs/UnixNativeDispatcher.java | 273 +++--------------- .../classes/java/io/WinNTFileSystem.java | 94 +----- .../classes/java/lang/ProcessImpl.java | 12 +- .../sun/nio/ch/WEPollSelectorImpl.java | 6 +- .../sun/nio/fs/WindowsChannelFactory.java | 6 +- .../sun/nio/fs/WindowsNativeDispatcher.java | 126 ++------ .../java.base/java/lang/Object.java | 17 +- 28 files changed, 460 insertions(+), 869 deletions(-) diff --git a/src/java.base/linux/classes/sun/nio/ch/EPollSelectorImpl.java b/src/java.base/linux/classes/sun/nio/ch/EPollSelectorImpl.java index e13fe4c93f3ec..cb55932fd7e99 100644 --- a/src/java.base/linux/classes/sun/nio/ch/EPollSelectorImpl.java +++ b/src/java.base/linux/classes/sun/nio/ch/EPollSelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, 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 @@ -116,11 +116,11 @@ protected int doSelect(Consumer<SelectionKey> action, long timeout) do { long startTime = timedPoll ? System.nanoTime() : 0; - long comp = Blocker.begin(blocking); + boolean attempted = Blocker.begin(blocking); try { numEntries = EPoll.wait(epfd, pollArrayAddress, NUM_EPOLLEVENTS, to); } finally { - Blocker.end(comp); + Blocker.end(attempted); } if (numEntries == IOStatus.INTERRUPTED && timedPoll) { // timed poll interrupted so need to adjust timeout diff --git a/src/java.base/macosx/classes/sun/nio/ch/KQueueSelectorImpl.java b/src/java.base/macosx/classes/sun/nio/ch/KQueueSelectorImpl.java index 714be1cb5d93a..6c84984f515d4 100644 --- a/src/java.base/macosx/classes/sun/nio/ch/KQueueSelectorImpl.java +++ b/src/java.base/macosx/classes/sun/nio/ch/KQueueSelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, 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 @@ -120,11 +120,11 @@ protected int doSelect(Consumer<SelectionKey> action, long timeout) do { long startTime = timedPoll ? System.nanoTime() : 0; - long comp = Blocker.begin(blocking); + boolean attempted = Blocker.begin(blocking); try { numEntries = KQueue.poll(kqfd, pollArrayAddress, MAX_KEVENTS, to); } finally { - Blocker.end(comp); + Blocker.end(attempted); } if (numEntries == IOStatus.INTERRUPTED && timedPoll) { // timed poll interrupted so need to adjust timeout diff --git a/src/java.base/macosx/classes/sun/nio/fs/BsdNativeDispatcher.java b/src/java.base/macosx/classes/sun/nio/fs/BsdNativeDispatcher.java index 5a7de593c6361..798fed3bd129e 100644 --- a/src/java.base/macosx/classes/sun/nio/fs/BsdNativeDispatcher.java +++ b/src/java.base/macosx/classes/sun/nio/fs/BsdNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,8 +25,6 @@ package sun.nio.fs; -import jdk.internal.misc.Blocker; - /** * Bsd specific system calls. */ @@ -69,13 +67,7 @@ static int clonefile(UnixPath src, UnixPath dst, int flags) { try (NativeBuffer srcBuffer = copyToNativeBuffer(src); NativeBuffer dstBuffer = copyToNativeBuffer(dst)) { - long comp = Blocker.begin(); - try { - return clonefile0(srcBuffer.address(), dstBuffer.address(), - flags); - } finally { - Blocker.end(comp); - } + return clonefile0(srcBuffer.address(), dstBuffer.address(), flags); } } private static native int clonefile0(long srcAddress, long dstAddress, @@ -90,13 +82,8 @@ static void setattrlist(UnixPath path, int commonattr, long modTime, throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - setattrlist0(buffer.address(), commonattr, modTime, accTime, - createTime, options); - } finally { - Blocker.end(comp); - } + setattrlist0(buffer.address(), commonattr, modTime, accTime, + createTime, options); } } private static native void setattrlist0(long pathAddress, int commonattr, @@ -112,13 +99,7 @@ static void fsetattrlist(int fd, int commonattr, long modTime, long accTime, long createTime, long options) throws UnixException { - long comp = Blocker.begin(); - try { - fsetattrlist0(fd, commonattr, modTime, accTime, - createTime, options); - } finally { - Blocker.end(comp); - } + fsetattrlist0(fd, commonattr, modTime, accTime, createTime, options); } private static native void fsetattrlist0(int fd, int commonattr, long modTime, long accTime, diff --git a/src/java.base/share/classes/java/io/FileDescriptor.java b/src/java.base/share/classes/java/io/FileDescriptor.java index c7e638a167504..bdab57c099614 100644 --- a/src/java.base/share/classes/java/io/FileDescriptor.java +++ b/src/java.base/share/classes/java/io/FileDescriptor.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -207,11 +207,11 @@ public boolean valid() { * @since 1.1 */ public void sync() throws SyncFailedException { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(); try { sync0(); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } diff --git a/src/java.base/share/classes/java/io/FileInputStream.java b/src/java.base/share/classes/java/io/FileInputStream.java index 1a41048b578dd..1ed2eb05d37e4 100644 --- a/src/java.base/share/classes/java/io/FileInputStream.java +++ b/src/java.base/share/classes/java/io/FileInputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,6 @@ import java.nio.channels.FileChannel; import java.util.Arrays; -import jdk.internal.misc.Blocker; import jdk.internal.util.ArraysSupport; import sun.nio.ch.FileChannelImpl; @@ -210,12 +209,7 @@ public FileInputStream(FileDescriptor fdObj) { * @param name the name of the file */ private void open(String name) throws FileNotFoundException { - long comp = Blocker.begin(); - try { - open0(name); - } finally { - Blocker.end(comp); - } + open0(name); } /** @@ -228,12 +222,7 @@ private void open(String name) throws FileNotFoundException { */ @Override public int read() throws IOException { - long comp = Blocker.begin(); - try { - return read0(); - } finally { - Blocker.end(comp); - } + return read0(); } private native int read0() throws IOException; @@ -260,12 +249,7 @@ public int read() throws IOException { */ @Override public int read(byte[] b) throws IOException { - long comp = Blocker.begin(); - try { - return readBytes(b, 0, b.length); - } finally { - Blocker.end(comp); - } + return readBytes(b, 0, b.length); } /** @@ -284,12 +268,7 @@ public int read(byte[] b) throws IOException { */ @Override public int read(byte[] b, int off, int len) throws IOException { - long comp = Blocker.begin(); - try { - return readBytes(b, off, len); - } finally { - Blocker.end(comp); - } + return readBytes(b, off, len); } @Override @@ -396,22 +375,12 @@ public long transferTo(OutputStream out) throws IOException { } private long length() throws IOException { - long comp = Blocker.begin(); - try { - return length0(); - } finally { - Blocker.end(comp); - } + return length0(); } private native long length0() throws IOException; private long position() throws IOException { - long comp = Blocker.begin(); - try { - return position0(); - } finally { - Blocker.end(comp); - } + return position0(); } private native long position0() throws IOException; @@ -441,12 +410,7 @@ private long position() throws IOException { */ @Override public long skip(long n) throws IOException { - long comp = Blocker.begin(); - try { - return skip0(n); - } finally { - Blocker.end(comp); - } + return skip0(n); } private native long skip0(long n) throws IOException; @@ -470,12 +434,7 @@ public long skip(long n) throws IOException { */ @Override public int available() throws IOException { - long comp = Blocker.begin(); - try { - return available0(); - } finally { - Blocker.end(comp); - } + return available0(); } private native int available0() throws IOException; @@ -566,8 +525,8 @@ public FileChannel getChannel() { synchronized (this) { fc = this.channel; if (fc == null) { - this.channel = fc = FileChannelImpl.open(fd, path, true, - false, false, this); + fc = FileChannelImpl.open(fd, path, true, false, false, false, this); + this.channel = fc; if (closed) { try { // possible race with close(), benign since diff --git a/src/java.base/share/classes/java/io/FileOutputStream.java b/src/java.base/share/classes/java/io/FileOutputStream.java index c939ab543c461..2b017080a11a0 100644 --- a/src/java.base/share/classes/java/io/FileOutputStream.java +++ b/src/java.base/share/classes/java/io/FileOutputStream.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2024, 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 @@ -28,7 +28,6 @@ import java.nio.channels.FileChannel; import jdk.internal.access.SharedSecrets; import jdk.internal.access.JavaIOFileDescriptorAccess; -import jdk.internal.misc.Blocker; import sun.nio.ch.FileChannelImpl; @@ -286,12 +285,7 @@ private native void open0(String name, boolean append) * @param append whether the file is to be opened in append mode */ private void open(String name, boolean append) throws FileNotFoundException { - long comp = Blocker.begin(); - try { - open0(name, append); - } finally { - Blocker.end(comp); - } + open0(name, append); } /** @@ -313,12 +307,7 @@ private void open(String name, boolean append) throws FileNotFoundException { @Override public void write(int b) throws IOException { boolean append = FD_ACCESS.getAppend(fd); - long comp = Blocker.begin(); - try { - write(b, append); - } finally { - Blocker.end(comp); - } + write(b, append); } /** @@ -343,12 +332,7 @@ private native void writeBytes(byte[] b, int off, int len, boolean append) @Override public void write(byte[] b) throws IOException { boolean append = FD_ACCESS.getAppend(fd); - long comp = Blocker.begin(); - try { - writeBytes(b, 0, b.length, append); - } finally { - Blocker.end(comp); - } + writeBytes(b, 0, b.length, append); } /** @@ -364,12 +348,7 @@ public void write(byte[] b) throws IOException { @Override public void write(byte[] b, int off, int len) throws IOException { boolean append = FD_ACCESS.getAppend(fd); - long comp = Blocker.begin(); - try { - writeBytes(b, off, len, append); - } finally { - Blocker.end(comp); - } + writeBytes(b, off, len, append); } /** @@ -460,8 +439,8 @@ public FileChannel getChannel() { synchronized (this) { fc = this.channel; if (fc == null) { - this.channel = fc = FileChannelImpl.open(fd, path, false, - true, false, this); + fc = FileChannelImpl.open(fd, path, false, true, false, false, this); + this.channel = fc; if (closed) { try { // possible race with close(), benign since diff --git a/src/java.base/share/classes/java/io/RandomAccessFile.java b/src/java.base/share/classes/java/io/RandomAccessFile.java index 5a1c87eb1f759..ee7b90ea71ab1 100644 --- a/src/java.base/share/classes/java/io/RandomAccessFile.java +++ b/src/java.base/share/classes/java/io/RandomAccessFile.java @@ -71,6 +71,7 @@ public class RandomAccessFile implements DataOutput, DataInput, Closeable { private final FileDescriptor fd; private final boolean rw; + private final boolean sync; // O_SYNC or O_DSYNC /** * The path of the referenced file @@ -229,21 +230,25 @@ private RandomAccessFile(File file, String mode, boolean openAndDelete) int imode = -1; boolean rw = false; + boolean sync = false; if (mode.equals("r")) imode = O_RDONLY; else if (mode.startsWith("rw")) { imode = O_RDWR; rw = true; if (mode.length() > 2) { - if (mode.equals("rws")) + if (mode.equals("rws")) { imode |= O_SYNC; - else if (mode.equals("rwd")) + sync = true; + } else if (mode.equals("rwd")) { imode |= O_DSYNC; - else + sync = true; + } else imode = -1; } } this.rw = rw; + this.sync = sync; if (openAndDelete) imode |= O_TEMPORARY; @@ -308,8 +313,8 @@ public final FileChannel getChannel() { synchronized (this) { fc = this.channel; if (fc == null) { - this.channel = fc = FileChannelImpl.open(fd, path, true, - rw, false, this); + fc = FileChannelImpl.open(fd, path, true, rw, sync, false, this); + this.channel = fc; if (closed) { try { fc.close(); @@ -350,12 +355,7 @@ private native void open0(String name, int mode) * defined above */ private void open(String name, int mode) throws FileNotFoundException { - long comp = Blocker.begin(); - try { - open0(name, mode); - } finally { - Blocker.end(comp); - } + open0(name, mode); } // 'Read' primitives @@ -376,12 +376,7 @@ private void open(String name, int mode) throws FileNotFoundException { * end-of-file has been reached. */ public int read() throws IOException { - long comp = Blocker.begin(); - try { - return read0(); - } finally { - Blocker.end(comp); - } + return read0(); } private native int read0() throws IOException; @@ -394,12 +389,7 @@ public int read() throws IOException { * @throws IOException If an I/O error has occurred. */ private int readBytes(byte[] b, int off, int len) throws IOException { - long comp = Blocker.begin(); - try { - return readBytes0(b, off, len); - } finally { - Blocker.end(comp); - } + return readBytes0(b, off, len); } private native int readBytes0(byte[] b, int off, int len) throws IOException; @@ -547,11 +537,11 @@ public int skipBytes(int n) throws IOException { * @throws IOException if an I/O error occurs. */ public void write(int b) throws IOException { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(sync); try { write0(b); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } @@ -566,11 +556,11 @@ public void write(int b) throws IOException { * @throws IOException If an I/O error has occurred. */ private void writeBytes(byte[] b, int off, int len) throws IOException { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(sync); try { writeBytes0(b, off, len); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } @@ -630,12 +620,7 @@ public void seek(long pos) throws IOException { if (pos < 0) { throw new IOException("Negative seek offset"); } - long comp = Blocker.begin(); - try { - seek0(pos); - } finally { - Blocker.end(comp); - } + seek0(pos); } private native void seek0(long pos) throws IOException; @@ -647,12 +632,7 @@ public void seek(long pos) throws IOException { * @throws IOException if an I/O error occurs. */ public long length() throws IOException { - long comp = Blocker.begin(); - try { - return length0(); - } finally { - Blocker.end(comp); - } + return length0(); } private native long length0() throws IOException; @@ -684,12 +664,7 @@ public long length() throws IOException { * @since 1.2 */ public void setLength(long newLength) throws IOException { - long comp = Blocker.begin(); - try { - setLength0(newLength); - } finally { - Blocker.end(comp); - } + setLength0(newLength); } private native void setLength0(long newLength) throws IOException; diff --git a/src/java.base/share/classes/java/lang/Object.java b/src/java.base/share/classes/java/lang/Object.java index b7c8d99d0097a..b8bfdc3e3f9bf 100644 --- a/src/java.base/share/classes/java/lang/Object.java +++ b/src/java.base/share/classes/java/lang/Object.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1994, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1994, 2024, 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 @@ -370,16 +370,21 @@ public final void wait() throws InterruptedException { * @see #wait(long, int) */ public final void wait(long timeoutMillis) throws InterruptedException { - long comp = Blocker.begin(); + if (!Thread.currentThread().isVirtual()) { + wait0(timeoutMillis); + return; + } + + // virtual thread waiting + boolean attempted = Blocker.begin(); try { wait0(timeoutMillis); } catch (InterruptedException e) { - Thread thread = Thread.currentThread(); - if (thread.isVirtual()) - thread.getAndClearInterrupt(); + // virtual thread's interrupt status needs to be cleared + Thread.currentThread().getAndClearInterrupt(); throw e; } finally { - Blocker.end(comp); + Blocker.end(attempted); } } diff --git a/src/java.base/share/classes/java/lang/Process.java b/src/java.base/share/classes/java/lang/Process.java index 5b926e3572948..f9762ffbcdb35 100644 --- a/src/java.base/share/classes/java/lang/Process.java +++ b/src/java.base/share/classes/java/lang/Process.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,7 @@ package java.lang; +import jdk.internal.misc.Blocker; import jdk.internal.util.StaticProperty; import java.io.*; @@ -839,6 +840,75 @@ public long skip(long n) throws IOException { return n - remaining; } + + @Override + public int read() throws IOException { + boolean attempted = Blocker.begin(); + try { + return super.read(); + } finally { + Blocker.end(attempted); + } + } + + @Override + public int read(byte[] b) throws IOException { + boolean attempted = Blocker.begin(); + try { + return super.read(b); + } finally { + Blocker.end(attempted); + } + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + boolean attempted = Blocker.begin(); + try { + return super.read(b, off, len); + } finally { + Blocker.end(attempted); + } + } + } + + /** + * An output stream for a subprocess pipe. + */ + static class PipeOutputStream extends FileOutputStream { + PipeOutputStream(FileDescriptor fd) { + super(fd); + } + + @Override + public void write(int b) throws IOException { + boolean attempted = Blocker.begin(); + try { + super.write(b); + } finally { + Blocker.end(attempted); + } + } + + @Override + public void write(byte[] b) throws IOException { + boolean attempted = Blocker.begin(); + try { + super.write(b); + } finally { + Blocker.end(attempted); + } + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + boolean attempted = Blocker.begin(); + try { + super.write(b, off, len); + } finally { + Blocker.end(attempted); + } + } } /** diff --git a/src/java.base/share/classes/java/lang/System.java b/src/java.base/share/classes/java/lang/System.java index 3c80e82b13853..ae1c65b9f935d 100644 --- a/src/java.base/share/classes/java/lang/System.java +++ b/src/java.base/share/classes/java/lang/System.java @@ -71,6 +71,7 @@ import java.util.stream.Stream; import jdk.internal.logger.LoggerFinderLoader.TemporaryLoggerFinder; +import jdk.internal.misc.Blocker; import jdk.internal.misc.CarrierThreadLocal; import jdk.internal.misc.Unsafe; import jdk.internal.util.StaticProperty; @@ -2190,9 +2191,9 @@ private static void initPhase1() { lineSeparator = props.getProperty("line.separator"); - FileInputStream fdIn = new FileInputStream(FileDescriptor.in); - FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out); - FileOutputStream fdErr = new FileOutputStream(FileDescriptor.err); + FileInputStream fdIn = new In(FileDescriptor.in); + FileOutputStream fdOut = new Out(FileDescriptor.out); + FileOutputStream fdErr = new Out(FileDescriptor.err); initialIn = new BufferedInputStream(fdIn); setIn0(initialIn); // stdout/err.encoding are set when the VM is associated with the terminal, @@ -2217,6 +2218,83 @@ private static void initPhase1() { VM.initLevel(1); } + /** + * System.in. + */ + private static class In extends FileInputStream { + In(FileDescriptor fd) { + super(fd); + } + + @Override + public int read() throws IOException { + boolean attempted = Blocker.begin(); + try { + return super.read(); + } finally { + Blocker.end(attempted); + } + } + + @Override + public int read(byte[] b) throws IOException { + boolean attempted = Blocker.begin(); + try { + return super.read(b); + } finally { + Blocker.end(attempted); + } + } + + @Override + public int read(byte[] b, int off, int len) throws IOException { + boolean attempted = Blocker.begin(); + try { + return super.read(b, off, len); + } finally { + Blocker.end(attempted); + } + } + } + + /** + * System.out/System.err wrap this output stream. + */ + private static class Out extends FileOutputStream { + Out(FileDescriptor fd) { + super(fd); + } + + public void write(int b) throws IOException { + boolean attempted = Blocker.begin(); + try { + super.write(b); + } finally { + Blocker.end(attempted); + } + } + + @Override + public void write(byte[] b) throws IOException { + boolean attempted = Blocker.begin(); + try { + super.write(b); + } finally { + Blocker.end(attempted); + } + } + + @Override + public void write(byte[] b, int off, int len) throws IOException { + boolean attempted = Blocker.begin(); + try { + super.write(b, off, len); + } finally { + Blocker.end(attempted); + } + } + } + // @see #initPhase2() static ModuleLayer bootLayer; diff --git a/src/java.base/share/classes/java/lang/VirtualThread.java b/src/java.base/share/classes/java/lang/VirtualThread.java index 76ff6501ecb66..cf2fed3bf5d71 100644 --- a/src/java.base/share/classes/java/lang/VirtualThread.java +++ b/src/java.base/share/classes/java/lang/VirtualThread.java @@ -460,6 +460,11 @@ private boolean yieldContinuation() { private void afterYield() { assert carrierThread == null; + // re-adjust parallelism if the virtual thread yielded when compensating + if (currentThread() instanceof CarrierThread ct) { + ct.endBlocking(); + } + int s = state(); // LockSupport.park/parkNanos diff --git a/src/java.base/share/classes/java/net/InetAddress.java b/src/java.base/share/classes/java/net/InetAddress.java index 225061ff5d659..534553a99f38b 100644 --- a/src/java.base/share/classes/java/net/InetAddress.java +++ b/src/java.base/share/classes/java/net/InetAddress.java @@ -1216,11 +1216,11 @@ public Stream<InetAddress> lookupByName(String host, LookupPolicy policy) Objects.requireNonNull(policy); validate(host); InetAddress[] addrs; - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(); try { addrs = impl.lookupAllHostAddr(host, policy); } finally { - Blocker.end(comp); + Blocker.end(attempted); } return Arrays.stream(addrs); } @@ -1230,11 +1230,11 @@ public String lookupByAddress(byte[] addr) throws UnknownHostException { if (addr.length != Inet4Address.INADDRSZ && addr.length != Inet6Address.INADDRSZ) { throw new IllegalArgumentException("Invalid address length"); } - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(); try { return impl.getHostByAddr(addr); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } } diff --git a/src/java.base/share/classes/java/nio/MappedMemoryUtils.java b/src/java.base/share/classes/java/nio/MappedMemoryUtils.java index 5113d2730c278..cf6f953d8b244 100644 --- a/src/java.base/share/classes/java/nio/MappedMemoryUtils.java +++ b/src/java.base/share/classes/java/nio/MappedMemoryUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -98,13 +98,13 @@ static void force(FileDescriptor fd, long address, boolean isSync, long index, l long offset = mappingOffset(address, index); long mappingAddress = mappingAddress(address, offset, index); long mappingLength = mappingLength(offset, length); - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(); try { force0(fd, mappingAddress, mappingLength); } catch (IOException cause) { throw new UncheckedIOException(cause); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } } diff --git a/src/java.base/share/classes/jdk/internal/misc/Blocker.java b/src/java.base/share/classes/jdk/internal/misc/Blocker.java index e427d9520d5b5..d41ae73709fa2 100644 --- a/src/java.base/share/classes/jdk/internal/misc/Blocker.java +++ b/src/java.base/share/classes/jdk/internal/misc/Blocker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,20 +25,18 @@ package jdk.internal.misc; -import java.util.concurrent.ForkJoinPool; import jdk.internal.access.JavaLangAccess; -import jdk.internal.access.JavaUtilConcurrentFJPAccess; import jdk.internal.access.SharedSecrets; /** * Defines static methods to mark the beginning and end of a possibly blocking * operation. The methods are intended to be used with try-finally as follows: * {@snippet lang=java : - * long comp = Blocker.begin(); + * boolean attempted = Blocker.begin(); * try { * // blocking operation * } finally { - * Blocker.end(comp); + * Blocker.end(attempted); * } * } * If invoked from a virtual thread and the underlying carrier thread is a @@ -62,64 +60,35 @@ private static Thread currentCarrierThread() { } /** - * Marks the beginning of a possibly blocking operation. - * @return the return value from the attempt to compensate or -1 if not attempted + * Marks the beginning of a blocking operation. + * @return true if tryCompensate attempted */ - public static long begin() { + public static boolean begin() { if (VM.isBooted() - && currentCarrierThread() instanceof CarrierThread ct && !ct.inBlocking()) { - ct.beginBlocking(); - boolean completed = false; - try { - long comp = ForkJoinPools.beginCompensatedBlock(ct.getPool()); - assert currentCarrierThread() == ct; - completed = true; - return comp; - } finally { - if (!completed) { - ct.endBlocking(); - } - } + && Thread.currentThread().isVirtual() + && currentCarrierThread() instanceof CarrierThread ct) { + return ct.beginBlocking(); } - return -1; + return false; } /** * Marks the beginning of a possibly blocking operation. * @param blocking true if the operation may block, otherwise false - * @return the return value from the attempt to compensate, -1 if not attempted - * or blocking is false + * @return true if tryCompensate attempted */ - public static long begin(boolean blocking) { - return (blocking) ? begin() : -1; + public static boolean begin(boolean blocking) { + return (blocking) ? begin() : false; } /** * Marks the end of an operation that may have blocked. - * @param compensateReturn the value returned by the begin method + * @param attempted if tryCompensate attempted */ - public static void end(long compensateReturn) { - if (compensateReturn >= 0) { - assert currentCarrierThread() instanceof CarrierThread ct && ct.inBlocking(); + public static void end(boolean attempted) { + if (attempted) { CarrierThread ct = (CarrierThread) currentCarrierThread(); - ForkJoinPools.endCompensatedBlock(ct.getPool(), compensateReturn); ct.endBlocking(); } } - - /** - * Defines static methods to invoke non-public ForkJoinPool methods via the - * shared secret support. - */ - private static class ForkJoinPools { - private static final JavaUtilConcurrentFJPAccess FJP_ACCESS = - SharedSecrets.getJavaUtilConcurrentFJPAccess(); - static long beginCompensatedBlock(ForkJoinPool pool) { - return FJP_ACCESS.beginCompensatedBlock(pool); - } - static void endCompensatedBlock(ForkJoinPool pool, long post) { - FJP_ACCESS.endCompensatedBlock(pool, post); - } - } - } diff --git a/src/java.base/share/classes/jdk/internal/misc/CarrierThread.java b/src/java.base/share/classes/jdk/internal/misc/CarrierThread.java index e4276d4904eba..d20b402fe92da 100644 --- a/src/java.base/share/classes/jdk/internal/misc/CarrierThread.java +++ b/src/java.base/share/classes/jdk/internal/misc/CarrierThread.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -32,7 +32,9 @@ import java.util.concurrent.ForkJoinPool; import java.util.concurrent.ForkJoinWorkerThread; import jdk.internal.access.JavaLangAccess; +import jdk.internal.access.JavaUtilConcurrentFJPAccess; import jdk.internal.access.SharedSecrets; +import jdk.internal.vm.Continuation; /** * A ForkJoinWorkerThread that can be used as a carrier thread. @@ -49,7 +51,14 @@ public class CarrierThread extends ForkJoinWorkerThread { private static final long INHERITABLETHREADLOCALS; private static final long INHERITEDACCESSCONTROLCONTEXT; - private boolean blocking; // true if in blocking op + // compensating state + private static final int NOT_COMPENSATING = 0; + private static final int COMPENSATE_IN_PROGRESS = 1; + private static final int COMPENSATING = 2; + private int compensating; + + // FJP value to adjust release counts + private long compensateValue; @SuppressWarnings("this-escape") public CarrierThread(ForkJoinPool pool) { @@ -60,27 +69,44 @@ public CarrierThread(ForkJoinPool pool) { } /** - * For use by {@link Blocker} to test if the thread is in a blocking operation. + * Mark the start of a blocking operation. */ - boolean inBlocking() { - //assert JLA.currentCarrierThread() == this; - return blocking; - } + public boolean beginBlocking() { + assert Thread.currentThread().isVirtual() && JLA.currentCarrierThread() == this; + assert compensating == NOT_COMPENSATING || compensating == COMPENSATING; - /** - * For use by {@link Blocker} to mark the start of a blocking operation. - */ - void beginBlocking() { - //assert JLA.currentCarrierThread() == this && !blocking; - blocking = true; + if (compensating == NOT_COMPENSATING) { + // don't preempt when attempting to compensate + Continuation.pin(); + try { + compensating = COMPENSATE_IN_PROGRESS; + + // Uses FJP.tryCompensate to start or re-activate a spare thread + compensateValue = ForkJoinPools.beginCompensatedBlock(getPool()); + compensating = COMPENSATING; + return true; + } catch (Throwable e) { + // exception starting spare thread + compensating = NOT_COMPENSATING; + throw e; + } finally { + Continuation.unpin(); + } + } else { + return false; + } } /** - * For use by {@link Blocker} to mark the end of a blocking operation. + * Mark the end of a blocking operation. */ - void endBlocking() { - //assert JLA.currentCarrierThread() == this && blocking; - blocking = false; + public void endBlocking() { + assert Thread.currentThread() == this || JLA.currentCarrierThread() == this; + if (compensating == COMPENSATING) { + ForkJoinPools.endCompensatedBlock(getPool(), compensateValue); + compensating = NOT_COMPENSATING; + compensateValue = 0; + } } @Override @@ -95,7 +121,7 @@ public void setContextClassLoader(ClassLoader cl) { * The thread group for the carrier threads. */ @SuppressWarnings("removal") - private static final ThreadGroup carrierThreadGroup() { + private static ThreadGroup carrierThreadGroup() { return AccessController.doPrivileged(new PrivilegedAction<ThreadGroup>() { public ThreadGroup run() { ThreadGroup group = JLA.currentCarrierThread().getThreadGroup(); @@ -117,6 +143,21 @@ private static AccessControlContext innocuousACC() { }); } + /** + * Defines static methods to invoke non-public ForkJoinPool methods via the + * shared secret support. + */ + private static class ForkJoinPools { + private static final JavaUtilConcurrentFJPAccess FJP_ACCESS = + SharedSecrets.getJavaUtilConcurrentFJPAccess(); + static long beginCompensatedBlock(ForkJoinPool pool) { + return FJP_ACCESS.beginCompensatedBlock(pool); + } + static void endCompensatedBlock(ForkJoinPool pool, long post) { + FJP_ACCESS.endCompensatedBlock(pool, post); + } + } + static { CONTEXTCLASSLOADER = U.objectFieldOffset(Thread.class, "contextClassLoader"); diff --git a/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java b/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java index 636230d8f38b1..ab386bb14a5a3 100644 --- a/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java +++ b/src/java.base/share/classes/sun/nio/ch/FileChannelImpl.java @@ -78,6 +78,7 @@ public class FileChannelImpl // File access mode (immutable) private final boolean writable; private final boolean readable; + private final boolean sync; // O_SYNC or O_DSYNC // Required to prevent finalization of creating stream (immutable) private final Closeable parent; @@ -122,12 +123,14 @@ public void run() { } private FileChannelImpl(FileDescriptor fd, String path, boolean readable, - boolean writable, boolean direct, Closeable parent) + boolean writable, boolean sync, boolean direct, + Closeable parent) { this.fd = fd; this.path = path; this.readable = readable; this.writable = writable; + this.sync = sync; this.direct = direct; this.parent = parent; if (direct) { @@ -150,9 +153,9 @@ private FileChannelImpl(FileDescriptor fd, String path, boolean readable, // and RandomAccessFile::getChannel public static FileChannel open(FileDescriptor fd, String path, boolean readable, boolean writable, - boolean direct, Closeable parent) + boolean sync, boolean direct, Closeable parent) { - return new FileChannelImpl(fd, path, readable, writable, direct, parent); + return new FileChannelImpl(fd, path, readable, writable, sync, direct, parent); } private void ensureOpen() throws IOException { @@ -230,11 +233,11 @@ public int read(ByteBuffer dst) throws IOException { if (!isOpen()) return 0; do { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(direct); try { n = IOUtil.read(fd, dst, -1, direct, alignment, nd); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } while ((n == IOStatus.INTERRUPTED) && isOpen()); return IOStatus.normalize(n); @@ -265,11 +268,11 @@ public long read(ByteBuffer[] dsts, int offset, int length) if (!isOpen()) return 0; do { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(direct); try { n = IOUtil.read(fd, dsts, offset, length, direct, alignment, nd); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } while ((n == IOStatus.INTERRUPTED) && isOpen()); @@ -298,11 +301,11 @@ public int write(ByteBuffer src) throws IOException { if (!isOpen()) return 0; do { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(sync || direct); try { n = IOUtil.write(fd, src, -1, direct, alignment, nd); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } while ((n == IOStatus.INTERRUPTED) && isOpen()); @@ -334,11 +337,11 @@ public long write(ByteBuffer[] srcs, int offset, int length) if (!isOpen()) return 0; do { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(sync || direct); try { n = IOUtil.write(fd, srcs, offset, length, direct, alignment, nd); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } while ((n == IOStatus.INTERRUPTED) && isOpen()); return IOStatus.normalize(n); @@ -365,13 +368,8 @@ public long position() throws IOException { return 0; boolean append = fdAccess.getAppend(fd); do { - long comp = Blocker.begin(); - try { - // in append-mode then position is advanced to end before writing - p = (append) ? nd.size(fd) : nd.seek(fd, -1); - } finally { - Blocker.end(comp); - } + // in append-mode then position is advanced to end before writing + p = (append) ? nd.size(fd) : nd.seek(fd, -1); } while ((p == IOStatus.INTERRUPTED) && isOpen()); return IOStatus.normalize(p); } finally { @@ -396,12 +394,7 @@ public FileChannel position(long newPosition) throws IOException { if (!isOpen()) return null; do { - long comp = Blocker.begin(); - try { - p = nd.seek(fd, newPosition); - } finally { - Blocker.end(comp); - } + p = nd.seek(fd, newPosition); } while ((p == IOStatus.INTERRUPTED) && isOpen()); return this; } finally { @@ -424,12 +417,7 @@ public long size() throws IOException { if (!isOpen()) return -1; do { - long comp = Blocker.begin(); - try { - s = nd.size(fd); - } finally { - Blocker.end(comp); - } + s = nd.size(fd); } while ((s == IOStatus.INTERRUPTED) && isOpen()); return IOStatus.normalize(s); } finally { @@ -461,24 +449,14 @@ public FileChannel truncate(long newSize) throws IOException { // get current size long size; do { - long comp = Blocker.begin(); - try { - size = nd.size(fd); - } finally { - Blocker.end(comp); - } + size = nd.size(fd); } while ((size == IOStatus.INTERRUPTED) && isOpen()); if (!isOpen()) return null; // get current position do { - long comp = Blocker.begin(); - try { - p = nd.seek(fd, -1); - } finally { - Blocker.end(comp); - } + p = nd.seek(fd, -1); } while ((p == IOStatus.INTERRUPTED) && isOpen()); if (!isOpen()) return null; @@ -487,12 +465,7 @@ public FileChannel truncate(long newSize) throws IOException { // truncate file if given size is less than the current size if (newSize < size) { do { - long comp = Blocker.begin(); - try { - rv = nd.truncate(fd, newSize); - } finally { - Blocker.end(comp); - } + rv = nd.truncate(fd, newSize); } while ((rv == IOStatus.INTERRUPTED) && isOpen()); if (!isOpen()) return null; @@ -502,12 +475,7 @@ public FileChannel truncate(long newSize) throws IOException { if (p > newSize) p = newSize; do { - long comp = Blocker.begin(); - try { - rp = nd.seek(fd, p); - } finally { - Blocker.end(comp); - } + rp = nd.seek(fd, p); } while ((rp == IOStatus.INTERRUPTED) && isOpen()); return this; } finally { @@ -529,11 +497,11 @@ public void force(boolean metaData) throws IOException { if (!isOpen()) return; do { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(); try { rv = nd.force(fd, metaData); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } while ((rv == IOStatus.INTERRUPTED) && isOpen()); } finally { @@ -624,12 +592,7 @@ private long transferToFileDescriptor(long position, int count, FileDescriptor t long n; boolean append = fdAccess.getAppend(targetFD); do { - long comp = Blocker.begin(); - try { - n = nd.transferTo(fd, position, count, targetFD, append); - } finally { - Blocker.end(comp); - } + n = nd.transferTo(fd, position, count, targetFD, append); } while ((n == IOStatus.INTERRUPTED) && isOpen()); return n; } @@ -895,12 +858,7 @@ private long transferFromFileDescriptor(FileDescriptor srcFD, long position, lon long n; boolean append = fdAccess.getAppend(fd); do { - long comp = Blocker.begin(); - try { - n = nd.transferFrom(srcFD, fd, position, count, append); - } finally { - Blocker.end(comp); - } + n = nd.transferFrom(srcFD, fd, position, count, append); } while ((n == IOStatus.INTERRUPTED) && isOpen()); return n; } @@ -1088,11 +1046,11 @@ private int readInternal(ByteBuffer dst, long position) throws IOException { if (!isOpen()) return -1; do { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(direct); try { n = IOUtil.read(fd, dst, position, direct, alignment, nd); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } while ((n == IOStatus.INTERRUPTED) && isOpen()); return IOStatus.normalize(n); @@ -1133,11 +1091,11 @@ private int writeInternal(ByteBuffer src, long position) throws IOException { if (!isOpen()) return -1; do { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(sync || direct); try { n = IOUtil.write(fd, src, position, direct, alignment, nd); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } while ((n == IOStatus.INTERRUPTED) && isOpen()); return IOStatus.normalize(n); @@ -1362,12 +1320,7 @@ private Unmapper mapInternal(MapMode mode, long position, long size, int prot, b synchronized (positionLock) { long filesize; do { - long comp = Blocker.begin(); - try { - filesize = nd.size(fd); - } finally { - Blocker.end(comp); - } + filesize = nd.size(fd); } while ((filesize == IOStatus.INTERRUPTED) && isOpen()); if (!isOpen()) return null; @@ -1379,12 +1332,7 @@ private Unmapper mapInternal(MapMode mode, long position, long size, int prot, b } int rv; do { - long comp = Blocker.begin(); - try { - rv = nd.truncate(fd, position + size); - } finally { - Blocker.end(comp); - } + rv = nd.truncate(fd, position + size); } while ((rv == IOStatus.INTERRUPTED) && isOpen()); if (!isOpen()) return null; @@ -1575,11 +1523,11 @@ public FileLock lock(long position, long size, boolean shared) return null; int n; do { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(); try { n = nd.lock(fd, true, position, size, shared); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } while ((n == FileDispatcher.INTERRUPTED) && isOpen()); if (isOpen()) { diff --git a/src/java.base/unix/classes/java/io/UnixFileSystem.java b/src/java.base/unix/classes/java/io/UnixFileSystem.java index 682e9a69b5681..18afb729c019d 100644 --- a/src/java.base/unix/classes/java/io/UnixFileSystem.java +++ b/src/java.base/unix/classes/java/io/UnixFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ package java.io; import java.util.Properties; -import jdk.internal.misc.Blocker; import jdk.internal.util.StaticProperty; import sun.security.action.GetPropertyAction; @@ -161,12 +160,7 @@ public String resolve(File f) { @Override public String canonicalize(String path) throws IOException { - long comp = Blocker.begin(); - try { - return canonicalize0(path); - } finally { - Blocker.end(comp); - } + return canonicalize0(path); } private native String canonicalize0(String path) throws IOException; @@ -176,25 +170,13 @@ public String canonicalize(String path) throws IOException { @Override public int getBooleanAttributes(File f) { - int rv; - long comp = Blocker.begin(); - try { - rv = getBooleanAttributes0(f); - } finally { - Blocker.end(comp); - } + int rv = getBooleanAttributes0(f); return rv | isHidden(f); } @Override public boolean hasBooleanAttributes(File f, int attributes) { - int rv; - long comp = Blocker.begin(); - try { - rv = getBooleanAttributes0(f); - } finally { - Blocker.end(comp); - } + int rv = getBooleanAttributes0(f); if ((attributes & BA_HIDDEN) != 0) { rv |= isHidden(f); } @@ -207,45 +189,25 @@ private static int isHidden(File f) { @Override public boolean checkAccess(File f, int access) { - long comp = Blocker.begin(); - try { - return checkAccess0(f, access); - } finally { - Blocker.end(comp); - } + return checkAccess0(f, access); } private native boolean checkAccess0(File f, int access); @Override public long getLastModifiedTime(File f) { - long comp = Blocker.begin(); - try { - return getLastModifiedTime0(f); - } finally { - Blocker.end(comp); - } + return getLastModifiedTime0(f); } private native long getLastModifiedTime0(File f); @Override public long getLength(File f) { - long comp = Blocker.begin(); - try { - return getLength0(f); - } finally { - Blocker.end(comp); - } + return getLength0(f); } private native long getLength0(File f); @Override public boolean setPermission(File f, int access, boolean enable, boolean owneronly) { - long comp = Blocker.begin(); - try { - return setPermission0(f, access, enable, owneronly); - } finally { - Blocker.end(comp); - } + return setPermission0(f, access, enable, owneronly); } private native boolean setPermission0(File f, int access, boolean enable, boolean owneronly); @@ -253,78 +215,43 @@ public boolean setPermission(File f, int access, boolean enable, boolean owneron @Override public boolean createFileExclusively(String path) throws IOException { - long comp = Blocker.begin(); - try { - return createFileExclusively0(path); - } finally { - Blocker.end(comp); - } + return createFileExclusively0(path); } private native boolean createFileExclusively0(String path) throws IOException; @Override public boolean delete(File f) { - long comp = Blocker.begin(); - try { - return delete0(f); - } finally { - Blocker.end(comp); - } + return delete0(f); } private native boolean delete0(File f); @Override public String[] list(File f) { - long comp = Blocker.begin(); - try { - return list0(f); - } finally { - Blocker.end(comp); - } + return list0(f); } private native String[] list0(File f); @Override public boolean createDirectory(File f) { - long comp = Blocker.begin(); - try { - return createDirectory0(f); - } finally { - Blocker.end(comp); - } + return createDirectory0(f); } private native boolean createDirectory0(File f); @Override public boolean rename(File f1, File f2) { - long comp = Blocker.begin(); - try { - return rename0(f1, f2); - } finally { - Blocker.end(comp); - } + return rename0(f1, f2); } private native boolean rename0(File f1, File f2); @Override public boolean setLastModifiedTime(File f, long time) { - long comp = Blocker.begin(); - try { - return setLastModifiedTime0(f, time); - } finally { - Blocker.end(comp); - } + return setLastModifiedTime0(f, time); } private native boolean setLastModifiedTime0(File f, long time); @Override public boolean setReadOnly(File f) { - long comp = Blocker.begin(); - try { - return setReadOnly0(f); - } finally { - Blocker.end(comp); - } + return setReadOnly0(f); } private native boolean setReadOnly0(File f); @@ -348,12 +275,7 @@ public File[] listRoots() { @Override public long getSpace(File f, int t) { - long comp = Blocker.begin(); - try { - return getSpace0(f, t); - } finally { - Blocker.end(comp); - } + return getSpace0(f, t); } private native long getSpace0(File f, int t); diff --git a/src/java.base/unix/classes/java/lang/ProcessImpl.java b/src/java.base/unix/classes/java/lang/ProcessImpl.java index 3b302b23cd317..da4874b01817c 100644 --- a/src/java.base/unix/classes/java/lang/ProcessImpl.java +++ b/src/java.base/unix/classes/java/lang/ProcessImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -626,7 +626,7 @@ public void close() throws IOException { */ private static class ProcessPipeOutputStream extends BufferedOutputStream { ProcessPipeOutputStream(int fd) { - super(new FileOutputStream(newFileDescriptor(fd))); + super(new PipeOutputStream(newFileDescriptor(fd))); } /** Called by the process reaper thread when the process exits. */ diff --git a/src/java.base/unix/classes/sun/nio/ch/PollSelectorImpl.java b/src/java.base/unix/classes/sun/nio/ch/PollSelectorImpl.java index 513c871e0e4ac..a3bff8d1e6523 100644 --- a/src/java.base/unix/classes/sun/nio/ch/PollSelectorImpl.java +++ b/src/java.base/unix/classes/sun/nio/ch/PollSelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2024, 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 @@ -111,11 +111,11 @@ protected int doSelect(Consumer<SelectionKey> action, long timeout) int numPolled; do { long startTime = timedPoll ? System.nanoTime() : 0; - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(blocking); try { numPolled = poll(pollArray.address(), pollArraySize, to); } finally { - Blocker.end(comp); + Blocker.end(attempted); } if (numPolled == IOStatus.INTERRUPTED && timedPoll) { // timed poll interrupted so need to adjust timeout diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixChannelFactory.java b/src/java.base/unix/classes/sun/nio/fs/UnixChannelFactory.java index eed7bc4c575bc..475b61036a266 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixChannelFactory.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixChannelFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -131,8 +131,8 @@ static FileChannel newFileChannel(int dfd, throw new IllegalArgumentException("APPEND + TRUNCATE_EXISTING not allowed"); FileDescriptor fdObj = open(dfd, path, pathForPermissionCheck, flags, mode); - return FileChannelImpl.open(fdObj, path.toString(), flags.read, - flags.write, flags.direct, null); + return FileChannelImpl.open(fdObj, path.toString(), flags.read, flags.write, + (flags.sync || flags.dsync), flags.direct, null); } /** diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixFileSystem.java b/src/java.base/unix/classes/sun/nio/fs/UnixFileSystem.java index a9e10a94be31f..2b9ab775ed815 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixFileSystem.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixFileSystem.java @@ -52,7 +52,6 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; -import jdk.internal.misc.Blocker; import sun.nio.ch.DirectBuffer; import sun.nio.ch.IOStatus; import sun.security.action.GetPropertyAction; @@ -682,7 +681,6 @@ void copyFile(UnixPath source, // Some forms of direct copy do not work on zero size files if (!directCopyNotSupported && attrs.size() > 0) { // copy bytes to target using platform function - long comp = Blocker.begin(); try { int res = directCopy(fo, fi, addressToPollForCancel); if (res == 0) { @@ -692,8 +690,6 @@ void copyFile(UnixPath source, } } catch (UnixException x) { x.rethrowAsIOException(source, target); - } finally { - Blocker.end(comp); } } @@ -703,14 +699,11 @@ void copyFile(UnixPath source, ByteBuffer buf = sun.nio.ch.Util.getTemporaryDirectBuffer(bufferSize); try { - long comp = Blocker.begin(); try { bufferedCopy(fo, fi, ((DirectBuffer)buf).address(), bufferSize, addressToPollForCancel); } catch (UnixException x) { x.rethrowAsIOException(source, target); - } finally { - Blocker.end(comp); } } finally { sun.nio.ch.Util.releaseTemporaryDirectBuffer(buf); diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java b/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java index 2404f883c9c72..a069a9a04bac8 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,7 +26,6 @@ package sun.nio.fs; import java.util.function.Function; -import jdk.internal.misc.Blocker; /** * Unix system and library calls. @@ -67,12 +66,7 @@ static NativeBuffer copyToNativeBuffer(UnixPath path) { */ static int open(UnixPath path, int flags, int mode) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return open0(buffer.address(), flags, mode); - } finally { - Blocker.end(comp); - } + return open0(buffer.address(), flags, mode); } } private static native int open0(long pathAddress, int flags, int mode) @@ -83,12 +77,7 @@ private static native int open0(long pathAddress, int flags, int mode) */ static int openat(int dfd, byte[] path, int flags, int mode) throws UnixException { try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return openat0(dfd, buffer.address(), flags, mode); - } finally { - Blocker.end(comp); - } + return openat0(dfd, buffer.address(), flags, mode); } } private static native int openat0(int dfd, long pathAddress, int flags, int mode) @@ -138,12 +127,7 @@ void close(int fd, Function<UnixException, X> mapper) throws X { static void link(UnixPath existing, UnixPath newfile) throws UnixException { try (NativeBuffer existingBuffer = copyToNativeBuffer(existing); NativeBuffer newBuffer = copyToNativeBuffer(newfile)) { - long comp = Blocker.begin(); - try { - link0(existingBuffer.address(), newBuffer.address()); - } finally { - Blocker.end(comp); - } + link0(existingBuffer.address(), newBuffer.address()); } } private static native void link0(long existingAddress, long newAddress) @@ -154,12 +138,7 @@ private static native void link0(long existingAddress, long newAddress) */ static void unlink(UnixPath path) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - unlink0(buffer.address()); - } finally { - Blocker.end(comp); - } + unlink0(buffer.address()); } } private static native void unlink0(long pathAddress) throws UnixException; @@ -169,12 +148,7 @@ static void unlink(UnixPath path) throws UnixException { */ static void unlinkat(int dfd, byte[] path, int flag) throws UnixException { try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - unlinkat0(dfd, buffer.address(), flag); - } finally { - Blocker.end(comp); - } + unlinkat0(dfd, buffer.address(), flag); } } private static native void unlinkat0(int dfd, long pathAddress, int flag) @@ -185,12 +159,7 @@ private static native void unlinkat0(int dfd, long pathAddress, int flag) */ static void mknod(UnixPath path, int mode, long dev) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - mknod0(buffer.address(), mode, dev); - } finally { - Blocker.end(comp); - } + mknod0(buffer.address(), mode, dev); } } private static native void mknod0(long pathAddress, int mode, long dev) @@ -202,12 +171,7 @@ private static native void mknod0(long pathAddress, int mode, long dev) static void rename(UnixPath from, UnixPath to) throws UnixException { try (NativeBuffer fromBuffer = copyToNativeBuffer(from); NativeBuffer toBuffer = copyToNativeBuffer(to)) { - long comp = Blocker.begin(); - try { - rename0(fromBuffer.address(), toBuffer.address()); - } finally { - Blocker.end(comp); - } + rename0(fromBuffer.address(), toBuffer.address()); } } private static native void rename0(long fromAddress, long toAddress) @@ -219,12 +183,7 @@ private static native void rename0(long fromAddress, long toAddress) static void renameat(int fromfd, byte[] from, int tofd, byte[] to) throws UnixException { try (NativeBuffer fromBuffer = NativeBuffers.asNativeBuffer(from); NativeBuffer toBuffer = NativeBuffers.asNativeBuffer(to)) { - long comp = Blocker.begin(); - try { - renameat0(fromfd, fromBuffer.address(), tofd, toBuffer.address()); - } finally { - Blocker.end(comp); - } + renameat0(fromfd, fromBuffer.address(), tofd, toBuffer.address()); } } private static native void renameat0(int fromfd, long fromAddress, int tofd, long toAddress) @@ -235,12 +194,7 @@ private static native void renameat0(int fromfd, long fromAddress, int tofd, lon */ static void mkdir(UnixPath path, int mode) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - mkdir0(buffer.address(), mode); - } finally { - Blocker.end(comp); - } + mkdir0(buffer.address(), mode); } } private static native void mkdir0(long pathAddress, int mode) throws UnixException; @@ -250,12 +204,7 @@ static void mkdir(UnixPath path, int mode) throws UnixException { */ static void rmdir(UnixPath path) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - rmdir0(buffer.address()); - } finally { - Blocker.end(comp); - } + rmdir0(buffer.address()); } } private static native void rmdir0(long pathAddress) throws UnixException; @@ -267,12 +216,7 @@ static void rmdir(UnixPath path) throws UnixException { */ static byte[] readlink(UnixPath path) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return readlink0(buffer.address()); - } finally { - Blocker.end(comp); - } + return readlink0(buffer.address()); } } private static native byte[] readlink0(long pathAddress) throws UnixException; @@ -284,12 +228,7 @@ static byte[] readlink(UnixPath path) throws UnixException { */ static byte[] realpath(UnixPath path) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return realpath0(buffer.address()); - } finally { - Blocker.end(comp); - } + return realpath0(buffer.address()); } } private static native byte[] realpath0(long pathAddress) throws UnixException; @@ -300,12 +239,7 @@ static byte[] realpath(UnixPath path) throws UnixException { static void symlink(byte[] name1, UnixPath name2) throws UnixException { try (NativeBuffer targetBuffer = NativeBuffers.asNativeBuffer(name1); NativeBuffer linkBuffer = copyToNativeBuffer(name2)) { - long comp = Blocker.begin(); - try { - symlink0(targetBuffer.address(), linkBuffer.address()); - } finally { - Blocker.end(comp); - } + symlink0(targetBuffer.address(), linkBuffer.address()); } } private static native void symlink0(long name1, long name2) @@ -316,26 +250,16 @@ private static native void symlink0(long name1, long name2) */ static void stat(UnixPath path, UnixFileAttributes attrs) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - int errno = stat0(buffer.address(), attrs); - if (errno != 0) { - throw new UnixException(errno); - } - } finally { - Blocker.end(comp); + int errno = stat0(buffer.address(), attrs); + if (errno != 0) { + throw new UnixException(errno); } } } static int stat2(UnixPath path, UnixFileAttributes attrs) { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return stat0(buffer.address(), attrs); - } finally { - Blocker.end(comp); - } + return stat0(buffer.address(), attrs); } } @@ -346,12 +270,7 @@ static int stat2(UnixPath path, UnixFileAttributes attrs) { */ static void lstat(UnixPath path, UnixFileAttributes attrs) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - lstat0(buffer.address(), attrs); - } finally { - Blocker.end(comp); - } + lstat0(buffer.address(), attrs); } } private static native void lstat0(long pathAddress, UnixFileAttributes attrs) @@ -361,12 +280,7 @@ private static native void lstat0(long pathAddress, UnixFileAttributes attrs) * fstat(int filedes, struct stat* buf) */ static void fstat(int fd, UnixFileAttributes attrs) throws UnixException { - long comp = Blocker.begin(); - try { - fstat0(fd, attrs); - } finally { - Blocker.end(comp); - } + fstat0(fd, attrs); } private static native void fstat0(int fd, UnixFileAttributes attrs) throws UnixException; @@ -378,12 +292,7 @@ static void fstatat(int dfd, byte[] path, int flag, UnixFileAttributes attrs) throws UnixException { try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - fstatat0(dfd, buffer.address(), flag, attrs); - } finally { - Blocker.end(comp); - } + fstatat0(dfd, buffer.address(), flag, attrs); } } private static native void fstatat0(int dfd, long pathAddress, int flag, @@ -394,12 +303,7 @@ private static native void fstatat0(int dfd, long pathAddress, int flag, */ static void chown(UnixPath path, int uid, int gid) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - chown0(buffer.address(), uid, gid); - } finally { - Blocker.end(comp); - } + chown0(buffer.address(), uid, gid); } } private static native void chown0(long pathAddress, int uid, int gid) @@ -410,12 +314,7 @@ private static native void chown0(long pathAddress, int uid, int gid) */ static void lchown(UnixPath path, int uid, int gid) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - lchown0(buffer.address(), uid, gid); - } finally { - Blocker.end(comp); - } + lchown0(buffer.address(), uid, gid); } } private static native void lchown0(long pathAddress, int uid, int gid) @@ -425,12 +324,7 @@ private static native void lchown0(long pathAddress, int uid, int gid) * fchown(int filedes, uid_t owner, gid_t group) */ static void fchown(int fd, int uid, int gid) throws UnixException { - long comp = Blocker.begin(); - try { - fchown0(fd, uid, gid); - } finally { - Blocker.end(comp); - } + fchown0(fd, uid, gid); } static native void fchown0(int fd, int uid, int gid) throws UnixException; @@ -439,12 +333,7 @@ static void fchown(int fd, int uid, int gid) throws UnixException { */ static void chmod(UnixPath path, int mode) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - chmod0(buffer.address(), mode); - } finally { - Blocker.end(comp); - } + chmod0(buffer.address(), mode); } } private static native void chmod0(long pathAddress, int mode) @@ -454,12 +343,7 @@ private static native void chmod0(long pathAddress, int mode) * fchmod(int fildes, mode_t mode) */ static void fchmod(int fd, int mode) throws UnixException { - long comp = Blocker.begin(); - try { - fchmod0(fd, mode); - } finally { - Blocker.end(comp); - } + fchmod0(fd, mode); } private static native void fchmod0(int fd, int mode) throws UnixException; @@ -470,12 +354,7 @@ static void utimes(UnixPath path, long times0, long times1) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - utimes0(buffer.address(), times0, times1); - } finally { - Blocker.end(comp); - } + utimes0(buffer.address(), times0, times1); } } private static native void utimes0(long pathAddress, long times0, long times1) @@ -485,12 +364,7 @@ private static native void utimes0(long pathAddress, long times0, long times1) * futimes(int fildes, const struct timeval times[2]) */ static void futimes(int fd, long times0, long times1) throws UnixException { - long comp = Blocker.begin(); - try { - futimes0(fd, times0, times1); - } finally { - Blocker.end(comp); - } + futimes0(fd, times0, times1); } private static native void futimes0(int fd, long times0, long times1) throws UnixException; @@ -499,12 +373,7 @@ private static native void futimes0(int fd, long times0, long times1) * futimens(int fildes, const struct timespec times[2]) */ static void futimens(int fd, long times0, long times1) throws UnixException { - long comp = Blocker.begin(); - try { - futimens0(fd, times0, times1); - } finally { - Blocker.end(comp); - } + futimens0(fd, times0, times1); } private static native void futimens0(int fd, long times0, long times1) throws UnixException; @@ -516,12 +385,7 @@ static void lutimes(UnixPath path, long times0, long times1) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - lutimes0(buffer.address(), times0, times1); - } finally { - Blocker.end(comp); - } + lutimes0(buffer.address(), times0, times1); } } private static native void lutimes0(long pathAddress, long times0, long times1) @@ -532,12 +396,7 @@ private static native void lutimes0(long pathAddress, long times0, long times1) */ static long opendir(UnixPath path) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return opendir0(buffer.address()); - } finally { - Blocker.end(comp); - } + return opendir0(buffer.address()); } } private static native long opendir0(long pathAddress) throws UnixException; @@ -559,12 +418,7 @@ static long opendir(UnixPath path) throws UnixException { * @return dirent->d_name */ static byte[] readdir(long dir) throws UnixException { - long comp = Blocker.begin(); - try { - return readdir0(dir); - } finally { - Blocker.end(comp); - } + return readdir0(dir); } static native byte[] readdir0(long dir) throws UnixException; @@ -572,12 +426,7 @@ static byte[] readdir(long dir) throws UnixException { * size_t read(int fildes, void* buf, size_t nbyte) */ static int read(int fildes, long buf, int nbyte) throws UnixException { - long comp = Blocker.begin(); - try { - return read0(fildes, buf, nbyte); - } finally { - Blocker.end(comp); - } + return read0(fildes, buf, nbyte); } private static native int read0(int fildes, long buf, int nbyte) throws UnixException; @@ -585,12 +434,7 @@ static int read(int fildes, long buf, int nbyte) throws UnixException { * size_t writeint fildes, void* buf, size_t nbyte) */ static int write(int fildes, long buf, int nbyte) throws UnixException { - long comp = Blocker.begin(); - try { - return write0(fildes, buf, nbyte); - } finally { - Blocker.end(comp); - } + return write0(fildes, buf, nbyte); } private static native int write0(int fildes, long buf, int nbyte) throws UnixException; @@ -599,12 +443,7 @@ static int write(int fildes, long buf, int nbyte) throws UnixException { */ static int access(UnixPath path, int amode) { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return access0(buffer.address(), amode); - } finally { - Blocker.end(comp); - } + return access0(buffer.address(), amode); } } private static native int access0(long pathAddress, int amode); @@ -630,12 +469,7 @@ static int access(UnixPath path, int amode) { */ static int getpwnam(String name) throws UnixException { try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(Util.toBytes(name))) { - long comp = Blocker.begin(); - try { - return getpwnam0(buffer.address()); - } finally { - Blocker.end(comp); - } + return getpwnam0(buffer.address()); } } private static native int getpwnam0(long nameAddress) throws UnixException; @@ -647,12 +481,7 @@ static int getpwnam(String name) throws UnixException { */ static int getgrnam(String name) throws UnixException { try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(Util.toBytes(name))) { - long comp = Blocker.begin(); - try { - return getgrnam0(buffer.address()); - } finally { - Blocker.end(comp); - } + return getgrnam0(buffer.address()); } } private static native int getgrnam0(long nameAddress) throws UnixException; @@ -664,12 +493,7 @@ static void statvfs(UnixPath path, UnixFileStoreAttributes attrs) throws UnixException { try (NativeBuffer buffer = copyToNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - statvfs0(buffer.address(), attrs); - } finally { - Blocker.end(comp); - } + statvfs0(buffer.address(), attrs); } } private static native void statvfs0(long pathAddress, UnixFileStoreAttributes attrs) @@ -687,12 +511,7 @@ static int fgetxattr(int filedes, byte[] name, long valueAddress, int valueLen) throws UnixException { try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(name)) { - long comp = Blocker.begin(); - try { - return fgetxattr0(filedes, buffer.address(), valueAddress, valueLen); - } finally { - Blocker.end(comp); - } + return fgetxattr0(filedes, buffer.address(), valueAddress, valueLen); } } @@ -706,12 +525,7 @@ static void fsetxattr(int filedes, byte[] name, long valueAddress, int valueLen) throws UnixException { try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(name)) { - long comp = Blocker.begin(); - try { - fsetxattr0(filedes, buffer.address(), valueAddress, valueLen); - } finally { - Blocker.end(comp); - } + fsetxattr0(filedes, buffer.address(), valueAddress, valueLen); } } @@ -723,12 +537,7 @@ private static native void fsetxattr0(int filedes, long nameAddress, */ static void fremovexattr(int filedes, byte[] name) throws UnixException { try (NativeBuffer buffer = NativeBuffers.asNativeBuffer(name)) { - long comp = Blocker.begin(); - try { - fremovexattr0(filedes, buffer.address()); - } finally { - Blocker.end(comp); - } + fremovexattr0(filedes, buffer.address()); } } diff --git a/src/java.base/windows/classes/java/io/WinNTFileSystem.java b/src/java.base/windows/classes/java/io/WinNTFileSystem.java index e700d44cfae09..cf58d980bbe75 100644 --- a/src/java.base/windows/classes/java/io/WinNTFileSystem.java +++ b/src/java.base/windows/classes/java/io/WinNTFileSystem.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2024, 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 @@ -30,7 +30,6 @@ import java.util.BitSet; import java.util.Locale; import java.util.Properties; -import jdk.internal.misc.Blocker; import sun.security.action.GetPropertyAction; /** @@ -491,12 +490,7 @@ public String canonicalize(String path) throws IOException { return path; return "" + ((char) (c-32)) + ':' + '\\'; } - long comp = Blocker.begin(); - try { - return canonicalize0(path); - } finally { - Blocker.end(comp); - } + return canonicalize0(path); } private native String canonicalize0(String path) @@ -507,56 +501,31 @@ private native String canonicalize0(String path) @Override public int getBooleanAttributes(File f) { - long comp = Blocker.begin(); - try { - return getBooleanAttributes0(f); - } finally { - Blocker.end(comp); - } + return getBooleanAttributes0(f); } private native int getBooleanAttributes0(File f); @Override public boolean checkAccess(File f, int access) { - long comp = Blocker.begin(); - try { - return checkAccess0(f, access); - } finally { - Blocker.end(comp); - } + return checkAccess0(f, access); } private native boolean checkAccess0(File f, int access); @Override public long getLastModifiedTime(File f) { - long comp = Blocker.begin(); - try { - return getLastModifiedTime0(f); - } finally { - Blocker.end(comp); - } + return getLastModifiedTime0(f); } private native long getLastModifiedTime0(File f); @Override public long getLength(File f) { - long comp = Blocker.begin(); - try { - return getLength0(f); - } finally { - Blocker.end(comp); - } + return getLength0(f); } private native long getLength0(File f); @Override public boolean setPermission(File f, int access, boolean enable, boolean owneronly) { - long comp = Blocker.begin(); - try { - return setPermission0(f, access, enable, owneronly); - } finally { - Blocker.end(comp); - } + return setPermission0(f, access, enable, owneronly); } private native boolean setPermission0(File f, int access, boolean enable, boolean owneronly); @@ -564,78 +533,43 @@ public boolean setPermission(File f, int access, boolean enable, boolean owneron @Override public boolean createFileExclusively(String path) throws IOException { - long comp = Blocker.begin(); - try { - return createFileExclusively0(path); - } finally { - Blocker.end(comp); - } + return createFileExclusively0(path); } private native boolean createFileExclusively0(String path) throws IOException; @Override public String[] list(File f) { - long comp = Blocker.begin(); - try { - return list0(f); - } finally { - Blocker.end(comp); - } + return list0(f); } private native String[] list0(File f); @Override public boolean createDirectory(File f) { - long comp = Blocker.begin(); - try { - return createDirectory0(f); - } finally { - Blocker.end(comp); - } + return createDirectory0(f); } private native boolean createDirectory0(File f); @Override public boolean setLastModifiedTime(File f, long time) { - long comp = Blocker.begin(); - try { - return setLastModifiedTime0(f, time); - } finally { - Blocker.end(comp); - } + return setLastModifiedTime0(f, time); } private native boolean setLastModifiedTime0(File f, long time); @Override public boolean setReadOnly(File f) { - long comp = Blocker.begin(); - try { - return setReadOnly0(f); - } finally { - Blocker.end(comp); - } + return setReadOnly0(f); } private native boolean setReadOnly0(File f); @Override public boolean delete(File f) { - long comp = Blocker.begin(); - try { - return delete0(f); - } finally { - Blocker.end(comp); - } + return delete0(f); } private native boolean delete0(File f); @Override public boolean rename(File f1, File f2) { - long comp = Blocker.begin(); - try { - return rename0(f1, f2); - } finally { - Blocker.end(comp); - } + return rename0(f1, f2); } private native boolean rename0(File f1, File f2); diff --git a/src/java.base/windows/classes/java/lang/ProcessImpl.java b/src/java.base/windows/classes/java/lang/ProcessImpl.java index a01d1db6ddce4..d6fb51c4494ed 100644 --- a/src/java.base/windows/classes/java/lang/ProcessImpl.java +++ b/src/java.base/windows/classes/java/lang/ProcessImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2024, 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 @@ -515,7 +515,7 @@ public Void run() { fdAccess.setHandle(stdin_fd, stdHandles[0]); fdAccess.registerCleanup(stdin_fd); stdin_stream = new BufferedOutputStream( - new FileOutputStream(stdin_fd)); + new PipeOutputStream(stdin_fd)); } if (stdHandles[1] == -1L || forceNullOutputStream) @@ -564,11 +564,11 @@ public int exitValue() { private static native int getExitCodeProcess(long handle); public int waitFor() throws InterruptedException { - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(); try { waitForInterruptibly(handle); } finally { - Blocker.end(comp); + Blocker.end(attempted); } if (Thread.interrupted()) throw new InterruptedException(); @@ -593,11 +593,11 @@ public boolean waitFor(long timeout, TimeUnit unit) // if wraps around then wait a long while msTimeout = Integer.MAX_VALUE; } - long comp = Blocker.begin(); + boolean attempted = Blocker.begin(); try { waitForTimeoutInterruptibly(handle, msTimeout); } finally { - Blocker.end(comp); + Blocker.end(attempted); } if (Thread.interrupted()) throw new InterruptedException(); diff --git a/src/java.base/windows/classes/sun/nio/ch/WEPollSelectorImpl.java b/src/java.base/windows/classes/sun/nio/ch/WEPollSelectorImpl.java index 2b39a7ed4a9a5..bbcfab9bbf19c 100644 --- a/src/java.base/windows/classes/sun/nio/ch/WEPollSelectorImpl.java +++ b/src/java.base/windows/classes/sun/nio/ch/WEPollSelectorImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -109,11 +109,11 @@ protected int doSelect(Consumer<SelectionKey> action, long timeout) processDeregisterQueue(); try { begin(blocking); - long comp = Blocker.begin(blocking); + boolean attempted = Blocker.begin(blocking); try { numEntries = WEPoll.wait(eph, pollArrayAddress, NUM_EPOLLEVENTS, to); } finally { - Blocker.end(comp); + Blocker.end(attempted); } } finally { end(blocking); diff --git a/src/java.base/windows/classes/sun/nio/fs/WindowsChannelFactory.java b/src/java.base/windows/classes/sun/nio/fs/WindowsChannelFactory.java index 56f09d34ab866..3a14221d62ab9 100644 --- a/src/java.base/windows/classes/sun/nio/fs/WindowsChannelFactory.java +++ b/src/java.base/windows/classes/sun/nio/fs/WindowsChannelFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -166,8 +166,8 @@ static FileChannel newFileChannel(String pathForWindows, throw new IllegalArgumentException("APPEND + TRUNCATE_EXISTING not allowed"); FileDescriptor fdObj = open(pathForWindows, pathToCheck, flags, pSecurityDescriptor); - return FileChannelImpl.open(fdObj, pathForWindows, flags.read, - flags.write, flags.direct, null); + return FileChannelImpl.open(fdObj, pathForWindows, flags.read, flags.write, + (flags.sync || flags.dsync), flags.direct, null); } /** diff --git a/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java b/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java index 34d748f4150e6..8e351b7e0effa 100644 --- a/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java +++ b/src/java.base/windows/classes/sun/nio/fs/WindowsNativeDispatcher.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,6 @@ package sun.nio.fs; -import jdk.internal.misc.Blocker; import jdk.internal.misc.Unsafe; import static sun.nio.fs.WindowsConstants.*; @@ -68,17 +67,12 @@ static long CreateFile(String path, throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return CreateFile0(buffer.address(), - dwDesiredAccess, - dwShareMode, - lpSecurityAttributes, - dwCreationDisposition, - dwFlagsAndAttributes); - } finally { - Blocker.end(comp); - } + return CreateFile0(buffer.address(), + dwDesiredAccess, + dwShareMode, + lpSecurityAttributes, + dwCreationDisposition, + dwFlagsAndAttributes); } } static long CreateFile(String path, @@ -113,12 +107,7 @@ private static native long CreateFile0(long lpFileName, */ static void DeleteFile(String path) throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - DeleteFile0(buffer.address()); - } finally { - Blocker.end(comp); - } + DeleteFile0(buffer.address()); } } private static native void DeleteFile0(long lpFileName) @@ -132,12 +121,7 @@ private static native void DeleteFile0(long lpFileName) */ static void CreateDirectory(String path, long lpSecurityAttributes) throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - CreateDirectory0(buffer.address(), lpSecurityAttributes); - } finally { - Blocker.end(comp); - } + CreateDirectory0(buffer.address(), lpSecurityAttributes); } } private static native void CreateDirectory0(long lpFileName, long lpSecurityAttributes) @@ -150,12 +134,7 @@ private static native void CreateDirectory0(long lpFileName, long lpSecurityAttr */ static void RemoveDirectory(String path) throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - RemoveDirectory0(buffer.address()); - } finally { - Blocker.end(comp); - } + RemoveDirectory0(buffer.address()); } } private static native void RemoveDirectory0(long lpFileName) @@ -200,12 +179,7 @@ static native void DeviceIoControlGetReparsePoint(long handle, static FirstFile FindFirstFile(String path) throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { FirstFile data = new FirstFile(); - long comp = Blocker.begin(); - try { - FindFirstFile0(buffer.address(), data); - } finally { - Blocker.end(comp); - } + FindFirstFile0(buffer.address(), data); return data; } } @@ -230,12 +204,7 @@ private static native void FindFirstFile0(long lpFileName, FirstFile obj) */ static long FindFirstFile(String path, long address) throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return FindFirstFile1(buffer.address(), address); - } finally { - Blocker.end(comp); - } + return FindFirstFile1(buffer.address(), address); } } private static native long FindFirstFile1(long lpFileName, long address) @@ -250,12 +219,7 @@ private static native long FindFirstFile1(long lpFileName, long address) * @return lpFindFileData->cFileName or null */ static String FindNextFile(long handle, long address) throws WindowsException { - long comp = Blocker.begin(); - try { - return FindNextFile0(handle, address); - } finally { - Blocker.end(comp); - } + return FindNextFile0(handle, address); } private static native String FindNextFile0(long handle, long address) throws WindowsException; @@ -271,12 +235,7 @@ private static native String FindNextFile0(long handle, long address) static FirstStream FindFirstStream(String path) throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { FirstStream data = new FirstStream(); - long comp = Blocker.begin(); - try { - FindFirstStream0(buffer.address(), data); - } finally { - Blocker.end(comp); - } + FindFirstStream0(buffer.address(), data); if (data.handle() == WindowsConstants.INVALID_HANDLE_VALUE) return null; return data; @@ -300,12 +259,7 @@ private static native void FindFirstStream0(long lpFileName, FirstStream obj) * ) */ static String FindNextStream(long handle) throws WindowsException { - long comp = Blocker.begin(); - try { - return FindNextStream0(handle); - } finally { - Blocker.end(comp); - } + return FindNextStream0(handle); } private static native String FindNextStream0(long handle) throws WindowsException; @@ -325,12 +279,7 @@ static String FindNextStream(long handle) throws WindowsException { static void GetFileInformationByHandle(long handle, long address) throws WindowsException { - long comp = Blocker.begin(); - try { - GetFileInformationByHandle0(handle, address); - } finally { - Blocker.end(comp); - } + GetFileInformationByHandle0(handle, address); } private static native void GetFileInformationByHandle0(long handle, long address) throws WindowsException; @@ -351,13 +300,7 @@ static void CopyFileEx(String source, String target, int flags, { try (NativeBuffer sourceBuffer = asNativeBuffer(source); NativeBuffer targetBuffer = asNativeBuffer(target)) { - long comp = Blocker.begin(); - try { - CopyFileEx0(sourceBuffer.address(), targetBuffer.address(), flags, - addressToPollForCancel); - } finally { - Blocker.end(comp); - } + CopyFileEx0(sourceBuffer.address(), targetBuffer.address(), flags, addressToPollForCancel); } } private static native void CopyFileEx0(long existingAddress, long newAddress, @@ -375,12 +318,7 @@ static void MoveFileEx(String source, String target, int flags) { try (NativeBuffer sourceBuffer = asNativeBuffer(source); NativeBuffer targetBuffer = asNativeBuffer(target)) { - long comp = Blocker.begin(); - try { - MoveFileEx0(sourceBuffer.address(), targetBuffer.address(), flags); - } finally { - Blocker.end(comp); - } + MoveFileEx0(sourceBuffer.address(), targetBuffer.address(), flags); } } private static native void MoveFileEx0(long existingAddress, long newAddress, @@ -393,12 +331,7 @@ private static native void MoveFileEx0(long existingAddress, long newAddress, */ static int GetFileAttributes(String path) throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - return GetFileAttributes0(buffer.address()); - } finally { - Blocker.end(comp); - } + return GetFileAttributes0(buffer.address()); } } private static native int GetFileAttributes0(long lpFileName) @@ -413,12 +346,7 @@ static void SetFileAttributes(String path, int dwFileAttributes) throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - SetFileAttributes0(buffer.address(), dwFileAttributes); - } finally { - Blocker.end(comp); - } + SetFileAttributes0(buffer.address(), dwFileAttributes); } } private static native void SetFileAttributes0(long lpFileName, @@ -433,12 +361,7 @@ private static native void SetFileAttributes0(long lpFileName, */ static void GetFileAttributesEx(String path, long address) throws WindowsException { try (NativeBuffer buffer = asNativeBuffer(path)) { - long comp = Blocker.begin(); - try { - GetFileAttributesEx0(buffer.address(), address); - } finally { - Blocker.end(comp); - } + GetFileAttributesEx0(buffer.address(), address); } } private static native void GetFileAttributesEx0(long lpFileName, long address) @@ -455,12 +378,7 @@ private static native void GetFileAttributesEx0(long lpFileName, long address) static void SetFileTime(long handle, long createTime, long lastAccessTime, long lastWriteTime) throws WindowsException { - long comp = Blocker.begin(); - try { - SetFileTime0(handle, createTime, lastAccessTime, lastWriteTime); - } finally { - Blocker.end(comp); - } + SetFileTime0(handle, createTime, lastAccessTime, lastWriteTime); } private static native void SetFileTime0(long handle, long createTime, diff --git a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI04/bi04t002/newclass02/java.base/java/lang/Object.java b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI04/bi04t002/newclass02/java.base/java/lang/Object.java index df2239bcb5ebc..7593b460c2e0c 100644 --- a/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI04/bi04t002/newclass02/java.base/java/lang/Object.java +++ b/test/hotspot/jtreg/vmTestbase/nsk/jvmti/scenarios/bcinstr/BI04/bi04t002/newclass02/java.base/java/lang/Object.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2024, 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 @@ -368,16 +368,21 @@ public String toString() { * @see java.lang.Object#notifyAll() */ public final void wait(long timeoutMillis) throws InterruptedException { - long comp = Blocker.begin(); + if (!Thread.currentThread().isVirtual()) { + wait0(timeoutMillis); + return; + } + + // virtual thread waiting + boolean attempted = Blocker.begin(); try { wait0(timeoutMillis); } catch (InterruptedException e) { - Thread thread = Thread.currentThread(); - if (thread.isVirtual()) - thread.getAndClearInterrupt(); + // virtual thread's interrupt status needs to be cleared + Thread.currentThread().getAndClearInterrupt(); throw e; } finally { - Blocker.end(comp); + Blocker.end(attempted); } } From b4cea701c9cab15007c485088dd5b8d7025d83ef Mon Sep 17 00:00:00 2001 From: Guoxiong Li <gli@openjdk.org> Date: Tue, 23 Apr 2024 16:32:20 +0000 Subject: [PATCH 067/141] 8330693: Generational ZGC: Simplify ZAddress::finalizable_good and ZAddress::mark_good Reviewed-by: stefank, eosterlund --- src/hotspot/share/gc/z/zAddress.inline.hpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/hotspot/share/gc/z/zAddress.inline.hpp b/src/hotspot/share/gc/z/zAddress.inline.hpp index 7f3a52e3594b4..4adbf50bc86c6 100644 --- a/src/hotspot/share/gc/z/zAddress.inline.hpp +++ b/src/hotspot/share/gc/z/zAddress.inline.hpp @@ -600,9 +600,7 @@ inline zpointer ZAddress::finalizable_good(zaddress addr, zpointer prev) { return color_null(); } - const uintptr_t non_mark_bits_mask = ZPointerMarkMetadataMask ^ ZPointerAllMetadataMask; - const uintptr_t non_mark_prev_bits = untype(prev) & non_mark_bits_mask; - return color(addr, ZPointerLoadGoodMask | ZPointerMarkedYoung | ZPointerFinalizable | non_mark_prev_bits | ZPointerRememberedMask); + return color(addr, ZPointerLoadGoodMask | ZPointerMarkedYoung | ZPointerFinalizable | ZPointerRememberedMask); } inline zpointer ZAddress::mark_good(zaddress addr, zpointer prev) { @@ -610,9 +608,7 @@ inline zpointer ZAddress::mark_good(zaddress addr, zpointer prev) { return color_null(); } - const uintptr_t non_mark_bits_mask = ZPointerMarkMetadataMask ^ ZPointerAllMetadataMask; - const uintptr_t non_mark_prev_bits = untype(prev) & non_mark_bits_mask; - return color(addr, ZPointerLoadGoodMask | ZPointerMarkedYoung | ZPointerMarkedOld | non_mark_prev_bits | ZPointerRememberedMask); + return color(addr, ZPointerLoadGoodMask | ZPointerMarkedYoung | ZPointerMarkedOld | ZPointerRememberedMask); } inline zpointer ZAddress::mark_old_good(zaddress addr, zpointer prev) { From 7157eea10130e5411ab8db4273dc37f6789cdcf6 Mon Sep 17 00:00:00 2001 From: Sonia Zaldana Calles <szaldana@openjdk.org> Date: Tue, 23 Apr 2024 18:01:55 +0000 Subject: [PATCH 068/141] 8327290: Remove unused notproduct option TraceInvocationCounterOverflow Reviewed-by: coleenp --- src/hotspot/share/runtime/globals.hpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 9087cb9b4a33e..59eb306739af8 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -867,9 +867,6 @@ const int ObjectAlignmentInBytes = 8; develop(bool, TraceBytecodes, false, \ "Trace bytecode execution") \ \ - develop(bool, TraceInvocationCounterOverflow, false, \ - "Trace method invocation counter overflow") \ - \ develop(bool, VerifyDependencies, trueInDebug, \ "Exercise and verify the compilation dependency mechanism") \ \ From 88a5dcead21f50e367f8ad77197e6ffdb98cbb20 Mon Sep 17 00:00:00 2001 From: Aleksei Voitylov <avoitylov@openjdk.org> Date: Tue, 23 Apr 2024 18:12:10 +0000 Subject: [PATCH 069/141] 8330805: ARM32 build is broken after JDK-8139457 Reviewed-by: shade --- src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp b/src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp index d9d042bb2e4e7..f1267587ce4f1 100644 --- a/src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/c1_MacroAssembler_arm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, 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 @@ -153,10 +153,9 @@ void C1_MacroAssembler::allocate_object(Register obj, Register tmp1, Register tm void C1_MacroAssembler::allocate_array(Register obj, Register len, Register tmp1, Register tmp2, Register tmp3, - int header_size, int element_size, + int header_size_in_bytes, int element_size, Register klass, Label& slow_case) { assert_different_registers(obj, len, tmp1, tmp2, tmp3, klass, Rtemp); - const int header_size_in_bytes = header_size * BytesPerWord; const int scale_shift = exact_log2(element_size); const Register obj_size = Rtemp; // Rtemp should be free at c1 LIR level From 9cc163a999eb8e9597d45b095b642c25071043bd Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons <jjg@openjdk.org> Date: Tue, 23 Apr 2024 18:43:36 +0000 Subject: [PATCH 070/141] 8330178: Clean up non-standard use of /** comments in `java.base` Reviewed-by: darcy, iris, dfuchs, aivanov, naoto --- .../classes/apple/security/AppleProvider.java | 2 +- .../classes/java/net/DefaultInterface.java | 10 ++++----- .../com/sun/crypto/provider/SunJCE.java | 2 +- .../share/classes/java/io/FilePermission.java | 4 +--- .../java/io/ObjectStreamConstants.java | 2 +- .../classes/java/lang/invoke/LambdaForm.java | 6 ++--- .../share/classes/java/math/BigInteger.java | 2 +- .../classes/java/math/MutableBigInteger.java | 8 +++---- .../classes/java/net/HttpURLConnection.java | 2 +- .../classes/java/util/regex/Pattern.java | 12 +++++----- .../internal/access/JavaAWTFontAccess.java | 4 ++-- .../jdk/internal/icu/lang/UCharacter.java | 2 +- .../jdk/internal/icu/text/BidiBase.java | 20 ++++++++--------- .../classes/jdk/internal/icu/text/UTF16.java | 2 +- .../jdk/internal/platform/Metrics.java | 12 +++++----- .../sun/net/www/content/text/plain.java | 8 +++---- .../www/protocol/file/FileURLConnection.java | 11 +++++----- .../AbstractDelegateHttpsURLConnection.java | 4 ++-- .../classes/sun/nio/ch/Interruptible.java | 4 ++-- .../sun/security/pkcs/ParsingException.java | 9 ++++---- .../sun/security/provider/SeedGenerator.java | 22 +++++++++---------- .../sun/security/util/ByteArrayTagOrder.java | 7 +++--- .../classes/sun/security/util/IOUtils.java | 7 +++--- 23 files changed, 78 insertions(+), 84 deletions(-) diff --git a/src/java.base/macosx/classes/apple/security/AppleProvider.java b/src/java.base/macosx/classes/apple/security/AppleProvider.java index 87efda6ebb162..3f584be336b90 100644 --- a/src/java.base/macosx/classes/apple/security/AppleProvider.java +++ b/src/java.base/macosx/classes/apple/security/AppleProvider.java @@ -28,7 +28,7 @@ import java.security.*; import static sun.security.util.SecurityConstants.PROVIDER_VER; -/** +/* * The Apple Security Provider. */ diff --git a/src/java.base/macosx/classes/java/net/DefaultInterface.java b/src/java.base/macosx/classes/java/net/DefaultInterface.java index 1901fcb156a84..b46de34a7ccf3 100644 --- a/src/java.base/macosx/classes/java/net/DefaultInterface.java +++ b/src/java.base/macosx/classes/java/net/DefaultInterface.java @@ -25,6 +25,11 @@ package java.net; +import java.security.AccessController; +import java.security.PrivilegedAction; +import java.util.Enumeration; +import java.io.IOException; + /** * Choose a network interface to be the default for * outgoing IPv6 traffic that does not specify a scope_id (and which needs one). @@ -37,11 +42,6 @@ * that returns null. */ -import java.security.AccessController; -import java.security.PrivilegedAction; -import java.util.Enumeration; -import java.io.IOException; - class DefaultInterface { private static final NetworkInterface defaultInterface = diff --git a/src/java.base/share/classes/com/sun/crypto/provider/SunJCE.java b/src/java.base/share/classes/com/sun/crypto/provider/SunJCE.java index 7914eb8ba0bbf..9bb1fa7ff8246 100644 --- a/src/java.base/share/classes/com/sun/crypto/provider/SunJCE.java +++ b/src/java.base/share/classes/com/sun/crypto/provider/SunJCE.java @@ -34,7 +34,7 @@ import static sun.security.util.SecurityConstants.PROVIDER_VER; import static sun.security.util.SecurityProviderConstants.*; -/** +/* * The "SunJCE" Cryptographic Service Provider. * * @author Jan Luehe diff --git a/src/java.base/share/classes/java/io/FilePermission.java b/src/java.base/share/classes/java/io/FilePermission.java index 7c07c60817108..808c42931434d 100644 --- a/src/java.base/share/classes/java/io/FilePermission.java +++ b/src/java.base/share/classes/java/io/FilePermission.java @@ -1231,12 +1231,10 @@ public Enumeration<Permission> elements() { new ObjectStreamField("permissions", Vector.class), }; - /** - * @serialData "permissions" field (a Vector containing the FilePermissions). - */ /** * Writes the contents of the perms field out as a Vector for * serialization compatibility with earlier releases. + * @serialData "permissions" field (a Vector containing the FilePermissions). * * @param out the {@code ObjectOutputStream} to which data is written * @throws IOException if an I/O error occurs diff --git a/src/java.base/share/classes/java/io/ObjectStreamConstants.java b/src/java.base/share/classes/java/io/ObjectStreamConstants.java index d8ebbd23e73a8..4f06ba7f89edb 100644 --- a/src/java.base/share/classes/java/io/ObjectStreamConstants.java +++ b/src/java.base/share/classes/java/io/ObjectStreamConstants.java @@ -139,7 +139,7 @@ public interface ObjectStreamConstants { static final int baseWireHandle = 0x7e0000; - /******************************************************/ + /* ****************************************************/ /* Bit masks for ObjectStreamClass flag.*/ /** diff --git a/src/java.base/share/classes/java/lang/invoke/LambdaForm.java b/src/java.base/share/classes/java/lang/invoke/LambdaForm.java index 8b75d7510fe27..823f527b6c43a 100644 --- a/src/java.base/share/classes/java/lang/invoke/LambdaForm.java +++ b/src/java.base/share/classes/java/lang/invoke/LambdaForm.java @@ -571,7 +571,7 @@ boolean nameRefsAreLegal() { return true; } - /** Invoke this form on the given arguments. */ + // /** Invoke this form on the given arguments. */ // final Object invoke(Object... args) throws Throwable { // // NYI: fit this into the fast path? // return interpretWithArguments(args); @@ -923,9 +923,9 @@ private boolean forceInterpretation() { return invocationCounter == -1; } + /** Interpretively invoke this form on the given arguments. */ @Hidden @DontInline - /** Interpretively invoke this form on the given arguments. */ Object interpretWithArguments(Object... argumentValues) throws Throwable { if (TRACE_INTERPRETER) return interpretWithArgumentsTracing(argumentValues); @@ -940,9 +940,9 @@ Object interpretWithArguments(Object... argumentValues) throws Throwable { return rv; } + /** Evaluate a single Name within this form, applying its function to its arguments. */ @Hidden @DontInline - /** Evaluate a single Name within this form, applying its function to its arguments. */ Object interpretName(Name name, Object[] values) throws Throwable { if (TRACE_INTERPRETER) traceInterpreter("| interpretName", name.debugString(), (Object[]) null); diff --git a/src/java.base/share/classes/java/math/BigInteger.java b/src/java.base/share/classes/java/math/BigInteger.java index 8d12c6de0a7e3..a972faafb4523 100644 --- a/src/java.base/share/classes/java/math/BigInteger.java +++ b/src/java.base/share/classes/java/math/BigInteger.java @@ -4843,7 +4843,7 @@ private static int[] makePositive(int[] a) { 0x40000000, 0x4cfa3cc1, 0x5c13d840, 0x6d91b519, 0x39aa400 }; - /** + /* * These routines provide access to the two's complement representation * of BigIntegers. */ diff --git a/src/java.base/share/classes/java/math/MutableBigInteger.java b/src/java.base/share/classes/java/math/MutableBigInteger.java index 76e48d00cf173..eca42ee25b123 100644 --- a/src/java.base/share/classes/java/math/MutableBigInteger.java +++ b/src/java.base/share/classes/java/math/MutableBigInteger.java @@ -25,6 +25,10 @@ package java.math; +import static java.math.BigDecimal.INFLATED; +import static java.math.BigInteger.LONG_MASK; +import java.util.Arrays; + /** * A class used to represent multiprecision integers that makes efficient * use of allocated space by allowing a number to occupy only part of @@ -42,10 +46,6 @@ * @since 1.3 */ -import static java.math.BigDecimal.INFLATED; -import static java.math.BigInteger.LONG_MASK; -import java.util.Arrays; - class MutableBigInteger { /** * Holds the magnitude of this MutableBigInteger in big endian order. diff --git a/src/java.base/share/classes/java/net/HttpURLConnection.java b/src/java.base/share/classes/java/net/HttpURLConnection.java index b501fa25e45c1..b405fb10a1655 100644 --- a/src/java.base/share/classes/java/net/HttpURLConnection.java +++ b/src/java.base/share/classes/java/net/HttpURLConnection.java @@ -675,7 +675,7 @@ public InputStream getErrorStream() { return null; } - /** + /* * The response codes for HTTP, as of version 1.1. */ diff --git a/src/java.base/share/classes/java/util/regex/Pattern.java b/src/java.base/share/classes/java/util/regex/Pattern.java index 1c2fd151b8dfe..62ef125fdee6e 100644 --- a/src/java.base/share/classes/java/util/regex/Pattern.java +++ b/src/java.base/share/classes/java/util/regex/Pattern.java @@ -2225,7 +2225,7 @@ private static final boolean isSupplementary(int ch) { Character.isSurrogate((char)ch); } - /** + /* * The following methods handle the main parsing. They are sorted * according to their precedence order, the lowest one first. */ @@ -2282,10 +2282,10 @@ private Node expr(Node end) { } } - @SuppressWarnings("fallthrough") /** * Parsing of sequences between alternations. */ + @SuppressWarnings("fallthrough") private Node sequence(Node end) { Node head = null; Node tail = null; @@ -2409,10 +2409,10 @@ private Node sequence(Node end) { return head; } - @SuppressWarnings("fallthrough") /** * Parse and add a new Single or Slice. */ + @SuppressWarnings("fallthrough") private Node atom() { int first = 0; int prev = -1; @@ -3322,10 +3322,10 @@ private Node createGroup(boolean anonymous) { return head; } - @SuppressWarnings("fallthrough") /** * Parses inlined match flags and set them appropriately. */ + @SuppressWarnings("fallthrough") private void addFlag() { int ch = peek(); for (;;) { @@ -3364,11 +3364,11 @@ private void addFlag() { } } - @SuppressWarnings("fallthrough") /** * Parses the second part of inlined match flags and turns off * flags appropriately. */ + @SuppressWarnings("fallthrough") private void subFlag() { int ch = peek(); for (;;) { @@ -3708,7 +3708,7 @@ private Node newSlice(int[] buf, int count, boolean hasSupplementary) { return hasSupplementary ? new SliceS(tmp) : new Slice(tmp); } - /** + /* * The following classes are the building components of the object * tree that represents a compiled regular expression. The object tree * is made of individual elements that handle constructs in the Pattern. diff --git a/src/java.base/share/classes/jdk/internal/access/JavaAWTFontAccess.java b/src/java.base/share/classes/jdk/internal/access/JavaAWTFontAccess.java index 6a5102b508803..139f02450b816 100644 --- a/src/java.base/share/classes/jdk/internal/access/JavaAWTFontAccess.java +++ b/src/java.base/share/classes/jdk/internal/access/JavaAWTFontAccess.java @@ -23,12 +23,12 @@ * questions. */ +package jdk.internal.access; + /** * SharedSecrets interface used for the access from java.text.Bidi */ -package jdk.internal.access; - public interface JavaAWTFontAccess { // java.awt.font.TextAttribute constants diff --git a/src/java.base/share/classes/jdk/internal/icu/lang/UCharacter.java b/src/java.base/share/classes/jdk/internal/icu/lang/UCharacter.java index 1fa93390215ac..cd87db30d7f93 100644 --- a/src/java.base/share/classes/jdk/internal/icu/lang/UCharacter.java +++ b/src/java.base/share/classes/jdk/internal/icu/lang/UCharacter.java @@ -23,7 +23,7 @@ * questions. */ -/** +/* ******************************************************************************* * Copyright (C) 1996-2014, International Business Machines Corporation and * others. All Rights Reserved. diff --git a/src/java.base/share/classes/jdk/internal/icu/text/BidiBase.java b/src/java.base/share/classes/jdk/internal/icu/text/BidiBase.java index cdfdef9fbf90e..bfeb0b7e6212c 100644 --- a/src/java.base/share/classes/jdk/internal/icu/text/BidiBase.java +++ b/src/java.base/share/classes/jdk/internal/icu/text/BidiBase.java @@ -2409,9 +2409,9 @@ else if (dirProp == PDI) { return directionFromFlags(); } - /*********************************************************************/ + /* *******************************************************************/ /* The Properties state machine table */ - /*********************************************************************/ + /* *******************************************************************/ /* */ /* All table cells are 8 bits: */ /* bits 0..4: next state */ @@ -2422,9 +2422,9 @@ else if (dirProp == PDI) { /* Cells may also be of format "_(x,y)" where x represents an action */ /* to perform and y represents the next state. */ /* */ - /*********************************************************************/ + /* *******************************************************************/ /* Definitions and type for properties state tables */ - /*********************************************************************/ + /* *******************************************************************/ private static final int IMPTABPROPS_COLUMNS = 16; private static final int IMPTABPROPS_RES = IMPTABPROPS_COLUMNS - 1; private static short GetStateProps(short cell) { @@ -2447,7 +2447,7 @@ private static short GetActionProps(short cell) { private static final short _S = 5; private static final short _B = 6; /* reduced dirProp */ - /*********************************************************************/ + /* *******************************************************************/ /* */ /* PROPERTIES STATE TABLE */ /* */ @@ -2510,9 +2510,9 @@ private static short GetActionProps(short cell) { /*23 ENR+ET */ { 32+1, 32+2, 21, 32+5, 32+7, 32+15, 32+17, 32+7, 23, 32+7, 23, 23, 32+3, 18, 21, _AN } }; - /*********************************************************************/ + /* *******************************************************************/ /* The levels state machine tables */ - /*********************************************************************/ + /* *******************************************************************/ /* */ /* All table cells are 8 bits: */ /* bits 0..3: next state */ @@ -2525,9 +2525,9 @@ private static short GetActionProps(short cell) { /* */ /* This format limits each table to 16 states each and to 15 actions.*/ /* */ - /*********************************************************************/ + /* *******************************************************************/ /* Definitions and type for levels state tables */ - /*********************************************************************/ + /* *******************************************************************/ private static final int IMPTABLEVELS_COLUMNS = _B + 2; private static final int IMPTABLEVELS_RES = IMPTABLEVELS_COLUMNS - 1; private static short GetState(byte cell) { return (short)(cell & 0x0f); } @@ -2544,7 +2544,7 @@ private static class ImpTabPair { } } - /*********************************************************************/ + /* *******************************************************************/ /* */ /* LEVELS STATE TABLES */ /* */ diff --git a/src/java.base/share/classes/jdk/internal/icu/text/UTF16.java b/src/java.base/share/classes/jdk/internal/icu/text/UTF16.java index 4205487a966fe..e84e1d4c0d47c 100644 --- a/src/java.base/share/classes/jdk/internal/icu/text/UTF16.java +++ b/src/java.base/share/classes/jdk/internal/icu/text/UTF16.java @@ -22,7 +22,7 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ -/** +/* ******************************************************************************* * Copyright (C) 1996-2014, International Business Machines Corporation and * others. All Rights Reserved. diff --git a/src/java.base/share/classes/jdk/internal/platform/Metrics.java b/src/java.base/share/classes/jdk/internal/platform/Metrics.java index c45e3e5225721..50523d137ef5d 100644 --- a/src/java.base/share/classes/jdk/internal/platform/Metrics.java +++ b/src/java.base/share/classes/jdk/internal/platform/Metrics.java @@ -72,7 +72,7 @@ public static Metrics systemMetrics() { public String getProvider(); - /***************************************************************** + /* *************************************************************** * CPU Accounting Subsystem ****************************************************************/ @@ -123,7 +123,7 @@ public static Metrics systemMetrics() { */ public long getCpuSystemUsage(); - /***************************************************************** + /* *************************************************************** * CPU Scheduling Metrics ****************************************************************/ @@ -215,7 +215,7 @@ public static Metrics systemMetrics() { */ public long getEffectiveCpuCount(); - /***************************************************************** + /* *************************************************************** * CPU Sets ****************************************************************/ @@ -271,7 +271,7 @@ public static Metrics systemMetrics() { */ public int[] getEffectiveCpuSetMems(); - /***************************************************************** + /* *************************************************************** * Memory Subsystem ****************************************************************/ @@ -352,7 +352,7 @@ public static Metrics systemMetrics() { */ public long getMemorySoftLimit(); - /***************************************************************** + /* *************************************************************** * pids subsystem ****************************************************************/ @@ -373,7 +373,7 @@ public static Metrics systemMetrics() { */ public long getPidsCurrent(); - /***************************************************************** + /* *************************************************************** * BlKIO Subsystem ****************************************************************/ diff --git a/src/java.base/share/classes/sun/net/www/content/text/plain.java b/src/java.base/share/classes/sun/net/www/content/text/plain.java index 32836559756b9..33a9032b2bc41 100644 --- a/src/java.base/share/classes/sun/net/www/content/text/plain.java +++ b/src/java.base/share/classes/sun/net/www/content/text/plain.java @@ -23,15 +23,15 @@ * questions. */ -/** - * Plain text file handler. - * @author Steven B. Byrne - */ package sun.net.www.content.text; import java.net.*; import java.io.InputStream; import java.io.IOException; +/** + * Plain text file handler. + * @author Steven B. Byrne + */ public class plain extends ContentHandler { /** * Returns a PlainTextInputStream object from which data diff --git a/src/java.base/share/classes/sun/net/www/protocol/file/FileURLConnection.java b/src/java.base/share/classes/sun/net/www/protocol/file/FileURLConnection.java index a27a6137a37ab..16fb1d2ea6c05 100644 --- a/src/java.base/share/classes/sun/net/www/protocol/file/FileURLConnection.java +++ b/src/java.base/share/classes/sun/net/www/protocol/file/FileURLConnection.java @@ -23,12 +23,6 @@ * questions. */ -/** - * Open an file input stream given a URL. - * @author James Gosling - * @author Steven B. Byrne - */ - package sun.net.www.protocol.file; import java.net.URL; @@ -40,6 +34,11 @@ import java.util.*; import java.text.SimpleDateFormat; +/** + * Open a file input stream given a URL. + * @author James Gosling + * @author Steven B. Byrne + */ public class FileURLConnection extends URLConnection { private static final String CONTENT_LENGTH = "content-length"; diff --git a/src/java.base/share/classes/sun/net/www/protocol/https/AbstractDelegateHttpsURLConnection.java b/src/java.base/share/classes/sun/net/www/protocol/https/AbstractDelegateHttpsURLConnection.java index ff54e474b8e69..39d05b6e0e4af 100644 --- a/src/java.base/share/classes/sun/net/www/protocol/https/AbstractDelegateHttpsURLConnection.java +++ b/src/java.base/share/classes/sun/net/www/protocol/https/AbstractDelegateHttpsURLConnection.java @@ -1,4 +1,4 @@ -/** +/* * Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -65,7 +65,7 @@ protected AbstractDelegateHttpsURLConnection(URL url, Proxy p, protected abstract javax.net.ssl.HostnameVerifier getHostnameVerifier(); - /** + /* * No user application is able to call these routines, as no one * should ever get access to an instance of * DelegateHttpsURLConnection (sun.* or com.*) diff --git a/src/java.base/share/classes/sun/nio/ch/Interruptible.java b/src/java.base/share/classes/sun/nio/ch/Interruptible.java index 5785ba52e24d6..b5d9a7d2b3fd2 100644 --- a/src/java.base/share/classes/sun/nio/ch/Interruptible.java +++ b/src/java.base/share/classes/sun/nio/ch/Interruptible.java @@ -23,12 +23,12 @@ * questions. */ +package sun.nio.ch; + /** * An object that interrupts a thread blocked in an I/O operation. */ -package sun.nio.ch; - public interface Interruptible { /** diff --git a/src/java.base/share/classes/sun/security/pkcs/ParsingException.java b/src/java.base/share/classes/sun/security/pkcs/ParsingException.java index d0f5999013da3..ea7571491a002 100644 --- a/src/java.base/share/classes/sun/security/pkcs/ParsingException.java +++ b/src/java.base/share/classes/sun/security/pkcs/ParsingException.java @@ -23,16 +23,15 @@ * questions. */ +package sun.security.pkcs; + +import java.io.IOException; + /** * Generic PKCS Parsing exception. * * @author Benjamin Renaud */ - -package sun.security.pkcs; - -import java.io.IOException; - public class ParsingException extends IOException { @java.io.Serial diff --git a/src/java.base/share/classes/sun/security/provider/SeedGenerator.java b/src/java.base/share/classes/sun/security/provider/SeedGenerator.java index 94ffc26ab3fbb..b4c9355bccf55 100644 --- a/src/java.base/share/classes/sun/security/provider/SeedGenerator.java +++ b/src/java.base/share/classes/sun/security/provider/SeedGenerator.java @@ -25,6 +25,17 @@ package sun.security.provider; +import java.security.*; +import java.io.*; +import java.util.Properties; +import java.util.Enumeration; +import java.net.*; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Random; +import sun.security.util.Debug; + /** * This class generates seeds for the SHA1PRNG cryptographically strong * random number generator. @@ -66,17 +77,6 @@ * @author Gadi Guy */ -import java.security.*; -import java.io.*; -import java.util.Properties; -import java.util.Enumeration; -import java.net.*; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Random; -import sun.security.util.Debug; - abstract class SeedGenerator { // Static instance is created at link time diff --git a/src/java.base/share/classes/sun/security/util/ByteArrayTagOrder.java b/src/java.base/share/classes/sun/security/util/ByteArrayTagOrder.java index dd5fae526accb..65f20ac816ca4 100644 --- a/src/java.base/share/classes/sun/security/util/ByteArrayTagOrder.java +++ b/src/java.base/share/classes/sun/security/util/ByteArrayTagOrder.java @@ -23,6 +23,9 @@ * questions. */ +package sun.security.util; + +import java.util.Comparator; /** * ByteArrayTagOrder: a class for comparing two DER encodings by the @@ -31,10 +34,6 @@ * @author D. N. Hoover */ -package sun.security.util; - -import java.util.Comparator; - public class ByteArrayTagOrder implements Comparator<byte[]> { /** diff --git a/src/java.base/share/classes/sun/security/util/IOUtils.java b/src/java.base/share/classes/sun/security/util/IOUtils.java index 4837e2b70a00a..a103f36eb2c52 100644 --- a/src/java.base/share/classes/sun/security/util/IOUtils.java +++ b/src/java.base/share/classes/sun/security/util/IOUtils.java @@ -23,16 +23,15 @@ * questions. */ -/** - * IOUtils: A collection of IO-related public static methods. - */ - package sun.security.util; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; +/** + * IOUtils: A collection of IO-related public static methods. + */ public class IOUtils { /** From 09b88098ff544fec1a4e94bfbbdc21b6c8433abb Mon Sep 17 00:00:00 2001 From: Sonia Zaldana Calles <szaldana@openjdk.org> Date: Tue, 23 Apr 2024 19:06:41 +0000 Subject: [PATCH 071/141] 8327289: Remove unused PrintMethodFlushingStatistics option Reviewed-by: coleenp --- src/hotspot/share/runtime/globals.hpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index 59eb306739af8..a5c717ff01dde 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -978,9 +978,6 @@ const int ObjectAlignmentInBytes = 8; develop(bool, TraceMethodReplacement, false, \ "Print when methods are replaced do to recompilation") \ \ - product(bool, PrintMethodFlushingStatistics, false, DIAGNOSTIC, \ - "print statistics about method flushing") \ - \ product(intx, MinPassesBeforeFlush, 10, DIAGNOSTIC, \ "Minimum number of sweeper passes before an nmethod " \ "can be flushed") \ From 2555166247230497453503318ccbf4dd4f047193 Mon Sep 17 00:00:00 2001 From: Alex Menkov <amenkov@openjdk.org> Date: Tue, 23 Apr 2024 20:37:25 +0000 Subject: [PATCH 072/141] 8329113: Deprecate -XX:+UseNotificationThread Reviewed-by: dcubed, dholmes, coleenp --- src/hotspot/share/runtime/arguments.cpp | 1 + src/hotspot/share/runtime/globals.hpp | 2 +- test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 2ea044a97df77..1091e4fab254c 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -502,6 +502,7 @@ static SpecialFlag const special_jvm_flags[] = { { "UseSharedSpaces", JDK_Version::jdk(18), JDK_Version::jdk(19), JDK_Version::undefined() }, { "RegisterFinalizersAtInit", JDK_Version::jdk(22), JDK_Version::jdk(23), JDK_Version::jdk(24) }, { "PreserveAllAnnotations", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, + { "UseNotificationThread", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, { "UseEmptySlotsInSupers", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, #if defined(X86) { "UseRTMLocking", JDK_Version::jdk(23), JDK_Version::jdk(24), JDK_Version::jdk(25) }, diff --git a/src/hotspot/share/runtime/globals.hpp b/src/hotspot/share/runtime/globals.hpp index a5c717ff01dde..1d23e4164c43d 100644 --- a/src/hotspot/share/runtime/globals.hpp +++ b/src/hotspot/share/runtime/globals.hpp @@ -952,7 +952,7 @@ const int ObjectAlignmentInBytes = 8; "Enable Thread SMR Statistics") \ \ product(bool, UseNotificationThread, true, \ - "Use Notification Thread") \ + "(Deprecated) Use Notification Thread") \ \ product(bool, Inline, true, \ "Enable inlining") \ diff --git a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java index 7dc49a051865c..50751a62bdf3d 100644 --- a/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java +++ b/test/hotspot/jtreg/runtime/CommandLine/VMDeprecatedOptions.java @@ -56,6 +56,7 @@ public class VMDeprecatedOptions { ArrayList<String[]> deprecated = new ArrayList( Arrays.asList(new String[][] { // deprecated non-alias flags: + {"UseNotificationThread", "true"}, {"PreserveAllAnnotations", "true"}, {"AllowRedefinitionToAddDeleteMethods", "true"}, {"UseEmptySlotsInSupers", "true"}, From f60798a30e9a3e0b666fed5384b6ac92a8a283dd Mon Sep 17 00:00:00 2001 From: Justin Lu <jlu@openjdk.org> Date: Tue, 23 Apr 2024 21:10:46 +0000 Subject: [PATCH 073/141] 8329222: java.text.NumberFormat (and subclasses) spec updates Reviewed-by: naoto --- .../java/text/CompactNumberFormat.java | 212 +++++----- .../classes/java/text/DecimalFormat.java | 361 +++++++++--------- .../share/classes/java/text/NumberFormat.java | 181 +++++---- 3 files changed, 392 insertions(+), 362 deletions(-) diff --git a/src/java.base/share/classes/java/text/CompactNumberFormat.java b/src/java.base/share/classes/java/text/CompactNumberFormat.java index a477d9c2fd835..115a21ee6627f 100644 --- a/src/java.base/share/classes/java/text/CompactNumberFormat.java +++ b/src/java.base/share/classes/java/text/CompactNumberFormat.java @@ -47,80 +47,113 @@ /** * <p> * {@code CompactNumberFormat} is a concrete subclass of {@code NumberFormat} - * that formats a decimal number in its compact form. - * - * The compact number formatting is designed for the environment where the space - * is limited, and the formatted string can be displayed in that limited space. - * It is defined by LDML's specification for + * that formats a decimal number in a localized compact form. + * Compact number formatting is designed for an environment with limited space. + * For example, displaying the formatted number {@code 7M} instead of {@code + * 7,000,000.00} in the {@link java.util.Locale#US US locale}. The {@code + * CompactNumberFormat} class is defined by LDML's specification for * <a href = "http://unicode.org/reports/tr35/tr35-numbers.html#Compact_Number_Formats"> - * Compact Number Formats</a>. A compact number formatting refers - * to the representation of a number in a shorter form, based on the patterns - * provided for a given locale. + * Compact Number Formats</a>. * - * <p> - * For example: - * <br>In the {@link java.util.Locale#US US locale}, {@code 1000} can be formatted - * as {@code "1K"}, and {@code 1000000} as {@code "1M"}, depending upon the - * {@linkplain ##compact_number_style style} used. - * <br>In the {@code "hi_IN"} locale, {@code 1000} can be formatted as - * "1 \u0939\u091C\u093C\u093E\u0930", and {@code 50000000} as "5 \u0915.", - * depending upon the {@linkplain ##compact_number_style style} used. + * <h2>Getting a CompactNumberFormat</h2> + * To get a compact number format, use one of the ways listed below. + * <ul> + * <li> Use the factory method {@link NumberFormat#getCompactNumberInstance()} + * to obtain a format for the default locale with + * {@link NumberFormat.Style#SHORT SHORT} style. + * <li> Use the factory methood {@link NumberFormat#getCompactNumberInstance(Locale, Style)} + * to obtain a format for a different locale + * and to control the {@linkplain ##compact_number_style Style}. + * <li> Use one of the {@code CompactNumberFormat} constructors, for example, {@link + * CompactNumberFormat#CompactNumberFormat(String, DecimalFormatSymbols, String[]) + * CompactNumberFormat(decimalPattern, symbols, compactPatterns)}, to obtain a + * {@code CompactNumberFormat} with further customization. + * </ul> + * <p>If a standard compact format for a given locale and {@link + * ##compact_number_style style} is desired, it is recommended to use one of the + * NumberFormat factory methods listed above. To use an instance method + * defined by {@code CompactNumberFormat}, the {@code NumberFormat} returned by + * these factory methods should be type checked before converted to {@code CompactNumberFormat}. + * If the installed locale-sensitive service implementation does not support + * the given {@code Locale}, the parent locale chain will be looked up, and + * a {@code Locale} used that is supported. * - * <p> - * To obtain a {@code CompactNumberFormat} for a locale, use one - * of the factory methods given by {@code NumberFormat} for compact number - * formatting. For example, - * {@link NumberFormat#getCompactNumberInstance(Locale, Style)}. + * <h2><a id="compact_number_style">Style</a></h2> + * When using {@link NumberFormat#getCompactNumberInstance(Locale, Style)}, a + * compact form can be retrieved with either a {@link NumberFormat.Style#SHORT + * SHORT} or {@link NumberFormat.Style#LONG LONG} style. + * For example, a {@link NumberFormat.Style#SHORT SHORT} style compact number instance in + * the {@link java.util.Locale#US US locale} formats {@code 10000} as {@code + * "10K"}. However, a {@link NumberFormat.Style#LONG LONG} style instance in + * the same locale formats {@code 10000} as {@code "10 thousand"}. * - * <blockquote>{@snippet lang=java : - * NumberFormat fmt = NumberFormat.getCompactNumberInstance( - * Locale.forLanguageTag("hi-IN"), NumberFormat.Style.SHORT); - * String result = fmt.format(1000); - * }</blockquote> + * <h2>Using CompactNumberFormat</h2> + * The following is an example of formatting and parsing in a localized manner, * - * <h2><a id="compact_number_style">Style</a></h2> - * <p> - * A number can be formatted in the compact forms with two different - * styles, {@link NumberFormat.Style#SHORT SHORT} - * and {@link NumberFormat.Style#LONG LONG}. Use - * {@link NumberFormat#getCompactNumberInstance(Locale, Style)} for formatting and - * parsing a number in {@link NumberFormat.Style#SHORT SHORT} or - * {@link NumberFormat.Style#LONG LONG} compact form, - * where the given {@code Style} parameter requests the desired - * format. A {@link NumberFormat.Style#SHORT SHORT} style - * compact number instance in the {@link java.util.Locale#US US locale} formats - * {@code 10000} as {@code "10K"}. However, a - * {@link NumberFormat.Style#LONG LONG} style instance in same locale - * formats {@code 10000} as {@code "10 thousand"}. + * {@snippet lang=java : + * NumberFormat compactFormat = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); + * compactFormat.format(1000); // returns "1K" + * compactFormat.parse("1K"); // returns 1000 + * } + * + * <h2 id="formatting">Formatting</h2> + * The default formatting behavior returns a formatted string with no fractional + * digits, however users can use the {@link #setMinimumFractionDigits(int)} + * method to include the fractional part. + * The number {@code 1000.0} or {@code 1000} is formatted as {@code "1K"} + * not {@code "1.00K"} (in the {@link java.util.Locale#US US locale}). For this + * reason, the patterns provided for formatting contain only the minimum + * integer digits, prefix and/or suffix, but no fractional part. + * For example, patterns used are {@code {"", "", "", 0K, 00K, ...}}. If the pattern + * selected for formatting a number is {@code "0"} (special pattern), + * either explicit or defaulted, then the general number formatting provided by + * {@link java.text.DecimalFormat DecimalFormat} + * for the specified locale is used. + * + * <h3>Rounding</h3> + * {@code CompactNumberFormat} provides rounding modes defined in + * {@link java.math.RoundingMode} for formatting. By default, it uses + * {@link java.math.RoundingMode#HALF_EVEN RoundingMode.HALF_EVEN}. + * + * <h2>Parsing</h2> + * The default parsing behavior does not allow a grouping separator until + * grouping used is set to {@code true} by using + * {@link #setGroupingUsed(boolean)}. The parsing of the fractional part + * depends on the {@link #isParseIntegerOnly()}. For example, if the + * parse integer only is set to true, then the fractional part is skipped. * * <h2><a id="compact_number_patterns">Compact Number Patterns</a></h2> * <p> - * The compact number patterns are represented in a series of patterns where each - * pattern is used to format a range of numbers. An example of - * {@link NumberFormat.Style#SHORT SHORT} styled compact number patterns + * The {@code compactPatterns} in {@link + * CompactNumberFormat#CompactNumberFormat(String, DecimalFormatSymbols, String[]) + * CompactNumberFormat(decimalPattern, symbols, compactPatterns)} are represented + * as a series of strings, where each string is a {@link ##compact_number_syntax + * pattern} that is used to format a range of numbers. + * + * <p> An example of the {@link NumberFormat.Style#SHORT SHORT} styled compact number patterns * for the {@link java.util.Locale#US US locale} is {@code {"", "", "", "0K", * "00K", "000K", "0M", "00M", "000M", "0B", "00B", "000B", "0T", "00T", "000T"}}, * ranging from {@code 10}<sup>{@code 0}</sup> to {@code 10}<sup>{@code 14}</sup>. * There can be any number of patterns and they are * strictly index based starting from the range {@code 10}<sup>{@code 0}</sup>. - * For example, in the above patterns, pattern at index 3 - * ({@code "0K"}) is used for formatting {@code number >= 1000 and number < 10000}, - * pattern at index 4 ({@code "00K"}) is used for formatting - * {@code number >= 10000 and number < 100000} and so on. In most of the locales, - * patterns with the range + * For example, in the above patterns, the pattern at index 3 + * ({@code "0K"}) is used for formatting a number in the range: {@code 1000 <= number < 10000}, + * index 4 ({@code "00K"}) for formatting a number the range: {@code 10000 <= + * number < 100000}, and so forth. + * <p>In most locales, patterns with the range * {@code 10}<sup>{@code 0}</sup>-{@code 10}<sup>{@code 2}</sup> are empty * strings, which implicitly means a special pattern {@code "0"}. * A special pattern {@code "0"} is used for any range which does not contain * a compact pattern. This special pattern can appear explicitly for any specific * range, or considered as a default pattern for an empty string. * - * <p> + * <h3>Negative Subpatterns</h3> * A compact pattern contains a positive and negative subpattern - * separated by a subpattern boundary character {@code ';' (U+003B)}, + * separated by a subpattern boundary character {@code ';'}, * for example, {@code "0K;-0K"}. Each subpattern has a prefix, * minimum integer digits, and suffix. The negative subpattern * is optional, if absent, then the positive subpattern prefixed with the - * minus sign ({@code '-' U+002D HYPHEN-MINUS}) is used as the negative + * minus sign {@code '-' (U+002D HYPHEN-MINUS)} is used as the negative * subpattern. That is, {@code "0K"} alone is equivalent to {@code "0K;-0K"}. * If there is an explicit negative subpattern, it serves only to specify * the negative prefix and suffix. The number of minimum integer digits, @@ -128,31 +161,35 @@ * That means that {@code "0K;-00K"} produces precisely the same behavior * as {@code "0K;-0K"}. * - * <p> + * <h4>Escaping Special Characters</h4> * Many characters in a compact pattern are taken literally, they are matched * during parsing and output unchanged during formatting. * {@linkplain DecimalFormat##special_pattern_character Special characters}, * on the other hand, stand for other characters, strings, or classes of - * characters. They must be quoted, using single quote {@code ' (U+0027)} + * characters. These characters must be quoted using single quotes {@code ' (U+0027)} * unless noted otherwise, if they are to appear in the prefix or suffix * as literals. For example, 0\u0915'.'. * * <h3>Plurals</h3> + * <p> {@code CompactNumberFormat} support patterns for both singular and plural + * compact forms. For the plural form, the {@code Pattern} should consist + * of {@code PluralPattern}(s) separated by a space ' ' (U+0020) that are enumerated + * within a pair of curly brackets '{' (U+007B) and '}' (U+007D). + * In this format, each {@code PluralPattern} consists of its {@code count}, + * followed by a single colon {@code ':' (U+003A)} and a {@code SimplePattern}. + * As a space is reserved for separating subsequent {@code PluralPattern}s, it must + * be quoted to be used literally in either the {@code prefix} or {@code suffix}. * <p> - * In case some localization requires compact number patterns to be different for - * plurals, each singular and plural pattern can be enumerated within a pair of - * curly brackets <code>'{' (U+007B)</code> and <code>'}' (U+007D)</code>, separated - * by a space {@code ' ' (U+0020)}. If this format is used, each pattern needs to be - * prepended by its {@code count}, followed by a single colon {@code ':' (U+003A)}. - * If the pattern includes spaces literally, they must be quoted. + * For example, while the pattern representing millions ({@code 10}<sup>{@code 6} + * </sup>) in the US locale can be specified as the SimplePattern: {@code "0 Million"}, for the + * German locale it can be specified as the PluralPattern: + * {@code "{one:0' 'Million other:0' 'Millionen}"}. + * * <p> - * For example, the compact number pattern representing millions in German locale can be - * specified as {@code "{one:0' 'Million other:0' 'Millionen}"}. The {@code count} - * follows LDML's + * <a id="compact_number_syntax">A compact pattern has the following syntax, with {@code count}</a> + * following LDML's * <a href="https://unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules"> - * Language Plural Rules</a>. - * <p> - * A compact pattern has the following syntax: + * Language Plural Rules</a>: * <blockquote><pre> * <i>Pattern:</i> * <i>SimplePattern</i> @@ -179,37 +216,12 @@ * 0 <i>MinimumInteger</i> * </pre></blockquote> * - * <h2>Formatting</h2> - * The default formatting behavior returns a formatted string with no fractional - * digits, however users can use the {@link #setMinimumFractionDigits(int)} - * method to include the fractional part. - * The number {@code 1000.0} or {@code 1000} is formatted as {@code "1K"} - * not {@code "1.00K"} (in the {@link java.util.Locale#US US locale}). For this - * reason, the patterns provided for formatting contain only the minimum - * integer digits, prefix and/or suffix, but no fractional part. - * For example, patterns used are {@code {"", "", "", 0K, 00K, ...}}. If the pattern - * selected for formatting a number is {@code "0"} (special pattern), - * either explicit or defaulted, then the general number formatting provided by - * {@link java.text.DecimalFormat DecimalFormat} - * for the specified locale is used. - * - * <h2>Parsing</h2> - * The default parsing behavior does not allow a grouping separator until - * grouping used is set to {@code true} by using - * {@link #setGroupingUsed(boolean)}. The parsing of the fractional part - * depends on the {@link #isParseIntegerOnly()}. For example, if the - * parse integer only is set to true, then the fractional part is skipped. - * - * <h2>Rounding</h2> - * {@code CompactNumberFormat} provides rounding modes defined in - * {@link java.math.RoundingMode} for formatting. By default, it uses - * {@link java.math.RoundingMode#HALF_EVEN RoundingMode.HALF_EVEN}. - * * @spec https://www.unicode.org/reports/tr35 * Unicode Locale Data Markup Language (LDML) * @see NumberFormat.Style * @see NumberFormat * @see DecimalFormat + * @see Locale * @since 12 */ public final class CompactNumberFormat extends NumberFormat { @@ -389,10 +401,19 @@ public final class CompactNumberFormat extends NumberFormat { * To obtain the instance of {@code CompactNumberFormat} with the standard * compact patterns for a {@code Locale} and {@code Style}, * it is recommended to use the factory methods given by - * {@code NumberFormat} for compact number formatting. For example, - * {@link NumberFormat#getCompactNumberInstance(Locale, Style)}. + * {@code NumberFormat} for compact number formatting. + * + * <p>Below is an example of using the constructor, + * + * {@snippet lang=java : + * String[] compactPatterns = {"", "", "", "a lot"}; + * NumberFormat fmt = new CompactNumberFormat("00", DecimalFormatSymbols.getInstance(Locale.US), compactPatterns); + * fmt.format(1); // returns "01" + * fmt.format(1000); // returns "a lot" + * } * - * @param decimalPattern a decimal pattern for general number formatting + * @param decimalPattern a {@linkplain DecimalFormat##patterns decimal pattern} + * for general number formatting * @param symbols the set of symbols to be used * @param compactPatterns an array of * {@linkplain ##compact_number_patterns compact number patterns} @@ -419,7 +440,8 @@ public CompactNumberFormat(String decimalPattern, * {@code NumberFormat} for compact number formatting. For example, * {@link NumberFormat#getCompactNumberInstance(Locale, Style)}. * - * @param decimalPattern a decimal pattern for general number formatting + * @param decimalPattern a {@linkplain DecimalFormat##patterns decimal pattern} + * for general number formatting * @param symbols the set of symbols to be used * @param compactPatterns an array of * {@linkplain ##compact_number_patterns compact number patterns} diff --git a/src/java.base/share/classes/java/text/DecimalFormat.java b/src/java.base/share/classes/java/text/DecimalFormat.java index 752c392485584..2fc64d8e63e81 100644 --- a/src/java.base/share/classes/java/text/DecimalFormat.java +++ b/src/java.base/share/classes/java/text/DecimalFormat.java @@ -56,45 +56,104 @@ /** * {@code DecimalFormat} is a concrete subclass of - * {@code NumberFormat} that formats decimal numbers. It has a variety of - * features designed to make it possible to parse and format numbers in any - * locale, including support for Western, Arabic, and Indic digits. It also - * supports different kinds of numbers, including integers (123), fixed-point + * {@code NumberFormat} that formats decimal numbers in a localized manner. + * It has a variety of features designed to make it possible to parse and format + * numbers in any locale, including support for Western, Arabic, and Indic digits. + * It also supports different kinds of numbers, including integers (123), fixed-point * numbers (123.4), scientific notation (1.23E4), percentages (12%), and - * currency amounts ($123). All of these can be localized. + * currency amounts ($123). * - * <p>To obtain a {@code NumberFormat} for a specific locale, including the - * default locale, call one of {@code NumberFormat}'s factory methods, such - * as {@code getInstance()}. In general, do not call the - * {@code DecimalFormat} constructors directly, since the - * {@code NumberFormat} factory methods may return subclasses other than - * {@code DecimalFormat}. If you need to customize the format object, do - * something like this: + * <h2>Getting a DecimalFormat</h2> * - * <blockquote>{@snippet lang=java : - * NumberFormat numFormat = NumberFormat.getInstance(loc); - * if (numFormat instanceof DecimalFormat decFormat) { - * decFormat.setDecimalSeparatorAlwaysShown(true); + * To obtain a standard decimal format for a specific locale, including the default locale, + * it is recommended to call one of the {@code NumberFormat} + * {@link NumberFormat##factory_methods factory methods}, such as {@link NumberFormat#getInstance()}. + * These factory methods may not always return a {@code DecimalFormat} + * depending on the locale-service provider implementation + * installed. Thus, to use an instance method defined by {@code DecimalFormat}, + * the {@code NumberFormat} returned by the factory method should be + * type checked before converted to {@code DecimalFormat}. If the installed locale-sensitive + * service implementation does not support the given {@code Locale}, the parent + * locale chain will be looked up, and a {@code Locale} used that is supported. + * + * <p>If the factory methods are not desired, use one of the constructors such + * as {@link #DecimalFormat(String) DecimalFormat(String pattern)}. See the {@link + * ##patterns Pattern} section for more information on the {@code pattern} parameter. + * + * <h2>Using DecimalFormat</h2> + * The following is an example of formatting and parsing, + * {@snippet lang=java : + * NumberFormat nFmt = NumberFormat.getCurrencyInstance(Locale.US); + * if (nFmt instanceof DecimalFormat dFmt) { + * // pattern match to DecimalFormat to use setPositiveSuffix(String) + * dFmt.setPositiveSuffix(" dollars"); + * dFmt.format(100000); // returns "$100,000.00 dollars" + * dFmt.parse("$100,000.00 dollars"); // returns 100000 + * } * } - * }</blockquote> * - * <p>A {@code DecimalFormat} comprises a <em>pattern</em> and a set of - * <em>symbols</em>. The pattern may be set directly using - * {@code applyPattern()}, or indirectly using the API methods. The - * symbols are stored in a {@code DecimalFormatSymbols} object. When using - * the {@code NumberFormat} factory methods, the pattern and symbols are - * read from localized {@code ResourceBundle}s. * - * <h2 id="patterns">Patterns</h2> + * <h2 id="formatting">Formatting and Parsing</h2> + * <h3 id="rounding">Rounding</h3> * - * Note: For any given {@code DecimalFormat} pattern, if the pattern is not - * in scientific notation, the maximum number of integer digits will not be - * derived from the pattern, and instead set to {@link Integer#MAX_VALUE}. - * Otherwise, if the pattern is in scientific notation, the maximum number of - * integer digits will be derived from the pattern. This derivation is detailed - * in the {@link ##scientific_notation Scientific Notation} section. This behavior - * is the typical end-user desire; {@link #setMaximumIntegerDigits(int)} can be - * used to manually adjust the maximum integer digits. + * When formatting, {@code DecimalFormat} can adjust its rounding using {@link + * #setRoundingMode(RoundingMode)}. By default, it uses + * {@link java.math.RoundingMode#HALF_EVEN RoundingMode.HALF_EVEN}. + * + * <h3>Digits</h3> + * + * When formatting, {@code DecimalFormat} uses the ten consecutive + * characters starting with the localized zero digit defined in the + * {@code DecimalFormatSymbols} object as digits. + * <p>When parsing, these digits as well as all Unicode decimal digits, as + * defined by {@link Character#digit Character.digit}, are recognized. + * + * <h3 id="digit_limits"> Integer and Fraction Digit Limits </h3> + * @implSpec + * When formatting a {@code Number} other than {@code BigInteger} and + * {@code BigDecimal}, {@code 309} is used as the upper limit for integer digits, + * and {@code 340} as the upper limit for fraction digits. This occurs, even if + * one of the {@code DecimalFormat} getter methods, for example, {@link #getMinimumFractionDigits()} + * returns a numerically greater value. + * + * <h3>Special Values</h3> + * <ul> + * <li><p><b>Not a Number</b> ({@code NaN}) is formatted as a string, + * which is typically given as "NaN". This string is determined by {@link + * DecimalFormatSymbols#getNaN()}. This is the only value for which the prefixes + * and suffixes are not attached. + * + * <li><p><b>Infinity</b> is formatted as a string, which is typically given as + * "∞" ({@code U+221E}), with the positive or negative prefixes and suffixes + * attached. This string is determined by {@link DecimalFormatSymbols#getInfinity()}. + * + * <li><p><b>Negative zero</b> ({@code "-0"}) parses to + * <ul> + * <li>{@code BigDecimal(0)} if {@code isParseBigDecimal()} is + * true + * <li>{@code Long(0)} if {@code isParseBigDecimal()} is false + * and {@code isParseIntegerOnly()} is true + * <li>{@code Double(-0.0)} if both {@code isParseBigDecimal()} + * and {@code isParseIntegerOnly()} are false + * </ul> + * </ul> + * + * <h2><a id="synchronization">Synchronization</a></h2> + * + * <p> + * Decimal formats are generally not synchronized. + * It is recommended to create separate format instances for each thread. + * If multiple threads access a format concurrently, it must be synchronized + * externally. + * + * <h2 id="patterns">DecimalFormat Pattern</h2> + * + * A {@code DecimalFormat} comprises a <em>pattern</em> and a set of + * <em>symbols</em>. The pattern may be set directly using {@code applyPattern()}, + * or indirectly using the various API methods. The symbols are stored in a {@code + * DecimalFormatSymbols} object. When using the {@code NumberFormat} factory + * methods, the pattern and symbols are created from the locale-sensitive service + * implementation installed. * * <p> {@code DecimalFormat} patterns have the following syntax: * <blockquote><pre> @@ -135,50 +194,21 @@ * 0 <i>MinimumExponent<sub>opt</sub></i> * </pre></blockquote> * - * <p>A {@code DecimalFormat} pattern contains a positive and negative - * subpattern, for example, {@code "#,##0.00;(#,##0.00)"}. Each - * subpattern has a prefix, numeric part, and suffix. The negative subpattern - * is optional; if absent, then the positive subpattern prefixed with the - * minus sign ({@code '-' U+002D HYPHEN-MINUS}) is used as the - * negative subpattern. That is, {@code "0.00"} alone is equivalent to - * {@code "0.00;-0.00"}. If there is an explicit negative subpattern, it - * serves only to specify the negative prefix and suffix; the number of digits, - * minimal digits, and other characteristics are all the same as the positive - * pattern. That means that {@code "#,##0.0#;(#)"} produces precisely - * the same behavior as {@code "#,##0.0#;(#,##0.0#)"}. - * - * <p>The prefixes, suffixes, and various symbols used for infinity, digits, - * grouping separators, decimal separators, etc. may be set to arbitrary - * values, and they will appear properly during formatting. However, care must - * be taken that the symbols and strings do not conflict, or parsing will be - * unreliable. For example, either the positive and negative prefixes or the - * suffixes must be distinct for {@code DecimalFormat.parse()} to be able - * to distinguish positive from negative values. (If they are identical, then - * {@code DecimalFormat} will behave as if no negative subpattern was - * specified.) Another example is that the decimal separator and grouping - * separator should be distinct characters, or parsing will be impossible. - * - * <p>The grouping separator is commonly used for thousands, but in some - * countries it separates ten-thousands. The grouping size is a constant number - * of digits between the grouping characters, such as 3 for 100,000,000 or 4 for - * 1,0000,0000. If you supply a pattern with multiple grouping characters, the - * interval between the last one and the end of the integer is the one that is - * used. So {@code "#,##,###,####"} == {@code "######,####"} == - * {@code "##,####,####"}. - * * <h3><a id="special_pattern_character">Special Pattern Characters</a></h3> * - * <p>Many characters in a pattern are taken literally; they are matched during - * parsing and output unchanged during formatting. Special characters, on the - * other hand, stand for other characters, strings, or classes of characters. + * <p>The special characters in the table below are interpreted syntactically when + * used in the DecimalFormat pattern. * They must be quoted, unless noted otherwise, if they are to appear in the * prefix or suffix as literals. * - * <p>The characters listed here are used in non-localized patterns. Localized - * patterns use the corresponding characters taken from this formatter's - * {@code DecimalFormatSymbols} object instead, and these characters lose - * their special status. Two exceptions are the currency sign and quote, which - * are not localized. + * <p> The characters in the {@code Symbol} column are used in non-localized + * patterns. The corresponding characters in the {@code Localized Symbol} column are used + * in localized patterns, with the characters in {@code Symbol} losing their + * syntactical meaning. Two exceptions are the currency sign ({@code U+00A4}) and + * quote ({@code U+0027}), which are not localized. + * <p> + * Non-localized patterns should be used when calling {@link #applyPattern(String)}. + * Localized patterns should be used when calling {@link #applyLocalizedPattern(String)}. * * <blockquote> * <table class="striped"> @@ -186,69 +216,69 @@ * <thead> * <tr> * <th scope="col" style="text-align:left">Symbol + * <th scope="col" style="text-align:left">Localized Symbol * <th scope="col" style="text-align:left">Location - * <th scope="col" style="text-align:left">Localized? - * <th scope="col" style="text-align:left">Meaning + * <th scope="col" style="text-align:left;width:50%">Meaning * </thead> * <tbody> - * <tr style="vertical-align:top"> + * <tr> * <th scope="row">{@code 0} + * <td>{@link DecimalFormatSymbols#getZeroDigit()} * <td>Number - * <td>Yes * <td>Digit - * <tr style="vertical-align: top"> + * <tr> * <th scope="row">{@code #} + * <td>{@link DecimalFormatSymbols#getDigit()} * <td>Number - * <td>Yes * <td>Digit, zero shows as absent - * <tr style="vertical-align:top"> + * <tr> * <th scope="row">{@code .} + * <td>{@link DecimalFormatSymbols#getDecimalSeparator()} * <td>Number - * <td>Yes * <td>Decimal separator or monetary decimal separator - * <tr style="vertical-align: top"> - * <th scope="row">{@code -} + * <tr> + * <th scope="row">{@code - (U+002D)} + * <td>{@link DecimalFormatSymbols#getMinusSign()} * <td>Number - * <td>Yes * <td>Minus sign - * <tr style="vertical-align:top"> + * <tr> * <th scope="row">{@code ,} + * <td>{@link DecimalFormatSymbols#getGroupingSeparator()} * <td>Number - * <td>Yes * <td>Grouping separator or monetary grouping separator - * <tr style="vertical-align: top"> + * <tr> * <th scope="row">{@code E} + * <td>{@link DecimalFormatSymbols#getExponentSeparator()} * <td>Number - * <td>Yes - * <td>Separates mantissa and exponent in scientific notation. - * <em>Need not be quoted in prefix or suffix.</em> - * <tr style="vertical-align:top"> + * <td>Separates mantissa and exponent in scientific notation. This value + * is case sensistive. <em>Need not be quoted in prefix or suffix.</em> + * <tr> * <th scope="row">{@code ;} + * <td>{@link DecimalFormatSymbols#getPatternSeparator()} * <td>Subpattern boundary - * <td>Yes * <td>Separates positive and negative subpatterns - * <tr style="vertical-align: top"> + * <tr> * <th scope="row">{@code %} + * <td>{@link DecimalFormatSymbols#getPercent()} * <td>Prefix or suffix - * <td>Yes * <td>Multiply by 100 and show as percentage - * <tr style="vertical-align:top"> - * <th scope="row">{@code U+2030} + * <tr> + * <th scope="row">‰ ({@code U+2030}) + * <td>{@link DecimalFormatSymbols#getPerMill()} * <td>Prefix or suffix - * <td>Yes * <td>Multiply by 1000 and show as per mille value - * <tr style="vertical-align: top"> + * <tr> * <th scope="row">¤ ({@code U+00A4}) + * <td> n/a (not localized) * <td>Prefix or suffix - * <td>No * <td>Currency sign, replaced by currency symbol. If * doubled, replaced by international currency symbol. * If present in a pattern, the monetary decimal/grouping separators * are used instead of the decimal/grouping separators. - * <tr style="vertical-align:top"> - * <th scope="row">{@code '} + * <tr> + * <th scope="row">{@code ' (U+0027)} + * <td> n/a (not localized) * <td>Prefix or suffix - * <td>No * <td>Used to quote special characters in a prefix or suffix, * for example, {@code "'#'#"} formats 123 to * {@code "#123"}. To create a single quote @@ -257,6 +287,49 @@ * </table> * </blockquote> * + * <h3>Maximum Digits Derivation</h3> + * For any given {@code DecimalFormat} pattern, if the pattern is not + * in scientific notation, the maximum number of integer digits will not be + * derived from the pattern, and instead set to {@link Integer#MAX_VALUE}. + * Otherwise, if the pattern is in scientific notation, the maximum number of + * integer digits will be derived from the pattern. This derivation is detailed + * in the {@link ##scientific_notation Scientific Notation} section. {@link + * #setMaximumIntegerDigits(int)} can be used to manually adjust the maximum + * integer digits. + * + * <h3>Negative Subpatterns</h3> + * A {@code DecimalFormat} pattern contains a positive and negative + * subpattern, for example, {@code "#,##0.00;(#,##0.00)"}. Each + * subpattern has a prefix, numeric part, and suffix. The negative subpattern + * is optional; if absent, then the positive subpattern prefixed with the + * minus sign {@code '-' (U+002D HYPHEN-MINUS)} is used as the + * negative subpattern. That is, {@code "0.00"} alone is equivalent to + * {@code "0.00;-0.00"}. If there is an explicit negative subpattern, it + * serves only to specify the negative prefix and suffix; the number of digits, + * minimal digits, and other characteristics are all the same as the positive + * pattern. That means that {@code "#,##0.0#;(#)"} produces precisely + * the same behavior as {@code "#,##0.0#;(#,##0.0#)"}. + * + * <p>The prefixes, suffixes, and various symbols used for infinity, digits, + * grouping separators, decimal separators, etc. may be set to arbitrary + * values, and they will appear properly during formatting. However, care must + * be taken that the symbols and strings do not conflict, or parsing will be + * unreliable. For example, either the positive and negative prefixes or the + * suffixes must be distinct for {@code DecimalFormat.parse()} to be able + * to distinguish positive from negative values. (If they are identical, then + * {@code DecimalFormat} will behave as if no negative subpattern was + * specified.) Another example is that the decimal separator and grouping + * separator should be distinct characters, or parsing will be impossible. + * + * <h3>Grouping Separator</h3> + * <p>The grouping separator is commonly used for thousands, but in some + * locales it separates ten-thousands. The grouping size is a constant number + * of digits between the grouping characters, such as 3 for 100,000,000 or 4 for + * 1,0000,0000. If you supply a pattern with multiple grouping characters, the + * interval between the last one and the end of the integer is the one that is + * used. For example, {@code "#,##,###,####"} == {@code "######,####"} == + * {@code "##,####,####"}. + * * <h3 id="scientific_notation">Scientific Notation</h3> * * <p>Numbers in scientific notation are expressed as the product of a mantissa @@ -339,95 +412,13 @@ * <li>Exponential patterns may not contain grouping separators. * </ul> * - * <h3>Rounding</h3> - * - * {@code DecimalFormat} provides rounding modes defined in - * {@link java.math.RoundingMode} for formatting. By default, it uses - * {@link java.math.RoundingMode#HALF_EVEN RoundingMode.HALF_EVEN}. - * - * <h3>Digits</h3> - * - * For formatting, {@code DecimalFormat} uses the ten consecutive - * characters starting with the localized zero digit defined in the - * {@code DecimalFormatSymbols} object as digits. For parsing, these - * digits as well as all Unicode decimal digits, as defined by - * {@link Character#digit Character.digit}, are recognized. - * - * <h3 id="digit_limits"> Integer and Fraction Digit Limits </h3> - * - * @implSpec - * When formatting a {@code Number} other than {@code BigInteger} and - * {@code BigDecimal}, {@code 309} is used as the upper limit for integer digits, - * and {@code 340} as the upper limit for fraction digits. This occurs, even if - * one of the {@code DecimalFormat} getter methods, for example, {@link #getMinimumFractionDigits()} - * returns a numerically greater value. - * - * <h4>Special Values</h4> - * - * <p>Not a Number({@code NaN}) is formatted as a string, which typically has a - * single character {@code U+FFFD}. This string is determined by the - * {@code DecimalFormatSymbols} object. This is the only value for which - * the prefixes and suffixes are not used. - * - * <p>Infinity is formatted as a string, which typically has a single character - * {@code U+221E}, with the positive or negative prefixes and suffixes - * applied. The infinity string is determined by the - * {@code DecimalFormatSymbols} object. - * - * <p>Negative zero ({@code "-0"}) parses to - * <ul> - * <li>{@code BigDecimal(0)} if {@code isParseBigDecimal()} is - * true, - * <li>{@code Long(0)} if {@code isParseBigDecimal()} is false - * and {@code isParseIntegerOnly()} is true, - * <li>{@code Double(-0.0)} if both {@code isParseBigDecimal()} - * and {@code isParseIntegerOnly()} are false. - * </ul> - * - * <h3><a id="synchronization">Synchronization</a></h3> - * - * <p> - * Decimal formats are generally not synchronized. - * It is recommended to create separate format instances for each thread. - * If multiple threads access a format concurrently, it must be synchronized - * externally. - * - * <h3>Example</h3> - * - * <blockquote>{@snippet lang=java : - * // Print out a number using the localized number, integer, currency, - * // and percent format for each locale - * Locale[] locales = NumberFormat.getAvailableLocales(); - * double myNumber = -1234.56; - * NumberFormat form; - * for (int j = 0; j < 4; ++j) { - * System.out.println("FORMAT"); - * for (Locale locale : locales) { - * if (locale.getCountry().length() == 0) { - * continue; // Skip language-only locales - * } - * System.out.print(locale.getDisplayName()); - * form = switch (j) { - * case 0 -> NumberFormat.getInstance(locale); - * case 1 -> NumberFormat.getIntegerInstance(locale); - * case 2 -> NumberFormat.getCurrencyInstance(locale); - * default -> NumberFormat.getPercentInstance(locale); - * }; - * if (form instanceof DecimalFormat decForm) { - * System.out.print(": " + decForm.toPattern()); - * } - * System.out.print(" -> " + form.format(myNumber)); - * try { - * System.out.println(" -> " + form.parse(form.format(myNumber))); - * } catch (ParseException e) {} - * } - * } - * }</blockquote> - * + * @spec https://www.unicode.org/reports/tr35 + * Unicode Locale Data Markup Language (LDML) * @see <a href="http://docs.oracle.com/javase/tutorial/i18n/format/decimalFormat.html">Java Tutorial</a> * @see NumberFormat * @see DecimalFormatSymbols * @see ParsePosition + * @see Locale * @author Mark Davis * @author Alan Liu * @since 1.1 diff --git a/src/java.base/share/classes/java/text/NumberFormat.java b/src/java.base/share/classes/java/text/NumberFormat.java index bd36ad6dc2522..0409efc2da08a 100644 --- a/src/java.base/share/classes/java/text/NumberFormat.java +++ b/src/java.base/share/classes/java/text/NumberFormat.java @@ -59,102 +59,110 @@ /** * {@code NumberFormat} is the abstract base class for all number * formats. This class provides the interface for formatting and parsing - * numbers. {@code NumberFormat} also provides methods for determining - * which locales have number formats, and what their names are. + * numbers in a localized manner. This enables code that can be completely + * independent of the locale conventions for decimal points, thousands-separators, + * the particular decimal digits used, or whether the number format is even + * decimal. For example, this class could be used within an application to + * produce a number in a currency format according to the conventions of the desired + * locale. * - * <p> - * {@code NumberFormat} helps you to format and parse numbers for any locale. - * Your code can be completely independent of the locale conventions for - * decimal points, thousands-separators, or even the particular decimal - * digits used, or whether the number format is even decimal. + * <h2 id="factory_methods">Getting a NumberFormat</h2> + * To get a {@code NumberFormat} for the default Locale, use one of the static + * factory methods that return a concrete subclass of {@code NumberFormat}. + * The following formats all provide an example of formatting the {@code Number} + * "2000.50" with the {@link java.util.Locale#US US} locale as the default locale. + * <ul> + * <li> Use {@link #getInstance()} or {@link #getNumberInstance()} to get + * a decimal format. For example, {@code "2,000.5"}. + * <li> Use {@link #getIntegerInstance()} to get an integer number format. + * For example, {@code "2,000"}. + * <li> Use {@link #getCurrencyInstance} to get a currency number format. + * For example, {@code "$2,000.50"}. + * <li> Use {@link #getCompactNumberInstance} to get a compact number format. + * For example, {@code "2K"}. + * <li> Use {@link #getPercentInstance} to get a format for displaying percentages. + * For example, {@code "200,050%"}. + * </ul> * - * <p> - * To format a number for the current Locale, use one of the factory - * class methods: - * <blockquote> - * {@snippet lang=java : - * myString = NumberFormat.getInstance().format(myNumber); - * } - * </blockquote> - * If you are formatting multiple numbers, it is - * more efficient to get the format and use it multiple times so that - * the system doesn't have to fetch the information about the local - * language and country conventions multiple times. - * <blockquote> - * {@snippet lang=java : - * NumberFormat nf = NumberFormat.getInstance(); - * for (var myNumber : numbers) { - * output.println(nf.format(myNumber) + "; "); - * } - * } - * </blockquote> - * To format a number for a different Locale, specify it in the - * call to {@code getInstance}. - * <blockquote> - * {@snippet lang=java : - * NumberFormat nf = NumberFormat.getInstance(Locale.FRENCH); - * } - * </blockquote> + * Alternatively, if a {@code NumberFormat} for a different locale is required, use + * one of the overloaded factory methods that take {@code Locale} as a parameter, + * for example, {@link #getIntegerInstance(Locale)}. If the installed locale-sensitive + * service implementation does not support the given {@code Locale}, the parent + * locale chain will be looked up, and a {@code Locale} used that is supported. * - * <p>If the locale contains "nu" (numbers) and/or "rg" (region override) + * <h3>Locale Extensions</h3> + * Formatting behavior can be changed when using a locale that contains any of the following * <a href="../util/Locale.html#def_locale_extension">Unicode extensions</a>, - * the decimal digits, and/or the country used for formatting are overridden. + * <ul> + * <li> "nu" + * (<a href="https://unicode.org/reports/tr35/#UnicodeNumberSystemIdentifier"> + * Numbering System</a>) - Overrides the decimal digits used + * <li> "rg" + * (<a href="https://unicode.org/reports/tr35/#RegionOverride"> + * Region Override</a>) - Overrides the country used + * <li> "cf" + * (<a href="https://www.unicode.org/reports/tr35/tr35.html#UnicodeCurrencyFormatIdentifier"> + * Currency Format style</a>) - Overrides the Currency Format style used + * </ul> + * <p> * If both "nu" and "rg" are specified, the decimal digits from the "nu" * extension supersedes the implicit one from the "rg" extension. + * Although <a href="../util/Locale.html#def_locale_extension">Unicode extensions</a> + * defines various keys and values, actual locale-sensitive service implementations + * in a Java Runtime Environment might not support any particular Unicode locale + * attributes or key/type pairs. + * <p>Below is an example of a "US" locale currency format with accounting style, + * <blockquote>{@code NumberFormat.getCurrencyInstance(Locale.forLanguageTag("en-US-u-cf-account"));}</blockquote> + * With this style, a negative value is formatted enclosed in parentheses, instead + * of being prepended with a minus sign. * - * <p>You can also use a {@code NumberFormat} to parse numbers: - * <blockquote> + * <h2>Using NumberFormat</h2> + * The following is an example of formatting and parsing in a localized fashion, * {@snippet lang=java : - * myNumber = nf.parse(myString); + * NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(Locale.US); + * currencyFormat.format(100000); // returns "$100,000.00" + * currencyFormat.parse("$100,000.00"); // returns 100000 * } - * </blockquote> - * Use {@code getInstance} or {@code getNumberInstance} to get the - * normal number format. Use {@code getIntegerInstance} to get an - * integer number format. Use {@code getCurrencyInstance} to get the - * currency number format. Use {@code getCompactNumberInstance} to get the - * compact number format to format a number in shorter form. For example, - * {@code 2000} can be formatted as {@code "2K"} in - * {@link java.util.Locale#US US locale}. Use {@code getPercentInstance} - * to get a format for displaying percentages. With this format, a fraction - * like 0.53 is displayed as 53%. * - * <p> - * You can also control the display of numbers with such methods as - * {@code setMinimumFractionDigits}. - * If you want even more control over the format or parsing, - * or want to give your users more control, - * you can try casting the {@code NumberFormat} you get from the factory methods - * to a {@code DecimalFormat} or {@code CompactNumberFormat} depending on - * the factory method used. This will work for the vast majority of locales; - * just remember to put it in a {@code try} block in case you encounter - * an unusual one. + * <h2>Customizing NumberFormat</h2> + * {@code NumberFormat} provides API to customize formatting and parsing behavior, + * <ul> + * <li> {@link #setParseIntegerOnly(boolean)}; when {@code true}, will only return the + * integer portion of the number parsed from the String. + * <li> {@link #setMinimumFractionDigits(int)}; Use to adjust the expected digits when + * formatting. Use any of the other minimum/maximum or fraction/integer setter methods + * in the same manner. + * <li> {@link #setGroupingUsed(boolean)}; when {@code true}, formatted numbers will be displayed + * with grouping separators. Additionally, when {@code false}, parsing will not expect + * grouping separators in the parsed String. + * <li> {@link #setStrict(boolean)}; when {@code true}, parsing will be done strictly. + * The behavior of strict parsing should be referred to in the implementing + * {@code NumberFormat} subclass. + * </ul> * * <p> - * NumberFormat and DecimalFormat are designed such that some controls - * work for formatting and others work for parsing. The following is - * the detailed description for each these control methods, - * <p> - * setParseIntegerOnly : only affects parsing, e.g. - * if true, "3456.78" → 3456 (and leaves the parse position just after index 6) - * if false, "3456.78" → 3456.78 (and leaves the parse position just after index 8) - * This is independent of formatting. If you want to not show a decimal point - * where there might be no digits after the decimal point, use - * setDecimalSeparatorAlwaysShown. - * <p> - * setDecimalSeparatorAlwaysShown : only affects formatting, and only where - * there might be no digits after the decimal point, such as with a pattern - * like "#,##0.##", e.g., - * if true, 3456.00 → "3,456." - * if false, 3456.00 → "3456" - * This is independent of parsing. If you want parsing to stop at the decimal - * point, use setParseIntegerOnly. + * To provide more control over formatting or parsing behavior, type checking can + * be done to safely convert to an implementing subclass of {@code NumberFormat}; this + * provides additional methods defined by the subclass. + * For example, + * {@snippet lang=java : + * NumberFormat nFmt = NumberFormat.getInstance(Locale.US); + * if (nFmt instanceof DecimalFormat dFmt) { + * dFmt.setDecimalSeparatorAlwaysShown(true); + * dFmt.format(100); // returns "100." + * } + * } + * The {@code NumberFormat} subclass returned by the factory methods is dependent + * on the locale-service provider implementation installed, and may not always + * be {@link DecimalFormat} or {@link CompactNumberFormat}. + * * <p> * You can also use forms of the {@code parse} and {@code format} * methods with {@code ParsePosition} and {@code FieldPosition} to * allow you to: * <ul> - * <li> progressively parse through pieces of a string - * <li> align the decimal point and other areas + * <li> Progressively parse through pieces of a string + * <li> Align the decimal point and other areas * </ul> * For example, you can align numbers in two ways: * <ol> @@ -197,15 +205,20 @@ * If multiple threads access a format concurrently, it must be synchronized * externally. * - * @implSpec The {@link #format(double, StringBuffer, FieldPosition)}, + * @implSpec + * Null Parameter Handling + * <ul> + * <li> The {@link #format(double, StringBuffer, FieldPosition)}, * {@link #format(long, StringBuffer, FieldPosition)} and * {@link #parse(String, ParsePosition)} methods may throw * {@code NullPointerException}, if any of their parameter is {@code null}. * The subclass may provide its own implementation and specification about * {@code NullPointerException}. + * </ul> * - * <p> - * The default implementation provides rounding modes defined + * Default RoundingMode + * <ul> + * <li> The default implementation provides rounding modes defined * in {@link java.math.RoundingMode} for formatting numbers. It * uses the {@linkplain java.math.RoundingMode#HALF_EVEN * round half-even algorithm}. To change the rounding mode use @@ -214,10 +227,14 @@ * configured to round floating point numbers using half-even * rounding (see {@link java.math.RoundingMode#HALF_EVEN * RoundingMode.HALF_EVEN}) for formatting. + * </ul> * + * @spec https://www.unicode.org/reports/tr35 + * Unicode Locale Data Markup Language (LDML) * @see DecimalFormat * @see ChoiceFormat * @see CompactNumberFormat + * @see Locale * @author Mark Davis * @author Helena Shih * @since 1.1 From 7a895552c8eb9ae19f8d6eb8c35a0393445305fa Mon Sep 17 00:00:00 2001 From: Scott Gibbons <sgibbons@openjdk.org> Date: Tue, 23 Apr 2024 23:35:59 +0000 Subject: [PATCH 074/141] 8330844: Add aliases for conditional jumps and additional instruction forms for x86 Reviewed-by: kvn, epeter, sviswanathan --- src/hotspot/cpu/x86/assembler_x86.cpp | 71 ++++++++++++++++++++++ src/hotspot/cpu/x86/assembler_x86.hpp | 9 +++ src/hotspot/cpu/x86/macroAssembler_x86.cpp | 10 +++ src/hotspot/cpu/x86/macroAssembler_x86.hpp | 70 +++++++++++++++++++++ 4 files changed, 160 insertions(+) diff --git a/src/hotspot/cpu/x86/assembler_x86.cpp b/src/hotspot/cpu/x86/assembler_x86.cpp index e4885fa946df6..f5a6cb845addc 100644 --- a/src/hotspot/cpu/x86/assembler_x86.cpp +++ b/src/hotspot/cpu/x86/assembler_x86.cpp @@ -1758,6 +1758,22 @@ void Assembler::cmovl(Condition cc, Register dst, Address src) { emit_operand(dst, src, 0); } +void Assembler::cmpb(Address dst, Register reg) { + assert(reg->has_byte_register(), "must have byte register"); + InstructionMark im(this); + prefix(dst, reg, true); + emit_int8((unsigned char)0x38); + emit_operand(reg, dst, 0); +} + +void Assembler::cmpb(Register reg, Address dst) { + assert(reg->has_byte_register(), "must have byte register"); + InstructionMark im(this); + prefix(dst, reg, true); + emit_int8((unsigned char)0x3a); + emit_operand(reg, dst, 0); +} + void Assembler::cmpb(Address dst, int imm8) { InstructionMark im(this); prefix(dst); @@ -1789,6 +1805,13 @@ void Assembler::cmpl(Register dst, Address src) { emit_operand(dst, src, 0); } +void Assembler::cmpl(Address dst, Register reg) { + InstructionMark im(this); + prefix(dst, reg); + emit_int8(0x39); + emit_operand(reg, dst, 0); +} + void Assembler::cmpl_imm32(Address dst, int32_t imm32) { InstructionMark im(this); prefix(dst); @@ -1804,6 +1827,14 @@ void Assembler::cmpw(Address dst, int imm16) { emit_int16(imm16); } +void Assembler::cmpw(Address dst, Register reg) { + InstructionMark im(this); + emit_int8(0x66); + prefix(dst, reg); + emit_int8((unsigned char)0x39); + emit_operand(reg, dst, 0); +} + // The 32-bit cmpxchg compares the value at adr with the contents of rax, // and stores reg into adr if so; otherwise, the value at adr is loaded into rax,. // The ZF is set if the compared values were equal, and cleared otherwise. @@ -4425,6 +4456,16 @@ void Assembler::vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int emit_int16(0x74, (0xC0 | encode)); } +void Assembler::vpcmpeqb(XMMRegister dst, XMMRegister src1, Address src2, int vector_len) { + assert(vector_len == AVX_128bit ? VM_Version::supports_avx() : VM_Version::supports_avx2(), ""); + assert(vector_len <= AVX_256bit, "evex encoding is different - has k register as dest"); + InstructionMark im(this); + InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false); + vex_prefix(src2, src1->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes); + emit_int8(0x74); + emit_operand(dst, src2, 0); +} + // In this context, kdst is written the mask used to process the equal components void Assembler::evpcmpeqb(KRegister kdst, XMMRegister nds, XMMRegister src, int vector_len) { assert(VM_Version::supports_avx512bw(), ""); @@ -4531,6 +4572,17 @@ void Assembler::vpcmpeqw(XMMRegister dst, XMMRegister nds, XMMRegister src, int emit_int16(0x75, (0xC0 | encode)); } +// In this context, the dst vector contains the components that are equal, non equal components are zeroed in dst +void Assembler::vpcmpeqw(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { + assert(vector_len == AVX_128bit ? VM_Version::supports_avx() : VM_Version::supports_avx2(), ""); + assert(vector_len <= AVX_256bit, "evex encoding is different - has k register as dest"); + InstructionMark im(this); + InstructionAttr attributes(vector_len, /* rex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false); + vex_prefix(src, nds->encoding(), dst->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes); + emit_int8(0x75); + emit_operand(dst, src, 0); +} + // In this context, kdst is written the mask used to process the equal components void Assembler::evpcmpeqw(KRegister kdst, XMMRegister nds, XMMRegister src, int vector_len) { assert(VM_Version::supports_avx512bw(), ""); @@ -7648,6 +7700,14 @@ void Assembler::vpminsb(XMMRegister dst, XMMRegister nds, XMMRegister src, int v emit_int16(0x38, (0xC0 | encode)); } +void Assembler::vpminub(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { + assert(vector_len == AVX_128bit ? VM_Version::supports_avx() : + (vector_len == AVX_256bit ? VM_Version::supports_avx2() : VM_Version::supports_avx512bw()), ""); + InstructionAttr attributes(vector_len, /* vex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true); + int encode = vex_prefix_and_encode(dst->encoding(), nds->encoding(), src->encoding(), VEX_SIMD_66, VEX_OPCODE_0F, &attributes); + emit_int16(0xDA, (0xC0 | encode)); +} + void Assembler::pminsw(XMMRegister dst, XMMRegister src) { assert(VM_Version::supports_sse2(), ""); InstructionAttr attributes(AVX_128bit, /* rex_w */ false, /* legacy_mode */ _legacy_mode_bw, /* no_mask_reg */ true, /* uses_vl */ true); @@ -12273,6 +12333,13 @@ void Assembler::bzhiq(Register dst, Register src1, Register src2) { emit_int16((unsigned char)0xF5, (0xC0 | encode)); } +void Assembler::bzhil(Register dst, Register src1, Register src2) { + assert(VM_Version::supports_bmi2(), "bit manipulation instructions not supported"); + InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false); + int encode = vex_prefix_and_encode(dst->encoding(), src2->encoding(), src1->encoding(), VEX_SIMD_NONE, VEX_OPCODE_0F_38, &attributes); + emit_int16((unsigned char)0xF5, (0xC0 | encode)); +} + void Assembler::pextl(Register dst, Register src1, Register src2) { assert(VM_Version::supports_bmi2(), "bit manipulation instructions not supported"); InstructionAttr attributes(AVX_128bit, /* vex_w */ false, /* legacy_mode */ true, /* no_mask_reg */ true, /* uses_vl */ false); @@ -13167,6 +13234,10 @@ void Assembler::cdqq() { emit_int16(REX_W, (unsigned char)0x99); } +void Assembler::cdqe() { + emit_int16(REX_W, (unsigned char)0x98); +} + void Assembler::clflush(Address adr) { assert(VM_Version::supports_clflush(), "should do"); prefix(adr); diff --git a/src/hotspot/cpu/x86/assembler_x86.hpp b/src/hotspot/cpu/x86/assembler_x86.hpp index 64e8cf99bfca1..a8747a4308aa6 100644 --- a/src/hotspot/cpu/x86/assembler_x86.hpp +++ b/src/hotspot/cpu/x86/assembler_x86.hpp @@ -1094,6 +1094,7 @@ class Assembler : public AbstractAssembler { void cdql(); void cdqq(); + void cdqe(); void cld(); @@ -1109,12 +1110,15 @@ class Assembler : public AbstractAssembler { void cmpb(Address dst, int imm8); + void cmpb(Address dst, Register reg); + void cmpb(Register reg, Address dst); void cmpl(Address dst, int32_t imm32); void cmpl(Register dst, int32_t imm32); void cmpl(Register dst, Register src); void cmpl(Register dst, Address src); void cmpl_imm32(Address dst, int32_t imm32); + void cmpl(Address dst, Register reg); void cmpq(Address dst, int32_t imm32); void cmpq(Address dst, Register src); @@ -1123,6 +1127,7 @@ class Assembler : public AbstractAssembler { void cmpq(Register dst, Address src); void cmpw(Address dst, int imm16); + void cmpw(Address dst, Register reg); void cmpxchg8 (Address adr); @@ -1802,6 +1807,7 @@ class Assembler : public AbstractAssembler { void vpcmpCCbwd(XMMRegister dst, XMMRegister nds, XMMRegister src, int cond_encoding, int vector_len); void vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); + void vpcmpeqb(XMMRegister dst, XMMRegister src1, Address src2, int vector_len); void evpcmpeqb(KRegister kdst, XMMRegister nds, XMMRegister src, int vector_len); void evpcmpeqb(KRegister kdst, XMMRegister nds, Address src, int vector_len); void evpcmpeqb(KRegister kdst, KRegister mask, XMMRegister nds, Address src, int vector_len); @@ -1816,6 +1822,7 @@ class Assembler : public AbstractAssembler { void evpcmpuq(KRegister kdst, XMMRegister nds, XMMRegister src, ComparisonPredicate vcc, int vector_len); void pcmpeqw(XMMRegister dst, XMMRegister src); + void vpcmpeqw(XMMRegister dst, XMMRegister nds, Address src, int vector_len); void vpcmpeqw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); void evpcmpeqw(KRegister kdst, XMMRegister nds, XMMRegister src, int vector_len); void evpcmpeqw(KRegister kdst, XMMRegister nds, Address src, int vector_len); @@ -2306,6 +2313,7 @@ class Assembler : public AbstractAssembler { void shrxq(Register dst, Address src1, Register src2); void bzhiq(Register dst, Register src1, Register src2); + void bzhil(Register dst, Register src1, Register src2); void pextl(Register dst, Register src1, Register src2); void pdepl(Register dst, Register src1, Register src2); @@ -2581,6 +2589,7 @@ class Assembler : public AbstractAssembler { // Minimum of packed integers void pminsb(XMMRegister dst, XMMRegister src); void vpminsb(XMMRegister dst, XMMRegister src1, XMMRegister src2, int vector_len); + void vpminub(XMMRegister dst, XMMRegister src1, XMMRegister src2, int vector_len); void pminsw(XMMRegister dst, XMMRegister src); void vpminsw(XMMRegister dst, XMMRegister src1, XMMRegister src2, int vector_len); void pminsd(XMMRegister dst, XMMRegister src); diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.cpp b/src/hotspot/cpu/x86/macroAssembler_x86.cpp index 6c8ca583b10cb..d20f34e27b871 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.cpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.cpp @@ -3570,11 +3570,21 @@ void MacroAssembler::vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, Assembler::vpcmpeqb(dst, nds, src, vector_len); } +void MacroAssembler::vpcmpeqb(XMMRegister dst, XMMRegister src1, Address src2, int vector_len) { + assert(((dst->encoding() < 16 && src1->encoding() < 16) || VM_Version::supports_avx512vlbw()),"XMM register should be 0-15"); + Assembler::vpcmpeqb(dst, src1, src2, vector_len); +} + void MacroAssembler::vpcmpeqw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len) { assert(((dst->encoding() < 16 && src->encoding() < 16 && nds->encoding() < 16) || VM_Version::supports_avx512vlbw()),"XMM register should be 0-15"); Assembler::vpcmpeqw(dst, nds, src, vector_len); } +void MacroAssembler::vpcmpeqw(XMMRegister dst, XMMRegister nds, Address src, int vector_len) { + assert(((dst->encoding() < 16 && nds->encoding() < 16) || VM_Version::supports_avx512vlbw()),"XMM register should be 0-15"); + Assembler::vpcmpeqw(dst, nds, src, vector_len); +} + void MacroAssembler::evpcmpeqd(KRegister kdst, KRegister mask, XMMRegister nds, AddressLiteral src, int vector_len, Register rscratch) { assert(rscratch != noreg || always_reachable(src), "missing"); diff --git a/src/hotspot/cpu/x86/macroAssembler_x86.hpp b/src/hotspot/cpu/x86/macroAssembler_x86.hpp index 738ce8a55c35c..e045572a5cdbb 100644 --- a/src/hotspot/cpu/x86/macroAssembler_x86.hpp +++ b/src/hotspot/cpu/x86/macroAssembler_x86.hpp @@ -955,6 +955,74 @@ class MacroAssembler: public Assembler { // contained in the location described by entry (not the address of entry) void jump(ArrayAddress entry, Register rscratch); + // Adding more natural conditional jump instructions + void ALWAYSINLINE jo(Label& L, bool maybe_short = true) { jcc(Assembler::overflow, L, maybe_short); } + void ALWAYSINLINE jno(Label& L, bool maybe_short = true) { jcc(Assembler::noOverflow, L, maybe_short); } + void ALWAYSINLINE js(Label& L, bool maybe_short = true) { jcc(Assembler::negative, L, maybe_short); } + void ALWAYSINLINE jns(Label& L, bool maybe_short = true) { jcc(Assembler::positive, L, maybe_short); } + void ALWAYSINLINE je(Label& L, bool maybe_short = true) { jcc(Assembler::equal, L, maybe_short); } + void ALWAYSINLINE jz(Label& L, bool maybe_short = true) { jcc(Assembler::zero, L, maybe_short); } + void ALWAYSINLINE jne(Label& L, bool maybe_short = true) { jcc(Assembler::notEqual, L, maybe_short); } + void ALWAYSINLINE jnz(Label& L, bool maybe_short = true) { jcc(Assembler::notZero, L, maybe_short); } + void ALWAYSINLINE jb(Label& L, bool maybe_short = true) { jcc(Assembler::below, L, maybe_short); } + void ALWAYSINLINE jnae(Label& L, bool maybe_short = true) { jcc(Assembler::below, L, maybe_short); } + void ALWAYSINLINE jc(Label& L, bool maybe_short = true) { jcc(Assembler::carrySet, L, maybe_short); } + void ALWAYSINLINE jnb(Label& L, bool maybe_short = true) { jcc(Assembler::aboveEqual, L, maybe_short); } + void ALWAYSINLINE jae(Label& L, bool maybe_short = true) { jcc(Assembler::aboveEqual, L, maybe_short); } + void ALWAYSINLINE jnc(Label& L, bool maybe_short = true) { jcc(Assembler::carryClear, L, maybe_short); } + void ALWAYSINLINE jbe(Label& L, bool maybe_short = true) { jcc(Assembler::belowEqual, L, maybe_short); } + void ALWAYSINLINE jna(Label& L, bool maybe_short = true) { jcc(Assembler::belowEqual, L, maybe_short); } + void ALWAYSINLINE ja(Label& L, bool maybe_short = true) { jcc(Assembler::above, L, maybe_short); } + void ALWAYSINLINE jnbe(Label& L, bool maybe_short = true) { jcc(Assembler::above, L, maybe_short); } + void ALWAYSINLINE jl(Label& L, bool maybe_short = true) { jcc(Assembler::less, L, maybe_short); } + void ALWAYSINLINE jnge(Label& L, bool maybe_short = true) { jcc(Assembler::less, L, maybe_short); } + void ALWAYSINLINE jge(Label& L, bool maybe_short = true) { jcc(Assembler::greaterEqual, L, maybe_short); } + void ALWAYSINLINE jnl(Label& L, bool maybe_short = true) { jcc(Assembler::greaterEqual, L, maybe_short); } + void ALWAYSINLINE jle(Label& L, bool maybe_short = true) { jcc(Assembler::lessEqual, L, maybe_short); } + void ALWAYSINLINE jng(Label& L, bool maybe_short = true) { jcc(Assembler::lessEqual, L, maybe_short); } + void ALWAYSINLINE jg(Label& L, bool maybe_short = true) { jcc(Assembler::greater, L, maybe_short); } + void ALWAYSINLINE jnle(Label& L, bool maybe_short = true) { jcc(Assembler::greater, L, maybe_short); } + void ALWAYSINLINE jp(Label& L, bool maybe_short = true) { jcc(Assembler::parity, L, maybe_short); } + void ALWAYSINLINE jpe(Label& L, bool maybe_short = true) { jcc(Assembler::parity, L, maybe_short); } + void ALWAYSINLINE jnp(Label& L, bool maybe_short = true) { jcc(Assembler::noParity, L, maybe_short); } + void ALWAYSINLINE jpo(Label& L, bool maybe_short = true) { jcc(Assembler::noParity, L, maybe_short); } + // * No condition for this * void ALWAYSINLINE jcxz(Label& L, bool maybe_short = true) { jcc(Assembler::cxz, L, maybe_short); } + // * No condition for this * void ALWAYSINLINE jecxz(Label& L, bool maybe_short = true) { jcc(Assembler::cxz, L, maybe_short); } + + // Short versions of the above + void ALWAYSINLINE jo_b(Label& L) { jccb(Assembler::overflow, L); } + void ALWAYSINLINE jno_b(Label& L) { jccb(Assembler::noOverflow, L); } + void ALWAYSINLINE js_b(Label& L) { jccb(Assembler::negative, L); } + void ALWAYSINLINE jns_b(Label& L) { jccb(Assembler::positive, L); } + void ALWAYSINLINE je_b(Label& L) { jccb(Assembler::equal, L); } + void ALWAYSINLINE jz_b(Label& L) { jccb(Assembler::zero, L); } + void ALWAYSINLINE jne_b(Label& L) { jccb(Assembler::notEqual, L); } + void ALWAYSINLINE jnz_b(Label& L) { jccb(Assembler::notZero, L); } + void ALWAYSINLINE jb_b(Label& L) { jccb(Assembler::below, L); } + void ALWAYSINLINE jnae_b(Label& L) { jccb(Assembler::below, L); } + void ALWAYSINLINE jc_b(Label& L) { jccb(Assembler::carrySet, L); } + void ALWAYSINLINE jnb_b(Label& L) { jccb(Assembler::aboveEqual, L); } + void ALWAYSINLINE jae_b(Label& L) { jccb(Assembler::aboveEqual, L); } + void ALWAYSINLINE jnc_b(Label& L) { jccb(Assembler::carryClear, L); } + void ALWAYSINLINE jbe_b(Label& L) { jccb(Assembler::belowEqual, L); } + void ALWAYSINLINE jna_b(Label& L) { jccb(Assembler::belowEqual, L); } + void ALWAYSINLINE ja_b(Label& L) { jccb(Assembler::above, L); } + void ALWAYSINLINE jnbe_b(Label& L) { jccb(Assembler::above, L); } + void ALWAYSINLINE jl_b(Label& L) { jccb(Assembler::less, L); } + void ALWAYSINLINE jnge_b(Label& L) { jccb(Assembler::less, L); } + void ALWAYSINLINE jge_b(Label& L) { jccb(Assembler::greaterEqual, L); } + void ALWAYSINLINE jnl_b(Label& L) { jccb(Assembler::greaterEqual, L); } + void ALWAYSINLINE jle_b(Label& L) { jccb(Assembler::lessEqual, L); } + void ALWAYSINLINE jng_b(Label& L) { jccb(Assembler::lessEqual, L); } + void ALWAYSINLINE jg_b(Label& L) { jccb(Assembler::greater, L); } + void ALWAYSINLINE jnle_b(Label& L) { jccb(Assembler::greater, L); } + void ALWAYSINLINE jp_b(Label& L) { jccb(Assembler::parity, L); } + void ALWAYSINLINE jpe_b(Label& L) { jccb(Assembler::parity, L); } + void ALWAYSINLINE jnp_b(Label& L) { jccb(Assembler::noParity, L); } + void ALWAYSINLINE jpo_b(Label& L) { jccb(Assembler::noParity, L); } + // * No condition for this * void ALWAYSINLINE jcxz_b(Label& L) { jccb(Assembler::cxz, L); } + // * No condition for this * void ALWAYSINLINE jecxz_b(Label& L) { jccb(Assembler::cxz, L); } + // Floating void push_f(XMMRegister r); @@ -1389,7 +1457,9 @@ class MacroAssembler: public Assembler { void vpbroadcastq(XMMRegister dst, AddressLiteral src, int vector_len, Register rscratch = noreg); void vpcmpeqb(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); + void vpcmpeqb(XMMRegister dst, XMMRegister src1, Address src2, int vector_len); + void vpcmpeqw(XMMRegister dst, XMMRegister nds, Address src, int vector_len); void vpcmpeqw(XMMRegister dst, XMMRegister nds, XMMRegister src, int vector_len); void evpcmpeqd(KRegister kdst, KRegister mask, XMMRegister nds, AddressLiteral src, int vector_len, Register rscratch = noreg); From 80b381e91bb649e440321a440ce641a54f89dfb4 Mon Sep 17 00:00:00 2001 From: Jatin Bhateja <jbhateja@openjdk.org> Date: Wed, 24 Apr 2024 02:19:03 +0000 Subject: [PATCH 075/141] 8329555: Crash in intrinsifying heap-based MemorySegment Vector store/loads Reviewed-by: sviswanathan, kvn --- src/hotspot/share/opto/vectorIntrinsics.cpp | 14 +++- .../TestBiMorphicMismatchedMemSegment.java | 67 +++++++++++++++++++ 2 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 test/hotspot/jtreg/compiler/vectorapi/TestBiMorphicMismatchedMemSegment.java diff --git a/src/hotspot/share/opto/vectorIntrinsics.cpp b/src/hotspot/share/opto/vectorIntrinsics.cpp index cee221c8b758d..139dd62dc2838 100644 --- a/src/hotspot/share/opto/vectorIntrinsics.cpp +++ b/src/hotspot/share/opto/vectorIntrinsics.cpp @@ -1037,8 +1037,20 @@ bool LibraryCallKit::inline_vector_mem_operation(bool is_store) { const bool needs_cpu_membar = is_mixed_access || is_mismatched_access; - bool mismatched_ms = from_ms->get_con() && !is_mask && arr_type != nullptr && arr_type->elem()->array_element_basic_type() != elem_bt; + // For non-masked mismatched memory segment vector read/write accesses, intrinsification can continue + // with unknown backing storage type and compiler can skip inserting explicit reinterpretation IR after + // loading from or before storing to backing storage which is mandatory for semantic correctness of + // big-endian memory layout. + bool mismatched_ms = LITTLE_ENDIAN_ONLY(false) + BIG_ENDIAN_ONLY(from_ms->get_con() && !is_mask && arr_type != nullptr && + arr_type->elem()->array_element_basic_type() != elem_bt); BasicType mem_elem_bt = mismatched_ms ? arr_type->elem()->array_element_basic_type() : elem_bt; + if (!is_java_primitive(mem_elem_bt)) { + if (C->print_intrinsics()) { + tty->print_cr(" ** non-primitive array element type"); + } + return false; + } int mem_num_elem = mismatched_ms ? (num_elem * type2aelembytes(elem_bt)) / type2aelembytes(mem_elem_bt) : num_elem; if (arr_type != nullptr && !is_mask && !elem_consistent_with_arr(elem_bt, arr_type, mismatched_ms)) { if (C->print_intrinsics()) { diff --git a/test/hotspot/jtreg/compiler/vectorapi/TestBiMorphicMismatchedMemSegment.java b/test/hotspot/jtreg/compiler/vectorapi/TestBiMorphicMismatchedMemSegment.java new file mode 100644 index 0000000000000..efe1d3774540e --- /dev/null +++ b/test/hotspot/jtreg/compiler/vectorapi/TestBiMorphicMismatchedMemSegment.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2024, 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 compiler.vectorapi; + +/* + * @test + * @bug 8329555 + * @modules jdk.incubator.vector + * + * @run main/othervm -Xbatch -XX:+TieredCompilation compiler.vectorapi.TestBiMorphicMismatchedMemSegment + */ + + +import jdk.incubator.vector.ByteVector; + +import java.lang.foreign.MemorySegment; +import java.nio.ByteOrder; +import java.util.concurrent.ThreadLocalRandom; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.IntStream; + +public class TestBiMorphicMismatchedMemSegment { + public static void main(String[] args) { + AtomicLong aLong = new AtomicLong(); + + IntStream.range(0, 10000).forEach(j -> { + byte[] bytes = new byte[64]; + ThreadLocalRandom.current().nextBytes(bytes); + var byteSegment = MemorySegment.ofArray(bytes); + var byteFragment = ByteVector.SPECIES_PREFERRED.fromMemorySegment(byteSegment, 0, ByteOrder.LITTLE_ENDIAN); + float[] floats = new float[128]; + byte[] targetBytes = new byte[512]; + var floatSegment = MemorySegment.ofArray(floats); + var targetByteSegment = MemorySegment.ofArray(targetBytes); + byteFragment.intoMemorySegment(floatSegment, ThreadLocalRandom.current().nextInt(0, 448), ByteOrder.LITTLE_ENDIAN); + byteFragment.intoMemorySegment(targetByteSegment, ThreadLocalRandom.current().nextInt(0, 448), ByteOrder.LITTLE_ENDIAN); + var l = 0; + for (int i = 0; i < floats.length; i++) { + l += (int) floats[i]; + } + aLong.addAndGet(l); + }); + + System.out.println(aLong.get()); + } +} From 438e64310dc186d05de758103df1ea5504dcf33e Mon Sep 17 00:00:00 2001 From: Jasmine Karthikeyan <jkarthikeyan@openjdk.org> Date: Wed, 24 Apr 2024 05:22:51 +0000 Subject: [PATCH 076/141] 8329531: compiler/c2/irTests/TestIfMinMax.java fails with IRViolationException: There were one or multiple IR rule failures. Reviewed-by: epeter, dfenacci --- .../compiler/c2/irTests/TestIfMinMax.java | 69 +++++++++++++------ 1 file changed, 49 insertions(+), 20 deletions(-) diff --git a/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java b/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java index 80dda306d3b4d..f59328fc64a38 100644 --- a/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java +++ b/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java @@ -30,6 +30,7 @@ /* * @test + * @key randomness * @bug 8324655 * @summary Test that if expressions are properly folded into min/max nodes * @requires os.arch != "riscv64" @@ -144,9 +145,21 @@ static Object[] setupIntArrays() { int[] a = new int[512]; int[] b = new int[512]; - for (int i = 0; i < 512; i++) { + // Fill from 1 to 50 + for (int i = 0; i < 50; i++) { + a[i] = i + 1; + b[i] = 1; + } + + // Fill from -1 to -50 + for (int i = 50; i < 100; i++) { + a[i] = -(i - 49); + b[i] = 1; + } + + for (int i = 100; i < 512; i++) { a[i] = RANDOM.nextInt(); - b[i] = RANDOM.nextInt(); + b[i] = 1; } return new Object[] { a, b }; @@ -157,9 +170,21 @@ static Object[] setupLongArrays() { long[] a = new long[512]; long[] b = new long[512]; - for (int i = 0; i < 512; i++) { + // Fill from 1 to 50 + for (int i = 0; i < 50; i++) { + a[i] = i + 1; + b[i] = 1; + } + + // Fill from -1 to -50 + for (int i = 50; i < 100; i++) { + a[i] = -(i - 49); + b[i] = 1; + } + + for (int i = 100; i < 512; i++) { a[i] = RANDOM.nextLong(); - b[i] = RANDOM.nextLong(); + b[i] = 1; } return new Object[] { a, b }; @@ -173,22 +198,23 @@ static Object[] setupLongArrays() { public Object[] testMaxIntReduction(int[] a, int[] b) { int r = 0; for (int i = 0; i < a.length; i++) { - int aI = a[i] * 2; + int aI = a[i] * b[i]; r = aI > r ? aI : r; } - return new Object[] { a, r }; + return new Object[] { a, b, r }; } @Check(test = "testMaxIntReduction") public void checkTestMaxIntReduction(Object[] vals) { int[] a = (int[]) vals[0]; - int testRet = (int) vals[1]; + int[] b = (int[]) vals[1]; + int testRet = (int) vals[2]; int r = 0; for (int i = 0; i < a.length; i++) { - int aI = a[i] * 2; + int aI = a[i] * b[i]; r = aI > r ? aI : r; } @@ -207,22 +233,23 @@ public Object[] testMinIntReduction(int[] a, int[] b) { int r = 0; for (int i = 0; i < a.length; i++) { - int aI = a[i] * 2; + int aI = a[i] * b[i]; r = aI < r ? aI : r; } - return new Object[] { a, r }; + return new Object[] { a, b, r }; } @Check(test = "testMinIntReduction") public void checkTestMinIntReduction(Object[] vals) { int[] a = (int[]) vals[0]; - int testRet = (int) vals[1]; + int[] b = (int[]) vals[1]; + int testRet = (int) vals[2]; int r = 0; for (int i = 0; i < a.length; i++) { - int aI = a[i] * 2; + int aI = a[i] * b[i]; r = aI < r ? aI : r; } @@ -241,22 +268,23 @@ public Object[] testMaxLongReduction(long[] a, long[] b) { long r = 0; for (int i = 0; i < a.length; i++) { - long aI = a[i] * 2; + long aI = a[i] * b[i]; r = aI > r ? aI : r; } - return new Object[] { a, r }; + return new Object[] { a, b, r }; } @Check(test = "testMaxLongReduction") public void checkTestMaxLongReduction(Object[] vals) { long[] a = (long[]) vals[0]; - long testRet = (long) vals[1]; + long[] b = (long[]) vals[1]; + long testRet = (long) vals[2]; long r = 0; for (int i = 0; i < a.length; i++) { - long aI = a[i] * 2; + long aI = a[i] * b[i]; r = aI > r ? aI : r; } @@ -275,22 +303,23 @@ public Object[] testMinLongReduction(long[] a, long[] b) { long r = 0; for (int i = 0; i < a.length; i++) { - long aI = a[i] * 2; + long aI = a[i] * b[i]; r = aI < r ? aI : r; } - return new Object[] { a, r }; + return new Object[] { a, b, r }; } @Check(test = "testMinLongReduction") public void checkTestMinLongReduction(Object[] vals) { long[] a = (long[]) vals[0]; - long testRet = (long) vals[1]; + long[] b = (long[]) vals[1]; + long testRet = (long) vals[2]; long r = 0; for (int i = 0; i < a.length; i++) { - long aI = a[i] * 2; + long aI = a[i] * b[i]; r = aI < r ? aI : r; } From 5c3838605d48d7f2db981c5e821c08d84856c53c Mon Sep 17 00:00:00 2001 From: Joshua Zhu <jzhu@openjdk.org> Date: Wed, 24 Apr 2024 05:44:39 +0000 Subject: [PATCH 077/141] 8326541: [AArch64] ZGC C2 load barrier stub should consider the length of live registers when spilling registers Reviewed-by: eosterlund, rcastanedalo --- src/hotspot/cpu/aarch64/aarch64.ad | 8 +- .../gc/z/zBarrierSetAssembler_aarch64.cpp | 168 +++++++- .../gc/z/zBarrierSetAssembler_aarch64.hpp | 5 +- .../cpu/aarch64/macroAssembler_aarch64.cpp | 184 +++++++-- .../cpu/aarch64/macroAssembler_aarch64.hpp | 18 +- src/hotspot/cpu/aarch64/vmreg_aarch64.hpp | 4 +- ...tRegistersPushPopAtZGCLoadBarrierStub.java | 380 ++++++++++++++++++ 7 files changed, 702 insertions(+), 65 deletions(-) create mode 100644 test/hotspot/jtreg/gc/z/TestRegistersPushPopAtZGCLoadBarrierStub.java diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad index a310eae5eb91b..402cdb8a30c4d 100644 --- a/src/hotspot/cpu/aarch64/aarch64.ad +++ b/src/hotspot/cpu/aarch64/aarch64.ad @@ -1126,6 +1126,10 @@ extern RegMask _NO_SPECIAL_REG32_mask; extern RegMask _NO_SPECIAL_REG_mask; extern RegMask _NO_SPECIAL_PTR_REG_mask; +// Figure out which register class each belongs in: rc_int, rc_float or +// rc_stack. +enum RC { rc_bad, rc_int, rc_float, rc_predicate, rc_stack }; + class CallStubImpl { //-------------------------------------------------------------- @@ -1900,10 +1904,6 @@ const Pipeline * MachEpilogNode::pipeline() const { //============================================================================= -// Figure out which register class each belongs in: rc_int, rc_float or -// rc_stack. -enum RC { rc_bad, rc_int, rc_float, rc_predicate, rc_stack }; - static enum RC rc_class(OptoReg::Name reg) { if (reg == OptoReg::Bad) { diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp index ebaf18299728d..b8f4a2f2439d7 100644 --- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, 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 @@ -1081,6 +1081,35 @@ void ZBarrierSetAssembler::generate_c1_store_barrier_runtime_stub(StubAssembler* #ifdef COMPILER2 +OptoReg::Name ZBarrierSetAssembler::encode_float_vector_register_size(const Node* node, OptoReg::Name opto_reg) { + switch (node->ideal_reg()) { + case Op_RegF: + // No need to refine. The original encoding is already fine to distinguish. + assert(opto_reg % 4 == 0, "Float register should only occupy a single slot"); + break; + // Use different encoding values of the same fp/vector register to help distinguish different sizes. + // Such as V16. The OptoReg::name and its corresponding slot value are + // "V16": 64, "V16_H": 65, "V16_J": 66, "V16_K": 67. + case Op_RegD: + case Op_VecD: + opto_reg &= ~3; + opto_reg |= 1; + break; + case Op_VecX: + opto_reg &= ~3; + opto_reg |= 2; + break; + case Op_VecA: + opto_reg &= ~3; + opto_reg |= 3; + break; + default: + assert(false, "unexpected ideal register"); + ShouldNotReachHere(); + } + return opto_reg; +} + OptoReg::Name ZBarrierSetAssembler::refine_register(const Node* node, OptoReg::Name opto_reg) { if (!OptoReg::is_reg(opto_reg)) { return OptoReg::Bad; @@ -1088,7 +1117,7 @@ OptoReg::Name ZBarrierSetAssembler::refine_register(const Node* node, OptoReg::N const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); if (vm_reg->is_FloatRegister()) { - return opto_reg & ~1; + opto_reg = encode_float_vector_register_size(node, opto_reg); } return opto_reg; @@ -1099,28 +1128,82 @@ OptoReg::Name ZBarrierSetAssembler::refine_register(const Node* node, OptoReg::N class ZSaveLiveRegisters { private: + struct RegisterData { + VMReg _reg; + int _slots; // slots occupied once pushed into stack + + // Used by GrowableArray::find() + bool operator == (const RegisterData& other) { + return _reg == other._reg; + } + }; + MacroAssembler* const _masm; RegSet _gp_regs; FloatRegSet _fp_regs; + FloatRegSet _neon_regs; + FloatRegSet _sve_regs; PRegSet _p_regs; public: void initialize(ZBarrierStubC2* stub) { - // Record registers that needs to be saved/restored + int index = -1; + GrowableArray<RegisterData> registers; + VMReg prev_vm_reg = VMRegImpl::Bad(); + RegMaskIterator rmi(stub->live()); while (rmi.has_next()) { - const OptoReg::Name opto_reg = rmi.next(); - if (OptoReg::is_reg(opto_reg)) { - const VMReg vm_reg = OptoReg::as_VMReg(opto_reg); - if (vm_reg->is_Register()) { - _gp_regs += RegSet::of(vm_reg->as_Register()); - } else if (vm_reg->is_FloatRegister()) { + OptoReg::Name opto_reg = rmi.next(); + VMReg vm_reg = OptoReg::as_VMReg(opto_reg); + + if (vm_reg->is_Register()) { + // GPR may have one or two slots in regmask + // Determine whether the current vm_reg is the same physical register as the previous one + if (is_same_register(vm_reg, prev_vm_reg)) { + registers.at(index)._slots++; + } else { + RegisterData reg_data = { vm_reg, 1 }; + index = registers.append(reg_data); + } + } else if (vm_reg->is_FloatRegister()) { + // We have size encoding in OptoReg of stub->live() + // After encoding, float/neon/sve register has only one slot in regmask + // Decode it to get the actual size + VMReg vm_reg_base = vm_reg->as_FloatRegister()->as_VMReg(); + int slots = decode_float_vector_register_size(opto_reg); + RegisterData reg_data = { vm_reg_base, slots }; + index = registers.append(reg_data); + } else if (vm_reg->is_PRegister()) { + // PRegister has only one slot in regmask + RegisterData reg_data = { vm_reg, 1 }; + index = registers.append(reg_data); + } else { + assert(false, "Unknown register type"); + ShouldNotReachHere(); + } + prev_vm_reg = vm_reg; + } + + // Record registers that needs to be saved/restored + for (GrowableArrayIterator<RegisterData> it = registers.begin(); it != registers.end(); ++it) { + RegisterData reg_data = *it; + VMReg vm_reg = reg_data._reg; + int slots = reg_data._slots; + if (vm_reg->is_Register()) { + assert(slots == 1 || slots == 2, "Unexpected register save size"); + _gp_regs += RegSet::of(vm_reg->as_Register()); + } else if (vm_reg->is_FloatRegister()) { + if (slots == 1 || slots == 2) { _fp_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); - } else if (vm_reg->is_PRegister()) { - _p_regs += PRegSet::of(vm_reg->as_PRegister()); + } else if (slots == 4) { + _neon_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); } else { - fatal("Unknown register type"); + assert(slots == Matcher::scalable_vector_reg_size(T_FLOAT), "Unexpected register save size"); + _sve_regs += FloatRegSet::of(vm_reg->as_FloatRegister()); } + } else { + assert(vm_reg->is_PRegister() && slots == 1, "Unknown register type"); + _p_regs += PRegSet::of(vm_reg->as_PRegister()); } } @@ -1130,12 +1213,65 @@ class ZSaveLiveRegisters { } else { _gp_regs -= RegSet::range(r19, r30) + RegSet::of(r8, r9); } + + // Remove C-ABI SOE fp registers + _fp_regs -= FloatRegSet::range(v8, v15); + } + + static enum RC rc_class(VMReg reg) { + if (reg->is_reg()) { + if (reg->is_Register()) { + return rc_int; + } else if (reg->is_FloatRegister()) { + return rc_float; + } else if (reg->is_PRegister()) { + return rc_predicate; + } + } + if (reg->is_stack()) { + return rc_stack; + } + return rc_bad; + } + + static bool is_same_register(VMReg reg1, VMReg reg2) { + if (reg1 == reg2) { + return true; + } + if (rc_class(reg1) == rc_class(reg2)) { + if (reg1->is_Register()) { + return reg1->as_Register() == reg2->as_Register(); + } else if (reg1->is_FloatRegister()) { + return reg1->as_FloatRegister() == reg2->as_FloatRegister(); + } else if (reg1->is_PRegister()) { + return reg1->as_PRegister() == reg2->as_PRegister(); + } + } + return false; + } + + static int decode_float_vector_register_size(OptoReg::Name opto_reg) { + switch (opto_reg & 3) { + case 0: + return 1; + case 1: + return 2; + case 2: + return 4; + case 3: + return Matcher::scalable_vector_reg_size(T_FLOAT); + default: + ShouldNotReachHere(); + return 0; + } } ZSaveLiveRegisters(MacroAssembler* masm, ZBarrierStubC2* stub) : _masm(masm), _gp_regs(), _fp_regs(), + _neon_regs(), + _sve_regs(), _p_regs() { // Figure out what registers to save/restore @@ -1143,14 +1279,18 @@ class ZSaveLiveRegisters { // Save registers __ push(_gp_regs, sp); - __ push_fp(_fp_regs, sp); + __ push_fp(_fp_regs, sp, MacroAssembler::PushPopFp); + __ push_fp(_neon_regs, sp, MacroAssembler::PushPopNeon); + __ push_fp(_sve_regs, sp, MacroAssembler::PushPopSVE); __ push_p(_p_regs, sp); } ~ZSaveLiveRegisters() { // Restore registers __ pop_p(_p_regs, sp); - __ pop_fp(_fp_regs, sp); + __ pop_fp(_sve_regs, sp, MacroAssembler::PushPopSVE); + __ pop_fp(_neon_regs, sp, MacroAssembler::PushPopNeon); + __ pop_fp(_fp_regs, sp, MacroAssembler::PushPopFp); // External runtime call may clobber ptrue reg __ reinitialize_ptrue(); diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp index 82334b34adeca..705dcc61a6268 100644 --- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -187,6 +187,9 @@ class ZBarrierSetAssembler : public ZBarrierSetAssemblerBase { #endif // COMPILER1 #ifdef COMPILER2 + OptoReg::Name encode_float_vector_register_size(const Node* node, + OptoReg::Name opto_reg); + OptoReg::Name refine_register(const Node* node, OptoReg::Name opto_reg); diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp index fd6db98c7b7db..8eb2000359ca6 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp @@ -2641,7 +2641,7 @@ int MacroAssembler::pop(unsigned int bitset, Register stack) { // Push lots of registers in the bit set supplied. Don't push sp. // Return the number of dwords pushed -int MacroAssembler::push_fp(unsigned int bitset, Register stack) { +int MacroAssembler::push_fp(unsigned int bitset, Register stack, FpPushPopMode mode) { int words_pushed = 0; bool use_sve = false; int sve_vector_size_in_bytes = 0; @@ -2664,8 +2664,29 @@ int MacroAssembler::push_fp(unsigned int bitset, Register stack) { return 0; } - // SVE - if (use_sve && sve_vector_size_in_bytes > 16) { + if (mode == PushPopFull) { + if (use_sve && sve_vector_size_in_bytes > 16) { + mode = PushPopSVE; + } else { + mode = PushPopNeon; + } + } + +#ifndef PRODUCT + { + char buffer[48]; + if (mode == PushPopSVE) { + snprintf(buffer, sizeof(buffer), "push_fp: %d SVE registers", count); + } else if (mode == PushPopNeon) { + snprintf(buffer, sizeof(buffer), "push_fp: %d Neon registers", count); + } else { + snprintf(buffer, sizeof(buffer), "push_fp: %d fp registers", count); + } + block_comment(buffer); + } +#endif + + if (mode == PushPopSVE) { sub(stack, stack, sve_vector_size_in_bytes * count); for (int i = 0; i < count; i++) { sve_str(as_FloatRegister(regs[i]), Address(stack, i)); @@ -2673,35 +2694,67 @@ int MacroAssembler::push_fp(unsigned int bitset, Register stack) { return count * sve_vector_size_in_bytes / 8; } - // NEON - if (count == 1) { - strq(as_FloatRegister(regs[0]), Address(pre(stack, -wordSize * 2))); - return 2; + if (mode == PushPopNeon) { + if (count == 1) { + strq(as_FloatRegister(regs[0]), Address(pre(stack, -wordSize * 2))); + return 2; + } + + bool odd = (count & 1) == 1; + int push_slots = count + (odd ? 1 : 0); + + // Always pushing full 128 bit registers. + stpq(as_FloatRegister(regs[0]), as_FloatRegister(regs[1]), Address(pre(stack, -push_slots * wordSize * 2))); + words_pushed += 2; + + for (int i = 2; i + 1 < count; i += 2) { + stpq(as_FloatRegister(regs[i]), as_FloatRegister(regs[i+1]), Address(stack, i * wordSize * 2)); + words_pushed += 2; + } + + if (odd) { + strq(as_FloatRegister(regs[count - 1]), Address(stack, (count - 1) * wordSize * 2)); + words_pushed++; + } + + assert(words_pushed == count, "oops, pushed(%d) != count(%d)", words_pushed, count); + return count * 2; } - bool odd = (count & 1) == 1; - int push_slots = count + (odd ? 1 : 0); + if (mode == PushPopFp) { + bool odd = (count & 1) == 1; + int push_slots = count + (odd ? 1 : 0); - // Always pushing full 128 bit registers. - stpq(as_FloatRegister(regs[0]), as_FloatRegister(regs[1]), Address(pre(stack, -push_slots * wordSize * 2))); - words_pushed += 2; + if (count == 1) { + // Stack pointer must be 16 bytes aligned + strd(as_FloatRegister(regs[0]), Address(pre(stack, -push_slots * wordSize))); + return 1; + } - for (int i = 2; i + 1 < count; i += 2) { - stpq(as_FloatRegister(regs[i]), as_FloatRegister(regs[i+1]), Address(stack, i * wordSize * 2)); + stpd(as_FloatRegister(regs[0]), as_FloatRegister(regs[1]), Address(pre(stack, -push_slots * wordSize))); words_pushed += 2; - } - if (odd) { - strq(as_FloatRegister(regs[count - 1]), Address(stack, (count - 1) * wordSize * 2)); - words_pushed++; + for (int i = 2; i + 1 < count; i += 2) { + stpd(as_FloatRegister(regs[i]), as_FloatRegister(regs[i+1]), Address(stack, i * wordSize)); + words_pushed += 2; + } + + if (odd) { + // Stack pointer must be 16 bytes aligned + strd(as_FloatRegister(regs[count - 1]), Address(stack, (count - 1) * wordSize)); + words_pushed++; + } + + assert(words_pushed == count, "oops, pushed != count"); + + return count; } - assert(words_pushed == count, "oops, pushed(%d) != count(%d)", words_pushed, count); - return count * 2; + return 0; } // Return the number of dwords popped -int MacroAssembler::pop_fp(unsigned int bitset, Register stack) { +int MacroAssembler::pop_fp(unsigned int bitset, Register stack, FpPushPopMode mode) { int words_pushed = 0; bool use_sve = false; int sve_vector_size_in_bytes = 0; @@ -2723,8 +2776,29 @@ int MacroAssembler::pop_fp(unsigned int bitset, Register stack) { return 0; } - // SVE - if (use_sve && sve_vector_size_in_bytes > 16) { + if (mode == PushPopFull) { + if (use_sve && sve_vector_size_in_bytes > 16) { + mode = PushPopSVE; + } else { + mode = PushPopNeon; + } + } + +#ifndef PRODUCT + { + char buffer[48]; + if (mode == PushPopSVE) { + snprintf(buffer, sizeof(buffer), "pop_fp: %d SVE registers", count); + } else if (mode == PushPopNeon) { + snprintf(buffer, sizeof(buffer), "pop_fp: %d Neon registers", count); + } else { + snprintf(buffer, sizeof(buffer), "pop_fp: %d fp registers", count); + } + block_comment(buffer); + } +#endif + + if (mode == PushPopSVE) { for (int i = count - 1; i >= 0; i--) { sve_ldr(as_FloatRegister(regs[i]), Address(stack, i)); } @@ -2732,31 +2806,61 @@ int MacroAssembler::pop_fp(unsigned int bitset, Register stack) { return count * sve_vector_size_in_bytes / 8; } - // NEON - if (count == 1) { - ldrq(as_FloatRegister(regs[0]), Address(post(stack, wordSize * 2))); - return 2; - } + if (mode == PushPopNeon) { + if (count == 1) { + ldrq(as_FloatRegister(regs[0]), Address(post(stack, wordSize * 2))); + return 2; + } - bool odd = (count & 1) == 1; - int push_slots = count + (odd ? 1 : 0); + bool odd = (count & 1) == 1; + int push_slots = count + (odd ? 1 : 0); - if (odd) { - ldrq(as_FloatRegister(regs[count - 1]), Address(stack, (count - 1) * wordSize * 2)); - words_pushed++; - } + if (odd) { + ldrq(as_FloatRegister(regs[count - 1]), Address(stack, (count - 1) * wordSize * 2)); + words_pushed++; + } + + for (int i = 2; i + 1 < count; i += 2) { + ldpq(as_FloatRegister(regs[i]), as_FloatRegister(regs[i+1]), Address(stack, i * wordSize * 2)); + words_pushed += 2; + } - for (int i = 2; i + 1 < count; i += 2) { - ldpq(as_FloatRegister(regs[i]), as_FloatRegister(regs[i+1]), Address(stack, i * wordSize * 2)); + ldpq(as_FloatRegister(regs[0]), as_FloatRegister(regs[1]), Address(post(stack, push_slots * wordSize * 2))); words_pushed += 2; + + assert(words_pushed == count, "oops, pushed(%d) != count(%d)", words_pushed, count); + + return count * 2; } - ldpq(as_FloatRegister(regs[0]), as_FloatRegister(regs[1]), Address(post(stack, push_slots * wordSize * 2))); - words_pushed += 2; + if (mode == PushPopFp) { + bool odd = (count & 1) == 1; + int push_slots = count + (odd ? 1 : 0); + + if (count == 1) { + ldrd(as_FloatRegister(regs[0]), Address(post(stack, push_slots * wordSize))); + return 1; + } - assert(words_pushed == count, "oops, pushed(%d) != count(%d)", words_pushed, count); + if (odd) { + ldrd(as_FloatRegister(regs[count - 1]), Address(stack, (count - 1) * wordSize)); + words_pushed++; + } + + for (int i = 2; i + 1 < count; i += 2) { + ldpd(as_FloatRegister(regs[i]), as_FloatRegister(regs[i+1]), Address(stack, i * wordSize)); + words_pushed += 2; + } + + ldpd(as_FloatRegister(regs[0]), as_FloatRegister(regs[1]), Address(post(stack, push_slots * wordSize))); + words_pushed += 2; + + assert(words_pushed == count, "oops, pushed != count"); + + return count; + } - return count * 2; + return 0; } // Return the number of dwords pushed diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp index c8f1ff81af066..67fd7236842a7 100644 --- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp @@ -444,6 +444,15 @@ class MacroAssembler: public Assembler { // macro assembly operations needed for aarch64 +public: + + enum FpPushPopMode { + PushPopFull, + PushPopSVE, + PushPopNeon, + PushPopFp + }; + // first two private routines for loading 32 bit or 64 bit constants private: @@ -453,8 +462,8 @@ class MacroAssembler: public Assembler { int push(unsigned int bitset, Register stack); int pop(unsigned int bitset, Register stack); - int push_fp(unsigned int bitset, Register stack); - int pop_fp(unsigned int bitset, Register stack); + int push_fp(unsigned int bitset, Register stack, FpPushPopMode mode); + int pop_fp(unsigned int bitset, Register stack, FpPushPopMode mode); int push_p(unsigned int bitset, Register stack); int pop_p(unsigned int bitset, Register stack); @@ -462,11 +471,12 @@ class MacroAssembler: public Assembler { void mov(Register dst, Address a); public: + void push(RegSet regs, Register stack) { if (regs.bits()) push(regs.bits(), stack); } void pop(RegSet regs, Register stack) { if (regs.bits()) pop(regs.bits(), stack); } - void push_fp(FloatRegSet regs, Register stack) { if (regs.bits()) push_fp(regs.bits(), stack); } - void pop_fp(FloatRegSet regs, Register stack) { if (regs.bits()) pop_fp(regs.bits(), stack); } + void push_fp(FloatRegSet regs, Register stack, FpPushPopMode mode = PushPopFull) { if (regs.bits()) push_fp(regs.bits(), stack, mode); } + void pop_fp(FloatRegSet regs, Register stack, FpPushPopMode mode = PushPopFull) { if (regs.bits()) pop_fp(regs.bits(), stack, mode); } static RegSet call_clobbered_gp_registers(); diff --git a/src/hotspot/cpu/aarch64/vmreg_aarch64.hpp b/src/hotspot/cpu/aarch64/vmreg_aarch64.hpp index bf93372d9cd2f..793acd7150521 100644 --- a/src/hotspot/cpu/aarch64/vmreg_aarch64.hpp +++ b/src/hotspot/cpu/aarch64/vmreg_aarch64.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2006, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2006, 2024, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2014, Red Hat Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -45,7 +45,7 @@ inline Register as_Register() { } inline FloatRegister as_FloatRegister() { - assert( is_FloatRegister() && is_even(value()), "must be" ); + assert( is_FloatRegister(), "must be" ); // Yuk return ::as_FloatRegister((value() - ConcreteRegisterImpl::max_gpr) / FloatRegister::max_slots_per_register); diff --git a/test/hotspot/jtreg/gc/z/TestRegistersPushPopAtZGCLoadBarrierStub.java b/test/hotspot/jtreg/gc/z/TestRegistersPushPopAtZGCLoadBarrierStub.java new file mode 100644 index 0000000000000..71aa634c761d3 --- /dev/null +++ b/test/hotspot/jtreg/gc/z/TestRegistersPushPopAtZGCLoadBarrierStub.java @@ -0,0 +1,380 @@ +/* + * Copyright (c) 2024, Alibaba Group Holding Limited. All Rights Reserved. + * 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 gc.z; + +/** + * @test TestRegistersPushPopAtZGCLoadBarrierStub + * @bug 8326541 + * @summary Test to verify that registers are saved and restored correctly based on + the actual register usage length on aarch64 when entering load barrier stub. + * @library /test/lib / + * @modules jdk.incubator.vector + * + * @requires vm.gc.ZGenerational & vm.debug + * @requires os.arch=="aarch64" + * + * @run driver gc.z.TestRegistersPushPopAtZGCLoadBarrierStub + */ + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.random.RandomGenerator; +import java.util.random.RandomGeneratorFactory; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import jdk.incubator.vector.FloatVector; +import jdk.incubator.vector.Vector; +import jdk.incubator.vector.VectorShape; +import jdk.incubator.vector.VectorSpecies; + +import jdk.test.lib.Asserts; +import jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +class Inner {} + +class InnerFloat extends Inner { + float data; + public InnerFloat(float f) { + data = f; + } +} + +class InnerDouble extends Inner { + double data; + public InnerDouble(double f) { + data = f; + } +} + +class Outer { + volatile Inner field; + public Outer(Inner i) { + field = i; + } +} + +public class TestRegistersPushPopAtZGCLoadBarrierStub { + + class Launcher { + private final static int NUM = 1024; + private final static int ITERATIONS = 20_000; + private final static RandomGenerator RANDOM = RandomGeneratorFactory.getDefault().create(0); + private final static Map<String, Runnable> TESTS; + + private static float[] f_array; + private static Outer f_outer; + private static Outer d_outer; + + static { + f_array = new float[NUM]; + for (int i = 0; i < NUM; i++) { + f_array[i] = RANDOM.nextFloat(); + } + + InnerFloat f_inner = new InnerFloat(RANDOM.nextFloat()); + InnerDouble d_inner = new InnerDouble(RANDOM.nextDouble()); + f_outer = new Outer(f_inner); + d_outer = new Outer(d_inner); + + TESTS = new LinkedHashMap<>(); + TESTS.put("test_one_float_push_pop_at_load_barrier", Launcher::test_one_float); + TESTS.put("test_two_floats_push_pop_at_load_barrier", Launcher::test_two_floats); + TESTS.put("test_three_floats_push_pop_at_load_barrier", Launcher::test_three_floats); + TESTS.put("test_one_double_push_pop_at_load_barrier", Launcher::test_one_double); + TESTS.put("test_two_doubles_push_pop_at_load_barrier", Launcher::test_two_doubles); + TESTS.put("test_three_doubles_push_pop_at_load_barrier", Launcher::test_three_doubles); + TESTS.put("test_one_vector_128_push_pop_at_load_barrier", Launcher::test_one_vector_128); + TESTS.put("test_two_vectors_128_push_pop_at_load_barrier", Launcher::test_two_vectors_128); + TESTS.put("test_three_vectors_128_push_pop_at_load_barrier", Launcher::test_three_vectors_128); + TESTS.put("test_vector_max_push_pop_at_load_barrier", Launcher::test_vector_max); + TESTS.put("test_float_and_vector_push_pop_at_load_barrier", Launcher::test_float_and_vector); + } + + static float test_one_float_push_pop_at_load_barrier(Outer outer, float f) { + Inner inner = outer.field; + return f + ((InnerFloat)inner).data; + } + + static float test_two_floats_push_pop_at_load_barrier(Outer outer, float f1, float f2) { + Inner inner = outer.field; + return f1 + f2 + ((InnerFloat)inner).data; + } + + static float test_three_floats_push_pop_at_load_barrier(Outer outer, float f1, float f2, float f3) { + Inner inner = outer.field; + return f1 + f2 + f3 + ((InnerFloat)inner).data; + } + + static double test_one_double_push_pop_at_load_barrier(Outer outer, double d) { + Inner inner = outer.field; + return d + ((InnerDouble)inner).data; + } + + static double test_two_doubles_push_pop_at_load_barrier(Outer outer, double d1, double d2) { + Inner inner = outer.field; + return d1 + d2 + ((InnerDouble)inner).data; + } + + static double test_three_doubles_push_pop_at_load_barrier(Outer outer, double d1, double d2, double d3) { + Inner inner = outer.field; + return d1 + d2 + d3 + ((InnerDouble)inner).data; + } + + static void test_one_vector_128_push_pop_at_load_barrier(float[] b, Outer outer) { + VectorSpecies<Float> float_species = FloatVector.SPECIES_128; + + FloatVector av = FloatVector.zero(float_species); + for (int i = 0; i < b.length; i += float_species.length()) { + Inner inner = outer.field; + FloatVector bv = FloatVector.fromArray(float_species, b, i); + float value = ((InnerFloat)inner).data; + av = av.add(bv).add(value); + } + } + + static void test_two_vectors_128_push_pop_at_load_barrier(float[] b, Outer outer) { + VectorSpecies<Float> float_species = FloatVector.SPECIES_128; + + FloatVector av1 = FloatVector.zero(float_species); + FloatVector av2 = FloatVector.zero(float_species); + for (int i = 0; i < b.length; i += float_species.length()) { + Inner inner = outer.field; + FloatVector bv = FloatVector.fromArray(float_species, b, i); + float value = ((InnerFloat)inner).data; + av1 = av1.add(bv).add(value); + av2 = av2.add(av1); + } + } + + static void test_three_vectors_128_push_pop_at_load_barrier(float[] b, Outer outer) { + VectorSpecies<Float> float_species = FloatVector.SPECIES_128; + + FloatVector av1 = FloatVector.zero(float_species); + FloatVector av2 = FloatVector.zero(float_species); + FloatVector av3 = FloatVector.zero(float_species); + for (int i = 0; i < b.length; i += float_species.length()) { + Inner inner = outer.field; + FloatVector bv = FloatVector.fromArray(float_species, b, i); + float value = ((InnerFloat)inner).data; + av1 = av1.add(bv).add(value); + av2 = av2.add(av1); + av3 = av3.add(av2); + } + } + + static void test_vector_max_push_pop_at_load_barrier(float[] b, Outer outer) { + VectorSpecies<Float> float_species = FloatVector.SPECIES_MAX; + + FloatVector av = FloatVector.zero(float_species); + for (int i = 0; i < b.length; i += float_species.length()) { + Inner inner = outer.field; + FloatVector bv = FloatVector.fromArray(float_species, b, i); + float value = ((InnerFloat)inner).data; + av = av.add(bv).add(value); + } + } + + static void test_float_and_vector_push_pop_at_load_barrier(float[] b, Outer outer, float f) { + VectorSpecies<Float> float_species = FloatVector.SPECIES_MAX; + + FloatVector av = FloatVector.zero(float_species); + for (int i = 0; i < b.length; i += float_species.length()) { + Inner inner = outer.field; + FloatVector bv = FloatVector.fromArray(float_species, b, i); + float value = ((InnerFloat)inner).data + f; + av = av.add(bv).add(value); + } + } + + static void test_one_float() { + for (int i = 0; i < ITERATIONS; i++) { + test_one_float_push_pop_at_load_barrier(f_outer, RANDOM.nextFloat()); + } + } + + static void test_two_floats() { + for (int i = 0; i < ITERATIONS; i++) { + test_two_floats_push_pop_at_load_barrier(f_outer, RANDOM.nextFloat(), RANDOM.nextFloat()); + } + } + + static void test_three_floats() { + for (int i = 0; i < ITERATIONS; i++) { + test_three_floats_push_pop_at_load_barrier(f_outer, RANDOM.nextFloat(), RANDOM.nextFloat(), RANDOM.nextFloat()); + } + } + + static void test_one_double() { + for (int i = 0; i < ITERATIONS; i++) { + test_one_double_push_pop_at_load_barrier(d_outer, RANDOM.nextDouble()); + } + } + + static void test_two_doubles() { + for (int i = 0; i < ITERATIONS; i++) { + test_two_doubles_push_pop_at_load_barrier(d_outer, RANDOM.nextDouble(), RANDOM.nextDouble()); + } + } + + static void test_three_doubles() { + for (int i = 0; i < ITERATIONS; i++) { + test_three_doubles_push_pop_at_load_barrier(d_outer, RANDOM.nextDouble(), RANDOM.nextDouble(), RANDOM.nextDouble()); + } + } + + static void test_one_vector_128() { + for (int i = 0; i < ITERATIONS; i++) { + test_one_vector_128_push_pop_at_load_barrier(f_array, f_outer); + } + } + + static void test_two_vectors_128() { + for (int i = 0; i < ITERATIONS; i++) { + test_two_vectors_128_push_pop_at_load_barrier(f_array, f_outer); + } + } + + static void test_three_vectors_128() { + for (int i = 0; i < ITERATIONS; i++) { + test_three_vectors_128_push_pop_at_load_barrier(f_array, f_outer); + } + } + + static void test_vector_max() { + for (int i = 0; i < ITERATIONS; i++) { + test_vector_max_push_pop_at_load_barrier(f_array, f_outer); + } + } + + static void test_float_and_vector() { + for (int i = 0; i < ITERATIONS; i++) { + test_float_and_vector_push_pop_at_load_barrier(f_array, f_outer, RANDOM.nextFloat()); + } + } + + public static void main(String args[]) { + Runnable r = TESTS.get(args[0]); + r.run(); + } + } + + static boolean containOnlyOneOccuranceOfKeyword(String text, String keyword) { + int firstIndex = text.indexOf(keyword); + int lastIndex = text.lastIndexOf(keyword); + return firstIndex != -1 && firstIndex == lastIndex; + } + + // Check that registers are pushed and poped with correct register type and number + static void checkPushPopRegNumberAndType(String stdout, String keyword, String expected_freg_type, + int expected_number_of_fregs) throws Exception { + String expected = keyword + expected_number_of_fregs + " " + expected_freg_type + " registers"; + + String regex = keyword + "(\\d+) " + expected_freg_type + " registers"; + Pattern p = Pattern.compile(regex); + Matcher m = p.matcher(stdout); + + if (m.find()) { + String found = m.group(); + Asserts.assertEquals(found, expected, "found '" + found + "' but should print '" + expected + "'"); + } else { + throw new RuntimeException("'" + regex + "' is not found in stdout"); + } + + if (m.find()) { + throw new RuntimeException("Stdout is expected to contain only one occurance of '" + regex + + "'. Found another occurance: '" + m.group() + "'"); + } + } + + static String launchJavaTestProcess(String test_name) throws Exception { + ArrayList<String> command = new ArrayList<String>(); + command.add("-Xbatch"); + command.add("-XX:LoopUnrollLimit=0"); + command.add("-XX:-UseOnStackReplacement"); + command.add("-XX:-TieredCompilation"); + command.add("-XX:+UseZGC"); + command.add("-XX:+ZGenerational"); + command.add("--add-modules=jdk.incubator.vector"); + command.add("-XX:CompileCommand=print," + Launcher.class.getName() + "::" + test_name); + command.add(Launcher.class.getName()); + command.add(test_name); + + ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(command); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.shouldHaveExitValue(0); + return output.getStdout(); + } + + static void run_test(String test_name, String expected_freg_type, int expected_number_of_fregs, + String expected_vector_reg_type, int expected_number_of_vector_regs) throws Exception { + String stdout = launchJavaTestProcess(test_name); + + String keyword = "push_fp: "; + checkPushPopRegNumberAndType(stdout, keyword, expected_freg_type, expected_number_of_fregs); + checkPushPopRegNumberAndType(stdout, keyword, expected_vector_reg_type, expected_number_of_vector_regs); + + keyword = "pop_fp: "; + checkPushPopRegNumberAndType(stdout, keyword, expected_freg_type, expected_number_of_fregs); + checkPushPopRegNumberAndType(stdout, keyword, expected_vector_reg_type, expected_number_of_vector_regs); + } + + static void run_test(String test_name, String expected_freg_type, int expected_number_of_fregs) throws Exception { + String stdout = launchJavaTestProcess(test_name); + + String keyword = "push_fp: "; + if (!containOnlyOneOccuranceOfKeyword(stdout, keyword)) { + throw new RuntimeException("Stdout is expected to contain only one occurance of keyword: " + "'" + keyword + "'"); + } + checkPushPopRegNumberAndType(stdout, keyword, expected_freg_type, expected_number_of_fregs); + + keyword = "pop_fp: "; + if (!containOnlyOneOccuranceOfKeyword(stdout, keyword)) { + throw new RuntimeException("Stdout is expected to contain only one occurance of keyword: " + "'" + keyword + "'"); + } + checkPushPopRegNumberAndType(stdout, keyword, expected_freg_type, expected_number_of_fregs); + } + + public static void main(String[] args) throws Exception { + String vector_max_reg_type; + if (VectorShape.S_Max_BIT.vectorBitSize() > 128) { + vector_max_reg_type = "SVE"; + } else { + vector_max_reg_type = "Neon"; + } + run_test("test_one_float_push_pop_at_load_barrier", "fp", 1); + run_test("test_two_floats_push_pop_at_load_barrier", "fp", 2); + run_test("test_three_floats_push_pop_at_load_barrier", "fp", 3); + run_test("test_one_double_push_pop_at_load_barrier", "fp", 1); + run_test("test_two_doubles_push_pop_at_load_barrier", "fp", 2); + run_test("test_three_doubles_push_pop_at_load_barrier", "fp", 3); + run_test("test_one_vector_128_push_pop_at_load_barrier", "Neon", 1); + run_test("test_two_vectors_128_push_pop_at_load_barrier", "Neon", 2); + run_test("test_three_vectors_128_push_pop_at_load_barrier", "Neon", 3); + run_test("test_vector_max_push_pop_at_load_barrier", vector_max_reg_type, 1); + run_test("test_float_and_vector_push_pop_at_load_barrier", "fp", 1, vector_max_reg_type, 1); + } +} + From 3ccb64c0216c72008578b904d0e7e5bba5e11134 Mon Sep 17 00:00:00 2001 From: Emanuel Peter <epeter@openjdk.org> Date: Wed, 24 Apr 2024 06:44:14 +0000 Subject: [PATCH 078/141] 8318446: C2: optimize stores into primitive arrays by combining values into larger store Reviewed-by: kvn, thartmann --- make/test/BuildMicrobenchmark.gmk | 1 + src/hotspot/share/opto/addnode.cpp | 4 +- src/hotspot/share/opto/addnode.hpp | 2 +- src/hotspot/share/opto/c2_globals.hpp | 6 + src/hotspot/share/opto/compile.cpp | 1 + src/hotspot/share/opto/memnode.cpp | 689 +++++++++ src/hotspot/share/opto/phaseX.cpp | 10 +- .../jtreg/compiler/c2/TestMergeStores.java | 1247 +++++++++++++++++ .../bench/vm/compiler/MergeStores.java | 696 +++++++++ 9 files changed, 2652 insertions(+), 4 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/c2/TestMergeStores.java create mode 100644 test/micro/org/openjdk/bench/vm/compiler/MergeStores.java diff --git a/make/test/BuildMicrobenchmark.gmk b/make/test/BuildMicrobenchmark.gmk index bb1e6111baaf2..3d6ec9950d715 100644 --- a/make/test/BuildMicrobenchmark.gmk +++ b/make/test/BuildMicrobenchmark.gmk @@ -103,6 +103,7 @@ $(eval $(call SetupJavaCompilation, BUILD_JDK_MICROBENCHMARK, \ --add-exports java.base/jdk.internal.event=ALL-UNNAMED \ --add-exports java.base/jdk.internal.foreign=ALL-UNNAMED \ --add-exports java.base/jdk.internal.misc=ALL-UNNAMED \ + --add-exports java.base/jdk.internal.util=ALL-UNNAMED \ --add-exports java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED \ --add-exports java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED \ --add-exports java.base/jdk.internal.vm=ALL-UNNAMED \ diff --git a/src/hotspot/share/opto/addnode.cpp b/src/hotspot/share/opto/addnode.cpp index 928e51191d67b..f0e55d6ed48c9 100644 --- a/src/hotspot/share/opto/addnode.cpp +++ b/src/hotspot/share/opto/addnode.cpp @@ -724,9 +724,9 @@ Node* AddPNode::Ideal_base_and_offset(Node* ptr, PhaseValues* phase, //------------------------------unpack_offsets---------------------------------- // Collect the AddP offset values into the elements array, giving up // if there are more than length. -int AddPNode::unpack_offsets(Node* elements[], int length) { +int AddPNode::unpack_offsets(Node* elements[], int length) const { int count = 0; - Node* addr = this; + Node const* addr = this; Node* base = addr->in(AddPNode::Base); while (addr->is_AddP()) { if (addr->in(AddPNode::Base) != base) { diff --git a/src/hotspot/share/opto/addnode.hpp b/src/hotspot/share/opto/addnode.hpp index a6ef58b98ce9d..19043b5e40f5d 100644 --- a/src/hotspot/share/opto/addnode.hpp +++ b/src/hotspot/share/opto/addnode.hpp @@ -181,7 +181,7 @@ class AddPNode : public Node { // Collect the AddP offset values into the elements array, giving up // if there are more than length. - int unpack_offsets(Node* elements[], int length); + int unpack_offsets(Node* elements[], int length) const; // Do not match base-ptr edge virtual uint match_edge(uint idx) const; diff --git a/src/hotspot/share/opto/c2_globals.hpp b/src/hotspot/share/opto/c2_globals.hpp index 62489f426c612..785b76849c161 100644 --- a/src/hotspot/share/opto/c2_globals.hpp +++ b/src/hotspot/share/opto/c2_globals.hpp @@ -353,6 +353,12 @@ develop(bool, TraceNewVectors, false, \ "Trace creation of Vector nodes") \ \ + product(bool, MergeStores, true, DIAGNOSTIC, \ + "Optimize stores by combining values into larger store") \ + \ + develop(bool, TraceMergeStores, false, \ + "Trace creation of merged stores") \ + \ product_pd(bool, OptoBundling, \ "Generate nops to fill i-cache lines") \ \ diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp index e6a522e36107d..3066367397794 100644 --- a/src/hotspot/share/opto/compile.cpp +++ b/src/hotspot/share/opto/compile.cpp @@ -931,6 +931,7 @@ Compile::Compile( ciEnv* ci_env, _directive(directive), _log(ci_env->log()), _first_failure_details(nullptr), + _for_post_loop_igvn(comp_arena(), 8, 0, nullptr), _congraph(nullptr), NOT_PRODUCT(_igv_printer(nullptr) COMMA) _unique(0), diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp index f7fdc167cb811..8347321fe9077 100644 --- a/src/hotspot/share/opto/memnode.cpp +++ b/src/hotspot/share/opto/memnode.cpp @@ -2697,6 +2697,683 @@ uint StoreNode::hash() const { return NO_HASH; } +// Class to parse array pointers, and determine if they are adjacent. We parse the form: +// +// pointer = base +// + constant_offset +// + LShiftL( ConvI2L(int_offset + int_con), int_offset_shift) +// + sum(other_offsets) +// +// +// Note: we accumulate all constant offsets into constant_offset, even the int constant behind +// the "LShiftL(ConvI2L(...))" pattern. We convert "ConvI2L(int_offset + int_con)" to +// "ConvI2L(int_offset) + int_con", which is only safe if we can assume that either all +// compared addresses have an overflow for "int_offset + int_con" or none. +// For loads and stores on arrays, we know that if one overflows and the other not, then +// the two addresses lay almost max_int indices apart, but the maximal array size is +// only about half of that. Therefore, the RangeCheck on at least one of them must have +// failed. +// +// constant_offset += LShiftL( ConvI2L(int_con), int_offset_shift) +// +// pointer = base +// + constant_offset +// + LShiftL( ConvI2L(int_offset), int_offset_shift) +// + sum(other_offsets) +// +class ArrayPointer { +private: + const bool _is_valid; // The parsing succeeded + const Node* _pointer; // The final pointer to the position in the array + const Node* _base; // Base address of the array + const jlong _constant_offset; // Sum of collected constant offsets + const Node* _int_offset; // (optional) Offset behind LShiftL and ConvI2L + const jint _int_offset_shift; // (optional) Shift value for int_offset + const GrowableArray<Node*>* _other_offsets; // List of other AddP offsets + + ArrayPointer(const bool is_valid, + const Node* pointer, + const Node* base, + const jlong constant_offset, + const Node* int_offset, + const jint int_offset_shift, + const GrowableArray<Node*>* other_offsets) : + _is_valid(is_valid), + _pointer(pointer), + _base(base), + _constant_offset(constant_offset), + _int_offset(int_offset), + _int_offset_shift(int_offset_shift), + _other_offsets(other_offsets) + { + assert(_pointer != nullptr, "must always have pointer"); + assert(is_valid == (_base != nullptr), "have base exactly if valid"); + assert(is_valid == (_other_offsets != nullptr), "have other_offsets exactly if valid"); + } + + static ArrayPointer make_invalid(const Node* pointer) { + return ArrayPointer(false, pointer, nullptr, 0, nullptr, 0, nullptr); + } + + static bool parse_int_offset(Node* offset, Node*& int_offset, jint& int_offset_shift) { + // offset = LShiftL( ConvI2L(int_offset), int_offset_shift) + if (offset->Opcode() == Op_LShiftL && + offset->in(1)->Opcode() == Op_ConvI2L && + offset->in(2)->Opcode() == Op_ConI) { + int_offset = offset->in(1)->in(1); // LShiftL -> ConvI2L -> int_offset + int_offset_shift = offset->in(2)->get_int(); // LShiftL -> int_offset_shift + return true; + } + + // offset = ConvI2L(int_offset) = LShiftL( ConvI2L(int_offset), 0) + if (offset->Opcode() == Op_ConvI2L) { + int_offset = offset->in(1); + int_offset_shift = 0; + return true; + } + + // parse failed + return false; + } + +public: + // Parse the structure above the pointer + static ArrayPointer make(PhaseGVN* phase, const Node* pointer) { + assert(phase->type(pointer)->isa_aryptr() != nullptr, "must be array pointer"); + if (!pointer->is_AddP()) { return ArrayPointer::make_invalid(pointer); } + + const Node* base = pointer->in(AddPNode::Base); + if (base == nullptr) { return ArrayPointer::make_invalid(pointer); } + + const int search_depth = 5; + Node* offsets[search_depth]; + int count = pointer->as_AddP()->unpack_offsets(offsets, search_depth); + + // We expect at least a constant each + if (count <= 0) { return ArrayPointer::make_invalid(pointer); } + + // We extract the form: + // + // pointer = base + // + constant_offset + // + LShiftL( ConvI2L(int_offset + int_con), int_offset_shift) + // + sum(other_offsets) + // + jlong constant_offset = 0; + Node* int_offset = nullptr; + jint int_offset_shift = 0; + GrowableArray<Node*>* other_offsets = new GrowableArray<Node*>(count); + + for (int i = 0; i < count; i++) { + Node* offset = offsets[i]; + if (offset->Opcode() == Op_ConI) { + // Constant int offset + constant_offset += offset->get_int(); + } else if (offset->Opcode() == Op_ConL) { + // Constant long offset + constant_offset += offset->get_long(); + } else if(int_offset == nullptr && parse_int_offset(offset, int_offset, int_offset_shift)) { + // LShiftL( ConvI2L(int_offset), int_offset_shift) + int_offset = int_offset->uncast(); + if (int_offset->Opcode() == Op_AddI && int_offset->in(2)->Opcode() == Op_ConI) { + // LShiftL( ConvI2L(int_offset + int_con), int_offset_shift) + constant_offset += ((jlong)int_offset->in(2)->get_int()) << int_offset_shift; + int_offset = int_offset->in(1); + } + } else { + // All others + other_offsets->append(offset); + } + } + + return ArrayPointer(true, pointer, base, constant_offset, int_offset, int_offset_shift, other_offsets); + } + + bool is_adjacent_to_and_before(const ArrayPointer& other, const jlong data_size) const { + if (!_is_valid || !other._is_valid) { return false; } + + // Offset adjacent? + if (this->_constant_offset + data_size != other._constant_offset) { return false; } + + // All other components identical? + if (this->_base != other._base || + this->_int_offset != other._int_offset || + this->_int_offset_shift != other._int_offset_shift || + this->_other_offsets->length() != other._other_offsets->length()) { + return false; + } + + for (int i = 0; i < this->_other_offsets->length(); i++) { + Node* o1 = this->_other_offsets->at(i); + Node* o2 = other._other_offsets->at(i); + if (o1 != o2) { return false; } + } + + return true; + } + +#ifndef PRODUCT + void dump() { + if (!_is_valid) { + tty->print("ArrayPointer[%d %s, invalid]", _pointer->_idx, _pointer->Name()); + return; + } + tty->print("ArrayPointer[%d %s, base[%d %s] + %lld", + _pointer->_idx, _pointer->Name(), + _base->_idx, _base->Name(), + (long long)_constant_offset); + if (_int_offset != 0) { + tty->print(" + I2L[%d %s] << %d", + _int_offset->_idx, _int_offset->Name(), _int_offset_shift); + } + for (int i = 0; i < _other_offsets->length(); i++) { + Node* n = _other_offsets->at(i); + tty->print(" + [%d %s]", n->_idx, n->Name()); + } + tty->print_cr("]"); + } +#endif +}; + +// Link together multiple stores (B/S/C/I) into a longer one. +// +// Example: _store = StoreB[i+3] +// +// RangeCheck[i+0] RangeCheck[i+0] +// StoreB[i+0] +// RangeCheck[i+1] RangeCheck[i+1] +// StoreB[i+1] --> pass: fail: +// StoreB[i+2] StoreI[i+0] StoreB[i+0] +// StoreB[i+3] +// +// The 4 StoreB are merged into a single StoreI node. We have to be careful with RangeCheck[i+1]: before +// the optimization, if this RangeCheck[i+1] fails, then we execute only StoreB[i+0], and then trap. After +// the optimization, the new StoreI[i+0] is on the passing path of RangeCheck[i+1], and StoreB[i+0] on the +// failing path. +// +// Note: For normal array stores, every store at first has a RangeCheck. But they can be removed with: +// - RCE (RangeCheck Elimination): the RangeChecks in the loop are hoisted out and before the loop, +// and possibly no RangeChecks remain between the stores. +// - RangeCheck smearing: the earlier RangeChecks are adjusted such that they cover later RangeChecks, +// and those later RangeChecks can be removed. Example: +// +// RangeCheck[i+0] RangeCheck[i+0] <- before first store +// StoreB[i+0] StoreB[i+0] <- first store +// RangeCheck[i+1] --> smeared --> RangeCheck[i+3] <- only RC between first and last store +// StoreB[i+0] StoreB[i+1] <- second store +// RangeCheck[i+2] --> removed +// StoreB[i+0] StoreB[i+2] +// RangeCheck[i+3] --> removed +// StoreB[i+0] StoreB[i+3] <- last store +// +// Thus, it is a common pattern that between the first and last store in a chain +// of adjacent stores there remains exactly one RangeCheck, located between the +// first and the second store (e.g. RangeCheck[i+3]). +// +class MergePrimitiveArrayStores : public StackObj { +private: + PhaseGVN* _phase; + StoreNode* _store; + +public: + MergePrimitiveArrayStores(PhaseGVN* phase, StoreNode* store) : _phase(phase), _store(store) {} + + StoreNode* run(); + +private: + bool is_compatible_store(const StoreNode* other_store) const; + bool is_adjacent_pair(const StoreNode* use_store, const StoreNode* def_store) const; + bool is_adjacent_input_pair(const Node* n1, const Node* n2, const int memory_size) const; + static bool is_con_RShift(const Node* n, Node const*& base_out, jint& shift_out); + enum CFGStatus { SuccessNoRangeCheck, SuccessWithRangeCheck, Failure }; + static CFGStatus cfg_status_for_pair(const StoreNode* use_store, const StoreNode* def_store); + + class Status { + private: + StoreNode* _found_store; + bool _found_range_check; + + Status(StoreNode* found_store, bool found_range_check) + : _found_store(found_store), _found_range_check(found_range_check) {} + + public: + StoreNode* found_store() const { return _found_store; } + bool found_range_check() const { return _found_range_check; } + static Status make_failure() { return Status(nullptr, false); } + + static Status make(StoreNode* found_store, const CFGStatus cfg_status) { + if (cfg_status == CFGStatus::Failure) { + return Status::make_failure(); + } + return Status(found_store, cfg_status == CFGStatus::SuccessWithRangeCheck); + } + }; + + Status find_adjacent_use_store(const StoreNode* def_store) const; + Status find_adjacent_def_store(const StoreNode* use_store) const; + Status find_use_store(const StoreNode* def_store) const; + Status find_def_store(const StoreNode* use_store) const; + Status find_use_store_unidirectional(const StoreNode* def_store) const; + Status find_def_store_unidirectional(const StoreNode* use_store) const; + + void collect_merge_list(Node_List& merge_list) const; + Node* make_merged_input_value(const Node_List& merge_list); + StoreNode* make_merged_store(const Node_List& merge_list, Node* merged_input_value); + + DEBUG_ONLY( void trace(const Node_List& merge_list, const Node* merged_input_value, const StoreNode* merged_store) const; ) +}; + +StoreNode* MergePrimitiveArrayStores::run() { + // Check for B/S/C/I + int opc = _store->Opcode(); + if (opc != Op_StoreB && opc != Op_StoreC && opc != Op_StoreI) { + return nullptr; + } + + // Only merge stores on arrays, and the stores must have the same size as the elements. + const TypeAryPtr* aryptr_t = _store->adr_type()->isa_aryptr(); + if (aryptr_t == nullptr || + type2aelembytes(aryptr_t->elem()->array_element_basic_type()) != _store->memory_size()) { + return nullptr; + } + + // The _store must be the "last" store in a chain. If we find a use we could merge with + // then that use or a store further down is the "last" store. + Status status_use = find_adjacent_use_store(_store); + if (status_use.found_store() != nullptr) { + return nullptr; + } + + // Check if we can merge with at least one def, so that we have at least 2 stores to merge. + Status status_def = find_adjacent_def_store(_store); + if (status_def.found_store() == nullptr) { + return nullptr; + } + + ResourceMark rm; + Node_List merge_list; + collect_merge_list(merge_list); + + Node* merged_input_value = make_merged_input_value(merge_list); + if (merged_input_value == nullptr) { return nullptr; } + + StoreNode* merged_store = make_merged_store(merge_list, merged_input_value); + + DEBUG_ONLY( if(TraceMergeStores) { trace(merge_list, merged_input_value, merged_store); } ) + + return merged_store; +} + +// Check compatibility between _store and other_store. +bool MergePrimitiveArrayStores::is_compatible_store(const StoreNode* other_store) const { + int opc = _store->Opcode(); + assert(opc == Op_StoreB || opc == Op_StoreC || opc == Op_StoreI, "precondition"); + assert(_store->adr_type()->isa_aryptr() != nullptr, "must be array store"); + + if (other_store == nullptr || + _store->Opcode() != other_store->Opcode() || + other_store->adr_type()->isa_aryptr() == nullptr) { + return false; + } + + // Check that the size of the stores, and the array elements are all the same. + const TypeAryPtr* aryptr_t1 = _store->adr_type()->is_aryptr(); + const TypeAryPtr* aryptr_t2 = other_store->adr_type()->is_aryptr(); + int size1 = type2aelembytes(aryptr_t1->elem()->array_element_basic_type()); + int size2 = type2aelembytes(aryptr_t2->elem()->array_element_basic_type()); + if (size1 != size2 || + size1 != _store->memory_size() || + _store->memory_size() != other_store->memory_size()) { + return false; + } + return true; +} + +bool MergePrimitiveArrayStores::is_adjacent_pair(const StoreNode* use_store, const StoreNode* def_store) const { + if (!is_adjacent_input_pair(def_store->in(MemNode::ValueIn), + use_store->in(MemNode::ValueIn), + def_store->memory_size())) { + return false; + } + + ResourceMark rm; + ArrayPointer array_pointer_use = ArrayPointer::make(_phase, use_store->in(MemNode::Address)); + ArrayPointer array_pointer_def = ArrayPointer::make(_phase, def_store->in(MemNode::Address)); + if (!array_pointer_def.is_adjacent_to_and_before(array_pointer_use, use_store->memory_size())) { + return false; + } + + return true; +} + +bool MergePrimitiveArrayStores::is_adjacent_input_pair(const Node* n1, const Node* n2, const int memory_size) const { + // Pattern: [n1 = ConI, n2 = ConI] + if (n1->Opcode() == Op_ConI) { + return n2->Opcode() == Op_ConI; + } + + // Pattern: [n1 = base >> shift, n2 = base >> (shift + memory_size)] + Node const* base_n2; + jint shift_n2; + if (!is_con_RShift(n2, base_n2, shift_n2)) { + return false; + } + if (n1->Opcode() == Op_ConvL2I) { + // look through + n1 = n1->in(1); + } + Node const* base_n1; + jint shift_n1; + if (n1 == base_n2) { + // n1 = base = base >> 0 + base_n1 = n1; + shift_n1 = 0; + } else if (!is_con_RShift(n1, base_n1, shift_n1)) { + return false; + } + int bits_per_store = memory_size * 8; + if (base_n1 != base_n2 || + shift_n1 + bits_per_store != shift_n2 || + shift_n1 % bits_per_store != 0) { + return false; + } + + // both load from same value with correct shift + return true; +} + +// Detect pattern: n = base_out >> shift_out +bool MergePrimitiveArrayStores::is_con_RShift(const Node* n, Node const*& base_out, jint& shift_out) { + assert(n != nullptr, "precondition"); + + int opc = n->Opcode(); + if (opc == Op_ConvL2I) { + n = n->in(1); + opc = n->Opcode(); + } + + if ((opc == Op_RShiftI || + opc == Op_RShiftL || + opc == Op_URShiftI || + opc == Op_URShiftL) && + n->in(2)->is_ConI()) { + base_out = n->in(1); + shift_out = n->in(2)->get_int(); + assert(shift_out >= 0, "must be positive"); + return true; + } + return false; +} + +// Check if there is nothing between the two stores, except optionally a RangeCheck leading to an uncommon trap. +MergePrimitiveArrayStores::CFGStatus MergePrimitiveArrayStores::cfg_status_for_pair(const StoreNode* use_store, const StoreNode* def_store) { + assert(use_store->in(MemNode::Memory) == def_store, "use-def relationship"); + + Node* ctrl_use = use_store->in(MemNode::Control); + Node* ctrl_def = def_store->in(MemNode::Control); + if (ctrl_use == nullptr || ctrl_def == nullptr) { + return CFGStatus::Failure; + } + + if (ctrl_use == ctrl_def) { + // Same ctrl -> no RangeCheck in between. + // Check: use_store must be the only use of def_store. + if (def_store->outcnt() > 1) { + return CFGStatus::Failure; + } + return CFGStatus::SuccessNoRangeCheck; + } + + // Different ctrl -> could have RangeCheck in between. + // Check: 1. def_store only has these uses: use_store and MergeMem for uncommon trap, and + // 2. ctrl separated by RangeCheck. + if (def_store->outcnt() != 2) { + return CFGStatus::Failure; // Cannot have exactly these uses: use_store and MergeMem for uncommon trap. + } + int use_store_out_idx = def_store->raw_out(0) == use_store ? 0 : 1; + Node* merge_mem = def_store->raw_out(1 - use_store_out_idx)->isa_MergeMem(); + if (merge_mem == nullptr || + merge_mem->outcnt() != 1) { + return CFGStatus::Failure; // Does not have MergeMem for uncommon trap. + } + if (!ctrl_use->is_IfProj() || + !ctrl_use->in(0)->is_RangeCheck() || + ctrl_use->in(0)->outcnt() != 2) { + return CFGStatus::Failure; // Not RangeCheck. + } + ProjNode* other_proj = ctrl_use->as_IfProj()->other_if_proj(); + Node* trap = other_proj->is_uncommon_trap_proj(Deoptimization::Reason_range_check); + if (trap != merge_mem->unique_out() || + ctrl_use->in(0)->in(0) != ctrl_def) { + return CFGStatus::Failure; // Not RangeCheck with merge_mem leading to uncommon trap. + } + + return CFGStatus::SuccessWithRangeCheck; +} + +MergePrimitiveArrayStores::Status MergePrimitiveArrayStores::find_adjacent_use_store(const StoreNode* def_store) const { + Status status_use = find_use_store(def_store); + StoreNode* use_store = status_use.found_store(); + if (use_store != nullptr && !is_adjacent_pair(use_store, def_store)) { + return Status::make_failure(); + } + return status_use; +} + +MergePrimitiveArrayStores::Status MergePrimitiveArrayStores::find_adjacent_def_store(const StoreNode* use_store) const { + Status status_def = find_def_store(use_store); + StoreNode* def_store = status_def.found_store(); + if (def_store != nullptr && !is_adjacent_pair(use_store, def_store)) { + return Status::make_failure(); + } + return status_def; +} + +MergePrimitiveArrayStores::Status MergePrimitiveArrayStores::find_use_store(const StoreNode* def_store) const { + Status status_use = find_use_store_unidirectional(def_store); + +#ifdef ASSERT + StoreNode* use_store = status_use.found_store(); + if (use_store != nullptr) { + Status status_def = find_def_store_unidirectional(use_store); + assert(status_def.found_store() == def_store && + status_def.found_range_check() == status_use.found_range_check(), + "find_use_store and find_def_store must be symmetric"); + } +#endif + + return status_use; +} + +MergePrimitiveArrayStores::Status MergePrimitiveArrayStores::find_def_store(const StoreNode* use_store) const { + Status status_def = find_def_store_unidirectional(use_store); + +#ifdef ASSERT + StoreNode* def_store = status_def.found_store(); + if (def_store != nullptr) { + Status status_use = find_use_store_unidirectional(def_store); + assert(status_use.found_store() == use_store && + status_use.found_range_check() == status_def.found_range_check(), + "find_use_store and find_def_store must be symmetric"); + } +#endif + + return status_def; +} + +MergePrimitiveArrayStores::Status MergePrimitiveArrayStores::find_use_store_unidirectional(const StoreNode* def_store) const { + assert(is_compatible_store(def_store), "precondition: must be compatible with _store"); + + for (DUIterator_Fast imax, i = def_store->fast_outs(imax); i < imax; i++) { + StoreNode* use_store = def_store->fast_out(i)->isa_Store(); + if (is_compatible_store(use_store)) { + return Status::make(use_store, cfg_status_for_pair(use_store, def_store)); + } + } + + return Status::make_failure(); +} + +MergePrimitiveArrayStores::Status MergePrimitiveArrayStores::find_def_store_unidirectional(const StoreNode* use_store) const { + assert(is_compatible_store(use_store), "precondition: must be compatible with _store"); + + StoreNode* def_store = use_store->in(MemNode::Memory)->isa_Store(); + if (!is_compatible_store(def_store)) { + return Status::make_failure(); + } + + return Status::make(def_store, cfg_status_for_pair(use_store, def_store)); +} + +void MergePrimitiveArrayStores::collect_merge_list(Node_List& merge_list) const { + // The merged store can be at most 8 bytes. + const uint merge_list_max_size = 8 / _store->memory_size(); + assert(merge_list_max_size >= 2 && + merge_list_max_size <= 8 && + is_power_of_2(merge_list_max_size), + "must be 2, 4 or 8"); + + // Traverse up the chain of adjacent def stores. + StoreNode* current = _store; + merge_list.push(current); + while (current != nullptr && merge_list.size() < merge_list_max_size) { + Status status = find_adjacent_def_store(current); + current = status.found_store(); + if (current != nullptr) { + merge_list.push(current); + + // We can have at most one RangeCheck. + if (status.found_range_check()) { + break; + } + } + } + + // Truncate the merge_list to a power of 2. + const uint pow2size = round_down_power_of_2(merge_list.size()); + assert(pow2size >= 2, "must be merging at least 2 stores"); + while (merge_list.size() > pow2size) { merge_list.pop(); } +} + +// Merge the input values of the smaller stores to a single larger input value. +Node* MergePrimitiveArrayStores::make_merged_input_value(const Node_List& merge_list) { + int new_memory_size = _store->memory_size() * merge_list.size(); + Node* first = merge_list.at(merge_list.size()-1); + Node* merged_input_value = nullptr; + if (_store->in(MemNode::ValueIn)->Opcode() == Op_ConI) { + // Pattern: [ConI, ConI, ...] -> new constant + jlong con = 0; + jlong bits_per_store = _store->memory_size() * 8; + jlong mask = (((jlong)1) << bits_per_store) - 1; + for (uint i = 0; i < merge_list.size(); i++) { + jlong con_i = merge_list.at(i)->in(MemNode::ValueIn)->get_int(); + con = con << bits_per_store; + con = con | (mask & con_i); + } + merged_input_value = _phase->longcon(con); + } else { + // Pattern: [base >> 24, base >> 16, base >> 8, base] -> base + // | | + // _store first + // + merged_input_value = first->in(MemNode::ValueIn); + Node const* base_last; + jint shift_last; + bool is_true = is_con_RShift(_store->in(MemNode::ValueIn), base_last, shift_last); + assert(is_true, "must detect con RShift"); + if (merged_input_value != base_last && merged_input_value->Opcode() == Op_ConvL2I) { + // look through + merged_input_value = merged_input_value->in(1); + } + if (merged_input_value != base_last) { + // merged_input_value is not the base + return nullptr; + } + } + + if (_phase->type(merged_input_value)->isa_long() != nullptr && new_memory_size <= 4) { + // Example: + // + // long base = ...; + // a[0] = (byte)(base >> 0); + // a[1] = (byte)(base >> 8); + // + merged_input_value = _phase->transform(new ConvL2INode(merged_input_value)); + } + + assert((_phase->type(merged_input_value)->isa_int() != nullptr && new_memory_size <= 4) || + (_phase->type(merged_input_value)->isa_long() != nullptr && new_memory_size == 8), + "merged_input_value is either int or long, and new_memory_size is small enough"); + + return merged_input_value; +} + +// // +// first_ctrl first_mem first_adr first_ctrl first_mem first_adr // +// | | | | | | // +// | | | | +---------------+ | // +// | | | | | | | // +// | | +---------+ | | +---------------+ // +// | | | | | | | | // +// +--------------+ | | v1 +------------------------------+ | | v1 // +// | | | | | | | | | | | | // +// RangeCheck first_store RangeCheck | | first_store // +// | | | | | | | // +// last_ctrl | +----> unc_trap last_ctrl | | +----> unc_trap // +// | | ===> | | | // +// +--------------+ | a2 v2 | | | // +// | | | | | | | | // +// | second_store | | | // +// | | | | | [v1 v2 ... vn] // +// ... ... | | | | // +// | | | | | v // +// +--------------+ | an vn +--------------+ | | merged_input_value // +// | | | | | | | | // +// last_store (= _store) merged_store // +// // +StoreNode* MergePrimitiveArrayStores::make_merged_store(const Node_List& merge_list, Node* merged_input_value) { + Node* first_store = merge_list.at(merge_list.size()-1); + Node* last_ctrl = _store->in(MemNode::Control); // after (optional) RangeCheck + Node* first_mem = first_store->in(MemNode::Memory); + Node* first_adr = first_store->in(MemNode::Address); + + const TypePtr* new_adr_type = _store->adr_type(); + + int new_memory_size = _store->memory_size() * merge_list.size(); + BasicType bt = T_ILLEGAL; + switch (new_memory_size) { + case 2: bt = T_SHORT; break; + case 4: bt = T_INT; break; + case 8: bt = T_LONG; break; + } + + StoreNode* merged_store = StoreNode::make(*_phase, last_ctrl, first_mem, first_adr, + new_adr_type, merged_input_value, bt, MemNode::unordered); + + // Marking the store mismatched is sufficient to prevent reordering, since array stores + // are all on the same slice. Hence, we need no barriers. + merged_store->set_mismatched_access(); + + // Constants above may now also be be packed -> put candidate on worklist + _phase->is_IterGVN()->_worklist.push(first_mem); + + return merged_store; +} + +#ifdef ASSERT +void MergePrimitiveArrayStores::trace(const Node_List& merge_list, const Node* merged_input_value, const StoreNode* merged_store) const { + stringStream ss; + ss.print_cr("[TraceMergeStores]: Replace"); + for (int i = (int)merge_list.size() - 1; i >= 0; i--) { + merge_list.at(i)->dump("\n", false, &ss); + } + ss.print_cr("[TraceMergeStores]: with"); + merged_input_value->dump("\n", false, &ss); + merged_store->dump("\n", false, &ss); + tty->print("%s", ss.as_string()); +} +#endif + //------------------------------Ideal------------------------------------------ // Change back-to-back Store(, p, x) -> Store(m, p, y) to Store(m, p, x). // When a store immediately follows a relevant allocation/initialization, @@ -2782,6 +3459,18 @@ Node *StoreNode::Ideal(PhaseGVN *phase, bool can_reshape) { } } +#ifdef VM_LITTLE_ENDIAN + if (MergeStores && UseUnalignedAccesses) { + if (phase->C->post_loop_opts_phase()) { + MergePrimitiveArrayStores merge(phase, this); + Node* progress = merge.run(); + if (progress != nullptr) { return progress; } + } else { + phase->C->record_for_post_loop_opts_igvn(this); + } + } +#endif + return nullptr; // No further progress } diff --git a/src/hotspot/share/opto/phaseX.cpp b/src/hotspot/share/opto/phaseX.cpp index c791146f75769..1a1e4e04e16e1 100644 --- a/src/hotspot/share/opto/phaseX.cpp +++ b/src/hotspot/share/opto/phaseX.cpp @@ -2273,7 +2273,15 @@ void PhasePeephole::print_statistics() { //------------------------------set_req_X-------------------------------------- void Node::set_req_X( uint i, Node *n, PhaseIterGVN *igvn ) { assert( is_not_dead(n), "can not use dead node"); - assert( igvn->hash_find(this) != this, "Need to remove from hash before changing edges" ); +#ifdef ASSERT + if (igvn->hash_find(this) == this) { + tty->print_cr("Need to remove from hash before changing edges"); + this->dump(1); + tty->print_cr("Set at i = %d", i); + n->dump(); + assert(false, "Need to remove from hash before changing edges"); + } +#endif Node *old = in(i); set_req(i, n); diff --git a/test/hotspot/jtreg/compiler/c2/TestMergeStores.java b/test/hotspot/jtreg/compiler/c2/TestMergeStores.java new file mode 100644 index 0000000000000..0af46b56a56c0 --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/TestMergeStores.java @@ -0,0 +1,1247 @@ +/* + * Copyright (c) 2024, 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 compiler.c2; + +import compiler.lib.ir_framework.*; +import jdk.test.lib.Utils; +import jdk.internal.misc.Unsafe; +import java.lang.reflect.Array; +import java.util.Map; +import java.util.HashMap; +import java.util.Random; + +/* + * @test + * @bug 8318446 + * @summary Test merging of consecutive stores + * @modules java.base/jdk.internal.misc + * @library /test/lib / + * @run main compiler.c2.TestMergeStores aligned + */ + +/* + * @test + * @bug 8318446 + * @summary Test merging of consecutive stores + * @modules java.base/jdk.internal.misc + * @library /test/lib / + * @run main compiler.c2.TestMergeStores unaligned + */ + +public class TestMergeStores { + static int RANGE = 1000; + private static final Unsafe UNSAFE = Unsafe.getUnsafe(); + private static final Random RANDOM = Utils.getRandomInstance(); + + // Inputs + byte[] aB = new byte[RANGE]; + byte[] bB = new byte[RANGE]; + short[] aS = new short[RANGE]; + short[] bS = new short[RANGE]; + int[] aI = new int[RANGE]; + int[] bI = new int[RANGE]; + long[] aL = new long[RANGE]; + long[] bL = new long[RANGE]; + + int offset1; + int offset2; + byte vB1; + byte vB2; + short vS1; + short vS2; + int vI1; + int vI2; + long vL1; + long vL2; + + interface TestFunction { + Object[] run(boolean isWarmUp, int rnd); + } + + Map<String, Map<String, TestFunction>> testGroups = new HashMap<String, Map<String, TestFunction>>(); + + public static void main(String[] args) { + TestFramework framework = new TestFramework(TestMergeStores.class); + framework.addFlags("--add-modules", "java.base", "--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED"); + + switch (args[0]) { + case "aligned" -> { framework.addFlags("-XX:-UseUnalignedAccesses"); } + case "unaligned" -> { framework.addFlags("-XX:+UseUnalignedAccesses"); } + default -> { throw new RuntimeException("Test argument not recognized: " + args[0]); } + } + framework.start(); + } + + public TestMergeStores() { + testGroups.put("test1", new HashMap<String,TestFunction>()); + testGroups.get("test1").put("test1R", (_,_) -> { return test1R(aB.clone()); }); + testGroups.get("test1").put("test1a", (_,_) -> { return test1a(aB.clone()); }); + testGroups.get("test1").put("test1b", (_,_) -> { return test1b(aB.clone()); }); + testGroups.get("test1").put("test1c", (_,_) -> { return test1c(aB.clone()); }); + testGroups.get("test1").put("test1d", (_,_) -> { return test1d(aB.clone()); }); + testGroups.get("test1").put("test1e", (_,_) -> { return test1e(aB.clone()); }); + testGroups.get("test1").put("test1f", (_,_) -> { return test1f(aB.clone()); }); + testGroups.get("test1").put("test1g", (_,_) -> { return test1g(aB.clone()); }); + testGroups.get("test1").put("test1h", (_,_) -> { return test1h(aB.clone()); }); + testGroups.get("test1").put("test1i", (_,_) -> { return test1i(aB.clone()); }); + + testGroups.put("test2", new HashMap<String,TestFunction>()); + testGroups.get("test2").put("test2R", (_,_) -> { return test2R(aB.clone(), offset1, vL1); }); + testGroups.get("test2").put("test2a", (_,_) -> { return test2a(aB.clone(), offset1, vL1); }); + testGroups.get("test2").put("test2b", (_,_) -> { return test2b(aB.clone(), offset1, vL1); }); + testGroups.get("test2").put("test2c", (_,_) -> { return test2c(aB.clone(), offset1, vL1); }); + testGroups.get("test2").put("test2d", (_,_) -> { return test2d(aB.clone(), offset1, vL1); }); + testGroups.get("test2").put("test2e", (_,_) -> { return test2d(aB.clone(), offset1, vL1); }); + + testGroups.put("test3", new HashMap<String,TestFunction>()); + testGroups.get("test3").put("test3R", (_,_) -> { return test3R(aB.clone(), offset1, vL1); }); + testGroups.get("test3").put("test3a", (_,_) -> { return test3a(aB.clone(), offset1, vL1); }); + + testGroups.put("test4", new HashMap<String,TestFunction>()); + testGroups.get("test4").put("test4R", (_,_) -> { return test4R(aB.clone(), offset1, vL1, vI1, vS1, vB1); }); + testGroups.get("test4").put("test4a", (_,_) -> { return test4a(aB.clone(), offset1, vL1, vI1, vS1, vB1); }); + + testGroups.put("test5", new HashMap<String,TestFunction>()); + testGroups.get("test5").put("test5R", (_,_) -> { return test5R(aB.clone(), offset1); }); + testGroups.get("test5").put("test5a", (_,_) -> { return test5a(aB.clone(), offset1); }); + + testGroups.put("test6", new HashMap<String,TestFunction>()); + testGroups.get("test6").put("test6R", (_,_) -> { return test6R(aB.clone(), bB.clone(), offset1, offset2); }); + testGroups.get("test6").put("test6a", (_,_) -> { return test6a(aB.clone(), bB.clone(), offset1, offset2); }); + + testGroups.put("test7", new HashMap<String,TestFunction>()); + testGroups.get("test7").put("test7R", (_,_) -> { return test7R(aB.clone(), offset1, vI1); }); + testGroups.get("test7").put("test7a", (_,_) -> { return test7a(aB.clone(), offset1, vI1); }); + + testGroups.put("test100", new HashMap<String,TestFunction>()); + testGroups.get("test100").put("test100R", (_,_) -> { return test100R(aS.clone(), offset1); }); + testGroups.get("test100").put("test100a", (_,_) -> { return test100a(aS.clone(), offset1); }); + + testGroups.put("test101", new HashMap<String,TestFunction>()); + testGroups.get("test101").put("test101R", (_,_) -> { return test101R(aS.clone(), offset1); }); + testGroups.get("test101").put("test101a", (_,_) -> { return test101a(aS.clone(), offset1); }); + + testGroups.put("test102", new HashMap<String,TestFunction>()); + testGroups.get("test102").put("test102R", (_,_) -> { return test102R(aS.clone(), offset1, vL1, vI1, vS1); }); + testGroups.get("test102").put("test102a", (_,_) -> { return test102a(aS.clone(), offset1, vL1, vI1, vS1); }); + + testGroups.put("test200", new HashMap<String,TestFunction>()); + testGroups.get("test200").put("test200R", (_,_) -> { return test200R(aI.clone(), offset1); }); + testGroups.get("test200").put("test200a", (_,_) -> { return test200a(aI.clone(), offset1); }); + + testGroups.put("test201", new HashMap<String,TestFunction>()); + testGroups.get("test201").put("test201R", (_,_) -> { return test201R(aI.clone(), offset1); }); + testGroups.get("test201").put("test201a", (_,_) -> { return test201a(aI.clone(), offset1); }); + + testGroups.put("test202", new HashMap<String,TestFunction>()); + testGroups.get("test202").put("test202R", (_,_) -> { return test202R(aI.clone(), offset1, vL1, vI1); }); + testGroups.get("test202").put("test202a", (_,_) -> { return test202a(aI.clone(), offset1, vL1, vI1); }); + + testGroups.put("test300", new HashMap<String,TestFunction>()); + testGroups.get("test300").put("test300R", (_,_) -> { return test300R(aI.clone()); }); + testGroups.get("test300").put("test300a", (_,_) -> { return test300a(aI.clone()); }); + + testGroups.put("test400", new HashMap<String,TestFunction>()); + testGroups.get("test400").put("test400R", (_,_) -> { return test400R(aI.clone()); }); + testGroups.get("test400").put("test400a", (_,_) -> { return test400a(aI.clone()); }); + + testGroups.put("test500", new HashMap<String,TestFunction>()); + testGroups.get("test500").put("test500R", (_,_) -> { return test500R(aB.clone(), offset1, vL1); }); + testGroups.get("test500").put("test500a", (_,_) -> { return test500a(aB.clone(), offset1, vL1); }); + + testGroups.put("test501", new HashMap<String,TestFunction>()); + testGroups.get("test501").put("test500R", (_,i) -> { return test500R(aB.clone(), RANGE - 20 + (i % 30), vL1); }); + testGroups.get("test501").put("test501a", (_,i) -> { return test501a(aB.clone(), RANGE - 20 + (i % 30), vL1); }); + // +-------------------+ + // Create offsets that are sometimes going to pass all RangeChecks, and sometimes one, and sometimes none. + // Consequence: all RangeChecks stay in the final compilation. + + testGroups.put("test502", new HashMap<String,TestFunction>()); + testGroups.get("test502").put("test500R", (w,i) -> { return test500R(aB.clone(), w ? offset1 : RANGE - 20 + (i % 30), vL1); }); + testGroups.get("test502").put("test502a", (w,i) -> { return test502a(aB.clone(), w ? offset1 : RANGE - 20 + (i % 30), vL1); }); + // +-----+ +-------------------+ + // First use something in range, and after warmup randomize going outside the range. + // Consequence: all RangeChecks stay in the final compilation. + } + + @Warmup(100) + @Run(test = {"test1a", + "test1b", + "test1c", + "test1d", + "test1e", + "test1f", + "test1g", + "test1h", + "test1i", + "test2a", + "test2b", + "test2c", + "test2d", + "test2e", + "test3a", + "test4a", + "test5a", + "test6a", + "test7a", + "test100a", + "test101a", + "test102a", + "test200a", + "test201a", + "test202a", + "test300a", + "test400a", + "test500a", + "test501a", + "test502a"}) + public void runTests(RunInfo info) { + // Repeat many times, so that we also have multiple iterations for post-warmup to potentially recompile + int iters = info.isWarmUp() ? 1_000 : 50_000; + for (int iter = 0; iter < iters; iter++) { + // Write random values to inputs + set_random(aB); + set_random(bB); + set_random(aS); + set_random(bS); + set_random(aI); + set_random(bI); + set_random(aL); + set_random(bL); + + offset1 = Math.abs(RANDOM.nextInt()) % 100; + offset2 = Math.abs(RANDOM.nextInt()) % 100; + vB1 = (byte)RANDOM.nextInt(); + vB2 = (byte)RANDOM.nextInt(); + vS1 = (short)RANDOM.nextInt(); + vS2 = (short)RANDOM.nextInt(); + vI1 = RANDOM.nextInt(); + vI2 = RANDOM.nextInt(); + vL1 = RANDOM.nextLong(); + vL2 = RANDOM.nextLong(); + + // Run all tests + for (Map.Entry<String, Map<String,TestFunction>> group_entry : testGroups.entrySet()) { + String group_name = group_entry.getKey(); + Map<String, TestFunction> group = group_entry.getValue(); + Object[] gold = null; + String gold_name = "NONE"; + for (Map.Entry<String,TestFunction> entry : group.entrySet()) { + String name = entry.getKey(); + TestFunction test = entry.getValue(); + Object[] result = test.run(info.isWarmUp(), iter); + if (gold == null) { + gold = result; + gold_name = name; + } else { + verify("group " + group_name + ", gold " + gold_name + ", test " + name, gold, result); + } + } + } + } + } + + static void verify(String name, Object[] gold, Object[] result) { + if (gold.length != result.length) { + throw new RuntimeException("verify " + name + ": not the same number of outputs: gold.length = " + + gold.length + ", result.length = " + result.length); + } + for (int i = 0; i < gold.length; i++) { + Object g = gold[i]; + Object r = result[i]; + if (g.getClass() != r.getClass() || !g.getClass().isArray() || !r.getClass().isArray()) { + throw new RuntimeException("verify " + name + ": must both be array of same type:" + + " gold[" + i + "].getClass() = " + g.getClass().getSimpleName() + + " result[" + i + "].getClass() = " + r.getClass().getSimpleName()); + } + if (g == r) { + throw new RuntimeException("verify " + name + ": should be two separate arrays (with identical content):" + + " gold[" + i + "] == result[" + i + "]"); + } + if (Array.getLength(g) != Array.getLength(r)) { + throw new RuntimeException("verify " + name + ": arrays must have same length:" + + " gold[" + i + "].length = " + Array.getLength(g) + + " result[" + i + "].length = " + Array.getLength(r)); + } + Class c = g.getClass().getComponentType(); + if (c == byte.class) { + verifyB(name, i, (byte[])g, (byte[])r); + } else if (c == short.class) { + verifyS(name, i, (short[])g, (short[])r); + } else if (c == int.class) { + verifyI(name, i, (int[])g, (int[])r); + } else if (c == long.class) { + verifyL(name, i, (long[])g, (long[])r); + } else { + throw new RuntimeException("verify " + name + ": array type not supported for verify:" + + " gold[" + i + "].getClass() = " + g.getClass().getSimpleName() + + " result[" + i + "].getClass() = " + r.getClass().getSimpleName()); + } + } + } + + static void verifyB(String name, int i, byte[] g, byte[] r) { + for (int j = 0; j < g.length; j++) { + if (g[j] != r[j]) { + throw new RuntimeException("verify " + name + ": arrays must have same content:" + + " gold[" + i + "][" + j + "] = " + g[j] + + " = " + String.format("%02X", g[j] & 0xFF) + + " result[" + i + "][" + j + "] = " + r[j] + + " = " + String.format("%02X", r[j] & 0xFF)); + } + } + } + + static void verifyS(String name, int i, short[] g, short[] r) { + for (int j = 0; j < g.length; j++) { + if (g[j] != r[j]) { + throw new RuntimeException("verify " + name + ": arrays must have same content:" + + " gold[" + i + "][" + j + "] = " + g[j] + + " result[" + i + "][" + j + "] = " + r[j]); + } + } + } + + static void verifyI(String name, int i, int[] g, int[] r) { + for (int j = 0; j < g.length; j++) { + if (g[j] != r[j]) { + throw new RuntimeException("verify " + name + ": arrays must have same content:" + + " gold[" + i + "][" + j + "] = " + g[j] + + " result[" + i + "][" + j + "] = " + r[j]); + } + } + } + + static void verifyL(String name, int i, long[] g, long[] r) { + for (int j = 0; j < g.length; j++) { + if (g[j] != r[j]) { + throw new RuntimeException("verify " + name + ": arrays must have same content:" + + " gold[" + i + "][" + j + "] = " + g[j] + + " result[" + i + "][" + j + "] = " + r[j]); + } + } + } + + static void set_random(byte[] a) { + for (int i = 0; i < a.length; i++) { + a[i] = (byte)RANDOM.nextInt(); + } + } + + static void set_random(short[] a) { + for (int i = 0; i < a.length; i++) { + a[i] = (short)RANDOM.nextInt(); + } + } + + static void set_random(int[] a) { + for (int i = 0; i < a.length; i++) { + a[i] = RANDOM.nextInt(); + } + } + + static void set_random(long[] a) { + for (int i = 0; i < a.length; i++) { + a[i] = RANDOM.nextLong(); + } + } + + // ------------------------------------------- + // ------- Little-Endian API ---------- + // ------------------------------------------- + // Note: I had to add @ForceInline because otherwise it would sometimes + // not inline nested method calls. + + // Store a short LE into an array using store bytes in an array + @ForceInline + static void storeShortLE(byte[] bytes, int offset, short value) { + storeBytes(bytes, offset, (byte)(value >> 0), + (byte)(value >> 8)); + } + + // Store an int LE into an array using store bytes in an array + @ForceInline + static void storeIntLE(byte[] bytes, int offset, int value) { + storeBytes(bytes, offset, (byte)(value >> 0 ), + (byte)(value >> 8 ), + (byte)(value >> 16), + (byte)(value >> 24)); + } + + // Store an int LE into an array using store bytes in an array + @ForceInline + static void storeLongLE(byte[] bytes, int offset, long value) { + storeBytes(bytes, offset, (byte)(value >> 0 ), + (byte)(value >> 8 ), + (byte)(value >> 16), + (byte)(value >> 24), + (byte)(value >> 32), + (byte)(value >> 40), + (byte)(value >> 48), + (byte)(value >> 56)); + } + + // Store 2 bytes into an array + @ForceInline + static void storeBytes(byte[] bytes, int offset, byte b0, byte b1) { + bytes[offset + 0] = b0; + bytes[offset + 1] = b1; + } + + // Store 4 bytes into an array + @ForceInline + static void storeBytes(byte[] bytes, int offset, byte b0, byte b1, byte b2, byte b3) { + bytes[offset + 0] = b0; + bytes[offset + 1] = b1; + bytes[offset + 2] = b2; + bytes[offset + 3] = b3; + } + + // Store 8 bytes into an array + @ForceInline + static void storeBytes(byte[] bytes, int offset, byte b0, byte b1, byte b2, byte b3, + byte b4, byte b5, byte b6, byte b7) { + bytes[offset + 0] = b0; + bytes[offset + 1] = b1; + bytes[offset + 2] = b2; + bytes[offset + 3] = b3; + bytes[offset + 4] = b4; + bytes[offset + 5] = b5; + bytes[offset + 6] = b6; + bytes[offset + 7] = b7; + } + + @DontCompile + static Object[] test1R(byte[] a) { + a[0] = (byte)0xbe; + a[1] = (byte)0xba; + a[2] = (byte)0xad; + a[3] = (byte)0xba; + a[4] = (byte)0xef; + a[5] = (byte)0xbe; + a[6] = (byte)0xad; + a[7] = (byte)0xde; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test1a(byte[] a) { + a[0] = (byte)0xbe; + a[1] = (byte)0xba; + a[2] = (byte)0xad; + a[3] = (byte)0xba; + a[4] = (byte)0xef; + a[5] = (byte)0xbe; + a[6] = (byte)0xad; + a[7] = (byte)0xde; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test1b(byte[] a) { + // Add custom null check, to ensure the unsafe access always recognizes its type as an array store + if (a == null) {return null;} + UNSAFE.putLongUnaligned(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET, 0xdeadbeefbaadbabeL); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test1c(byte[] a) { + storeLongLE(a, 0, 0xdeadbeefbaadbabeL); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test1d(byte[] a) { + storeIntLE(a, 0, 0xbaadbabe); + storeIntLE(a, 4, 0xdeadbeef); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test1e(byte[] a) { + storeShortLE(a, 0, (short)0xbabe); + storeShortLE(a, 2, (short)0xbaad); + storeShortLE(a, 4, (short)0xbeef); + storeShortLE(a, 6, (short)0xdead); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test1f(byte[] a) { + UNSAFE.putByte(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 0, (byte)0xbe); + UNSAFE.putByte(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 1, (byte)0xba); + UNSAFE.putByte(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 2, (byte)0xad); + UNSAFE.putByte(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 3, (byte)0xba); + UNSAFE.putByte(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 4, (byte)0xef); + UNSAFE.putByte(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 5, (byte)0xbe); + UNSAFE.putByte(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 6, (byte)0xad); + UNSAFE.putByte(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 7, (byte)0xde); + return new Object[]{ a }; + } + + @Test + // Do not optimize these, just to be sure we do not mess with store ordering. + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "8"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test1g(byte[] a) { + UNSAFE.putByteRelease(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 0, (byte)0xbe); + UNSAFE.putByteRelease(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 1, (byte)0xba); + UNSAFE.putByteRelease(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 2, (byte)0xad); + UNSAFE.putByteRelease(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 3, (byte)0xba); + UNSAFE.putByteRelease(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 4, (byte)0xef); + UNSAFE.putByteRelease(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 5, (byte)0xbe); + UNSAFE.putByteRelease(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 6, (byte)0xad); + UNSAFE.putByteRelease(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 7, (byte)0xde); + return new Object[]{ a }; + } + + @Test + // Do not optimize these, just to be sure we do not mess with store ordering. + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "8"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test1h(byte[] a) { + UNSAFE.putByteVolatile(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 0, (byte)0xbe); + UNSAFE.putByteVolatile(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 1, (byte)0xba); + UNSAFE.putByteVolatile(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 2, (byte)0xad); + UNSAFE.putByteVolatile(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 3, (byte)0xba); + UNSAFE.putByteVolatile(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 4, (byte)0xef); + UNSAFE.putByteVolatile(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 5, (byte)0xbe); + UNSAFE.putByteVolatile(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 6, (byte)0xad); + UNSAFE.putByteVolatile(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 7, (byte)0xde); + return new Object[]{ a }; + } + + @Test + // Do not optimize these, just to be sure we do not mess with store ordering. + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "8"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test1i(byte[] a) { + UNSAFE.putByteOpaque(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 0, (byte)0xbe); + UNSAFE.putByteOpaque(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 1, (byte)0xba); + UNSAFE.putByteOpaque(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 2, (byte)0xad); + UNSAFE.putByteOpaque(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 3, (byte)0xba); + UNSAFE.putByteOpaque(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 4, (byte)0xef); + UNSAFE.putByteOpaque(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 5, (byte)0xbe); + UNSAFE.putByteOpaque(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 6, (byte)0xad); + UNSAFE.putByteOpaque(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + 7, (byte)0xde); + return new Object[]{ a }; + } + + @DontCompile + static Object[] test2R(byte[] a, int offset, long v) { + a[offset + 0] = (byte)(v >> 0); + a[offset + 1] = (byte)(v >> 8); + a[offset + 2] = (byte)(v >> 16); + a[offset + 3] = (byte)(v >> 24); + a[offset + 4] = (byte)(v >> 32); + a[offset + 5] = (byte)(v >> 40); + a[offset + 6] = (byte)(v >> 48); + a[offset + 7] = (byte)(v >> 56); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test2a(byte[] a, int offset, long v) { + a[offset + 0] = (byte)(v >> 0); + a[offset + 1] = (byte)(v >> 8); + a[offset + 2] = (byte)(v >> 16); + a[offset + 3] = (byte)(v >> 24); + a[offset + 4] = (byte)(v >> 32); + a[offset + 5] = (byte)(v >> 40); + a[offset + 6] = (byte)(v >> 48); + a[offset + 7] = (byte)(v >> 56); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test2b(byte[] a, int offset, long v) { + // Add custom null check, to ensure the unsafe access always recognizes its type as an array store + if (a == null) {return null;} + UNSAFE.putLongUnaligned(a, UNSAFE.ARRAY_BYTE_BASE_OFFSET + offset, v); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test2c(byte[] a, int offset, long v) { + storeLongLE(a, offset, v); + return new Object[]{ a }; + } + + @Test + // No optimization, casting long -> int -> byte does not work + static Object[] test2d(byte[] a, int offset, long v) { + storeIntLE(a, offset + 0, (int)(v >> 0)); + storeIntLE(a, offset + 4, (int)(v >> 32)); + return new Object[]{ a }; + } + + @Test + // No optimization, casting long -> short -> byte does not work + static Object[] test2e(byte[] a, int offset, long v) { + storeShortLE(a, offset + 0, (short)(v >> 0)); + storeShortLE(a, offset + 2, (short)(v >> 16)); + storeShortLE(a, offset + 4, (short)(v >> 32)); + storeShortLE(a, offset + 6, (short)(v >> 48)); + return new Object[]{ a }; + } + + @DontCompile + static Object[] test3R(byte[] a, int offset, long v) { + a[offset + 0] = (byte)(v >> 0); + a[offset + 1] = (byte)(v >> 8); + a[offset + 2] = (byte)(v >> 16); + a[offset + 3] = (byte)(v >> 24); + a[offset + 4] = (byte)(v >> 0); + a[offset + 5] = (byte)(v >> 8); + a[offset + 6] = (byte)(v >> 16); + a[offset + 7] = (byte)(v >> 24); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_I_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "2"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test3a(byte[] a, int offset, long v) { + a[offset + 0] = (byte)(v >> 0); + a[offset + 1] = (byte)(v >> 8); + a[offset + 2] = (byte)(v >> 16); + a[offset + 3] = (byte)(v >> 24); + a[offset + 4] = (byte)(v >> 0); + a[offset + 5] = (byte)(v >> 8); + a[offset + 6] = (byte)(v >> 16); + a[offset + 7] = (byte)(v >> 24); + return new Object[]{ a }; + } + + @DontCompile + static Object[] test4R(byte[] a, int offset, long v1, int v2, short v3, byte v4) { + a[offset + 0] = (byte)0x00; + a[offset + 1] = (byte)0xFF; + a[offset + 2] = v4; + a[offset + 3] = (byte)0x42; + a[offset + 4] = (byte)(v1 >> 0); + a[offset + 5] = (byte)(v1 >> 8); + a[offset + 6] = (byte)0xAB; + a[offset + 7] = (byte)0xCD; + a[offset + 8] = (byte)0xEF; + a[offset + 9] = (byte)0x01; + a[offset + 10] = (byte)(v2 >> 0); + a[offset + 11] = (byte)(v2 >> 8); + a[offset + 12] = (byte)(v2 >> 16); + a[offset + 13] = (byte)(v2 >> 24); + a[offset + 14] = (byte)(v3 >> 0); + a[offset + 15] = (byte)(v3 >> 8); + a[offset + 16] = (byte)0xEF; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "4", // 3 (+ 1 for uncommon trap) + IRNode.STORE_C_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "3", + IRNode.STORE_I_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "2", + IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test4a(byte[] a, int offset, long v1, int v2, short v3, byte v4) { + a[offset + 0] = (byte)0x00; // individual load expected to go into state of RC + a[offset + 1] = (byte)0xFF; + a[offset + 2] = v4; + a[offset + 3] = (byte)0x42; + a[offset + 4] = (byte)(v1 >> 0); + a[offset + 5] = (byte)(v1 >> 8); + a[offset + 6] = (byte)0xAB; + a[offset + 7] = (byte)0xCD; + a[offset + 8] = (byte)0xEF; + a[offset + 9] = (byte)0x01; + a[offset + 10] = (byte)(v2 >> 0); + a[offset + 11] = (byte)(v2 >> 8); + a[offset + 12] = (byte)(v2 >> 16); + a[offset + 13] = (byte)(v2 >> 24); + a[offset + 14] = (byte)(v3 >> 0); + a[offset + 15] = (byte)(v3 >> 8); + a[offset + 16] = (byte)0xEF; + return new Object[]{ a }; + } + + @DontCompile + static Object[] test5R(byte[] a, int offset) { + a[offset + 0] = (byte)0x01; + a[offset + 1] = (byte)0x02; + a[offset + 2] = (byte)0x03; + a[offset + 3] = (byte)0x04; + a[offset + 4] = (byte)0x11; + a[offset + 5] = (byte)0x22; + a[offset + 6] = (byte)0x33; + a[offset + 7] = (byte)0x44; + a[offset + 8] = (byte)0x55; + a[offset + 9] = (byte)0x66; + a[offset + 10] = (byte)0x77; + a[offset + 11] = (byte)0xAA; + a[offset + 12] = (byte)0xBB; + a[offset + 13] = (byte)0xCC; + a[offset + 14] = (byte)0xDD; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", + IRNode.STORE_C_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", + IRNode.STORE_I_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", + IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test5a(byte[] a, int offset) { + a[offset + 0] = (byte)0x01; + a[offset + 1] = (byte)0x02; + a[offset + 2] = (byte)0x03; + a[offset + 3] = (byte)0x04; + a[offset + 4] = (byte)0x11; + a[offset + 5] = (byte)0x22; + a[offset + 6] = (byte)0x33; + a[offset + 7] = (byte)0x44; + a[offset + 8] = (byte)0x55; + a[offset + 9] = (byte)0x66; + a[offset + 10] = (byte)0x77; + a[offset + 11] = (byte)0xAA; + a[offset + 12] = (byte)0xBB; + a[offset + 13] = (byte)0xCC; + a[offset + 14] = (byte)0xDD; + return new Object[]{ a }; + } + + @DontCompile + static Object[] test6R(byte[] a, byte[] b, int offset1, int offset2) { + a[offset1 + 1] = (byte)0x02; + a[offset1 + 3] = (byte)0x04; + b[offset1 + 4] = (byte)0x11; + a[offset1 + 5] = (byte)0x22; + a[offset2 + 6] = (byte)0x33; + a[offset1 + 7] = (byte)0x44; + b[offset1 + 8] = (byte)0x55; + b[offset1 + 10] = (byte)0x66; + return new Object[]{ a, b }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "8", + IRNode.STORE_C_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0"}) + static Object[] test6a(byte[] a, byte[] b, int offset1, int offset2) { + a[offset1 + 1] = (byte)0x02; + a[offset1 + 3] = (byte)0x04; + b[offset1 + 4] = (byte)0x11; + a[offset1 + 5] = (byte)0x22; + a[offset2 + 6] = (byte)0x33; + a[offset1 + 7] = (byte)0x44; + b[offset1 + 8] = (byte)0x55; + b[offset1 + 10] = (byte)0x66; + return new Object[]{ a, b }; + } + + @DontCompile + static Object[] test7R(byte[] a, int offset1, int v1) { + a[offset1 + 1] = (byte)(v1 >> 8); + a[offset1 + 2] = (byte)(v1 >> 16); + a[offset1 + 3] = (byte)(v1 >> 24); + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "3", + IRNode.STORE_C_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0"}) + static Object[] test7a(byte[] a, int offset1, int v1) { + a[offset1 + 1] = (byte)(v1 >> 8); + a[offset1 + 2] = (byte)(v1 >> 16); + a[offset1 + 3] = (byte)(v1 >> 24); + return new Object[]{ a }; + } + + @DontCompile + static Object[] test100R(short[] a, int offset) { + a[offset + 0] = (short)0x0100; + a[offset + 1] = (short)0x0200; + a[offset + 2] = (short)0x0311; + a[offset + 3] = (short)0x0400; + a[offset + 4] = (short)0x1100; + a[offset + 5] = (short)0x2233; + a[offset + 6] = (short)0x3300; + a[offset + 7] = (short)0x4400; + a[offset + 8] = (short)0x5599; + a[offset + 9] = (short)0x6600; + a[offset + 10] = (short)0x7700; + a[offset + 11] = (short)0xAACC; + a[offset + 12] = (short)0xBB00; + a[offset + 13] = (short)0xCC00; + a[offset + 14] = (short)0xDDFF; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_C_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", + IRNode.STORE_I_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", + IRNode.STORE_L_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "3"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test100a(short[] a, int offset) { + a[offset + 0] = (short)0x0100; // stays unchanged -> both used for RC and Return path + a[offset + 1] = (short)0x0200; // I + a[offset + 2] = (short)0x0311; // I + a[offset + 3] = (short)0x0400; // L + a[offset + 4] = (short)0x1100; // L + a[offset + 5] = (short)0x2233; // L + a[offset + 6] = (short)0x3300; // L + a[offset + 7] = (short)0x4400; // L + a[offset + 8] = (short)0x5599; // L + a[offset + 9] = (short)0x6600; // L + a[offset + 10] = (short)0x7700; // L + a[offset + 11] = (short)0xAACC; // L + a[offset + 12] = (short)0xBB00; // L + a[offset + 13] = (short)0xCC00; // L + a[offset + 14] = (short)0xDDFF; // L + return new Object[]{ a }; + } + + @DontCompile + static Object[] test101R(short[] a, int offset) { + a[offset + 0] = (short)0x0100; + a[offset + 1] = (short)0x0200; + a[offset + 2] = (short)0x0311; + a[offset + 3] = (short)0x0400; + a[offset + 4] = (short)0x1100; + a[offset + 5] = (short)0x2233; + a[offset + 6] = (short)0x3300; + a[offset + 7] = (short)0x4400; + a[offset + 8] = (short)0x5599; + a[offset + 9] = (short)0x6600; + a[offset + 10] = (short)0x7700; + a[offset + 11] = (short)0xAACC; + a[offset + 12] = (short)0xBB00; + a[offset + 13] = (short)0xCC00; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_C_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", // only for RC + IRNode.STORE_I_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", + IRNode.STORE_L_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "3"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test101a(short[] a, int offset) { + a[offset + 0] = (short)0x0100; // I plus kept unchanged for RC + a[offset + 1] = (short)0x0200; // I + a[offset + 2] = (short)0x0311; // L + a[offset + 3] = (short)0x0400; // L + a[offset + 4] = (short)0x1100; // L + a[offset + 5] = (short)0x2233; // L + a[offset + 6] = (short)0x3300; // L + a[offset + 7] = (short)0x4400; // L + a[offset + 8] = (short)0x5599; // L + a[offset + 9] = (short)0x6600; // L + a[offset + 10] = (short)0x7700; // L + a[offset + 11] = (short)0xAACC; // L + a[offset + 12] = (short)0xBB00; // L + a[offset + 13] = (short)0xCC00; // L + return new Object[]{ a }; + } + + @DontCompile + static Object[] test102R(short[] a, int offset, long v1, int v2, short v3) { + a[offset + 0] = (short)0x0000; + a[offset + 1] = (short)0xFFFF; + a[offset + 2] = v3; + a[offset + 3] = (short)0x4242; + a[offset + 4] = (short)(v1 >> 0); + a[offset + 5] = (short)(v1 >> 16); + a[offset + 6] = (short)0xAB11; + a[offset + 7] = (short)0xCD36; + a[offset + 8] = (short)0xEF89; + a[offset + 9] = (short)0x0156; + a[offset + 10] = (short)(v1 >> 0); + a[offset + 11] = (short)(v1 >> 16); + a[offset + 12] = (short)(v1 >> 32); + a[offset + 13] = (short)(v1 >> 48); + a[offset + 14] = (short)(v2 >> 0); + a[offset + 15] = (short)(v2 >> 16); + a[offset + 16] = (short)0xEFEF; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_C_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "4", // 3 (+1 that goes into RC) + IRNode.STORE_I_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "3", + IRNode.STORE_L_OF_CLASS, "short\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "2"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test102a(short[] a, int offset, long v1, int v2, short v3) { + a[offset + 0] = (short)0x0000; // store goes into RC + a[offset + 1] = (short)0xFFFF; + a[offset + 2] = v3; + a[offset + 3] = (short)0x4242; + a[offset + 4] = (short)(v1 >> 0); + a[offset + 5] = (short)(v1 >> 16); + a[offset + 6] = (short)0xAB11; + a[offset + 7] = (short)0xCD36; + a[offset + 8] = (short)0xEF89; + a[offset + 9] = (short)0x0156; + a[offset + 10] = (short)(v1 >> 0); + a[offset + 11] = (short)(v1 >> 16); + a[offset + 12] = (short)(v1 >> 32); + a[offset + 13] = (short)(v1 >> 48); + a[offset + 14] = (short)(v2 >> 0); + a[offset + 15] = (short)(v2 >> 16); + a[offset + 16] = (short)0xEFEF; + return new Object[]{ a }; + } + + @DontCompile + static Object[] test200R(int[] a, int offset) { + a[offset + 0] = 0x01001236; + a[offset + 1] = 0x02001284; + a[offset + 2] = 0x03111235; + a[offset + 3] = 0x04001294; + a[offset + 4] = 0x11001234; + a[offset + 5] = 0x22331332; + a[offset + 6] = 0x33001234; + a[offset + 7] = 0x44001432; + a[offset + 8] = 0x55991234; + a[offset + 9] = 0x66001233; + a[offset + 10] = 0x77001434; + a[offset + 11] = 0xAACC1234; + a[offset + 12] = 0xBB001434; + a[offset + 13] = 0xCC001236; + a[offset + 14] = 0xDDFF1534; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_C_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", + IRNode.STORE_L_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "7"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test200a(int[] a, int offset) { + a[offset + 0] = 0x01001236; // stays unchanged -> both used for RC and Return path + a[offset + 1] = 0x02001284; // L + a[offset + 2] = 0x03111235; // L + a[offset + 3] = 0x04001294; // L + a[offset + 4] = 0x11001234; // L + a[offset + 5] = 0x22331332; // L + a[offset + 6] = 0x33001234; // L + a[offset + 7] = 0x44001432; // L + a[offset + 8] = 0x55991234; // L + a[offset + 9] = 0x66001233; // L + a[offset + 10] = 0x77001434; // L + a[offset + 11] = 0xAACC1234; // L + a[offset + 12] = 0xBB001434; // L + a[offset + 13] = 0xCC001236; // L + a[offset + 14] = 0xDDFF1534; // L + return new Object[]{ a }; + } + + @DontCompile + static Object[] test201R(int[] a, int offset) { + a[offset + 0] = 0x01001236; + a[offset + 1] = 0x02001284; + a[offset + 2] = 0x03111235; + a[offset + 3] = 0x04001294; + a[offset + 4] = 0x11001234; + a[offset + 5] = 0x22331332; + a[offset + 6] = 0x33001234; + a[offset + 7] = 0x44001432; + a[offset + 8] = 0x55991234; + a[offset + 9] = 0x66001233; + a[offset + 10] = 0x77001434; + a[offset + 11] = 0xAACC1234; + a[offset + 12] = 0xBB001434; + a[offset + 13] = 0xCC001236; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_C_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", // only for RC + IRNode.STORE_L_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "7"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test201a(int[] a, int offset) { + a[offset + 0] = 0x01001236; // L and also kept unchanged for RC + a[offset + 1] = 0x02001284; // L + a[offset + 2] = 0x03111235; // L + a[offset + 3] = 0x04001294; // L + a[offset + 4] = 0x11001234; // L + a[offset + 5] = 0x22331332; // L + a[offset + 6] = 0x33001234; // L + a[offset + 7] = 0x44001432; // L + a[offset + 8] = 0x55991234; // L + a[offset + 9] = 0x66001233; // L + a[offset + 10] = 0x77001434; // L + a[offset + 11] = 0xAACC1234; // L + a[offset + 12] = 0xBB001434; // L + a[offset + 13] = 0xCC001236; // L + return new Object[]{ a }; + } + + @DontCompile + static Object[] test202R(int[] a, int offset, long v1, int v2) { + a[offset + 0] = 0x00000000; + a[offset + 1] = 0xFFFFFFFF; + a[offset + 2] = v2; + a[offset + 3] = 0x42424242; + a[offset + 4] = (int)(v1 >> 0); + a[offset + 5] = (int)(v1 >> 32); + a[offset + 6] = 0xAB110129; + a[offset + 7] = 0xCD360183; + a[offset + 8] = 0xEF890173; + a[offset + 9] = 0x01560124; + a[offset + 10] = (int)(v1 >> 0); + a[offset + 11] = (int)(v1 >> 32); + a[offset + 12] = (int)(v1 >> 0); + a[offset + 13] = (int)(v1 >> 32); + a[offset + 14] = v2; + a[offset + 15] = v2; + a[offset + 16] = 0xEFEFEFEF; + return new Object[]{ a }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_C_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "6", // 5 (+1 that goes into RC) + IRNode.STORE_L_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "6"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test202a(int[] a, int offset, long v1, int v2) { + a[offset + 0] = 0x00000000; // merged with store below, but also kept unchanged for RC + a[offset + 1] = 0xFFFFFFFF; + a[offset + 2] = v2; + a[offset + 3] = 0x42424242; + a[offset + 4] = (int)(v1 >> 0); + a[offset + 5] = (int)(v1 >> 32); + a[offset + 6] = 0xAB110129; + a[offset + 7] = 0xCD360183; + a[offset + 8] = 0xEF890173; + a[offset + 9] = 0x01560124; + a[offset + 10] = (int)(v1 >> 0); + a[offset + 11] = (int)(v1 >> 32); + a[offset + 12] = (int)(v1 >> 0); + a[offset + 13] = (int)(v1 >> 32); + a[offset + 14] = v2; + a[offset + 15] = v2; + a[offset + 16] = 0xEFEFEFEF; + return new Object[]{ a }; + } + + @DontCompile + static Object[] test300R(int[] a) { + a[2] = 42; + a[3] = 42; + a[4] = 42; + a[5] = 42; + int x = a[3]; // dependent load + return new Object[]{ a, new int[]{ x } }; + } + + @Test + @IR(counts = {IRNode.STORE_L_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "2"}, + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test300a(int[] a) { + a[2] = 42; + a[3] = 42; + a[4] = 42; + a[5] = 42; + int x = a[3]; // dependent load + return new Object[]{ a, new int[]{ x } }; + } + + @DontCompile + static Object[] test400R(int[] a) { + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 0, (byte)0xbe); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 1, (byte)0xba); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 2, (byte)0xad); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 3, (byte)0xba); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 4, (byte)0xef); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 5, (byte)0xbe); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 6, (byte)0xad); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 7, (byte)0xde); + return new Object[]{ a }; + } + + @Test + // We must be careful with mismatched accesses on arrays: + // An int-array can have about 2x max_int size, and hence if we address bytes in it, we can have int-overflows. + // We might consider addresses (x + 0) and (x + 1) as adjacent, even if x = max_int, and therefore the second + // address overflows and is not adjacent at all. + // Therefore, we should only consider stores that have the same size as the element type of the array. + @IR(counts = {IRNode.STORE_B_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "8", // no merging + IRNode.STORE_C_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_L_OF_CLASS, "int\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0"}) + static Object[] test400a(int[] a) { + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 0, (byte)0xbe); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 1, (byte)0xba); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 2, (byte)0xad); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 3, (byte)0xba); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 4, (byte)0xef); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 5, (byte)0xbe); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 6, (byte)0xad); + UNSAFE.putByte(a, UNSAFE.ARRAY_INT_BASE_OFFSET + 7, (byte)0xde); + return new Object[]{ a }; + } + + @DontCompile + // The 500-series has all the same code, but is executed with different inputs: + // 500a: never violate a RangeCheck -> expect will always merge stores + // 501a: randomly violate RangeCheck, also during warmup -> never merge stores + // 502a: during warmup never violate RangeCheck -> compile once with merged stores + // but then after warmup violate RangeCheck -> recompile without merged stores + static Object[] test500R(byte[] a, int offset, long v) { + int idx = 0; + try { + a[offset + 0] = (byte)(v >> 0); + idx = 1; + a[offset + 1] = (byte)(v >> 8); + idx = 2; + a[offset + 2] = (byte)(v >> 16); + idx = 3; + a[offset + 3] = (byte)(v >> 24); + idx = 4; + a[offset + 4] = (byte)(v >> 32); + idx = 5; + a[offset + 5] = (byte)(v >> 40); + idx = 6; + a[offset + 6] = (byte)(v >> 48); + idx = 7; + a[offset + 7] = (byte)(v >> 56); + idx = 8; + } catch (ArrayIndexOutOfBoundsException _) {} + return new Object[]{ a, new int[]{ idx } }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1", // for RangeCheck trap + IRNode.STORE_C_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "1"}, // expect merged + applyIf = {"UseUnalignedAccesses", "true"}) + static Object[] test500a(byte[] a, int offset, long v) { + int idx = 0; + try { + a[offset + 0] = (byte)(v >> 0); + idx = 1; + a[offset + 1] = (byte)(v >> 8); + idx = 2; + a[offset + 2] = (byte)(v >> 16); + idx = 3; + a[offset + 3] = (byte)(v >> 24); + idx = 4; + a[offset + 4] = (byte)(v >> 32); + idx = 5; + a[offset + 5] = (byte)(v >> 40); + idx = 6; + a[offset + 6] = (byte)(v >> 48); + idx = 7; + a[offset + 7] = (byte)(v >> 56); + idx = 8; + } catch (ArrayIndexOutOfBoundsException _) {} + return new Object[]{ a, new int[]{ idx } }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "8", // No optimization because of too many RangeChecks + IRNode.STORE_C_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0"}) + static Object[] test501a(byte[] a, int offset, long v) { + int idx = 0; + try { + a[offset + 0] = (byte)(v >> 0); + idx = 1; + a[offset + 1] = (byte)(v >> 8); + idx = 2; + a[offset + 2] = (byte)(v >> 16); + idx = 3; + a[offset + 3] = (byte)(v >> 24); + idx = 4; + a[offset + 4] = (byte)(v >> 32); + idx = 5; + a[offset + 5] = (byte)(v >> 40); + idx = 6; + a[offset + 6] = (byte)(v >> 48); + idx = 7; + a[offset + 7] = (byte)(v >> 56); + idx = 8; + } catch (ArrayIndexOutOfBoundsException _) {} + return new Object[]{ a, new int[]{ idx } }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "8", // No optimization because of too many RangeChecks + IRNode.STORE_C_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_I_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0", + IRNode.STORE_L_OF_CLASS, "byte\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "0"}) + static Object[] test502a(byte[] a, int offset, long v) { + int idx = 0; + try { + a[offset + 0] = (byte)(v >> 0); + idx = 1; + a[offset + 1] = (byte)(v >> 8); + idx = 2; + a[offset + 2] = (byte)(v >> 16); + idx = 3; + a[offset + 3] = (byte)(v >> 24); + idx = 4; + a[offset + 4] = (byte)(v >> 32); + idx = 5; + a[offset + 5] = (byte)(v >> 40); + idx = 6; + a[offset + 6] = (byte)(v >> 48); + idx = 7; + a[offset + 7] = (byte)(v >> 56); + idx = 8; + } catch (ArrayIndexOutOfBoundsException _) {} + return new Object[]{ a, new int[]{ idx } }; + } +} diff --git a/test/micro/org/openjdk/bench/vm/compiler/MergeStores.java b/test/micro/org/openjdk/bench/vm/compiler/MergeStores.java new file mode 100644 index 0000000000000..e1f0d5eaedcdf --- /dev/null +++ b/test/micro/org/openjdk/bench/vm/compiler/MergeStores.java @@ -0,0 +1,696 @@ +/* + * Copyright (c) 2024, 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 org.openjdk.bench.vm.compiler; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + + +import jdk.internal.misc.Unsafe; +import jdk.internal.util.ByteArrayLittleEndian; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Warmup(iterations = 3, time = 3) +@Measurement(iterations = 3, time = 3) +@Fork(value = 3, jvmArgsAppend = { + "--add-exports", "java.base/jdk.internal.misc=ALL-UNNAMED", + "--add-exports", "java.base/jdk.internal.util=ALL-UNNAMED"}) +@State(Scope.Benchmark) +public class MergeStores { + + public static final int RANGE = 100; + + static Unsafe UNSAFE = Unsafe.getUnsafe(); + + @Param("1") + public static short vS; + + @Param("1") + public static int vI; + + @Param("1") + public static long vL; + + public static int offset = 5; + public static byte[] aB = new byte[RANGE]; + public static short[] aS = new short[RANGE]; + public static int[] aI = new int[RANGE]; + + // ------------------------------------------- + // ------- Little-Endian API ---------- + // ------------------------------------------- + + // Store a short LE into an array using store bytes in an array + static void storeShortLE(byte[] bytes, int offset, short value) { + storeBytes(bytes, offset, (byte)(value >> 0), + (byte)(value >> 8)); + } + + // Store an int LE into an array using store bytes in an array + static void storeIntLE(byte[] bytes, int offset, int value) { + storeBytes(bytes, offset, (byte)(value >> 0 ), + (byte)(value >> 8 ), + (byte)(value >> 16), + (byte)(value >> 24)); + } + + // Store an int LE into an array using store bytes in an array + static void storeLongLE(byte[] bytes, int offset, long value) { + storeBytes(bytes, offset, (byte)(value >> 0 ), + (byte)(value >> 8 ), + (byte)(value >> 16), + (byte)(value >> 24), + (byte)(value >> 32), + (byte)(value >> 40), + (byte)(value >> 48), + (byte)(value >> 56)); + } + + // Store 2 bytes into an array + static void storeBytes(byte[] bytes, int offset, byte b0, byte b1) { + bytes[offset + 0] = b0; + bytes[offset + 1] = b1; + } + + // Store 4 bytes into an array + static void storeBytes(byte[] bytes, int offset, byte b0, byte b1, byte b2, byte b3) { + bytes[offset + 0] = b0; + bytes[offset + 1] = b1; + bytes[offset + 2] = b2; + bytes[offset + 3] = b3; + } + + // Store 8 bytes into an array + static void storeBytes(byte[] bytes, int offset, byte b0, byte b1, byte b2, byte b3, + byte b4, byte b5, byte b6, byte b7) { + bytes[offset + 0] = b0; + bytes[offset + 1] = b1; + bytes[offset + 2] = b2; + bytes[offset + 3] = b3; + bytes[offset + 4] = b4; + bytes[offset + 5] = b5; + bytes[offset + 6] = b6; + bytes[offset + 7] = b7; + } + + // -------------------------------- BENCHMARKS -------------------------------- + + @Benchmark + public void baseline() { + } + + @Benchmark + public byte[] baseline_allocate() { + byte[] aB = new byte[RANGE]; + return aB; + } + + @Benchmark + public byte[] store_B2_con_adr0_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[0] = (byte)0x01; + aB[1] = (byte)0x02; + return aB; + } + + @Benchmark + public byte[] store_B2_con_adr1_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[1] = (byte)0x01; + aB[2] = (byte)0x02; + return aB; + } + + @Benchmark + public byte[] store_B2_con_offs_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[offset + 0] = (byte)0x01; + aB[offset + 1] = (byte)0x02; + return aB; + } + + @Benchmark + public byte[] store_B2_con_offs_allocate_unsafe() { + byte[] aB = new byte[RANGE]; + UNSAFE.putShortUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, (short)0x0201); + return aB; + } + + @Benchmark + public byte[] store_B2_con_offs_allocate_bale() { + byte[] aB = new byte[RANGE]; + ByteArrayLittleEndian.setShort(aB, offset, (short)0x0201); + return aB; + } + + @Benchmark + public byte[] store_B2_con_offs_allocate_leapi() { + byte[] aB = new byte[RANGE]; + storeShortLE(aB, offset, (short)0x0201); + return aB; + } + + @Benchmark + public byte[] store_B2_con_offs_nonalloc_direct() { + aB[offset + 0] = (byte)0x01; + aB[offset + 1] = (byte)0x02; + return aB; + } + + @Benchmark + public byte[] store_B2_con_offs_nonalloc_unsafe() { + UNSAFE.putShortUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, (short)0x0201); + return aB; + } + + @Benchmark + public byte[] store_B2_con_offs_nonalloc_bale() { + ByteArrayLittleEndian.setShort(aB, offset, (short)0x0201); + return aB; + } + + @Benchmark + public byte[] store_B2_con_offs_nonalloc_leapi() { + storeShortLE(aB, offset, (short)0x0201); + return aB; + } + + @Benchmark + public byte[] store_B2_S_offs_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[offset + 0] = (byte)(vS >> 0 ); + aB[offset + 1] = (byte)(vS >> 8 ); + return aB; + } + + @Benchmark + public byte[] store_B2_S_offs_allocate_unsafe() { + byte[] aB = new byte[RANGE]; + UNSAFE.putShortUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, vS); + return aB; + } + + @Benchmark + public byte[] store_B2_S_offs_allocate_bale() { + byte[] aB = new byte[RANGE]; + ByteArrayLittleEndian.setShort(aB, offset, vS); + return aB; + } + + @Benchmark + public byte[] store_B2_S_offs_allocate_leapi() { + byte[] aB = new byte[RANGE]; + storeShortLE(aB, offset, vS); + return aB; + } + + @Benchmark + public byte[] store_B2_S_offs_nonalloc_direct() { + aB[offset + 0] = (byte)(vS >> 0 ); + aB[offset + 1] = (byte)(vS >> 8 ); + return aB; + } + + @Benchmark + public byte[] store_B2_S_offs_nonalloc_unsafe() { + UNSAFE.putShortUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, vS); + return aB; + } + + @Benchmark + public byte[] store_B2_S_offs_nonalloc_bale() { + ByteArrayLittleEndian.setShort(aB, offset, vS); + return aB; + } + + @Benchmark + public byte[] store_B2_S_offs_nonalloc_leapi() { + storeShortLE(aB, offset, vS); + return aB; + } + + @Benchmark + public byte[] store_B4_con_adr0_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[0] = (byte)0x01; + aB[1] = (byte)0x02; + aB[2] = (byte)0x03; + aB[3] = (byte)0x04; + return aB; + } + + @Benchmark + public byte[] store_B4_con_adr1_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[1] = (byte)0x01; + aB[2] = (byte)0x02; + aB[3] = (byte)0x03; + aB[4] = (byte)0x04; + return aB; + } + + @Benchmark + public byte[] store_B4_con_offs_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[offset + 0] = (byte)0x01; + aB[offset + 1] = (byte)0x02; + aB[offset + 2] = (byte)0x03; + aB[offset + 3] = (byte)0x04; + return aB; + } + + @Benchmark + public byte[] store_B4_con_offs_allocate_unsafe() { + byte[] aB = new byte[RANGE]; + UNSAFE.putIntUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, 0x04030201); + return aB; + } + + @Benchmark + public byte[] store_B4_con_offs_allocate_bale() { + byte[] aB = new byte[RANGE]; + ByteArrayLittleEndian.setInt(aB, offset, 0x04030201); + return aB; + } + + @Benchmark + public byte[] store_B4_con_offs_allocate_leapi() { + byte[] aB = new byte[RANGE]; + storeIntLE(aB, offset, 0x04030201); + return aB; + } + + @Benchmark + public byte[] store_B4_con_offs_nonalloc_direct() { + aB[offset + 0] = (byte)0x01; + aB[offset + 1] = (byte)0x02; + aB[offset + 2] = (byte)0x03; + aB[offset + 3] = (byte)0x04; + return aB; + } + + @Benchmark + public byte[] store_B4_con_offs_nonalloc_unsafe() { + UNSAFE.putIntUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, 0x04030201); + return aB; + } + + @Benchmark + public byte[] store_B4_con_offs_nonalloc_bale() { + ByteArrayLittleEndian.setInt(aB, offset, 0x04030201); + return aB; + } + + @Benchmark + public byte[] store_B4_con_offs_nonalloc_leapi() { + storeIntLE(aB, offset, 0x04030201); + return aB; + } + + @Benchmark + public byte[] store_B4_I_offs_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[offset + 0] = (byte)(vI >> 0 ); + aB[offset + 1] = (byte)(vI >> 8 ); + aB[offset + 2] = (byte)(vI >> 16); + aB[offset + 3] = (byte)(vI >> 24); + return aB; + } + + @Benchmark + public byte[] store_B4_I_offs_allocate_unsafe() { + byte[] aB = new byte[RANGE]; + UNSAFE.putIntUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, vI); + return aB; + } + + @Benchmark + public byte[] store_B4_I_offs_allocate_bale() { + byte[] aB = new byte[RANGE]; + ByteArrayLittleEndian.setInt(aB, offset, vI); + return aB; + } + + @Benchmark + public byte[] store_B4_I_offs_allocate_leapi() { + byte[] aB = new byte[RANGE]; + storeIntLE(aB, offset, vI); + return aB; + } + + @Benchmark + public byte[] store_B4_I_offs_nonalloc_direct() { + aB[offset + 0] = (byte)(vI >> 0 ); + aB[offset + 1] = (byte)(vI >> 8 ); + aB[offset + 2] = (byte)(vI >> 16); + aB[offset + 3] = (byte)(vI >> 24); + return aB; + } + + @Benchmark + public byte[] store_B4_I_offs_nonalloc_unsafe() { + UNSAFE.putIntUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, vI); + return aB; + } + + @Benchmark + public byte[] store_B4_I_offs_nonalloc_bale() { + ByteArrayLittleEndian.setInt(aB, offset, vI); + return aB; + } + + @Benchmark + public byte[] store_B4_I_offs_nonalloc_leapi() { + storeIntLE(aB, offset, vI); + return aB; + } + + @Benchmark + public byte[] store_B8_con_adr0_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[0] = (byte)0x01; + aB[1] = (byte)0x02; + aB[2] = (byte)0x03; + aB[3] = (byte)0x04; + aB[4] = (byte)0x05; + aB[5] = (byte)0x06; + aB[6] = (byte)0x07; + aB[7] = (byte)0x08; + return aB; + } + + @Benchmark + public byte[] store_B8_con_adr1_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[1] = (byte)0x01; + aB[2] = (byte)0x02; + aB[3] = (byte)0x03; + aB[4] = (byte)0x04; + aB[5] = (byte)0x05; + aB[6] = (byte)0x06; + aB[7] = (byte)0x07; + aB[8] = (byte)0x08; + return aB; + } + + @Benchmark + public byte[] store_B8_con_offs_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[offset + 0] = (byte)0x01; + aB[offset + 1] = (byte)0x02; + aB[offset + 2] = (byte)0x03; + aB[offset + 3] = (byte)0x04; + aB[offset + 4] = (byte)0x05; + aB[offset + 5] = (byte)0x06; + aB[offset + 6] = (byte)0x07; + aB[offset + 7] = (byte)0x08; + return aB; + } + + @Benchmark + public byte[] store_B8_con_offs_allocate_unsafe() { + byte[] aB = new byte[RANGE]; + UNSAFE.putLongUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, 0x0807060504030201L); + return aB; + } + + @Benchmark + public byte[] store_B8_con_offs_allocate_bale() { + byte[] aB = new byte[RANGE]; + ByteArrayLittleEndian.setLong(aB, offset, 0x0807060504030201L); + return aB; + } + + @Benchmark + public byte[] store_B8_con_offs_allocate_leapi() { + byte[] aB = new byte[RANGE]; + storeLongLE(aB, offset, 0x0807060504030201L); + return aB; + } + + @Benchmark + public byte[] store_B8_con_offs_nonalloc_direct() { + aB[offset + 0] = (byte)0x01; + aB[offset + 1] = (byte)0x02; + aB[offset + 2] = (byte)0x03; + aB[offset + 3] = (byte)0x04; + aB[offset + 4] = (byte)0x05; + aB[offset + 5] = (byte)0x06; + aB[offset + 6] = (byte)0x07; + aB[offset + 7] = (byte)0x08; + return aB; + } + + @Benchmark + public byte[] store_B8_con_offs_nonalloc_unsafe() { + UNSAFE.putLongUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, 0x0807060504030201L); + return aB; + } + + @Benchmark + public byte[] store_B8_con_offs_nonalloc_bale() { + ByteArrayLittleEndian.setLong(aB, offset, 0x0807060504030201L); + return aB; + } + + @Benchmark + public byte[] store_B8_con_offs_nonalloc_leapi() { + storeLongLE(aB, offset, 0x0807060504030201L); + return aB; + } + + @Benchmark + public byte[] store_B8_L_offs_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[offset + 0] = (byte)(vL >> 0 ); + aB[offset + 1] = (byte)(vL >> 8 ); + aB[offset + 2] = (byte)(vL >> 16); + aB[offset + 3] = (byte)(vL >> 24); + aB[offset + 4] = (byte)(vL >> 32); + aB[offset + 5] = (byte)(vL >> 40); + aB[offset + 6] = (byte)(vL >> 48); + aB[offset + 7] = (byte)(vL >> 56); + return aB; + } + + @Benchmark + public byte[] store_B8_L_offs_allocate_unsafe() { + byte[] aB = new byte[RANGE]; + UNSAFE.putLongUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, vL); + return aB; + } + + @Benchmark + public byte[] store_B8_L_offs_allocate_bale() { + byte[] aB = new byte[RANGE]; + ByteArrayLittleEndian.setLong(aB, offset, vL); + return aB; + } + + @Benchmark + public byte[] store_B8_L_offs_allocate_leapi() { + byte[] aB = new byte[RANGE]; + storeLongLE(aB, offset, vL); + return aB; + } + + @Benchmark + public byte[] store_B8_L_offs_nonalloc_direct() { + aB[offset + 0] = (byte)(vL >> 0 ); + aB[offset + 1] = (byte)(vL >> 8 ); + aB[offset + 2] = (byte)(vL >> 16); + aB[offset + 3] = (byte)(vL >> 24); + aB[offset + 4] = (byte)(vL >> 32); + aB[offset + 5] = (byte)(vL >> 40); + aB[offset + 6] = (byte)(vL >> 48); + aB[offset + 7] = (byte)(vL >> 56); + return aB; + } + + @Benchmark + public byte[] store_B8_L_offs_nonalloc_unsafe() { + UNSAFE.putLongUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset, vL); + return aB; + } + + @Benchmark + public byte[] store_B8_L_offs_nonalloc_bale() { + ByteArrayLittleEndian.setLong(aB, offset, vL); + return aB; + } + + @Benchmark + public byte[] store_B8_L_offs_nonalloc_leapi() { + storeLongLE(aB, offset, vL); + return aB; + } + + @Benchmark + public byte[] store_B8_I2_offs_allocate_direct() { + byte[] aB = new byte[RANGE]; + aB[offset + 0] = (byte)(vI >> 0 ); + aB[offset + 1] = (byte)(vI >> 8 ); + aB[offset + 2] = (byte)(vI >> 16); + aB[offset + 3] = (byte)(vI >> 24); + aB[offset + 4] = (byte)(vI >> 0 ); + aB[offset + 5] = (byte)(vI >> 8 ); + aB[offset + 6] = (byte)(vI >> 16); + aB[offset + 7] = (byte)(vI >> 24); + return aB; + } + + @Benchmark + public byte[] store_B8_I2_offs_allocate_unsafe() { + byte[] aB = new byte[RANGE]; + UNSAFE.putLongUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset + 0, vI); + UNSAFE.putLongUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset + 4, vI); + return aB; + } + + @Benchmark + public byte[] store_B8_I2_offs_allocate_bale() { + byte[] aB = new byte[RANGE]; + ByteArrayLittleEndian.setInt(aB, offset + 0, vI); + ByteArrayLittleEndian.setInt(aB, offset + 4, vI); + return aB; + } + + @Benchmark + public byte[] store_B8_I2_offs_allocate_leapi() { + byte[] aB = new byte[RANGE]; + storeIntLE(aB, offset + 0, vI); + storeIntLE(aB, offset + 4, vI); + return aB; + } + + @Benchmark + public byte[] store_B8_I2_offs_nonalloc_direct() { + aB[offset + 0] = (byte)(vI >> 0 ); + aB[offset + 1] = (byte)(vI >> 8 ); + aB[offset + 2] = (byte)(vI >> 16); + aB[offset + 3] = (byte)(vI >> 24); + aB[offset + 4] = (byte)(vI >> 0 ); + aB[offset + 5] = (byte)(vI >> 8 ); + aB[offset + 6] = (byte)(vI >> 16); + aB[offset + 7] = (byte)(vI >> 24); + return aB; + } + + @Benchmark + public byte[] store_B8_I2_offs_nonalloc_unsafe() { + UNSAFE.putLongUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset + 0, vI); + UNSAFE.putLongUnaligned(aB, Unsafe.ARRAY_BYTE_BASE_OFFSET + offset + 4, vI); + return aB; + } + + @Benchmark + public byte[] store_B8_I2_offs_nonalloc_bale() { + ByteArrayLittleEndian.setInt(aB, offset + 0, vI); + ByteArrayLittleEndian.setInt(aB, offset + 4, vI); + return aB; + } + + @Benchmark + public byte[] store_B8_I2_offs_nonalloc_leapi() { + storeIntLE(aB, offset + 0, vI); + storeIntLE(aB, offset + 4, vI); + return aB; + } + + @Benchmark + public short[] store_S2_con_offs_allocate_direct() { + short[] aS = new short[RANGE]; + aS[offset + 0] = (short)0x0102; + aS[offset + 1] = (short)0x0304; + return aS; + } + + @Benchmark + public short[] store_S2_con_offs_nonalloc_direct() { + aS[offset + 0] = (short)0x0102; + aS[offset + 1] = (short)0x0304; + return aS; + } + + @Benchmark + public short[] store_S4_con_offs_allocate_direct() { + short[] aS = new short[RANGE]; + aS[offset + 0] = (short)0x0102; + aS[offset + 1] = (short)0x0304; + aS[offset + 2] = (short)0x0506; + aS[offset + 3] = (short)0x0708; + return aS; + } + + @Benchmark + public short[] store_S4_con_offs_nonalloc_direct() { + aS[offset + 0] = (short)0x0102; + aS[offset + 1] = (short)0x0304; + aS[offset + 2] = (short)0x0506; + aS[offset + 3] = (short)0x0708; + return aS; + } + + @Benchmark + public int[] store_I2_con_offs_allocate_direct() { + int[] aI = new int[RANGE]; + aI[offset + 0] = 0x01020304; + aI[offset + 1] = 0x05060708; + return aI; + } + + @Benchmark + public int[] store_I2_con_offs_nonalloc_direct() { + aI[offset + 0] = 0x01020304; + aI[offset + 1] = 0x05060708; + return aI; + } + + @Benchmark + public int[] store_I2_zero_offs_allocate_direct() { + int[] aI = new int[RANGE]; + aI[offset + 0] = 0; + aI[offset + 1] = 0; + return aI; + } + + @Benchmark + public int[] store_I2_zero_offs_nonalloc_direct() { + aI[offset + 0] = 0; + aI[offset + 1] = 0; + return aI; + } +} From 165ba87e5732c382b3e97315e959dd5e32cf2984 Mon Sep 17 00:00:00 2001 From: Tobias Holenstein <tholenstein@openjdk.org> Date: Wed, 24 Apr 2024 07:24:39 +0000 Subject: [PATCH 079/141] 8330587: IGV: remove ControlFlowTopComponent Reviewed-by: chagedorn, rcastanedalo --- .../IdealGraphVisualizer/ControlFlow/pom.xml | 135 -------- .../controlflow/BlockConnectionWidget.java | 124 ------- .../hotspot/igv/controlflow/BlockWidget.java | 148 --------- .../igv/controlflow/ControlFlowAction.java | 46 --- .../igv/controlflow/ControlFlowScene.java | 311 ------------------ .../controlflow/ControlFlowTopComponent.form | 28 -- .../controlflow/ControlFlowTopComponent.java | 150 --------- .../controlflow/DoubleClickSelectAction.java | 66 ---- .../controlflow/HierarchicalGraphLayout.java | 170 ---------- .../ControlFlow/src/main/nbm/manifest.mf | 6 - .../hotspot/igv/controlflow/Bundle.properties | 4 - .../ControlFlowTopComponentSettings.xml | 8 - .../ControlFlowTopComponentWstcref.xml | 7 - .../com/sun/hotspot/igv/controlflow/layer.xml | 27 -- .../IdealGraphVisualizer/application/pom.xml | 5 - src/utils/IdealGraphVisualizer/pom.xml | 1 - 16 files changed, 1236 deletions(-) delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/pom.xml delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/BlockConnectionWidget.java delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/BlockWidget.java delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowAction.java delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowScene.java delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.form delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/DoubleClickSelectAction.java delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/HierarchicalGraphLayout.java delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/nbm/manifest.mf delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/Bundle.properties delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/ControlFlowTopComponentSettings.xml delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/ControlFlowTopComponentWstcref.xml delete mode 100644 src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/layer.xml diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/pom.xml b/src/utils/IdealGraphVisualizer/ControlFlow/pom.xml deleted file mode 100644 index f44f08bec1f5f..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/pom.xml +++ /dev/null @@ -1,135 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- - Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - - Neither the name of Oracle nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS - IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---> - -<project xmlns="http://maven.apache.org/POM/4.0.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>IdealGraphVisualizer-parent</artifactId> - <groupId>com.sun.hotspot.igv</groupId> - <version>1.0-SNAPSHOT</version> - </parent> - <artifactId>ControlFlow</artifactId> - <version>1.0-SNAPSHOT</version> - <packaging>nbm</packaging> - <name>ControlFlow</name> - <properties> - <maven.compiler.release>17</maven.compiler.release> - <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> - </properties> - <dependencies> - <dependency> - <groupId>com.sun.hotspot.igv</groupId> - <artifactId>Data</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>com.sun.hotspot.igv</groupId> - <artifactId>Util</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>com.sun.hotspot.igv</groupId> - <artifactId>Layout</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>com.sun.hotspot.igv</groupId> - <artifactId>HierarchicalLayout</artifactId> - <version>${project.version}</version> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-netbeans-api-visual</artifactId> - <version>${netbeans.version}</version> - </dependency> - <dependency> - <groupId>net.java.dev.swing-layout</groupId> - <artifactId>swing-layout</artifactId> - <version>${swinglayouts.version}</version> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util</artifactId> - <version>${netbeans.version}</version> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util-lookup</artifactId> - <version>${netbeans.version}</version> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util-ui</artifactId> - <version>${netbeans.version}</version> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-windows</artifactId> - <version>${netbeans.version}</version> - </dependency> - </dependencies> - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>nbm-maven-plugin</artifactId> - <version>${nbmmvnplugin.version}</version> - <extensions>true</extensions> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-compiler-plugin</artifactId> - <version>${mvncompilerplugin.version}</version> - <configuration> - <release>17</release> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-jar-plugin</artifactId> - <version>${mvnjarplugin.version}</version> - <configuration> - <!-- to have the jar plugin pickup the nbm generated manifest --> - <archive> - <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile> - </archive> - </configuration> - </plugin> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-enforcer-plugin</artifactId> - </plugin> - </plugins> - </build> -</project> diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/BlockConnectionWidget.java b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/BlockConnectionWidget.java deleted file mode 100644 index 4cf38780f976d..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/BlockConnectionWidget.java +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Copyright (c) 2008, 2022, 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 com.sun.hotspot.igv.controlflow; - -import com.sun.hotspot.igv.data.InputBlockEdge; -import com.sun.hotspot.igv.layout.Cluster; -import com.sun.hotspot.igv.layout.Link; -import com.sun.hotspot.igv.layout.Port; -import java.awt.BasicStroke; -import java.awt.Point; -import java.awt.Stroke; -import java.util.ArrayList; -import java.util.List; -import org.netbeans.api.visual.widget.ConnectionWidget; - -/** - * - * @author Thomas Wuerthinger - */ -public class BlockConnectionWidget extends ConnectionWidget implements Link { - - private static final Stroke NORMAL_STROKE = new BasicStroke(1.0f); - private static final Stroke BOLD_STROKE = new BasicStroke(2.5f); - private static final Stroke DASHED_STROKE = new BasicStroke(1.0f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, 10.0f, new float[]{5, 5}, 0); - private static final Stroke BOLD_DASHED_STROKE = new BasicStroke(2.5f, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER, 10.0f, new float[]{5, 5}, 0); - - private final BlockWidget from; - private final BlockWidget to; - private final Port inputSlot; - private final Port outputSlot; - private List<Point> points; - private boolean isDashed = false; - private boolean isBold = false; - - public BlockConnectionWidget(ControlFlowScene scene, InputBlockEdge edge) { - super(scene); - - this.from = (BlockWidget) scene.findWidget(edge.getFrom()); - this.to = (BlockWidget) scene.findWidget(edge.getTo()); - inputSlot = to.getInputSlot(); - outputSlot = from.getOutputSlot(); - points = new ArrayList<>(); - } - - public Port getTo() { - return inputSlot; - } - - public Port getFrom() { - return outputSlot; - } - - public Cluster getFromCluster() { - return null; - } - - public Cluster getToCluster() { - return null; - } - - public void setBold(boolean bold) { - this.isBold = bold; - updateStroke(); - } - - public void setDashed(boolean dashed) { - this.isDashed = dashed; - updateStroke(); - } - - private void updateStroke() { - Stroke stroke = NORMAL_STROKE; - if (isBold) { - if (isDashed) { - stroke = BOLD_DASHED_STROKE; - } else { - stroke = BOLD_STROKE; - } - } else if (isDashed) { - stroke = DASHED_STROKE; - } - setStroke(stroke); - } - - public void setControlPoints(List<Point> p) { - this.points = p; - } - - @Override - public List<Point> getControlPoints() { - return points; - } - - @Override - public String toString() { - return "Connection[ " + from.toString() + " - " + to.toString() + "]"; - } - - @Override - public boolean isVIP() { - return isBold; - } -} diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/BlockWidget.java b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/BlockWidget.java deleted file mode 100644 index 5c4a51463f0c2..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/BlockWidget.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ -package com.sun.hotspot.igv.controlflow; - -import com.sun.hotspot.igv.data.InputBlock; -import com.sun.hotspot.igv.layout.Cluster; -import com.sun.hotspot.igv.layout.Port; -import com.sun.hotspot.igv.layout.Vertex; -import java.awt.*; -import org.netbeans.api.visual.border.BorderFactory; -import org.netbeans.api.visual.model.ObjectState; -import org.netbeans.api.visual.widget.LabelWidget; - -/** - * - * @author Thomas Wuerthinger - */ -public class BlockWidget extends LabelWidget implements Vertex { - - public static final Dimension MIN_SIZE = new Dimension(20, 20); - private final InputBlock block; - private final Port inputSlot; - private final Port outputSlot; - private Cluster cluster; - private static final Font font = new Font(Font.SANS_SERIF, Font.PLAIN, 12); - private static final Font boldFont = font.deriveFont(Font.BOLD); - public static final Color NORMAL_FOREGROUND_COLOR = Color.BLACK; - public static final Color HOVER_FOREGROUND_COLOR = Color.BLUE; - - /** Creates a new instance of BlockWidget */ - public BlockWidget(ControlFlowScene scene, InputBlock block) { - super(scene); - this.block = block; - this.setLabel(block.getName()); - this.setForeground(NORMAL_FOREGROUND_COLOR); - this.setBorder(BorderFactory.createLineBorder(1, NORMAL_FOREGROUND_COLOR)); - this.setMinimumSize(MIN_SIZE); - - this.setFont(font); - this.setAlignment(Alignment.CENTER); - - final BlockWidget widget = this; - inputSlot = new Port() { - public Point getRelativePosition() { - return new Point((int) (getSize().getWidth() / 2), (int) (getSize().getHeight() / 2)); - } - public Vertex getVertex() { - return widget; - } - }; - outputSlot = new Port() { - public Point getRelativePosition() { - return new Point((int) (getSize().getWidth() / 2), (int) (getSize().getHeight() / 2)); - } - public Vertex getVertex() { - return widget; - } - }; - } - - public Port getInputSlot() { - return inputSlot; - } - - public Port getOutputSlot() { - return outputSlot; - } - - public InputBlock getBlock() { - return block; - } - - public Dimension getSize() { - Rectangle bounds = getBounds(); - if (bounds != null) { - return bounds.getSize(); - } else { - return MIN_SIZE; - } - } - - public void setPosition(Point p) { - this.setPreferredLocation(p); - } - - @Override - public String toString() { - return block.getName(); - } - - public Point getPosition() { - return this.getPreferredLocation(); - } - - public Cluster getCluster() { - return cluster; - } - - public boolean isRoot() { - return false; - } - - public int compareTo(Vertex o) { - return toString().compareTo(o.toString()); - } - - @Override - protected void notifyStateChanged(ObjectState previousState, ObjectState state) { - super.notifyStateChanged(previousState, state); - - if (previousState.isHovered() != state.isHovered()) { - if (state.isHovered()) { - this.setBorder(BorderFactory.createLineBorder(1, HOVER_FOREGROUND_COLOR)); - } else { - this.setBorder(BorderFactory.createLineBorder(1, NORMAL_FOREGROUND_COLOR)); - } - } - - if (previousState.isSelected() != state.isSelected()) { - if (state.isSelected()) { - this.setFont(boldFont); - } else { - this.setFont(font); - } - } - } -} diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowAction.java b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowAction.java deleted file mode 100644 index 43b8fae8f584d..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowAction.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ -package com.sun.hotspot.igv.controlflow; - -import java.awt.event.ActionEvent; -import javax.swing.AbstractAction; -import org.openide.util.NbBundle; -import org.openide.windows.TopComponent; - -/** - * - * @author Thomas Wuerthinger - */ -public class ControlFlowAction extends AbstractAction { - - public ControlFlowAction() { - super(NbBundle.getMessage(ControlFlowAction.class, "CTL_ControlFlowAction")); - } - - public void actionPerformed(ActionEvent evt) { - TopComponent win = ControlFlowTopComponent.findInstance(); - win.open(); - win.requestActive(); - } -} diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowScene.java b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowScene.java deleted file mode 100644 index d5da6ce2d4458..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowScene.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ -package com.sun.hotspot.igv.controlflow; - -import com.sun.hotspot.igv.data.InputBlock; -import com.sun.hotspot.igv.data.InputBlockEdge; -import com.sun.hotspot.igv.data.InputGraph; -import com.sun.hotspot.igv.data.InputNode; -import com.sun.hotspot.igv.data.services.InputGraphProvider; -import com.sun.hotspot.igv.util.LookupHistory; -import java.awt.Color; -import java.awt.Point; -import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; -import javax.swing.BorderFactory; -import org.netbeans.api.visual.action.*; -import org.netbeans.api.visual.anchor.AnchorFactory; -import org.netbeans.api.visual.anchor.AnchorShape; -import org.netbeans.api.visual.graph.GraphScene; -import org.netbeans.api.visual.graph.layout.GraphLayout; -import org.netbeans.api.visual.layout.LayoutFactory; -import org.netbeans.api.visual.layout.SceneLayout; -import org.netbeans.api.visual.router.RouterFactory; -import org.netbeans.api.visual.widget.ConnectionWidget; -import org.netbeans.api.visual.widget.LayerWidget; -import org.netbeans.api.visual.widget.Widget; - -/** - * - * @author Thomas Wuerthinger - */ -public class ControlFlowScene extends GraphScene<InputBlock, InputBlockEdge> implements SelectProvider, MoveProvider, RectangularSelectDecorator, RectangularSelectProvider { - - private final HashSet<BlockWidget> selection; - private InputGraph oldGraph; - private final LayerWidget edgeLayer; - private final LayerWidget mainLayer; - private final WidgetAction hoverAction = createWidgetHoverAction(); - private final WidgetAction selectAction = new DoubleClickSelectAction(this); - private final WidgetAction moveAction = ActionFactory.createMoveAction(null, this); - - public ControlFlowScene() { - selection = new HashSet<>(); - - getInputBindings().setZoomActionModifiers(0); - setLayout(LayoutFactory.createAbsoluteLayout()); - - mainLayer = new LayerWidget(this); - addChild(mainLayer); - - edgeLayer = new LayerWidget(this); - addChild(edgeLayer); - - LayerWidget selectLayer = new LayerWidget(this); - addChild(selectLayer); - - getActions().addAction(hoverAction); - getActions().addAction(selectAction); - getActions().addAction(ActionFactory.createRectangularSelectAction(this, selectLayer, this)); - getActions().addAction(ActionFactory.createMouseCenteredZoomAction(1.1)); - } - - public void setGraph(InputGraph g) { - if (g == oldGraph) { - return; - } - oldGraph = g; - - ArrayList<InputBlock> blocks = new ArrayList<>(getNodes()); - for (InputBlock b : blocks) { - removeNode(b); - } - - ArrayList<InputBlockEdge> edges = new ArrayList<>(getEdges()); - for (InputBlockEdge e : edges) { - removeEdge(e); - } - - edgeLayer.removeChildren(); - mainLayer.removeChildren(); - - for (InputBlock b : g.getBlocks()) { - addNode(b); - } - - for (InputBlockEdge e : g.getBlockEdges()) { - addEdge(e); - assert g.getBlocks().contains(e.getFrom()); - assert g.getBlocks().contains(e.getTo()); - setEdgeSource(e, e.getFrom()); - setEdgeTarget(e, e.getTo()); - } - - GraphLayout<InputBlock, InputBlockEdge> layout = new HierarchicalGraphLayout<>(); - SceneLayout sceneLayout = LayoutFactory.createSceneGraphLayout(this, layout); - sceneLayout.invokeLayout(); - - validate(); - } - - private void clearSelection() { - for (BlockWidget w : selection) { - w.setState(w.getState().deriveSelected(false)); - } - selection.clear(); - selectionChanged(); - } - - private void selectionChanged() { - InputGraphProvider p = LookupHistory.getLast(InputGraphProvider.class); - if (p != null) { - Set<InputNode> inputNodes = new HashSet<>(); - for (BlockWidget w : selection) { - inputNodes.addAll(w.getBlock().getNodes()); - } - p.clearSelectedNodes(); - p.addSelectedNodes(inputNodes, true); - p.centerSelectedNodes(); - } - } - - private void addToSelection(BlockWidget widget) { - widget.setState(widget.getState().deriveSelected(true)); - selection.add(widget); - selectionChanged(); - } - - private void removeFromSelection(BlockWidget widget) { - widget.setState(widget.getState().deriveSelected(false)); - selection.remove(widget); - selectionChanged(); - } - - @Override - public boolean isAimingAllowed(Widget widget, Point point, boolean b) { - return false; - } - - @Override - public boolean isSelectionAllowed(Widget widget, Point point, boolean b) { - return true; - } - - @Override - public void select(Widget widget, Point point, boolean change) { - if (widget == this) { - clearSelection(); - } else { - - assert widget instanceof BlockWidget; - BlockWidget bw = (BlockWidget) widget; - if (change) { - if (selection.contains(bw)) { - removeFromSelection(bw); - } else { - addToSelection(bw); - } - } else { - if (!selection.contains(bw)) { - clearSelection(); - addToSelection(bw); - } - } - } - } - - @Override - public void movementStarted(Widget widget) {} - - @Override - - public void movementFinished(Widget widget) {} - - @Override - public Point getOriginalLocation(Widget widget) { - return widget.getPreferredLocation(); - } - - @Override - public void setNewLocation(Widget widget, Point location) { - assert widget instanceof BlockWidget; - if (selection.contains((BlockWidget) widget)) { - // move entire selection - Point originalLocation = getOriginalLocation(widget); - int xOffset = location.x - originalLocation.x; - int yOffset = location.y - originalLocation.y; - for (Widget w : selection) { - Point p = new Point(w.getPreferredLocation()); - p.translate(xOffset, yOffset); - w.setPreferredLocation(p); - } - } else { - widget.setPreferredLocation(location); - } - } - - @Override - public Widget createSelectionWidget() { - Widget widget = new Widget(this); - widget.setOpaque(false); - widget.setBorder(BorderFactory.createLineBorder(Color.black, 2)); - widget.setForeground(Color.red); - return widget; - } - - @Override - public void performSelection(Rectangle rectangle) { - - if (rectangle.width < 0) { - rectangle.x += rectangle.width; - rectangle.width *= -1; - } - - if (rectangle.height < 0) { - rectangle.y += rectangle.height; - rectangle.height *= -1; - } - - boolean changed = false; - for (InputBlock b : getNodes()) { - BlockWidget w = (BlockWidget) findWidget(b); - Rectangle r = new Rectangle(w.getBounds()); - r.setLocation(w.getLocation()); - if (r.intersects(rectangle)) { - if (!selection.contains(w)) { - changed = true; - selection.add(w); - w.setState(w.getState().deriveSelected(true)); - } - } else { - if (selection.contains(w)) { - changed = true; - selection.remove(w); - w.setState(w.getState().deriveSelected(false)); - } - } - } - - if (changed) { - selectionChanged(); - } - - } - - @Override - protected Widget attachNodeWidget(InputBlock node) { - BlockWidget w = new BlockWidget(this, node); - mainLayer.addChild(w); - w.getActions().addAction(hoverAction); - w.getActions().addAction(selectAction); - w.getActions().addAction(moveAction); - return w; - } - - @Override - protected Widget attachEdgeWidget(InputBlockEdge edge) { - BlockConnectionWidget w = new BlockConnectionWidget(this, edge); - switch (edge.getState()) { - case NEW: - w.setBold(true); - break; - case DELETED: - w.setDashed(true); - break; - } - w.setRouter(RouterFactory.createDirectRouter()); - w.setTargetAnchorShape(AnchorShape.TRIANGLE_FILLED); - edgeLayer.addChild(w); - return w; - } - - @Override - protected void attachEdgeSourceAnchor(InputBlockEdge edge, InputBlock oldSourceNode, InputBlock sourceNode) { - Widget w = findWidget(edge); - assert w instanceof ConnectionWidget; - ConnectionWidget cw = (ConnectionWidget) w; - cw.setSourceAnchor(AnchorFactory.createRectangularAnchor(findWidget(sourceNode))); - - } - - @Override - protected void attachEdgeTargetAnchor(InputBlockEdge edge, InputBlock oldTargetNode, InputBlock targetNode) { - Widget w = findWidget(edge); - assert w instanceof ConnectionWidget; - ConnectionWidget cw = (ConnectionWidget) w; - cw.setTargetAnchor(AnchorFactory.createRectangularAnchor(findWidget(targetNode))); - } -} diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.form b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.form deleted file mode 100644 index 7061b53f324a3..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.form +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<Form version="1.3" maxVersion="1.3" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="2"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="400" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="300" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> -</Form> diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java deleted file mode 100644 index f4c5b98a841a1..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/ControlFlowTopComponent.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2008, 2022, 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 com.sun.hotspot.igv.controlflow; - -import com.sun.hotspot.igv.data.ChangedListener; -import com.sun.hotspot.igv.data.InputGraph; -import com.sun.hotspot.igv.data.services.InputGraphProvider; -import com.sun.hotspot.igv.util.LookupHistory; -import java.awt.BorderLayout; -import javax.swing.JScrollPane; -import javax.swing.SwingUtilities; -import org.openide.ErrorManager; -import org.openide.util.NbBundle; -import org.openide.windows.TopComponent; -import org.openide.windows.WindowManager; - -/** - * - * @author Thomas Wuerthinger - */ -final class ControlFlowTopComponent extends TopComponent implements ChangedListener<InputGraphProvider> { - - private static ControlFlowTopComponent instance; - private static final String PREFERRED_ID = "ControlFlowTopComponent"; - private final ControlFlowScene scene; - - private ControlFlowTopComponent() { - initComponents(); - setName(NbBundle.getMessage(ControlFlowTopComponent.class, "CTL_ControlFlowTopComponent")); - setToolTipText(NbBundle.getMessage(ControlFlowTopComponent.class, "HINT_ControlFlowTopComponent")); - - scene = new ControlFlowScene(); - setLayout(new BorderLayout()); - associateLookup(scene.getLookup()); - - JScrollPane panel = new JScrollPane(scene.createView()); - add(panel, BorderLayout.CENTER); - } - - /** - * Gets default instance. Do not use directly: reserved for *.settings files only, - * i.e. deserialization routines; otherwise you could get a non-deserialized instance. - * To obtain the singleton instance, use {@link #findInstance()}. - */ - public static synchronized ControlFlowTopComponent getDefault() { - if (instance == null) { - instance = new ControlFlowTopComponent(); - } - return instance; - } - - /** - * Obtain the ControlFlowTopComponent instance. Never call {@link #getDefault} directly! - */ - public static synchronized ControlFlowTopComponent findInstance() { - TopComponent win = WindowManager.getDefault().findTopComponent(PREFERRED_ID); - if (win == null) { - ErrorManager.getDefault().log(ErrorManager.WARNING, "Cannot find ControlFlow component. It will not be located properly in the window system."); - return getDefault(); - } - if (win instanceof ControlFlowTopComponent) { - return (ControlFlowTopComponent) win; - } - ErrorManager.getDefault().log(ErrorManager.WARNING, "There seem to be multiple components with the '" + PREFERRED_ID + "' ID. That is a potential source of errors and unexpected behavior."); - return getDefault(); - } - - @Override - public int getPersistenceType() { - return TopComponent.PERSISTENCE_ALWAYS; - } - - @Override - public void componentOpened() { - LookupHistory.addListener(InputGraphProvider.class, this); - } - - @Override - public void componentClosed() { - LookupHistory.removeListener(InputGraphProvider.class, this); - } - - @Override - public void changed(InputGraphProvider lastProvider) { - SwingUtilities.invokeLater(() -> { - if (lastProvider != null) { - InputGraph graph = lastProvider.getGraph(); - if (graph != null) { - scene.setGraph(graph); - return; - } - } - scene.setGraph(new InputGraph("")); - }); - } - - @Override - protected String preferredID() { - return PREFERRED_ID; - } - - @Override - public void requestActive() { - super.requestActive(); - scene.getView().requestFocus(); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // <editor-fold defaultstate="collapsed" desc=" Generated Code ">//GEN-BEGIN:initComponents - private void initComponents() { - - org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 400, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) - .add(0, 300, Short.MAX_VALUE) - ); - }// </editor-fold>//GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - // End of variables declaration//GEN-END:variables -} diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/DoubleClickSelectAction.java b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/DoubleClickSelectAction.java deleted file mode 100644 index f70ba33df7d1a..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/DoubleClickSelectAction.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ -package com.sun.hotspot.igv.controlflow; - -import java.awt.Point; -import java.awt.event.MouseEvent; -import org.netbeans.api.visual.action.SelectProvider; -import org.netbeans.api.visual.action.WidgetAction; -import org.netbeans.api.visual.widget.Widget; -import org.openide.util.Utilities; - -/** - * Selection action that acts on double-click only. Does not support aiming. - * - * @author Peter Hofer - */ -public class DoubleClickSelectAction extends WidgetAction.LockedAdapter { - - private final SelectProvider provider; - - public DoubleClickSelectAction(SelectProvider provider) { - this.provider = provider; - } - - protected int getModifierMask () { - return Utilities.isMac() ? MouseEvent.META_DOWN_MASK : MouseEvent.CTRL_DOWN_MASK; - } - - protected boolean isLocked() { - return false; - } - - @Override - public State mousePressed(Widget widget, WidgetMouseEvent event) { - if (event.getClickCount() >= 2 && (event.getButton() == MouseEvent.BUTTON1 || event.getButton() == MouseEvent.BUTTON2)) { - boolean invert = (event.getModifiersEx() & getModifierMask()) != 0; - Point point = event.getPoint(); - if (provider.isSelectionAllowed(widget, point, invert)) { - provider.select(widget, point, invert); - return State.CHAIN_ONLY; - } - } - return State.REJECTED; - } -} diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/HierarchicalGraphLayout.java b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/HierarchicalGraphLayout.java deleted file mode 100644 index ca83df7ae29ce..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/java/com/sun/hotspot/igv/controlflow/HierarchicalGraphLayout.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (c) 2008, 2022, 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 com.sun.hotspot.igv.controlflow; - -import com.sun.hotspot.igv.hierarchicallayout.HierarchicalLayoutManager; -import com.sun.hotspot.igv.layout.*; -import java.awt.Dimension; -import java.awt.Point; -import java.util.*; -import org.netbeans.api.visual.graph.layout.GraphLayout; -import org.netbeans.api.visual.graph.layout.UniversalGraph; -import org.netbeans.api.visual.widget.Widget; - -/** - * - * @author Thomas Wuerthinger - */ -public class HierarchicalGraphLayout<N, E> extends GraphLayout<N, E> { - - public HierarchicalGraphLayout() {} - - private class LinkWrapper implements Link { - - private final VertexWrapper from; - private final VertexWrapper to; - - public LinkWrapper(VertexWrapper from, VertexWrapper to) { - this.from = from; - this.to = to; - } - - public Port getFrom() { - return from.getSlot(); - } - - public Port getTo() { - return to.getSlot(); - } - - public Cluster getFromCluster() { - return null; - } - - public Cluster getToCluster() { - return null; - } - - public List<Point> getControlPoints() { - return new ArrayList<>(); - } - - public void setControlPoints(List<Point> list) { - // Do nothing for now - } - - public boolean isVIP() { - return false; - } - } - - private class VertexWrapper implements Vertex { - - private final N node; - private final UniversalGraph<N, E> graph; - private final Port slot; - private Point position; - - public VertexWrapper(N node, UniversalGraph<N, E> graph) { - this.node = node; - this.graph = graph; - final VertexWrapper vertex = this; - this.slot = new Port() { - - public Vertex getVertex() { - return vertex; - } - - public Point getRelativePosition() { - return new Point((int) (vertex.getSize().getWidth() / 2), (int) (vertex.getSize().getHeight() / 2)); - } - }; - - Widget w = graph.getScene().findWidget(node); - this.position = w.getPreferredLocation(); - } - - public Cluster getCluster() { - return null; - } - - public Dimension getSize() { - Widget w = graph.getScene().findWidget(node); - assert w.getBounds() != null; - return w.getBounds().getSize(); - } - - public Point getPosition() { - return position; - } - - public void setPosition(Point p) { - HierarchicalGraphLayout.this.setResolvedNodeLocation(graph, node, p); - position = p; - } - - public boolean isRoot() { - return false; - } - - public int compareTo(Vertex o) { - @SuppressWarnings("unchecked") - VertexWrapper vw = (VertexWrapper) o; - return node.toString().compareTo(vw.node.toString()); - } - - public Port getSlot() { - return slot; - } - } - - protected void performGraphLayout(UniversalGraph<N, E> graph) { - - Set<LinkWrapper> links = new LinkedHashSet<>(); - Set<VertexWrapper> vertices = new LinkedHashSet<>(); - Map<N, VertexWrapper> vertexMap = new HashMap<>(); - - for (N node : graph.getNodes()) { - VertexWrapper v = new VertexWrapper(node, graph); - vertexMap.put(node, v); - vertices.add(v); - } - - for (E edge : graph.getEdges()) { - N source = graph.getEdgeSource(edge); - N target = graph.getEdgeTarget(edge); - LinkWrapper l = new LinkWrapper(vertexMap.get(source), vertexMap.get(target)); - links.add(l); - } - - HierarchicalLayoutManager m = new HierarchicalLayoutManager(HierarchicalLayoutManager.Combine.NONE); - - LayoutGraph layoutGraph = new LayoutGraph(links, vertices); - m.doLayout(layoutGraph); - } - - protected void performNodesLayout(UniversalGraph<N, E> graph, Collection<N> nodes) { - throw new UnsupportedOperationException(); - } -} diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/nbm/manifest.mf b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/nbm/manifest.mf deleted file mode 100644 index c745f8a82b4cb..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/nbm/manifest.mf +++ /dev/null @@ -1,6 +0,0 @@ -Manifest-Version: 1.0 -OpenIDE-Module: com.sun.hotspot.igv.controlflow -OpenIDE-Module-Layer: com/sun/hotspot/igv/controlflow/layer.xml -OpenIDE-Module-Localizing-Bundle: com/sun/hotspot/igv/controlflow/Bundle.properties -OpenIDE-Module-Specification-Version: 1.0 - diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/Bundle.properties b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/Bundle.properties deleted file mode 100644 index 587299c05df87..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/Bundle.properties +++ /dev/null @@ -1,4 +0,0 @@ -CTL_ControlFlowAction=Control Flow -CTL_ControlFlowTopComponent=Control Flow -HINT_ControlFlowTopComponent=Shows the blocks of the current graph. -OpenIDE-Module-Name=ControlFlow diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/ControlFlowTopComponentSettings.xml b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/ControlFlowTopComponentSettings.xml deleted file mode 100644 index 5ffb8213fbc5c..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/ControlFlowTopComponentSettings.xml +++ /dev/null @@ -1,8 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE settings PUBLIC "-//NetBeans//DTD Session settings 1.0//EN" "https://www.netbeans.org/dtds/sessionsettings-1_0.dtd"> -<settings version="1.0"> - <module name="com.sun.hotspot.igv.controlflow" spec="1.0"/> - <instanceof class="org.openide.windows.TopComponent"/> - <instanceof class="com.sun.hotspot.igv.controlflow.ControlFlowTopComponent"/> - <instance class="com.sun.hotspot.igv.controlflow.ControlFlowTopComponent" method="getDefault"/> -</settings> diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/ControlFlowTopComponentWstcref.xml b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/ControlFlowTopComponentWstcref.xml deleted file mode 100644 index 66bc3093c7ea6..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/ControlFlowTopComponentWstcref.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE tc-ref PUBLIC "-//NetBeans//DTD Top Component in Mode Properties 2.0//EN" "https://www.netbeans.org/dtds/tc-ref2_0.dtd"> -<tc-ref version="2.0" > - <module name="com.sun.hotspot.igv.controlflow" spec="1.0"/> - <tc-id id="ControlFlowTopComponent"/> - <state opened="true"/> -</tc-ref> diff --git a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/layer.xml b/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/layer.xml deleted file mode 100644 index 5e79cc22ee712..0000000000000 --- a/src/utils/IdealGraphVisualizer/ControlFlow/src/main/resources/com/sun/hotspot/igv/controlflow/layer.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE filesystem PUBLIC "-//NetBeans//DTD Filesystem 1.1//EN" "https://www.netbeans.org/dtds/filesystem-1_1.dtd"> -<filesystem> - <folder name="Actions"> - <folder name="Window"> - <file name="com-sun-hotspot-igv-controlflow-ControlFlowAction.instance"/> - </folder> - </folder> - <folder name="Menu"> - <folder name="Window"> - <file name="ControlFlowAction.shadow"> - <attr name="originalFile" stringvalue="Actions/Window/com-sun-hotspot-igv-controlflow-ControlFlowAction.instance"/> - <attr name="position" intvalue="2"/> - </file> - </folder> - </folder> - <folder name="Windows2"> - <folder name="Components"> - <file name="ControlFlowTopComponent.settings" url="ControlFlowTopComponentSettings.xml"/> - </folder> - <folder name="Modes"> - <folder name="customRightTopMode"> - <file name="ControlFlowTopComponent.wstcref" url="ControlFlowTopComponentWstcref.xml"/> - </folder> - </folder> - </folder> -</filesystem> diff --git a/src/utils/IdealGraphVisualizer/application/pom.xml b/src/utils/IdealGraphVisualizer/application/pom.xml index 0fc3ae119f0c2..2590281680867 100644 --- a/src/utils/IdealGraphVisualizer/application/pom.xml +++ b/src/utils/IdealGraphVisualizer/application/pom.xml @@ -115,11 +115,6 @@ <artifactId>HierarchicalLayout</artifactId> <version>${project.version}</version> </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>ControlFlow</artifactId> - <version>${project.version}</version> - </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>Filter</artifactId> diff --git a/src/utils/IdealGraphVisualizer/pom.xml b/src/utils/IdealGraphVisualizer/pom.xml index 4e4da82e1091d..7f9bd67af42fa 100644 --- a/src/utils/IdealGraphVisualizer/pom.xml +++ b/src/utils/IdealGraphVisualizer/pom.xml @@ -102,7 +102,6 @@ <module>SelectionCoordinator</module> <module>Graph</module> <module>HierarchicalLayout</module> - <module>ControlFlow</module> <module>Filter</module> <module>Bytecodes</module> <module>ServerCompiler</module> From c439c8c73cf07966e3517ecbaf14d79dcbaeabb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Galder=20Zamarre=C3=B1o?= <galder@openjdk.org> Date: Wed, 24 Apr 2024 08:20:49 +0000 Subject: [PATCH 080/141] 8323429: Missing C2 optimization for FP min/max when both inputs are same Reviewed-by: roland, chagedorn --- src/hotspot/share/opto/addnode.cpp | 8 + src/hotspot/share/opto/addnode.hpp | 1 + .../intrinsics/math/TestMinMaxOpt.java | 158 ++++++++++++++++++ .../compiler/lib/ir_framework/IRNode.java | 22 ++- .../runner/BasicDoubleOpTest.java | 2 +- 5 files changed, 189 insertions(+), 2 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/intrinsics/math/TestMinMaxOpt.java diff --git a/src/hotspot/share/opto/addnode.cpp b/src/hotspot/share/opto/addnode.cpp index f0e55d6ed48c9..9a7d93dc469ba 100644 --- a/src/hotspot/share/opto/addnode.cpp +++ b/src/hotspot/share/opto/addnode.cpp @@ -1424,6 +1424,14 @@ Node* MinLNode::Ideal(PhaseGVN* phase, bool can_reshape) { return nullptr; } +Node* MaxNode::Identity(PhaseGVN* phase) { + if (in(1) == in(2)) { + return in(1); + } + + return AddNode::Identity(phase); +} + //------------------------------add_ring--------------------------------------- const Type* MinFNode::add_ring(const Type* t0, const Type* t1 ) const { const TypeF* r0 = t0->isa_float_constant(); diff --git a/src/hotspot/share/opto/addnode.hpp b/src/hotspot/share/opto/addnode.hpp index 19043b5e40f5d..fd044d6eead63 100644 --- a/src/hotspot/share/opto/addnode.hpp +++ b/src/hotspot/share/opto/addnode.hpp @@ -269,6 +269,7 @@ class MaxNode : public AddNode { virtual int max_opcode() const = 0; virtual int min_opcode() const = 0; Node* IdealI(PhaseGVN* phase, bool can_reshape); + virtual Node* Identity(PhaseGVN* phase); static Node* unsigned_max(Node* a, Node* b, const Type* t, PhaseGVN& gvn) { return build_min_max(a, b, true, true, t, gvn); diff --git a/test/hotspot/jtreg/compiler/intrinsics/math/TestMinMaxOpt.java b/test/hotspot/jtreg/compiler/intrinsics/math/TestMinMaxOpt.java new file mode 100644 index 0000000000000..22b5e3e12ab82 --- /dev/null +++ b/test/hotspot/jtreg/compiler/intrinsics/math/TestMinMaxOpt.java @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2024, 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 8323429 + * @summary Test min and max optimizations + * @library /test/lib / + * @run driver compiler.intrinsics.math.TestMinMaxOpt + */ + +package compiler.intrinsics.math; + +import compiler.lib.ir_framework.Argument; +import compiler.lib.ir_framework.Arguments; +import compiler.lib.ir_framework.Check; +import compiler.lib.ir_framework.IR; +import compiler.lib.ir_framework.IRNode; +import compiler.lib.ir_framework.Test; +import compiler.lib.ir_framework.TestFramework; + +public class TestMinMaxOpt { + public static void main(String[] args) { + TestFramework.run(); + } + + @Test + @Arguments(values = {Argument.NUMBER_42}) + @IR(failOn = {IRNode.MIN_I}) + private static int testIntMin(int v) { + return Math.min(v, v); + } + + @Check(test = "testIntMin") + public static void checkTestIntMin(int result) { + if (result != 42) { + throw new RuntimeException("Incorrect result: " + result); + } + } + + @Test + @Arguments(values = {Argument.NUMBER_42}) + @IR(failOn = {IRNode.MAX_I}) + private static int testIntMax(int v) { + return Math.max(v, v); + } + + @Check(test = "testIntMax") + public static void checkTestIntMax(int result) { + if (result != 42) { + throw new RuntimeException("Incorrect result: " + result); + } + } + + @Test + @Arguments(values = {Argument.NUMBER_42}) + @IR(failOn = {IRNode.MIN_L}) + private static long testLongMin(long v) { + return Math.min(v, v); + } + + @Check(test = "testLongMin") + public static void checkTestLongMin(long result) { + if (result != 42) { + throw new RuntimeException("Incorrect result: " + result); + } + } + + @Test + @Arguments(values = {Argument.NUMBER_42}) + @IR(failOn = {IRNode.MAX_L}) + private static long testLongMax(long v) { + return Math.max(v, v); + } + + @Check(test = "testLongMax") + public static void checkTestLongMax(long result) { + if (result != 42) { + throw new RuntimeException("Incorrect result: " + result); + } + } + + @Test + @Arguments(values = {Argument.NUMBER_42}) + @IR(failOn = {IRNode.MIN_F}) + private static float testFloatMin(float v) { + return Math.min(v, v); + } + + @Check(test = "testFloatMin") + public static void checkTestFloatMin(float result) { + if (result != 42) { + throw new RuntimeException("Incorrect result: " + result); + } + } + + @Test + @Arguments(values = {Argument.NUMBER_42}) + @IR(failOn = {IRNode.MAX_F}) + private static float testFloatMax(float v) { + return Math.max(v, v); + } + + @Check(test = "testFloatMax") + public static void checkTestFloatMax(float result) { + if (result != 42) { + throw new RuntimeException("Incorrect result: " + result); + } + } + + @Test + @Arguments(values = {Argument.NUMBER_42}) + @IR(failOn = {IRNode.MIN_D}) + private static double testDoubleMin(double v) { + return Math.min(v, v); + } + + @Check(test = "testDoubleMin") + public static void checkTestDoubleMin(double result) { + if (result != 42) { + throw new RuntimeException("Incorrect result: " + result); + } + } + + @Test + @Arguments(values = {Argument.NUMBER_42}) + @IR(failOn = {IRNode.MAX_D}) + private static double testDoubleMax(double v) { + return Math.max(v, v); + } + + @Check(test = "testDoubleMax") + public static void checkTestDoubleMax(double result) { + if (result != 42) { + throw new RuntimeException("Incorrect result: " + result); + } + } +} diff --git a/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java b/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java index 366b17786ad58..966985400192b 100644 --- a/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java +++ b/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java @@ -819,7 +819,12 @@ public class IRNode { public static final String MAX = PREFIX + "MAX" + POSTFIX; static { - beforeMatchingNameRegex(MAX, "Max(I|L)"); + beforeMatchingNameRegex(MAX, "Max(I|L|F|D)"); + } + + public static final String MAX_D = PREFIX + "MAX_D" + POSTFIX; + static { + beforeMatchingNameRegex(MAX_D, "MaxD"); } public static final String MAX_D_REDUCTION_REG = PREFIX + "MAX_D_REDUCTION_REG" + POSTFIX; @@ -832,6 +837,11 @@ public class IRNode { machOnlyNameRegex(MAX_D_REG, "maxD_reg"); } + public static final String MAX_F = PREFIX + "MAX_F" + POSTFIX; + static { + beforeMatchingNameRegex(MAX_F, "MaxF"); + } + public static final String MAX_F_REDUCTION_REG = PREFIX + "MAX_F_REDUCTION_REG" + POSTFIX; static { machOnlyNameRegex(MAX_F_REDUCTION_REG, "maxF_reduction_reg"); @@ -887,6 +897,11 @@ public class IRNode { beforeMatchingNameRegex(MIN, "Min(I|L)"); } + public static final String MIN_D = PREFIX + "MIN_D" + POSTFIX; + static { + beforeMatchingNameRegex(MIN_D, "MinD"); + } + public static final String MIN_D_REDUCTION_REG = PREFIX + "MIN_D_REDUCTION_REG" + POSTFIX; static { machOnlyNameRegex(MIN_D_REDUCTION_REG, "minD_reduction_reg"); @@ -897,6 +912,11 @@ public class IRNode { machOnlyNameRegex(MIN_D_REG, "minD_reg"); } + public static final String MIN_F = PREFIX + "MIN_F" + POSTFIX; + static { + beforeMatchingNameRegex(MIN_F, "MinF"); + } + public static final String MIN_F_REDUCTION_REG = PREFIX + "MIN_F_REDUCTION_REG" + POSTFIX; static { machOnlyNameRegex(MIN_F_REDUCTION_REG, "minF_reduction_reg"); diff --git a/test/hotspot/jtreg/compiler/vectorization/runner/BasicDoubleOpTest.java b/test/hotspot/jtreg/compiler/vectorization/runner/BasicDoubleOpTest.java index a3fcdbaa9b008..c1bef52a8b12d 100644 --- a/test/hotspot/jtreg/compiler/vectorization/runner/BasicDoubleOpTest.java +++ b/test/hotspot/jtreg/compiler/vectorization/runner/BasicDoubleOpTest.java @@ -240,7 +240,7 @@ public double[] vectorMax() { @Test @IR(applyIfCPUFeatureOr = {"asimd", "true", "avx", "true"}, - counts = {IRNode.MAX_VD, ">0"}) + counts = {IRNode.MAX_VD, "0"}) public double[] vectorMax_8322090() { double[] res = new double[SIZE]; for (int i = 0; i < SIZE; i++) { From e681e9b4d78c57d031e08e11dfa6250d1f52f5f5 Mon Sep 17 00:00:00 2001 From: Emanuel Peter <epeter@openjdk.org> Date: Wed, 24 Apr 2024 08:45:32 +0000 Subject: [PATCH 081/141] 8330819: C2 SuperWord: bad dominance after pre-loop limit adjustment with base that has CastLL after pre-loop Reviewed-by: chagedorn, kvn --- src/hotspot/share/opto/vectorization.cpp | 5 +- .../TestMemorySegmentMainLoopAlignment.java | 114 ++++++++++++++++++ 2 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 test/hotspot/jtreg/compiler/loopopts/superword/TestMemorySegmentMainLoopAlignment.java diff --git a/src/hotspot/share/opto/vectorization.cpp b/src/hotspot/share/opto/vectorization.cpp index 7197b3a58a5ae..9e6bc7e5939dc 100644 --- a/src/hotspot/share/opto/vectorization.cpp +++ b/src/hotspot/share/opto/vectorization.cpp @@ -461,7 +461,10 @@ VPointer::VPointer(const MemNode* mem, const VLoop& vloop, break; // stop looking at addp's } } - if (is_loop_member(adr)) { + if (!invariant(adr)) { + // The address must be invariant for the current loop. But if we are in a main-loop, + // it must also be invariant of the pre-loop, otherwise we cannot use this address + // for the pre-loop limit adjustment required for main-loop alignment. assert(!valid(), "adr is loop variant"); return; } diff --git a/test/hotspot/jtreg/compiler/loopopts/superword/TestMemorySegmentMainLoopAlignment.java b/test/hotspot/jtreg/compiler/loopopts/superword/TestMemorySegmentMainLoopAlignment.java new file mode 100644 index 0000000000000..ade91c680fc71 --- /dev/null +++ b/test/hotspot/jtreg/compiler/loopopts/superword/TestMemorySegmentMainLoopAlignment.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2024, 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 8330819 + * @summary Case where VPointer finds an "adr" CastX2P, which contains a CastLL, + * that has a ctrl after the pre-loop. This value cannot be used in the + * pre-loop limit for main-loop adjustment. + * @modules java.base/jdk.internal.misc + * @modules java.base/jdk.internal.util + * @run main/othervm -Xbatch compiler.loopopts.superword.TestMemorySegmentMainLoopAlignment + */ + +package compiler.loopopts.superword; + +import java.lang.foreign.*; +import jdk.internal.misc.Unsafe; +import jdk.internal.util.Preconditions; + +public class TestMemorySegmentMainLoopAlignment { + static final ValueLayout.OfInt ELEMENT_LAYOUT = ValueLayout.JAVA_INT.withByteAlignment(1); + static final Unsafe UNSAFE = Unsafe.getUnsafe(); + static long RANGE = 6400; + + // Type definition for the lambda + interface MSOp { + int apply(MemorySegment memory, long offset, int i); + } + + // Type definition for the lambda + interface MemoryUnsafeOp { + int apply(long base, long offset, int i); + } + + public static void main(String[] args) { + // Allocate some raw memory: + MemorySegment ms = Arena.ofAuto().allocate(6400, Integer.SIZE); + for (int i = 0; i < 10_000; i++) { + test1(ms, 0, TestMemorySegmentMainLoopAlignment::memorySegmentGet); + } + // Allocate some raw memory: + long base = UNSAFE.allocateMemory(6400); + for (int i = 0; i < 10_000; i++) { + test2(base, 0, TestMemorySegmentMainLoopAlignment::memoryUnsafeGet); + } + } + + // Somehow, it is necessary to pass this as a lambda + // the checkIndex inside the "get" method produces the CastLL, which eventually pins the index + // between the pre and main loop. + static int memorySegmentGet(MemorySegment ms, long o, int i) { + return ms.get(ELEMENT_LAYOUT, o + i * 4L); + } + + static int test1(MemorySegment a, long offset, MSOp f) { + // Constant size array size allows a known range for the array access/loop iv i. + int size = 16; + int[] res = new int[size]; + int sum = 0; + for (int i = 0; i < size; i++) { + // With inlining, this eventually becomes: + // sum += LoadI(MemorySegment / unsafe) + LoadI(array) + // and we attempt vectorization. + sum += f.apply(a, offset, i) + res[i]; + } + return sum; + } + + // Somehow, it is necessary to pass this as a lambda + static int memoryUnsafeGet(long base, long o, int i) { + long index = o + i * 4L; + // checkIndex -> CastLL: index >= 0. + // Together with the info about i (known range for phi), this CastLL floats up to + // the offset. Then we get adr = CastX2P(base + CastLL(offset)), where the CastLL + // is pinned between the pre and main loop. + Preconditions.checkIndex(index, RANGE, null); + return UNSAFE.getInt(base + index); + } + + static int test2(long base, long offset, MemoryUnsafeOp f) { + // Constant size array size allows a known range for the array access/loop iv i. + int size = 16; + int[] res = new int[size]; + int sum = 0; + for (int i = 0; i < size; i++) { + // With inlining, this eventually becomes: + // sum += LoadI(unsafe) + LoadI(array) + // and we attempt vectorization. + sum += f.apply(base, offset, i) + res[i]; + } + return sum; + } +} From 174d62652c69e811cf44ab64db575b13a848a728 Mon Sep 17 00:00:00 2001 From: Serguei Spitsyn <sspitsyn@openjdk.org> Date: Wed, 24 Apr 2024 09:02:02 +0000 Subject: [PATCH 082/141] 8328741: serviceability/jvmti/ObjectMonitorUsage/ObjectMonitorUsage.java failed with unexpected owner Reviewed-by: lmesnik, cjplummer --- .../ObjectMonitorUsage.java | 18 ++-- .../libObjectMonitorUsage.cpp | 84 ++----------------- .../SuspendResumeAll/libSuspendResumeAll.cpp | 6 +- test/lib/jdk/test/lib/jvmti/jvmti_common.hpp | 20 ++++- 4 files changed, 34 insertions(+), 94 deletions(-) diff --git a/test/hotspot/jtreg/serviceability/jvmti/ObjectMonitorUsage/ObjectMonitorUsage.java b/test/hotspot/jtreg/serviceability/jvmti/ObjectMonitorUsage/ObjectMonitorUsage.java index 891306a0c1128..bc9a0c5cabcc0 100644 --- a/test/hotspot/jtreg/serviceability/jvmti/ObjectMonitorUsage/ObjectMonitorUsage.java +++ b/test/hotspot/jtreg/serviceability/jvmti/ObjectMonitorUsage/ObjectMonitorUsage.java @@ -53,9 +53,9 @@ public class ObjectMonitorUsage { static Object lockCheck = new Object(); native static int getRes(); - native static int waitsToEnter(); - native static int waitsToBeNotified(); native static int setTestedMonitor(Object monitor); + native static void ensureBlockedOnEnter(Thread thread); + native static void ensureWaitingToBeNotified(Thread thread); native static void check(Object obj, Thread owner, int entryCount, int waiterCount, int notifyWaiterCount); @@ -87,10 +87,9 @@ static Thread[] startWaitingThreads(boolean isVirtual) { Thread[] threads = new Thread[NUMBER_OF_WAITING_THREADS]; for (int i = 0; i < NUMBER_OF_WAITING_THREADS; i++) { // the WaitingTask has to wait to be notified in lockCheck.wait() - threads[i] = startTask(i, new WaitingTask(), isVirtual, "Waiting"); - } - while (waitsToBeNotified() < NUMBER_OF_WAITING_THREADS) { - sleep(1); + Thread thread = startTask(i, new WaitingTask(), isVirtual, "Waiting"); + ensureWaitingToBeNotified(thread); + threads[i] = thread; } return threads; } @@ -99,10 +98,9 @@ static Thread[] startEnteringThreads(boolean isVirtual) { Thread[] threads = new Thread[NUMBER_OF_ENTERING_THREADS]; for (int i = 0; i < NUMBER_OF_ENTERING_THREADS; i++) { // the EnteringTask has to be blocked at the lockCheck enter - threads[i] = startTask(i, new EnteringTask(), isVirtual, "Entering"); - } - while (waitsToEnter() < NUMBER_OF_ENTERING_THREADS) { - sleep(1); + Thread thread = startTask(i, new EnteringTask(), isVirtual, "Entering"); + ensureBlockedOnEnter(thread); + threads[i] = thread; } return threads; } diff --git a/test/hotspot/jtreg/serviceability/jvmti/ObjectMonitorUsage/libObjectMonitorUsage.cpp b/test/hotspot/jtreg/serviceability/jvmti/ObjectMonitorUsage/libObjectMonitorUsage.cpp index 015f64452e8fc..8575ae454a985 100644 --- a/test/hotspot/jtreg/serviceability/jvmti/ObjectMonitorUsage/libObjectMonitorUsage.cpp +++ b/test/hotspot/jtreg/serviceability/jvmti/ObjectMonitorUsage/libObjectMonitorUsage.cpp @@ -32,11 +32,8 @@ extern "C" { #define STATUS_FAILED 2 static jvmtiEnv *jvmti = nullptr; -static jrawMonitorID event_lock = nullptr; static jint result = PASSED; static int check_idx = 0; -static int waits_to_enter = 0; -static int waits_to_be_notified = 0; static jobject tested_monitor = nullptr; static bool is_tested_monitor(JNIEnv *jni, jobject monitor) { @@ -53,47 +50,10 @@ static void log_event(jvmtiEnv *jvmti, JNIEnv *jni, jthread thread, deallocate(jvmti, jni, (void*)tname); } -JNIEXPORT void JNICALL -MonitorContendedEnter(jvmtiEnv *jvmti, JNIEnv *jni, jthread thread, jobject monitor) { - RawMonitorLocker rml(jvmti, jni, event_lock); - if (is_tested_monitor(jni, monitor)) { - waits_to_enter++; - log_event(jvmti, jni, thread, "MonitorContendedEnter", waits_to_enter); - } -} - -JNIEXPORT void JNICALL -MonitorContendedEntered(jvmtiEnv *jvmti, JNIEnv *jni, jthread thread, jobject monitor) { - RawMonitorLocker rml(jvmti, jni, event_lock); - if (is_tested_monitor(jni, monitor)) { - waits_to_enter--; - log_event(jvmti, jni, thread, "MonitorContendedEntered", waits_to_enter); - } -} - -JNIEXPORT void JNICALL -MonitorWait(jvmtiEnv *jvmti, JNIEnv *jni, jthread thread, jobject monitor, jlong timeout) { - RawMonitorLocker rml(jvmti, jni, event_lock); - if (is_tested_monitor(jni, monitor)) { - waits_to_be_notified++; - log_event(jvmti, jni, thread, "MonitorWait", waits_to_be_notified); - } -} - -JNIEXPORT void JNICALL -MonitorWaited(jvmtiEnv *jvmti, JNIEnv *jni, jthread thread, jobject monitor, jboolean timed_out) { - RawMonitorLocker rml(jvmti, jni, event_lock); - if (is_tested_monitor(jni, monitor)) { - waits_to_be_notified--; - log_event(jvmti, jni, thread, "MonitorWaited", waits_to_be_notified); - } -} - jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) { jint res; jvmtiError err; jvmtiCapabilities caps; - jvmtiEventCallbacks callbacks; res = jvm->GetEnv((void **) &jvmti, JVMTI_VERSION_1_1); if (res != JNI_OK || jvmti == nullptr) { @@ -116,17 +76,6 @@ jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) { LOG("Warning: Monitor events are not implemented\n"); return JNI_ERR; } - memset(&callbacks, 0, sizeof(callbacks)); - callbacks.MonitorContendedEnter = &MonitorContendedEnter; - callbacks.MonitorContendedEntered = &MonitorContendedEntered; - callbacks.MonitorWait = &MonitorWait; - callbacks.MonitorWaited = &MonitorWaited; - - err = jvmti->SetEventCallbacks(&callbacks, sizeof(jvmtiEventCallbacks)); - check_jvmti_error(err, "Agent_Initialize: error in JVMTI SetEventCallbacks"); - - event_lock = create_raw_monitor(jvmti, "Events Monitor"); - return JNI_OK; } @@ -216,41 +165,20 @@ Java_ObjectMonitorUsage_check(JNIEnv *jni, jclass cls, jobject obj, jthread owne JNIEXPORT void JNICALL Java_ObjectMonitorUsage_setTestedMonitor(JNIEnv *jni, jclass cls, jobject monitor) { - jvmtiError err; - jvmtiEventMode event_mode = (monitor != nullptr) ? JVMTI_ENABLE : JVMTI_DISABLE; - - RawMonitorLocker rml(jvmti, jni, event_lock); - if (tested_monitor != nullptr) { jni->DeleteGlobalRef(tested_monitor); } tested_monitor = (monitor != nullptr) ? jni->NewGlobalRef(monitor) : nullptr; - waits_to_enter = 0; - waits_to_be_notified = 0; - - err = jvmti->SetEventNotificationMode(event_mode, JVMTI_EVENT_MONITOR_CONTENDED_ENTER, nullptr); - check_jvmti_status(jni, err, "setTestedMonitor: error in JVMTI SetEventNotificationMode #1"); - - err = jvmti->SetEventNotificationMode(event_mode, JVMTI_EVENT_MONITOR_CONTENDED_ENTERED, nullptr); - check_jvmti_status(jni, err, "setTestedMonitor: error in JVMTI SetEventNotificationMode #2"); - - err = jvmti->SetEventNotificationMode(event_mode, JVMTI_EVENT_MONITOR_WAIT, nullptr); - check_jvmti_status(jni, err, "setTestedMonitor: error in JVMTI SetEventNotificationMode #3"); - - err = jvmti->SetEventNotificationMode(event_mode, JVMTI_EVENT_MONITOR_WAITED, nullptr); - check_jvmti_status(jni, err, "setTestedMonitor: error in JVMTI SetEventNotificationMode #4"); } -JNIEXPORT jint JNICALL -Java_ObjectMonitorUsage_waitsToEnter(JNIEnv *jni, jclass cls) { - RawMonitorLocker rml(jvmti, jni, event_lock); - return waits_to_enter; +JNIEXPORT void JNICALL +Java_ObjectMonitorUsage_ensureBlockedOnEnter(JNIEnv *jni, jclass cls, jthread thread) { + wait_for_state(jvmti, jni, thread, JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER); } -JNIEXPORT jint JNICALL -Java_ObjectMonitorUsage_waitsToBeNotified(JNIEnv *jni, jclass cls) { - RawMonitorLocker rml(jvmti, jni, event_lock); - return waits_to_be_notified; +JNIEXPORT void JNICALL +Java_ObjectMonitorUsage_ensureWaitingToBeNotified(JNIEnv *jni, jclass cls, jthread thread) { + wait_for_state(jvmti, jni, thread, JVMTI_THREAD_STATE_WAITING_INDEFINITELY); } JNIEXPORT jint JNICALL diff --git a/test/hotspot/jtreg/serviceability/jvmti/vthread/SuspendResumeAll/libSuspendResumeAll.cpp b/test/hotspot/jtreg/serviceability/jvmti/vthread/SuspendResumeAll/libSuspendResumeAll.cpp index e53484b575b7c..bea9a9c19a990 100644 --- a/test/hotspot/jtreg/serviceability/jvmti/vthread/SuspendResumeAll/libSuspendResumeAll.cpp +++ b/test/hotspot/jtreg/serviceability/jvmti/vthread/SuspendResumeAll/libSuspendResumeAll.cpp @@ -216,11 +216,7 @@ test_vthread_resume_all(JNIEnv* jni, const jthread* thread_list, int suspend_mas check_jvmti_status(jni, err, "test_vthread_resume_all: error in JVMTI ResumeAllVirtualThreads"); // wait a second to give the breakpoints a chance to be hit. -#ifdef WINDOWS - Sleep(1000); -#else - sleep(1); -#endif + sleep_sec(1); for (int idx = 0; idx < EXCLUDE_CNT; idx++) { // Disable Breakpoint events on excluded thread diff --git a/test/lib/jdk/test/lib/jvmti/jvmti_common.hpp b/test/lib/jdk/test/lib/jvmti/jvmti_common.hpp index 9fdd4cf4cb8ad..693baf98d1fa5 100644 --- a/test/lib/jdk/test/lib/jvmti/jvmti_common.hpp +++ b/test/lib/jdk/test/lib/jvmti/jvmti_common.hpp @@ -56,7 +56,7 @@ #define COMPLAIN LOG - +void sleep_ms(int millis); const char* TranslateState(jint flags); const char* TranslateError(jvmtiError err); @@ -380,6 +380,24 @@ find_method(jvmtiEnv *jvmti, JNIEnv *jni, jclass klass, const char* mname) { return method; } +// Wait for target thread to reach the required JVMTI thread state. +// The state jint bitmask is returned by the JVMTI GetThreadState. +// Some examples are: +// - JVMTI_THREAD_STATE_WAITING +// - JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER +// - JVMTI_THREAD_STATE_SLEEPING +static void +wait_for_state(jvmtiEnv *jvmti, JNIEnv *jni, jthread thread, jint exp_state) { + while (true) { + // Allow a bitmask to designate expected thread state. E.g., if two bits are expected + // than check they both are present in the state mask returned by JVMTI GetThreadState. + if ((get_thread_state(jvmti, jni, thread) & exp_state) == exp_state) { + break; + } + sleep_ms(100); + } +} + #define MAX_FRAME_COUNT_PRINT_STACK_TRACE 200 static void From 7bb59dc8da0c61c5da5c3aab5d56a6e4880001ce Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang <ayang@openjdk.org> Date: Wed, 24 Apr 2024 09:44:26 +0000 Subject: [PATCH 083/141] 8330670: Obsolete ScavengeBeforeFullGC Reviewed-by: stefank, tschatzl --- src/hotspot/share/gc/parallel/psParallelCompact.cpp | 4 ---- src/hotspot/share/gc/serial/serialHeap.cpp | 2 +- src/hotspot/share/gc/shared/gcArguments.cpp | 4 ---- src/hotspot/share/gc/shared/gc_globals.hpp | 3 --- src/hotspot/share/gc/z/zDriver.cpp | 3 +-- src/hotspot/share/runtime/arguments.cpp | 10 +--------- .../gc/gctests/WeakReference/weak006/weak006.java | 2 +- 7 files changed, 4 insertions(+), 24 deletions(-) diff --git a/src/hotspot/share/gc/parallel/psParallelCompact.cpp b/src/hotspot/share/gc/parallel/psParallelCompact.cpp index 30b73ad3e56ef..8ac16e059b1ea 100644 --- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp +++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp @@ -1273,10 +1273,6 @@ bool PSParallelCompact::invoke(bool maximum_heap_compaction) { IsGCActiveMark mark; - if (ScavengeBeforeFullGC) { - PSScavenge::invoke_no_policy(); - } - const bool clear_all_soft_refs = heap->soft_ref_policy()->should_clear_all_soft_refs(); diff --git a/src/hotspot/share/gc/serial/serialHeap.cpp b/src/hotspot/share/gc/serial/serialHeap.cpp index 44fedd3f94063..efcc5307e9fef 100644 --- a/src/hotspot/share/gc/serial/serialHeap.cpp +++ b/src/hotspot/share/gc/serial/serialHeap.cpp @@ -498,7 +498,7 @@ void SerialHeap::do_collection(bool full, IsGCActiveMark active_gc_mark; bool complete = full && (max_generation == OldGen); - bool old_collects_young = complete && !ScavengeBeforeFullGC; + bool old_collects_young = complete; bool do_young_collection = !old_collects_young && _young_gen->should_collect(full, size, is_tlab); const PreGenGCValues pre_gc_values = get_pre_gc_values(); diff --git a/src/hotspot/share/gc/shared/gcArguments.cpp b/src/hotspot/share/gc/shared/gcArguments.cpp index e9ab856a27499..9736c0f7fdcab 100644 --- a/src/hotspot/share/gc/shared/gcArguments.cpp +++ b/src/hotspot/share/gc/shared/gcArguments.cpp @@ -40,10 +40,6 @@ void GCArguments::initialize() { MarkSweepAlwaysCompactCount = 1; // Move objects every gc. } - if (!UseParallelGC && FLAG_IS_DEFAULT(ScavengeBeforeFullGC)) { - FLAG_SET_DEFAULT(ScavengeBeforeFullGC, false); - } - if (GCTimeLimit == 100) { // Turn off gc-overhead-limit-exceeded checks FLAG_SET_DEFAULT(UseGCOverheadLimit, false); diff --git a/src/hotspot/share/gc/shared/gc_globals.hpp b/src/hotspot/share/gc/shared/gc_globals.hpp index a3a1b03dfb988..af735a865dcb4 100644 --- a/src/hotspot/share/gc/shared/gc_globals.hpp +++ b/src/hotspot/share/gc/shared/gc_globals.hpp @@ -154,9 +154,6 @@ "Never tenure objects in eden, may tenure on overflow " \ "(ParallelGC only)") \ \ - product(bool, ScavengeBeforeFullGC, true, \ - "Scavenge youngest generation before each full GC.") \ - \ product(bool, ExplicitGCInvokesConcurrent, false, \ "A System.gc() request invokes a concurrent collection; " \ "(effective only when using concurrent collectors)") \ diff --git a/src/hotspot/share/gc/z/zDriver.cpp b/src/hotspot/share/gc/z/zDriver.cpp index f0da73a7f6cc6..3836f330142f1 100644 --- a/src/hotspot/share/gc/z/zDriver.cpp +++ b/src/hotspot/share/gc/z/zDriver.cpp @@ -310,8 +310,7 @@ static bool should_preclean_young(GCCause::Cause cause) { // catch that above and perform young gen pre-cleaning. assert(!should_clear_soft_references(cause), "Clearing soft references without pre-cleaning young gen"); - // Preclean young if implied by configuration - return ScavengeBeforeFullGC; + return false; } ZDriverMajor::ZDriverMajor() diff --git a/src/hotspot/share/runtime/arguments.cpp b/src/hotspot/share/runtime/arguments.cpp index 1091e4fab254c..802ddee756f2b 100644 --- a/src/hotspot/share/runtime/arguments.cpp +++ b/src/hotspot/share/runtime/arguments.cpp @@ -541,6 +541,7 @@ static SpecialFlag const special_jvm_flags[] = { { "ParallelOldDeadWoodLimiterMean", JDK_Version::undefined(), JDK_Version::jdk(23), JDK_Version::jdk(24) }, { "ParallelOldDeadWoodLimiterStdDev", JDK_Version::undefined(), JDK_Version::jdk(23), JDK_Version::jdk(24) }, { "UseNeon", JDK_Version::undefined(), JDK_Version::jdk(23), JDK_Version::jdk(24) }, + { "ScavengeBeforeFullGC", JDK_Version::undefined(), JDK_Version::jdk(23), JDK_Version::jdk(24) }, #ifdef ASSERT { "DummyObsoleteTestFlag", JDK_Version::undefined(), JDK_Version::jdk(18), JDK_Version::undefined() }, #endif @@ -1715,11 +1716,6 @@ jint Arguments::set_aggressive_heap_flags() { return JNI_EINVAL; } - // This appears to improve mutator locality - if (FLAG_SET_CMDLINE(ScavengeBeforeFullGC, false) != JVMFlag::SUCCESS) { - return JNI_EINVAL; - } - return JNI_OK; } @@ -2735,10 +2731,6 @@ jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs* args, bool* patch_m if (FLAG_SET_CMDLINE(FullGCALot, true) != JVMFlag::SUCCESS) { return JNI_EINVAL; } - // disable scavenge before parallel mark-compact - if (FLAG_SET_CMDLINE(ScavengeBeforeFullGC, false) != JVMFlag::SUCCESS) { - return JNI_EINVAL; - } #endif #if !INCLUDE_MANAGEMENT } else if (match_option(option, "-XX:+ManagementServer")) { diff --git a/test/hotspot/jtreg/vmTestbase/gc/gctests/WeakReference/weak006/weak006.java b/test/hotspot/jtreg/vmTestbase/gc/gctests/WeakReference/weak006/weak006.java index 7c0a2e30607d8..82fda0a3bd39e 100644 --- a/test/hotspot/jtreg/vmTestbase/gc/gctests/WeakReference/weak006/weak006.java +++ b/test/hotspot/jtreg/vmTestbase/gc/gctests/WeakReference/weak006/weak006.java @@ -32,7 +32,7 @@ * /test/lib * @build jdk.test.whitebox.WhiteBox * @run driver jdk.test.lib.helpers.ClassFileInstaller jdk.test.whitebox.WhiteBox - * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+IgnoreUnrecognizedVMOptions -XX:-ScavengeBeforeFullGC gc.gctests.WeakReference.weak006.weak006 -t 1 + * @run main/othervm -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:+IgnoreUnrecognizedVMOptions gc.gctests.WeakReference.weak006.weak006 -t 1 */ package gc.gctests.WeakReference.weak006; From 2bb5cf5f33337b2cc40aca3bdd36400dc4af5723 Mon Sep 17 00:00:00 2001 From: Guoxiong Li <gli@openjdk.org> Date: Wed, 24 Apr 2024 11:41:21 +0000 Subject: [PATCH 084/141] 8330155: Serial: Remove TenuredSpace Reviewed-by: ayang, cjplummer, tschatzl --- .../share/gc/g1/g1CollectionSetChooser.cpp | 4 +- src/hotspot/share/gc/serial/cardTableRS.cpp | 2 +- src/hotspot/share/gc/serial/cardTableRS.hpp | 1 - .../share/gc/serial/defNewGeneration.cpp | 2 +- src/hotspot/share/gc/serial/generation.cpp | 4 +- src/hotspot/share/gc/serial/generation.hpp | 2 +- src/hotspot/share/gc/serial/serialFullGC.cpp | 2 +- .../share/gc/serial/serialHeap.inline.hpp | 1 + .../share/gc/serial/tenuredGeneration.cpp | 5 +- .../share/gc/serial/tenuredGeneration.hpp | 4 +- .../gc/serial/tenuredGeneration.inline.hpp | 18 ++++-- .../share/gc/serial/vmStructs_serial.hpp | 5 +- src/hotspot/share/gc/shared/cardTable.cpp | 2 +- .../share/gc/shared/cardTableBarrierSet.cpp | 2 +- src/hotspot/share/gc/shared/space.cpp | 10 ---- src/hotspot/share/gc/shared/space.hpp | 21 ------- src/hotspot/share/gc/shared/space.inline.hpp | 56 ------------------- .../share/gc/shared/spaceDecorator.cpp | 4 +- .../gc/shenandoah/shenandoahHeapRegion.cpp | 4 +- .../jvm/hotspot/gc/shared/TenuredSpace.java | 35 ------------ .../jtreg/serviceability/sa/ClhsdbField.java | 2 +- 21 files changed, 35 insertions(+), 151 deletions(-) delete mode 100644 src/hotspot/share/gc/shared/space.inline.hpp delete mode 100644 src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/TenuredSpace.java diff --git a/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp b/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp index ca7f2b373985b..92a342ec7579d 100644 --- a/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp +++ b/src/hotspot/share/gc/g1/g1CollectionSetChooser.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2001, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2001, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,7 +27,7 @@ #include "gc/g1/g1CollectionSetCandidates.hpp" #include "gc/g1/g1CollectionSetChooser.hpp" #include "gc/g1/g1HeapRegionRemSet.inline.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "runtime/atomic.hpp" #include "utilities/quickSort.hpp" diff --git a/src/hotspot/share/gc/serial/cardTableRS.cpp b/src/hotspot/share/gc/serial/cardTableRS.cpp index 2ed384f124fd7..1c1781e280efa 100644 --- a/src/hotspot/share/gc/serial/cardTableRS.cpp +++ b/src/hotspot/share/gc/serial/cardTableRS.cpp @@ -27,7 +27,7 @@ #include "gc/serial/cardTableRS.hpp" #include "gc/serial/generation.hpp" #include "gc/serial/serialHeap.inline.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "memory/iterator.inline.hpp" #include "utilities/align.hpp" diff --git a/src/hotspot/share/gc/serial/cardTableRS.hpp b/src/hotspot/share/gc/serial/cardTableRS.hpp index ee4ac31bf5f5e..b4231dbc4c79d 100644 --- a/src/hotspot/share/gc/serial/cardTableRS.hpp +++ b/src/hotspot/share/gc/serial/cardTableRS.hpp @@ -31,7 +31,6 @@ class OldGenScanClosure; class TenuredGeneration; -class TenuredSpace; // This RemSet uses a card table both as shared data structure // for a mod ref barrier set and for the rem set information. diff --git a/src/hotspot/share/gc/serial/defNewGeneration.cpp b/src/hotspot/share/gc/serial/defNewGeneration.cpp index b0641c7d69f6e..43c8be36148cf 100644 --- a/src/hotspot/share/gc/serial/defNewGeneration.cpp +++ b/src/hotspot/share/gc/serial/defNewGeneration.cpp @@ -42,7 +42,7 @@ #include "gc/shared/preservedMarks.inline.hpp" #include "gc/shared/referencePolicy.hpp" #include "gc/shared/referenceProcessorPhaseTimes.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "gc/shared/spaceDecorator.inline.hpp" #include "gc/shared/strongRootsScope.hpp" #include "gc/shared/weakProcessor.hpp" diff --git a/src/hotspot/share/gc/serial/generation.cpp b/src/hotspot/share/gc/serial/generation.cpp index c1c195aaf38bd..da5a54367f03a 100644 --- a/src/hotspot/share/gc/serial/generation.cpp +++ b/src/hotspot/share/gc/serial/generation.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, 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 @@ -30,7 +30,7 @@ #include "gc/shared/gcLocker.hpp" #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTrace.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "gc/shared/spaceDecorator.inline.hpp" #include "logging/log.hpp" #include "memory/allocation.inline.hpp" diff --git a/src/hotspot/share/gc/serial/generation.hpp b/src/hotspot/share/gc/serial/generation.hpp index 70978f358797a..c1a88a64b2aef 100644 --- a/src/hotspot/share/gc/serial/generation.hpp +++ b/src/hotspot/share/gc/serial/generation.hpp @@ -27,7 +27,7 @@ #include "gc/shared/collectorCounters.hpp" #include "gc/shared/referenceProcessor.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "logging/log.hpp" #include "memory/allocation.hpp" #include "memory/memRegion.hpp" diff --git a/src/hotspot/share/gc/serial/serialFullGC.cpp b/src/hotspot/share/gc/serial/serialFullGC.cpp index 88284fd63c054..514a6e6ab74dd 100644 --- a/src/hotspot/share/gc/serial/serialFullGC.cpp +++ b/src/hotspot/share/gc/serial/serialFullGC.cpp @@ -52,7 +52,7 @@ #include "gc/shared/preservedMarks.inline.hpp" #include "gc/shared/referencePolicy.hpp" #include "gc/shared/referenceProcessorPhaseTimes.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "gc/shared/strongRootsScope.hpp" #include "gc/shared/weakProcessor.hpp" #include "memory/iterator.inline.hpp" diff --git a/src/hotspot/share/gc/serial/serialHeap.inline.hpp b/src/hotspot/share/gc/serial/serialHeap.inline.hpp index 3279f24881e54..d43f95cddcf74 100644 --- a/src/hotspot/share/gc/serial/serialHeap.inline.hpp +++ b/src/hotspot/share/gc/serial/serialHeap.inline.hpp @@ -28,6 +28,7 @@ #include "gc/serial/serialHeap.hpp" #include "gc/serial/tenuredGeneration.inline.hpp" +#include "oops/oop.inline.hpp" class ScavengeHelper { DefNewGeneration* _young_gen; diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index 3e9dde0942d88..35dc84773aab2 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -33,6 +33,7 @@ #include "gc/shared/gcTimer.hpp" #include "gc/shared/gcTrace.hpp" #include "gc/shared/space.hpp" +#include "gc/shared/spaceDecorator.hpp" #include "logging/log.hpp" #include "memory/allocation.inline.hpp" #include "oops/oop.inline.hpp" @@ -316,7 +317,8 @@ TenuredGeneration::TenuredGeneration(ReservedSpace rs, _used_at_prologue = 0; HeapWord* bottom = (HeapWord*) _virtual_space.low(); HeapWord* end = (HeapWord*) _virtual_space.high(); - _the_space = new TenuredSpace(_bts, MemRegion(bottom, end)); + _the_space = new ContiguousSpace(); + _the_space->initialize(MemRegion(bottom, end), SpaceDecorator::Clear, SpaceDecorator::Mangle); // If we don't shrink the heap in steps, '_shrink_factor' is always 100%. _shrink_factor = ShrinkHeapInSteps ? 0 : 100; _capacity_at_prologue = 0; @@ -495,7 +497,6 @@ void TenuredGeneration::object_iterate(ObjectClosure* blk) { void TenuredGeneration::complete_loaded_archive_space(MemRegion archive_space) { // Create the BOT for the archive space. - TenuredSpace* space = _the_space; HeapWord* start = archive_space.start(); while (start < archive_space.end()) { size_t word_size = cast_to_oop(start)->size();; diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.hpp index bb34ad8d2c282..cc83f129b68c8 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.hpp @@ -65,7 +65,7 @@ class TenuredGeneration: public Generation { void assert_correct_size_change_locking(); - TenuredSpace* _the_space; // Actual space holding objects + ContiguousSpace* _the_space; // Actual space holding objects HeapWord* _saved_mark_word; GenerationCounters* _gen_counters; @@ -88,7 +88,7 @@ class TenuredGeneration: public Generation { public: void compute_new_size(); - TenuredSpace* space() const { return _the_space; } + ContiguousSpace* space() const { return _the_space; } HeapWord* saved_mark_word() const { return _saved_mark_word; } // Grow generation with specified size (returns false if unable to grow) diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp index 253a72d3c28f4..955f7b395ddf5 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.inline.hpp @@ -27,7 +27,7 @@ #include "gc/serial/tenuredGeneration.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" inline size_t TenuredGeneration::capacity() const { return space()->capacity(); @@ -50,15 +50,23 @@ inline void TenuredGeneration::update_for_block(HeapWord* start, HeapWord* end) } HeapWord* TenuredGeneration::allocate(size_t word_size, - bool is_tlab) { + bool is_tlab) { assert(!is_tlab, "TenuredGeneration does not support TLAB allocation"); - return _the_space->allocate(word_size); + HeapWord* res = _the_space->allocate(word_size); + if (res != nullptr) { + _bts->update_for_block(res, res + word_size); + } + return res; } HeapWord* TenuredGeneration::par_allocate(size_t word_size, - bool is_tlab) { + bool is_tlab) { assert(!is_tlab, "TenuredGeneration does not support TLAB allocation"); - return _the_space->par_allocate(word_size); + HeapWord* res = _the_space->par_allocate(word_size); + if (res != nullptr) { + _bts->update_for_block(res, res + word_size); + } + return res; } #endif // SHARE_GC_SERIAL_TENUREDGENERATION_INLINE_HPP diff --git a/src/hotspot/share/gc/serial/vmStructs_serial.hpp b/src/hotspot/share/gc/serial/vmStructs_serial.hpp index d1e29a426325c..e5ce220195c99 100644 --- a/src/hotspot/share/gc/serial/vmStructs_serial.hpp +++ b/src/hotspot/share/gc/serial/vmStructs_serial.hpp @@ -47,7 +47,7 @@ nonstatic_field(TenuredGeneration, _capacity_at_prologue, size_t) \ nonstatic_field(TenuredGeneration, _used_at_prologue, size_t) \ nonstatic_field(TenuredGeneration, _min_heap_delta_bytes, size_t) \ - nonstatic_field(TenuredGeneration, _the_space, TenuredSpace*) \ + nonstatic_field(TenuredGeneration, _the_space, ContiguousSpace*) \ \ nonstatic_field(DefNewGeneration, _old_gen, TenuredGeneration*) \ nonstatic_field(DefNewGeneration, _tenuring_threshold, uint) \ @@ -60,8 +60,6 @@ nonstatic_field(SerialBlockOffsetTable, _vs, VirtualSpace) \ nonstatic_field(SerialBlockOffsetTable, _offset_base, u_char*) \ \ - nonstatic_field(TenuredSpace, _offsets, SerialBlockOffsetTable*) \ - \ nonstatic_field(SerialHeap, _young_gen, DefNewGeneration*) \ nonstatic_field(SerialHeap, _old_gen, TenuredGeneration*) \ @@ -72,7 +70,6 @@ declare_toplevel_type(Generation::StatRecord) \ declare_type(SerialHeap, CollectedHeap) \ declare_type(TenuredGeneration, Generation) \ - declare_type(TenuredSpace, ContiguousSpace) \ \ declare_type(DefNewGeneration, Generation) \ declare_type(CardTableRS, CardTable) \ diff --git a/src/hotspot/share/gc/shared/cardTable.cpp b/src/hotspot/share/gc/shared/cardTable.cpp index 1095defaf9fc5..95f7058f4e4ee 100644 --- a/src/hotspot/share/gc/shared/cardTable.cpp +++ b/src/hotspot/share/gc/shared/cardTable.cpp @@ -27,7 +27,7 @@ #include "gc/shared/collectedHeap.hpp" #include "gc/shared/gcLogPrecious.hpp" #include "gc/shared/gc_globals.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "logging/log.hpp" #include "memory/virtualspace.hpp" #include "nmt/memTracker.hpp" diff --git a/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp b/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp index 1d4c4775b33f7..1277cd9929326 100644 --- a/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp +++ b/src/hotspot/share/gc/shared/cardTableBarrierSet.cpp @@ -28,7 +28,7 @@ #include "gc/shared/cardTableBarrierSet.inline.hpp" #include "gc/shared/cardTableBarrierSetAssembler.hpp" #include "gc/shared/collectedHeap.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "logging/log.hpp" #include "memory/virtualspace.hpp" #include "nmt/memTracker.hpp" diff --git a/src/hotspot/share/gc/shared/space.cpp b/src/hotspot/share/gc/shared/space.cpp index e1ef2e984e2f7..43e4a03ca11f9 100644 --- a/src/hotspot/share/gc/shared/space.cpp +++ b/src/hotspot/share/gc/shared/space.cpp @@ -27,7 +27,6 @@ #include "classfile/vmSymbols.hpp" #include "gc/shared/collectedHeap.inline.hpp" #include "gc/shared/space.hpp" -#include "gc/shared/space.inline.hpp" #include "gc/shared/spaceDecorator.inline.hpp" #include "memory/iterator.inline.hpp" #include "memory/universe.hpp" @@ -168,12 +167,3 @@ HeapWord* ContiguousSpace::allocate(size_t size) { HeapWord* ContiguousSpace::par_allocate(size_t size) { return par_allocate_impl(size); } - -#if INCLUDE_SERIALGC -TenuredSpace::TenuredSpace(SerialBlockOffsetTable* offsets, - MemRegion mr) : - _offsets(offsets) -{ - initialize(mr, SpaceDecorator::Clear, SpaceDecorator::Mangle); -} -#endif // INCLUDE_SERIALGC diff --git a/src/hotspot/share/gc/shared/space.hpp b/src/hotspot/share/gc/shared/space.hpp index 3b30a557f3c5c..23715ccd9dc08 100644 --- a/src/hotspot/share/gc/shared/space.hpp +++ b/src/hotspot/share/gc/shared/space.hpp @@ -161,25 +161,4 @@ class ContiguousSpace: public CHeapObj<mtGC> { void verify() const; }; -#if INCLUDE_SERIALGC - -// Class TenuredSpace is used by TenuredGeneration; it supports an efficient -// "block_start" operation via a SerialBlockOffsetTable. - -class TenuredSpace: public ContiguousSpace { - friend class VMStructs; - protected: - SerialBlockOffsetTable* _offsets; - - public: - // Constructor - TenuredSpace(SerialBlockOffsetTable* offsets, - MemRegion mr); - - // Add offset table update. - inline HeapWord* allocate(size_t word_size) override; - inline HeapWord* par_allocate(size_t word_size) override; -}; -#endif //INCLUDE_SERIALGC - #endif // SHARE_GC_SHARED_SPACE_HPP diff --git a/src/hotspot/share/gc/shared/space.inline.hpp b/src/hotspot/share/gc/shared/space.inline.hpp deleted file mode 100644 index fa88be9aa51d8..0000000000000 --- a/src/hotspot/share/gc/shared/space.inline.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2000, 2024, 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. - * - */ - -#ifndef SHARE_GC_SHARED_SPACE_INLINE_HPP -#define SHARE_GC_SHARED_SPACE_INLINE_HPP - -#include "gc/shared/space.hpp" - -#include "gc/shared/collectedHeap.hpp" -#include "gc/shared/spaceDecorator.hpp" -#include "oops/oop.inline.hpp" -#include "oops/oopsHierarchy.hpp" -#include "runtime/prefetch.inline.hpp" -#include "runtime/safepoint.hpp" - -#if INCLUDE_SERIALGC -inline HeapWord* TenuredSpace::allocate(size_t size) { - HeapWord* res = ContiguousSpace::allocate(size); - if (res != nullptr) { - _offsets->update_for_block(res, res + size); - } - return res; -} - -inline HeapWord* TenuredSpace::par_allocate(size_t size) { - HeapWord* res = ContiguousSpace::par_allocate(size); - if (res != nullptr) { - _offsets->update_for_block(res, res + size); - } - return res; -} - -#endif // INCLUDE_SERIALGC - -#endif // SHARE_GC_SHARED_SPACE_INLINE_HPP diff --git a/src/hotspot/share/gc/shared/spaceDecorator.cpp b/src/hotspot/share/gc/shared/spaceDecorator.cpp index 0749108400b3c..69ffbf5156196 100644 --- a/src/hotspot/share/gc/shared/spaceDecorator.cpp +++ b/src/hotspot/share/gc/shared/spaceDecorator.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2002, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ #include "precompiled.hpp" #include "gc/parallel/mutableSpace.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "gc/shared/spaceDecorator.inline.hpp" #include "logging/log.hpp" #include "utilities/copy.hpp" diff --git a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp index a46c7edc3482a..8a94b20670a9f 100644 --- a/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp +++ b/src/hotspot/share/gc/shenandoah/shenandoahHeapRegion.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013, 2019, Red Hat, Inc. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * @@ -24,7 +24,7 @@ */ #include "precompiled.hpp" -#include "gc/shared/space.inline.hpp" +#include "gc/shared/space.hpp" #include "gc/shared/tlab_globals.hpp" #include "gc/shenandoah/shenandoahHeapRegionSet.inline.hpp" #include "gc/shenandoah/shenandoahHeap.inline.hpp" diff --git a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/TenuredSpace.java b/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/TenuredSpace.java deleted file mode 100644 index 02d855822dab9..0000000000000 --- a/src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/gc/shared/TenuredSpace.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - * - */ - -package sun.jvm.hotspot.gc.shared; - -import sun.jvm.hotspot.debugger.*; - -/** No additional functionality for now */ - -public class TenuredSpace extends ContiguousSpace { - public TenuredSpace(Address addr) { - super(addr); - } -} diff --git a/test/hotspot/jtreg/serviceability/sa/ClhsdbField.java b/test/hotspot/jtreg/serviceability/sa/ClhsdbField.java index 884f521a02fcc..2ed557f8e94eb 100644 --- a/test/hotspot/jtreg/serviceability/sa/ClhsdbField.java +++ b/test/hotspot/jtreg/serviceability/sa/ClhsdbField.java @@ -56,7 +56,7 @@ public static void main(String[] args) throws Exception { "field InstanceKlass _constants ConstantPool*", "field Klass _name Symbol*", "field JavaThread _osthread OSThread*", - "field TenuredGeneration _the_space TenuredSpace*", + "field TenuredGeneration _the_space ContiguousSpace*", "field VirtualSpace _low_boundary char*", "field MethodCounters _backedge_counter InvocationCounter", "field nmethod _entry_bci int", From 15190816f704f2e8681bc3e2d74832828a574106 Mon Sep 17 00:00:00 2001 From: Serguei Spitsyn <sspitsyn@openjdk.org> Date: Wed, 24 Apr 2024 11:43:49 +0000 Subject: [PATCH 085/141] 8330303: Crash: assert(_target_jt == nullptr || _target_jt->vthread() == target_h()) failed Reviewed-by: pchilanomate, cjplummer, lmesnik --- src/hotspot/share/prims/jvmtiEnvBase.cpp | 4 +++- src/hotspot/share/prims/jvmtiEnvBase.hpp | 8 ++++++-- src/hotspot/share/prims/jvmtiEnvThreadState.cpp | 3 ++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/hotspot/share/prims/jvmtiEnvBase.cpp b/src/hotspot/share/prims/jvmtiEnvBase.cpp index 778cc17ffe06b..4ed01df0b3d80 100644 --- a/src/hotspot/share/prims/jvmtiEnvBase.cpp +++ b/src/hotspot/share/prims/jvmtiEnvBase.cpp @@ -2076,7 +2076,9 @@ GetSingleStackTraceClosure::do_thread(Thread *target) { void GetSingleStackTraceClosure::do_vthread(Handle target_h) { - assert(_target_jt == nullptr || _target_jt->vthread() == target_h(), "sanity check"); + // Use jvmti_vthread() instead of vthread() as target could have temporarily changed + // identity to carrier thread (see VirtualThread.switchToCarrierThread). + assert(_target_jt == nullptr || _target_jt->jvmti_vthread() == target_h(), "sanity check"); doit(); } diff --git a/src/hotspot/share/prims/jvmtiEnvBase.hpp b/src/hotspot/share/prims/jvmtiEnvBase.hpp index 57fa059b2d8e2..00de17a8a6b15 100644 --- a/src/hotspot/share/prims/jvmtiEnvBase.hpp +++ b/src/hotspot/share/prims/jvmtiEnvBase.hpp @@ -506,7 +506,9 @@ class SetForceEarlyReturn : public JvmtiUnitedHandshakeClosure { } void do_vthread(Handle target_h) { assert(_target_jt != nullptr, "sanity check"); - assert(_target_jt->vthread() == target_h(), "sanity check"); + // Use jvmti_vthread() instead of vthread() as target could have temporarily changed + // identity to carrier thread (see VirtualThread.switchToCarrierThread). + assert(_target_jt->jvmti_vthread() == target_h(), "sanity check"); doit(_target_jt); // mounted virtual thread } }; @@ -526,7 +528,9 @@ class UpdateForPopTopFrameClosure : public JvmtiUnitedHandshakeClosure { } void do_vthread(Handle target_h) { assert(_target_jt != nullptr, "sanity check"); - assert(_target_jt->vthread() == target_h(), "sanity check"); + // Use jvmti_vthread() instead of vthread() as target could have temporarily changed + // identity to carrier thread (see VirtualThread.switchToCarrierThread). + assert(_target_jt->jvmti_vthread() == target_h(), "sanity check"); doit(_target_jt); // mounted virtual thread } }; diff --git a/src/hotspot/share/prims/jvmtiEnvThreadState.cpp b/src/hotspot/share/prims/jvmtiEnvThreadState.cpp index f61f9415bbc0e..b531961e7a5e8 100644 --- a/src/hotspot/share/prims/jvmtiEnvThreadState.cpp +++ b/src/hotspot/share/prims/jvmtiEnvThreadState.cpp @@ -298,7 +298,8 @@ class GetCurrentLocationClosure : public JvmtiUnitedHandshakeClosure { } void do_vthread(Handle target_h) { assert(_target_jt == nullptr || !_target_jt->is_exiting(), "sanity check"); - // use jvmti_vthread() as vthread() can be outdated + // Use jvmti_vthread() instead of vthread() as target could have temporarily changed + // identity to carrier thread (see VirtualThread.switchToCarrierThread). assert(_target_jt == nullptr || _target_jt->jvmti_vthread() == target_h(), "sanity check"); ResourceMark rm; javaVFrame *jvf = JvmtiEnvBase::get_vthread_jvf(target_h()); From e923dfe4c51291099d9b7411e6c9f20be79b9a53 Mon Sep 17 00:00:00 2001 From: Per Minborg <pminborg@openjdk.org> Date: Wed, 24 Apr 2024 11:56:44 +0000 Subject: [PATCH 086/141] 8314592: Add shortcut to SymbolLookup::find Reviewed-by: jvernee, prr --- .../classes/java/lang/foreign/Linker.java | 10 ++-- .../java/lang/foreign/SymbolLookup.java | 38 ++++++++++++- .../java/lang/foreign/package-info.java | 4 +- .../lang/foreign/snippet-files/Snippets.java | 18 +++--- .../jdk/internal/foreign/SystemLookup.java | 2 +- .../share/classes/sun/font/HBShaper.java | 20 +++---- .../compiler/TestLinkToNativeRBP.java | 2 +- .../TestSymbolLookupFindOrThrow.java | 56 +++++++++++++++++++ .../bench/java/lang/foreign/AllocTest.java | 2 +- .../bench/java/lang/foreign/CLayouts.java | 6 +- .../java/lang/foreign/CallOverheadHelper.java | 24 ++++---- .../java/lang/foreign/CriticalCalls.java | 2 +- .../java/lang/foreign/PointerInvoke.java | 8 +-- .../bench/java/lang/foreign/QSort.java | 4 +- .../bench/java/lang/foreign/StrLenTest.java | 2 +- .../java/lang/foreign/ToCStringTest.java | 2 +- .../bench/java/lang/foreign/Upcalls.java | 2 +- .../foreign/points/support/PanamaPoint.java | 4 +- .../xor/GetArrayForeignXorOpCriticalImpl.java | 2 +- .../foreign/xor/GetArrayForeignXorOpImpl.java | 2 +- .../xor/GetArrayForeignXorOpInitImpl.java | 2 +- .../foreign/xor/GetArrayUnsafeXorOpImpl.java | 2 +- 22 files changed, 151 insertions(+), 63 deletions(-) create mode 100644 test/jdk/java/foreign/loaderLookup/TestSymbolLookupFindOrThrow.java diff --git a/src/java.base/share/classes/java/lang/foreign/Linker.java b/src/java.base/share/classes/java/lang/foreign/Linker.java index fb325ef1d44f4..545a83984f867 100644 --- a/src/java.base/share/classes/java/lang/foreign/Linker.java +++ b/src/java.base/share/classes/java/lang/foreign/Linker.java @@ -88,7 +88,7 @@ * {@snippet lang = java: * Linker linker = Linker.nativeLinker(); * MethodHandle strlen = linker.downcallHandle( - * linker.defaultLookup().find("strlen").orElseThrow(), + * linker.defaultLookup().findOrThrow("strlen"), * FunctionDescriptor.of(JAVA_LONG, ADDRESS) * ); * } @@ -306,7 +306,7 @@ * {@snippet lang = java: * Linker linker = Linker.nativeLinker(); * MethodHandle qsort = linker.downcallHandle( - * linker.defaultLookup().find("qsort").orElseThrow(), + * linker.defaultLookup().findOrThrow("qsort"), * FunctionDescriptor.ofVoid(ADDRESS, JAVA_LONG, JAVA_LONG, ADDRESS) * ); * } @@ -397,12 +397,12 @@ * Linker linker = Linker.nativeLinker(); * * MethodHandle malloc = linker.downcallHandle( - * linker.defaultLookup().find("malloc").orElseThrow(), + * linker.defaultLookup().findOrThrow("malloc"), * FunctionDescriptor.of(ADDRESS, JAVA_LONG) * ); * * MethodHandle free = linker.downcallHandle( - * linker.defaultLookup().find("free").orElseThrow(), + * linker.defaultLookup().findOrThrow("free"), * FunctionDescriptor.ofVoid(ADDRESS) * ); * } @@ -530,7 +530,7 @@ * {@snippet lang = java: * Linker linker = Linker.nativeLinker(); * MethodHandle printf = linker.downcallHandle( - * linker.defaultLookup().find("printf").orElseThrow(), + * linker.defaultLookup().findOrThrow("printf"), * FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT, JAVA_INT, JAVA_INT), * Linker.Option.firstVariadicArg(1) // first int is variadic * ); diff --git a/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java b/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java index 9bfc7964322e1..3bc416b9c6272 100644 --- a/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java +++ b/src/java.base/share/classes/java/lang/foreign/SymbolLookup.java @@ -39,6 +39,7 @@ import java.lang.invoke.MethodHandles; import java.nio.file.FileSystems; import java.nio.file.Path; +import java.util.NoSuchElementException; import java.util.Objects; import java.util.Optional; import java.util.function.BiFunction; @@ -79,7 +80,7 @@ * {@snippet lang = java: * try (Arena arena = Arena.ofConfined()) { * SymbolLookup libGL = SymbolLookup.libraryLookup("libGL.so", arena); // libGL.so loaded here - * MemorySegment glGetString = libGL.find("glGetString").orElseThrow(); + * MemorySegment glGetString = libGL.findOrThrow("glGetString"); * ... * } // libGL.so unloaded here *} @@ -93,7 +94,7 @@ * System.loadLibrary("GL"); // libGL.so loaded here * ... * SymbolLookup libGL = SymbolLookup.loaderLookup(); - * MemorySegment glGetString = libGL.find("glGetString").orElseThrow(); + * MemorySegment glGetString = libGL.findOrThrow("glGetString"); * } * * This symbol lookup, which is known as a <em>loader lookup</em>, is dynamic with @@ -130,7 +131,7 @@ * {@snippet lang = java: * Linker nativeLinker = Linker.nativeLinker(); * SymbolLookup stdlib = nativeLinker.defaultLookup(); - * MemorySegment malloc = stdlib.find("malloc").orElseThrow(); + * MemorySegment malloc = stdlib.findOrThrow("malloc"); *} * * @since 22 @@ -144,9 +145,40 @@ public interface SymbolLookup { * @param name the symbol name * @return a zero-length memory segment whose address indicates the address of * the symbol, if found + * @see #findOrThrow(String) */ Optional<MemorySegment> find(String name); + /** + * Returns the address of the symbol with the given name or throws an exception. + *<p> + * This is equivalent to the following code, but is more efficient: + * to: + * {@snippet lang= java : + * String name = ... + * MemorySegment address = lookup.find(name) + * .orElseThrow(() -> new NoSuchElementException("Symbol not found: " + name)); + * } + * + * @param name the symbol name + * @return a zero-length memory segment whose address indicates the address of + * the symbol + * @throws NoSuchElementException if no symbol address can be found for the + * given name + * @see #find(String) + * + * @since 23 + */ + default MemorySegment findOrThrow(String name) { + Objects.requireNonNull(name); + Optional<MemorySegment> address = find(name); + // Avoid lambda capturing + if (address.isPresent()) { + return address.get(); + } + throw new NoSuchElementException("Symbol not found: " + name); + } + /** * {@return a composed symbol lookup that returns the result of finding the symbol * with this lookup if found, otherwise returns the result of finding diff --git a/src/java.base/share/classes/java/lang/foreign/package-info.java b/src/java.base/share/classes/java/lang/foreign/package-info.java index b2a6a5f447440..6594826e40524 100644 --- a/src/java.base/share/classes/java/lang/foreign/package-info.java +++ b/src/java.base/share/classes/java/lang/foreign/package-info.java @@ -100,7 +100,7 @@ * Linker linker = Linker.nativeLinker(); * SymbolLookup stdlib = linker.defaultLookup(); * MethodHandle strlen = linker.downcallHandle( - * stdlib.find("strlen").orElseThrow(), + * stdlib.findOrThrow("strlen"), * FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS) * ); * @@ -111,7 +111,7 @@ *} * * Here, we obtain a {@linkplain java.lang.foreign.Linker#nativeLinker() native linker} - * and we use it to {@linkplain java.lang.foreign.SymbolLookup#find(java.lang.String) look up} + * and we use it to {@linkplain java.lang.foreign.SymbolLookup#findOrThrow(java.lang.String) look up} * the {@code strlen} function in the standard C library; a <em>downcall method handle</em> * targeting said function is subsequently * {@linkplain java.lang.foreign.Linker#downcallHandle(FunctionDescriptor, Linker.Option...) obtained}. diff --git a/src/java.base/share/classes/java/lang/foreign/snippet-files/Snippets.java b/src/java.base/share/classes/java/lang/foreign/snippet-files/Snippets.java index 95b9cce7541f8..f305586ac612a 100644 --- a/src/java.base/share/classes/java/lang/foreign/snippet-files/Snippets.java +++ b/src/java.base/share/classes/java/lang/foreign/snippet-files/Snippets.java @@ -163,7 +163,7 @@ static class LinkerSnippets { void downcall() throws Throwable { Linker linker = Linker.nativeLinker(); MethodHandle strlen = linker.downcallHandle( - linker.defaultLookup().find("strlen").orElseThrow(), + linker.defaultLookup().findOrThrow("strlen"), FunctionDescriptor.of(JAVA_LONG, ADDRESS) ); @@ -177,7 +177,7 @@ void downcall() throws Throwable { void qsort() throws Throwable { Linker linker = Linker.nativeLinker(); MethodHandle qsort = linker.downcallHandle( - linker.defaultLookup().find("qsort").orElseThrow(), + linker.defaultLookup().findOrThrow("qsort"), FunctionDescriptor.ofVoid(ADDRESS, JAVA_LONG, JAVA_LONG, ADDRESS) ); @@ -208,12 +208,12 @@ void returnPointer() throws Throwable { Linker linker = Linker.nativeLinker(); MethodHandle malloc = linker.downcallHandle( - linker.defaultLookup().find("malloc").orElseThrow(), + linker.defaultLookup().findOrThrow("malloc"), FunctionDescriptor.of(ADDRESS, JAVA_LONG) ); MethodHandle free = linker.downcallHandle( - linker.defaultLookup().find("free").orElseThrow(), + linker.defaultLookup().findOrThrow("free"), FunctionDescriptor.ofVoid(ADDRESS) ); @@ -282,7 +282,7 @@ void variadicFunc() throws Throwable { Linker linker = Linker.nativeLinker(); MethodHandle printf = linker.downcallHandle( - linker.defaultLookup().find("printf").orElseThrow(), + linker.defaultLookup().findOrThrow("printf"), FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT, JAVA_INT, JAVA_INT), Linker.Option.firstVariadicArg(1) // first int is variadic ); @@ -568,7 +568,7 @@ void header() throws Throwable { Linker linker = Linker.nativeLinker(); SymbolLookup stdlib = linker.defaultLookup(); MethodHandle strlen = linker.downcallHandle( - stdlib.find("strlen").orElseThrow(), + stdlib.findOrThrow("strlen"), FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS) ); @@ -626,14 +626,14 @@ static class SymbolLookupSnippets { void header() { try (Arena arena = Arena.ofConfined()) { SymbolLookup libGL = libraryLookup("libGL.so", arena); // libGL.so loaded here - MemorySegment glGetString = libGL.find("glGetString").orElseThrow(); + MemorySegment glGetString = libGL.findOrThrow("glGetString"); // ... } // libGL.so unloaded here System.loadLibrary("GL"); // libGL.so loaded here // ... SymbolLookup libGL = loaderLookup(); - MemorySegment glGetString = libGL.find("glGetString").orElseThrow(); + MemorySegment glGetString = libGL.findOrThrow("glGetString"); Arena arena = Arena.ofAuto(); @@ -647,7 +647,7 @@ void header() { Linker nativeLinker = Linker.nativeLinker(); SymbolLookup stdlib = nativeLinker.defaultLookup(); - MemorySegment malloc = stdlib.find("malloc").orElseThrow(); + MemorySegment malloc = stdlib.findOrThrow("malloc"); } } diff --git a/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java b/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java index 758366bfcf190..98e02140af6a3 100644 --- a/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java +++ b/src/java.base/share/classes/jdk/internal/foreign/SystemLookup.java @@ -102,7 +102,7 @@ public Boolean run() { libLookup(libs -> libs.load(jdkLibraryPath("syslookup"))); @SuppressWarnings("restricted") - MemorySegment funcs = fallbackLibLookup.find("funcs").orElseThrow() + MemorySegment funcs = fallbackLibLookup.findOrThrow("funcs") .reinterpret(WindowsFallbackSymbols.LAYOUT.byteSize()); Function<String, Optional<MemorySegment>> fallbackLookup = name -> Optional.ofNullable(WindowsFallbackSymbols.valueOfOrNull(name)) diff --git a/src/java.desktop/share/classes/sun/font/HBShaper.java b/src/java.desktop/share/classes/sun/font/HBShaper.java index 90877623c2b33..70e95cdc27bbd 100644 --- a/src/java.desktop/share/classes/sun/font/HBShaper.java +++ b/src/java.desktop/share/classes/sun/font/HBShaper.java @@ -168,22 +168,22 @@ private static VarHandle getVarHandle(StructLayout struct, String name) { SYM_LOOKUP = SymbolLookup.loaderLookup().or(LINKER.defaultLookup()); FunctionDescriptor mallocDescriptor = FunctionDescriptor.of(ADDRESS, JAVA_LONG); - Optional<MemorySegment> malloc_symbol = SYM_LOOKUP.find("malloc"); + MemorySegment malloc_symbol = SYM_LOOKUP.findOrThrow("malloc"); @SuppressWarnings("restricted") - MethodHandle tmp1 = LINKER.downcallHandle(malloc_symbol.get(), mallocDescriptor); + MethodHandle tmp1 = LINKER.downcallHandle(malloc_symbol, mallocDescriptor); malloc_handle = tmp1; FunctionDescriptor createFaceDescriptor = FunctionDescriptor.of(ADDRESS, ADDRESS); - Optional<MemorySegment> create_face_symbol = SYM_LOOKUP.find("HBCreateFace"); + MemorySegment create_face_symbol = SYM_LOOKUP.findOrThrow("HBCreateFace"); @SuppressWarnings("restricted") - MethodHandle tmp2 = LINKER.downcallHandle(create_face_symbol.get(), createFaceDescriptor); + MethodHandle tmp2 = LINKER.downcallHandle(create_face_symbol, createFaceDescriptor); create_face_handle = tmp2; FunctionDescriptor disposeFaceDescriptor = FunctionDescriptor.ofVoid(ADDRESS); - Optional<MemorySegment> dispose_face_symbol = SYM_LOOKUP.find("HBDisposeFace"); + MemorySegment dispose_face_symbol = SYM_LOOKUP.findOrThrow("HBDisposeFace"); @SuppressWarnings("restricted") - MethodHandle tmp3 = LINKER.downcallHandle(dispose_face_symbol.get(), disposeFaceDescriptor); + MethodHandle tmp3 = LINKER.downcallHandle(dispose_face_symbol, disposeFaceDescriptor); dispose_face_handle = tmp3; FunctionDescriptor shapeDesc = FunctionDescriptor.ofVoid( @@ -204,9 +204,9 @@ private static VarHandle getVarHandle(StructLayout struct, String name) { ADDRESS, // ptr to harfbuzz font_funcs object. ADDRESS); // store_results_fn - Optional<MemorySegment> shape_sym = SYM_LOOKUP.find("jdk_hb_shape"); + MemorySegment shape_sym = SYM_LOOKUP.findOrThrow("jdk_hb_shape"); @SuppressWarnings("restricted") - MethodHandle tmp4 = LINKER.downcallHandle(shape_sym.get(), shapeDesc); + MethodHandle tmp4 = LINKER.downcallHandle(shape_sym, shapeDesc); jdk_hb_shape_handle = tmp4; Arena garena = Arena.global(); // creating stubs that exist until VM exit. @@ -260,10 +260,10 @@ private static VarHandle getVarHandle(StructLayout struct, String name) { ADDRESS, // h_advance_fn upcall stub ADDRESS, // v_advance_fn upcall stub ADDRESS); // contour_pt_fn upcall stub - Optional<MemorySegment> create_font_funcs_symbol = SYM_LOOKUP.find("HBCreateFontFuncs"); + MemorySegment create_font_funcs_symbol = SYM_LOOKUP.findOrThrow("HBCreateFontFuncs"); @SuppressWarnings("restricted") MethodHandle create_font_funcs_handle = - LINKER.downcallHandle(create_font_funcs_symbol.get(), createFontFuncsDescriptor); + LINKER.downcallHandle(create_font_funcs_symbol, createFontFuncsDescriptor); MemorySegment s = null; try { diff --git a/test/hotspot/jtreg/gc/shenandoah/compiler/TestLinkToNativeRBP.java b/test/hotspot/jtreg/gc/shenandoah/compiler/TestLinkToNativeRBP.java index 8004d34f5ce1c..f799c0bac21da 100644 --- a/test/hotspot/jtreg/gc/shenandoah/compiler/TestLinkToNativeRBP.java +++ b/test/hotspot/jtreg/gc/shenandoah/compiler/TestLinkToNativeRBP.java @@ -49,7 +49,7 @@ public class TestLinkToNativeRBP { final static Linker abi = Linker.nativeLinker(); static final SymbolLookup lookup = SymbolLookup.loaderLookup(); - final static MethodHandle foo = abi.downcallHandle(lookup.find("foo").get(), + final static MethodHandle foo = abi.downcallHandle(lookup.findOrThrow("foo"), FunctionDescriptor.of(ValueLayout.JAVA_INT)); static int foo() throws Throwable { diff --git a/test/jdk/java/foreign/loaderLookup/TestSymbolLookupFindOrThrow.java b/test/jdk/java/foreign/loaderLookup/TestSymbolLookupFindOrThrow.java new file mode 100644 index 0000000000000..d0fdf43b9995a --- /dev/null +++ b/test/jdk/java/foreign/loaderLookup/TestSymbolLookupFindOrThrow.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2024, 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 + * @run junit/othervm --enable-native-access=ALL-UNNAMED TestSymbolLookupFindOrThrow + */ + +import java.lang.foreign.MemorySegment; +import java.lang.foreign.SymbolLookup; +import java.util.NoSuchElementException; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import static org.junit.Assert.*; + +final class TestSymbolLookupFindOrThrow { + + static { + System.loadLibrary("Foo"); + } + + @Test + void findOrThrow() { + MemorySegment symbol = SymbolLookup.loaderLookup().findOrThrow("foo"); + Assertions.assertNotEquals(0, symbol.address()); + } + + @Test + void findOrThrowNotFound() { + assertThrows(NoSuchElementException.class, () -> + SymbolLookup.loaderLookup().findOrThrow("bar")); + } + +} diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java index b7e4bfd5f57d4..4ae2c0364dc56 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/AllocTest.java @@ -88,7 +88,7 @@ public static class CallocArena implements Arena { static final MethodHandle CALLOC = Linker.nativeLinker() .downcallHandle( - Linker.nativeLinker().defaultLookup().find("calloc").get(), + Linker.nativeLinker().defaultLookup().findOrThrow("calloc"), FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.JAVA_LONG, ValueLayout.JAVA_LONG)); static MemorySegment calloc(long size) { diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java b/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java index bfe5ce61b1c2f..4028b408559b0 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/CLayouts.java @@ -33,7 +33,7 @@ import java.lang.invoke.MethodHandle; public class CLayouts { - private static Linker LINKER = Linker.nativeLinker(); + private static final Linker LINKER = Linker.nativeLinker(); // the constants below are useful aliases for C types. The type/carrier association is only valid for 64-bit platforms. @@ -73,10 +73,10 @@ public class CLayouts { .withTargetLayout(MemoryLayout.sequenceLayout(Long.MAX_VALUE, C_CHAR)); private static final MethodHandle FREE = LINKER.downcallHandle( - LINKER.defaultLookup().find("free").get(), FunctionDescriptor.ofVoid(C_POINTER)); + LINKER.defaultLookup().findOrThrow("free"), FunctionDescriptor.ofVoid(C_POINTER)); private static final MethodHandle MALLOC = LINKER.downcallHandle( - LINKER.defaultLookup().find("malloc").get(), FunctionDescriptor.of(C_POINTER, ValueLayout.JAVA_LONG)); + LINKER.defaultLookup().findOrThrow("malloc"), FunctionDescriptor.of(C_POINTER, ValueLayout.JAVA_LONG)); public static void freeMemory(MemorySegment address) { try { diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/CallOverheadHelper.java b/test/micro/org/openjdk/bench/java/lang/foreign/CallOverheadHelper.java index 290d40f1202fd..f0841989e76d3 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/CallOverheadHelper.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/CallOverheadHelper.java @@ -109,7 +109,7 @@ public class CallOverheadHelper extends CLayouts { System.loadLibrary("CallOverhead"); SymbolLookup loaderLibs = SymbolLookup.loaderLookup(); { - func_addr = loaderLibs.find("func").orElseThrow(); + func_addr = loaderLibs.findOrThrow("func"); MethodType mt = MethodType.methodType(void.class); FunctionDescriptor fd = FunctionDescriptor.ofVoid(); func_v = abi.downcallHandle(fd); @@ -118,59 +118,59 @@ public class CallOverheadHelper extends CLayouts { func_critical = insertArguments(func_critical_v, 0, func_addr); } { - identity_addr = loaderLibs.find("identity").orElseThrow(); + identity_addr = loaderLibs.findOrThrow("identity"); FunctionDescriptor fd = FunctionDescriptor.of(C_INT, C_INT); identity_v = abi.downcallHandle(fd); identity_critical_v = abi.downcallHandle(fd, Linker.Option.critical(false)); identity = insertArguments(identity_v, 0, identity_addr); identity_critical = insertArguments(identity_critical_v, 0, identity_addr); } - identity_struct_addr = loaderLibs.find("identity_struct").orElseThrow(); + identity_struct_addr = loaderLibs.findOrThrow("identity_struct"); identity_struct_v = abi.downcallHandle( FunctionDescriptor.of(POINT_LAYOUT, POINT_LAYOUT)); identity_struct = insertArguments(identity_struct_v, 0, identity_struct_addr); - identity_struct_3_addr = loaderLibs.find("identity_struct_3").orElseThrow(); + identity_struct_3_addr = loaderLibs.findOrThrow("identity_struct_3"); identity_struct_3_v = abi.downcallHandle( FunctionDescriptor.of(POINT_LAYOUT, POINT_LAYOUT, POINT_LAYOUT, POINT_LAYOUT)); identity_struct_3 = insertArguments(identity_struct_3_v, 0, identity_struct_3_addr); - identity_memory_address_addr = loaderLibs.find("identity_memory_address").orElseThrow(); + identity_memory_address_addr = loaderLibs.findOrThrow("identity_memory_address"); identity_memory_address_v = abi.downcallHandle( FunctionDescriptor.of(C_POINTER, C_POINTER)); identity_memory_address = insertArguments(identity_memory_address_v, 0, identity_memory_address_addr); - identity_memory_address_3_addr = loaderLibs.find("identity_memory_address_3").orElseThrow(); + identity_memory_address_3_addr = loaderLibs.findOrThrow("identity_memory_address_3"); identity_memory_address_3_v = abi.downcallHandle( FunctionDescriptor.of(C_POINTER, C_POINTER, C_POINTER, C_POINTER)); identity_memory_address_3 = insertArguments(identity_memory_address_3_v, 0, identity_memory_address_3_addr); - args1_addr = loaderLibs.find("args1").orElseThrow(); + args1_addr = loaderLibs.findOrThrow("args1"); args1_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG)); args1 = insertArguments(args1_v, 0, args1_addr); - args2_addr = loaderLibs.find("args2").orElseThrow(); + args2_addr = loaderLibs.findOrThrow("args2"); args2_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE)); args2 = insertArguments(args2_v, 0, args2_addr); - args3_addr = loaderLibs.find("args3").orElseThrow(); + args3_addr = loaderLibs.findOrThrow("args3"); args3_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE, C_LONG_LONG)); args3 = insertArguments(args3_v, 0, args3_addr); - args4_addr = loaderLibs.find("args4").orElseThrow(); + args4_addr = loaderLibs.findOrThrow("args4"); args4_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE)); args4 = insertArguments(args4_v, 0, args4_addr); - args5_addr = loaderLibs.find("args5").orElseThrow(); + args5_addr = loaderLibs.findOrThrow("args5"); args5_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE, C_LONG_LONG)); args5 = insertArguments(args5_v, 0, args5_addr); - args10_addr = loaderLibs.find("args10").orElseThrow(); + args10_addr = loaderLibs.findOrThrow("args10"); args10_v = abi.downcallHandle( FunctionDescriptor.ofVoid(C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE, C_LONG_LONG, C_DOUBLE)); diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/CriticalCalls.java b/test/micro/org/openjdk/bench/java/lang/foreign/CriticalCalls.java index de44b6957756e..0f384f816853d 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/CriticalCalls.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/CriticalCalls.java @@ -61,7 +61,7 @@ public class CriticalCalls { System.loadLibrary("CriticalCalls"); SymbolLookup lookup = SymbolLookup.loaderLookup(); - MemorySegment sumIntsSym = lookup.find("sum_ints").get(); + MemorySegment sumIntsSym = lookup.findOrThrow("sum_ints"); FunctionDescriptor sumIntsDesc = FunctionDescriptor.of(JAVA_INT, ADDRESS, JAVA_INT); PINNED = Linker.nativeLinker().downcallHandle( diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/PointerInvoke.java b/test/micro/org/openjdk/bench/java/lang/foreign/PointerInvoke.java index 47e6c0b1fd175..ab77ae630c1cf 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/PointerInvoke.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/PointerInvoke.java @@ -58,13 +58,13 @@ public class PointerInvoke extends CLayouts { static { Linker abi = Linker.nativeLinker(); SymbolLookup loaderLibs = SymbolLookup.loaderLookup(); - F_LONG_LONG = abi.downcallHandle(loaderLibs.find("id_long_long").get(), + F_LONG_LONG = abi.downcallHandle(loaderLibs.findOrThrow("id_long_long"), FunctionDescriptor.of(C_LONG_LONG, C_LONG_LONG)); - F_PTR_LONG = abi.downcallHandle(loaderLibs.find("id_ptr_long").get(), + F_PTR_LONG = abi.downcallHandle(loaderLibs.findOrThrow("id_ptr_long"), FunctionDescriptor.of(C_LONG_LONG, C_POINTER)); - F_LONG_PTR = abi.downcallHandle(loaderLibs.find("id_long_ptr").get(), + F_LONG_PTR = abi.downcallHandle(loaderLibs.findOrThrow("id_long_ptr"), FunctionDescriptor.of(C_POINTER, C_LONG_LONG)); - F_PTR_PTR = abi.downcallHandle(loaderLibs.find("id_ptr_ptr").get(), + F_PTR_PTR = abi.downcallHandle(loaderLibs.findOrThrow("id_ptr_ptr"), FunctionDescriptor.of(C_POINTER, C_POINTER)); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/QSort.java b/test/micro/org/openjdk/bench/java/lang/foreign/QSort.java index 2050b3b2fb2e9..76298ae073993 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/QSort.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/QSort.java @@ -58,7 +58,7 @@ public class QSort extends CLayouts { static final int[] INPUT = { 5, 3, 2, 7, 8, 12, 1, 7 }; static final MemorySegment INPUT_SEGMENT; - static MemorySegment qsort_addr = abi.defaultLookup().find("qsort").get(); + static MemorySegment qsort_addr = abi.defaultLookup().findOrThrow("qsort"); static { MemoryLayout layout = MemoryLayout.sequenceLayout(INPUT.length, JAVA_INT); @@ -74,7 +74,7 @@ public class QSort extends CLayouts { FunctionDescriptor.ofVoid(C_POINTER, C_LONG_LONG, C_LONG_LONG, C_POINTER) ); System.loadLibrary("QSort"); - native_compar = SymbolLookup.loaderLookup().find("compar").orElseThrow(); + native_compar = SymbolLookup.loaderLookup().findOrThrow("compar"); panama_upcall_compar = abi.upcallStub( lookup().findStatic(QSort.class, "panama_upcall_compar", diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java index 574268f1ffa26..2ad723eadf321 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/StrLenTest.java @@ -69,7 +69,7 @@ public class StrLenTest extends CLayouts { static { Linker abi = Linker.nativeLinker(); - STRLEN = abi.downcallHandle(abi.defaultLookup().find("strlen").get(), + STRLEN = abi.downcallHandle(abi.defaultLookup().findOrThrow("strlen"), FunctionDescriptor.of(C_INT, C_POINTER)); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java b/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java index 051ad94758e17..7ba9384958e22 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/ToCStringTest.java @@ -66,7 +66,7 @@ public class ToCStringTest extends CLayouts { static { Linker abi = Linker.nativeLinker(); - STRLEN = abi.downcallHandle(abi.defaultLookup().find("strlen").get(), + STRLEN = abi.downcallHandle(abi.defaultLookup().findOrThrow("strlen"), FunctionDescriptor.of(C_INT, C_POINTER)); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/Upcalls.java b/test/micro/org/openjdk/bench/java/lang/foreign/Upcalls.java index 4f1c0d5b528d2..1b852e6ff9df0 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/Upcalls.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/Upcalls.java @@ -120,7 +120,7 @@ public class Upcalls extends CLayouts { static MethodHandle linkFunc(String name, FunctionDescriptor baseDesc) { return abi.downcallHandle( - SymbolLookup.loaderLookup().find(name).orElseThrow(), + SymbolLookup.loaderLookup().findOrThrow(name), baseDesc.appendArgumentLayouts(C_POINTER) ); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/points/support/PanamaPoint.java b/test/micro/org/openjdk/bench/java/lang/foreign/points/support/PanamaPoint.java index fbcf3ba552830..dca63267dc7b4 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/points/support/PanamaPoint.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/points/support/PanamaPoint.java @@ -48,11 +48,11 @@ public class PanamaPoint extends CLayouts implements AutoCloseable { System.loadLibrary("Point"); SymbolLookup loaderLibs = SymbolLookup.loaderLookup(); MH_distance = abi.downcallHandle( - loaderLibs.find("distance").get(), + loaderLibs.findOrThrow("distance"), FunctionDescriptor.of(C_DOUBLE, LAYOUT, LAYOUT) ); MH_distance_ptrs = abi.downcallHandle( - loaderLibs.find("distance_ptrs").get(), + loaderLibs.findOrThrow("distance_ptrs"), FunctionDescriptor.of(C_DOUBLE, C_POINTER, C_POINTER) ); } diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpCriticalImpl.java b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpCriticalImpl.java index 250ba1157d7eb..38d4c72a20a02 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpCriticalImpl.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpCriticalImpl.java @@ -17,7 +17,7 @@ public class GetArrayForeignXorOpCriticalImpl implements XorOp { Linker linker; linker = Linker.nativeLinker(); FunctionDescriptor xor_op_func = FunctionDescriptor.ofVoid(C_POINTER, C_POINTER, C_INT); - xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().find("xor_op").orElseThrow(), xor_op_func, critical(true)); + xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().findOrThrow("xor_op"), xor_op_func, critical(true)); } static final MethodHandle xor_op; diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpImpl.java b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpImpl.java index e033127de6a42..d59203155cd66 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpImpl.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpImpl.java @@ -19,7 +19,7 @@ public class GetArrayForeignXorOpImpl implements XorOp { Linker linker; linker = Linker.nativeLinker(); FunctionDescriptor xor_op_func = FunctionDescriptor.ofVoid(C_POINTER, C_POINTER, C_INT); - xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().find("xor_op").orElseThrow(), xor_op_func, critical(false)); + xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().findOrThrow("xor_op"), xor_op_func, critical(false)); } static final MethodHandle xor_op; diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpInitImpl.java b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpInitImpl.java index 8a3df5d4f39f2..489255ad11118 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpInitImpl.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayForeignXorOpInitImpl.java @@ -20,7 +20,7 @@ public class GetArrayForeignXorOpInitImpl implements XorOp { Linker linker; linker = Linker.nativeLinker(); FunctionDescriptor xor_op_func = FunctionDescriptor.ofVoid(C_POINTER, C_POINTER, C_INT); - xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().find("xor_op").orElseThrow(), xor_op_func, critical(false)); + xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().findOrThrow("xor_op"), xor_op_func, critical(false)); } static final MethodHandle xor_op; diff --git a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayUnsafeXorOpImpl.java b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayUnsafeXorOpImpl.java index 4175dd03121d0..ae6869c40d541 100644 --- a/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayUnsafeXorOpImpl.java +++ b/test/micro/org/openjdk/bench/java/lang/foreign/xor/GetArrayUnsafeXorOpImpl.java @@ -25,7 +25,7 @@ public class GetArrayUnsafeXorOpImpl implements XorOp { Linker linker; linker = Linker.nativeLinker(); FunctionDescriptor xor_op_func = FunctionDescriptor.ofVoid(C_POINTER, C_POINTER, C_INT); - xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().find("xor_op").orElseThrow(), xor_op_func, critical(false)); + xor_op = linker.downcallHandle(SymbolLookup.loaderLookup().findOrThrow("xor_op"), xor_op_func, critical(false)); } static final MethodHandle xor_op; From e311ba32a517a6389c683c3597d78f66fe52991e Mon Sep 17 00:00:00 2001 From: Stefan Johansson <sjohanss@openjdk.org> Date: Wed, 24 Apr 2024 12:03:30 +0000 Subject: [PATCH 087/141] 8330626: ZGC: Windows address space placeholders not managed correctly Reviewed-by: stefank, aboldtch --- .../windows/gc/z/zVirtualMemory_windows.cpp | 61 +++++- src/hotspot/share/gc/z/zVirtualMemory.hpp | 2 + .../gtest/gc/z/test_zMapper_windows.cpp | 178 ++++++++++++++++++ 3 files changed, 232 insertions(+), 9 deletions(-) create mode 100644 test/hotspot/gtest/gc/z/test_zMapper_windows.cpp diff --git a/src/hotspot/os/windows/gc/z/zVirtualMemory_windows.cpp b/src/hotspot/os/windows/gc/z/zVirtualMemory_windows.cpp index c7c0d700d79b8..7448fd18e0ba9 100644 --- a/src/hotspot/os/windows/gc/z/zVirtualMemory_windows.cpp +++ b/src/hotspot/os/windows/gc/z/zVirtualMemory_windows.cpp @@ -40,6 +40,11 @@ class ZVirtualMemoryManagerImpl : public CHeapObj<mtGC> { }; // Implements small pages (paged) support using placeholder reservation. +// +// When a memory area is free (kept by the virtual memory manager) a +// single placeholder is covering that memory area. When memory is +// allocated from the manager the placeholder is split into granule +// sized placeholders to allow mapping operations on that granularity. class ZVirtualMemoryManagerSmallPages : public ZVirtualMemoryManagerImpl { private: class PlaceholderCallbacks : public AllStatic { @@ -52,49 +57,87 @@ class ZVirtualMemoryManagerSmallPages : public ZVirtualMemoryManagerImpl { ZMapper::coalesce_placeholders(ZOffset::address_unsafe(start), size); } - static void split_into_placeholder_granules(zoffset start, size_t size) { - for (uintptr_t addr = untype(start); addr < untype(start) + size; addr += ZGranuleSize) { - split_placeholder(to_zoffset(addr), ZGranuleSize); + // Turn the single placeholder covering the memory area into granule + // sized placeholders. + static void split_into_granule_sized_placeholders(zoffset start, size_t size) { + assert(size >= ZGranuleSize, "Must be at least one granule"); + assert(is_aligned(size, ZGranuleSize), "Must be granule aligned"); + + // Don't call split_placeholder on the last granule, since it is already + // a placeholder and the system call would therefore fail. + const size_t limit = size - ZGranuleSize; + for (size_t offset = 0; offset < limit; offset += ZGranuleSize) { + split_placeholder(start + offset, ZGranuleSize); } } static void coalesce_into_one_placeholder(zoffset start, size_t size) { assert(is_aligned(size, ZGranuleSize), "Must be granule aligned"); + // Granule sized areas are already covered by a single placeholder if (size > ZGranuleSize) { coalesce_placeholders(start, size); } } + // Called when a memory area is returned to the memory manager but can't + // be merged with an already existing area. Make sure this area is covered + // by a single placeholder. static void create_callback(const ZMemory* area) { assert(is_aligned(area->size(), ZGranuleSize), "Must be granule aligned"); + coalesce_into_one_placeholder(area->start(), area->size()); } + // Called when a complete memory area in the memory manager is allocated. + // Create granule sized placeholders for the entire area. static void destroy_callback(const ZMemory* area) { assert(is_aligned(area->size(), ZGranuleSize), "Must be granule aligned"); - // Don't try split the last granule - VirtualFree will fail - split_into_placeholder_granules(area->start(), area->size() - ZGranuleSize); + + split_into_granule_sized_placeholders(area->start(), area->size()); } + // Called when a memory area is allocated at the front of an exising memory area. + // Turn the first part of the memory area into granule sized placeholders. static void shrink_from_front_callback(const ZMemory* area, size_t size) { + assert(area->size() > size, "Must be larger than what we try to split out"); assert(is_aligned(size, ZGranuleSize), "Must be granule aligned"); - split_into_placeholder_granules(area->start(), size); + + // Split the area into two placeholders + split_placeholder(area->start(), size); + + // Split the first part into granule sized placeholders + split_into_granule_sized_placeholders(area->start(), size); } + // Called when a memory area is allocated at the end of an existing memory area. + // Turn the second part of the memory area into granule sized placeholders. static void shrink_from_back_callback(const ZMemory* area, size_t size) { + assert(area->size() > size, "Must be larger than what we try to split out"); assert(is_aligned(size, ZGranuleSize), "Must be granule aligned"); - // Don't try split the last granule - VirtualFree will fail - split_into_placeholder_granules(to_zoffset(untype(area->end()) - size), size - ZGranuleSize); + + // Split the area into two placeholders + const zoffset start = to_zoffset(area->end() - size); + split_placeholder(start, size); + + // Split the second part into granule sized placeholders + split_into_granule_sized_placeholders(start, size); } + // Called when freeing a memory area and it can be merged at the start of an + // existing area. Coalesce the underlying placeholders into one. static void grow_from_front_callback(const ZMemory* area, size_t size) { assert(is_aligned(area->size(), ZGranuleSize), "Must be granule aligned"); - coalesce_into_one_placeholder(to_zoffset(untype(area->start()) - size), area->size() + size); + + const zoffset start = area->start() - size; + coalesce_into_one_placeholder(start, area->size() + size); } + // Called when freeing a memory area and it can be merged at the end of an + // existing area. Coalesce the underlying placeholders into one. static void grow_from_back_callback(const ZMemory* area, size_t size) { assert(is_aligned(area->size(), ZGranuleSize), "Must be granule aligned"); + coalesce_into_one_placeholder(area->start(), area->size() + size); } diff --git a/src/hotspot/share/gc/z/zVirtualMemory.hpp b/src/hotspot/share/gc/z/zVirtualMemory.hpp index faf7cdc621612..9b5e1e1bfadac 100644 --- a/src/hotspot/share/gc/z/zVirtualMemory.hpp +++ b/src/hotspot/share/gc/z/zVirtualMemory.hpp @@ -47,6 +47,8 @@ class ZVirtualMemory { }; class ZVirtualMemoryManager { + friend class ZMapperTest; + private: static size_t calculate_min_range(size_t size); diff --git a/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp b/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp new file mode 100644 index 0000000000000..2c93fa2bba75f --- /dev/null +++ b/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2024, 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. + */ + +#include "precompiled.hpp" + +#ifdef _WINDOWS + +#include "gc/z/zAddress.inline.hpp" +#include "gc/z/zGlobals.hpp" +#include "gc/z/zList.inline.hpp" +#include "gc/z/zMemory.inline.hpp" +#include "gc/z/zSyscall_windows.hpp" +#include "gc/z/zVirtualMemory.hpp" +#include "runtime/os.hpp" +#include "unittest.hpp" + +using namespace testing; + +#define EXPECT_ALLOC_OK(offset) EXPECT_NE(offset, zoffset(UINTPTR_MAX)) + +class ZMapperTest : public Test { +private: + static constexpr size_t ZMapperTestReservationSize = 32 * M; + + static bool _initialized; + static ZMemoryManager* _va; + + ZVirtualMemoryManager* _vmm; + +public: + bool reserve_for_test() { + // Initialize platform specific parts before reserving address space + _vmm->pd_initialize_before_reserve(); + + // Reserve address space + if (!_vmm->pd_reserve(ZOffset::address_unsafe(zoffset(0)), ZMapperTestReservationSize)) { + return false; + } + + // Make the address range free before setting up callbacks below + _va->free(zoffset(0), ZMapperTestReservationSize); + + // Initialize platform specific parts after reserving address space + _vmm->pd_initialize_after_reserve(); + + return true; + } + + virtual void SetUp() { + ZSyscall::initialize(); + ZGlobalsPointers::initialize(); + + // Fake a ZVirtualMemoryManager + _vmm = (ZVirtualMemoryManager*)os::malloc(sizeof(ZVirtualMemoryManager), mtTest); + + // Construct its internal ZMemoryManager + _va = new (&_vmm->_manager) ZMemoryManager(); + + // Reserve address space for the test + if (!reserve_for_test()) { + // Failed to reserve address space + GTEST_SKIP(); + return; + } + + _initialized = true; + } + + virtual void TearDown() { + if (_initialized) { + _vmm->pd_unreserve(ZOffset::address_unsafe(zoffset(0)), 0); + } + os::free(_vmm); + } + + static void test_alloc_low_address() { + // Verify that we get placeholder for first granule + zoffset bottom = _va->alloc_low_address(ZGranuleSize); + EXPECT_ALLOC_OK(bottom); + + _va->free(bottom, ZGranuleSize); + + // Alloc something larger than a granule and free it + bottom = _va->alloc_low_address(ZGranuleSize * 3); + EXPECT_ALLOC_OK(bottom); + + _va->free(bottom, ZGranuleSize * 3); + + // Free with more memory allocated + bottom = _va->alloc_low_address(ZGranuleSize); + EXPECT_ALLOC_OK(bottom); + + zoffset next = _va->alloc_low_address(ZGranuleSize); + EXPECT_ALLOC_OK(next); + + _va->free(bottom, ZGranuleSize); + _va->free(next, ZGranuleSize); + } + + static void test_alloc_high_address() { + // Verify that we get placeholder for last granule + zoffset high = _va->alloc_high_address(ZGranuleSize); + EXPECT_ALLOC_OK(high); + + zoffset prev = _va->alloc_high_address(ZGranuleSize); + EXPECT_ALLOC_OK(prev); + + _va->free(high, ZGranuleSize); + _va->free(prev, ZGranuleSize); + + // Alloc something larger than a granule and return it + high = _va->alloc_high_address(ZGranuleSize * 2); + EXPECT_ALLOC_OK(high); + + _va->free(high, ZGranuleSize * 2); + } + + static void test_alloc_whole_area() { + // Alloc the whole reservation + zoffset bottom = _va->alloc_low_address(ZMapperTestReservationSize); + EXPECT_ALLOC_OK(bottom); + + // Free two chunks and then allocate them again + _va->free(bottom, ZGranuleSize * 4); + _va->free(bottom + ZGranuleSize * 6, ZGranuleSize * 6); + + zoffset offset = _va->alloc_low_address(ZGranuleSize * 4); + EXPECT_ALLOC_OK(offset); + + offset = _va->alloc_low_address(ZGranuleSize * 6); + EXPECT_ALLOC_OK(offset); + + // Now free it all, and verify it can be re-allocated + _va->free(bottom, ZMapperTestReservationSize); + + bottom = _va->alloc_low_address(ZMapperTestReservationSize); + EXPECT_ALLOC_OK(bottom); + + _va->free(bottom, ZMapperTestReservationSize); + } +}; + +bool ZMapperTest::_initialized = false; +ZMemoryManager* ZMapperTest::_va = nullptr; + +TEST_VM_F(ZMapperTest, test_alloc_low_address) { + test_alloc_low_address(); +} + +TEST_VM_F(ZMapperTest, test_alloc_high_address) { + test_alloc_high_address(); +} + +TEST_VM_F(ZMapperTest, test_alloc_whole_area) { + test_alloc_whole_area(); +} + +#endif // _WINDOWS From 45ed97f15b96071e5d6b6d21e8f0129eda5aa447 Mon Sep 17 00:00:00 2001 From: Matthias Baesken <mbaesken@openjdk.org> Date: Wed, 24 Apr 2024 12:55:34 +0000 Subject: [PATCH 088/141] 8330464: hserr generic events - add entry for the before_exit calls Reviewed-by: rrich, lucy --- src/hotspot/share/runtime/java.cpp | 3 +++ src/hotspot/share/runtime/threads.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/hotspot/share/runtime/java.cpp b/src/hotspot/share/runtime/java.cpp index de3d12c3883ed..d78e35c4e6812 100644 --- a/src/hotspot/share/runtime/java.cpp +++ b/src/hotspot/share/runtime/java.cpp @@ -78,6 +78,7 @@ #include "runtime/vm_version.hpp" #include "sanitizers/leak.hpp" #include "utilities/dtrace.hpp" +#include "utilities/events.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/macros.hpp" #include "utilities/vmError.hpp" @@ -366,6 +367,8 @@ void before_exit(JavaThread* thread, bool halt) { #define BEFORE_EXIT_DONE 2 static jint volatile _before_exit_status = BEFORE_EXIT_NOT_RUN; + Events::log(thread, "Before exit entered"); + // Note: don't use a Mutex to guard the entire before_exit(), as // JVMTI post_thread_end_event and post_vm_death_event will run native code. // A CAS or OSMutex would work just fine but then we need to manipulate diff --git a/src/hotspot/share/runtime/threads.cpp b/src/hotspot/share/runtime/threads.cpp index e3bb67bfee52f..b92e5a90c5580 100644 --- a/src/hotspot/share/runtime/threads.cpp +++ b/src/hotspot/share/runtime/threads.cpp @@ -833,10 +833,10 @@ jint Threads::create_vm(JavaVMInitArgs* args, bool* canTryAgain) { // Threads::destroy_vm() is normally called from jni_DestroyJavaVM() when // the program falls off the end of main(). Another VM exit path is through -// vm_exit() when the program calls System.exit() to return a value or when -// there is a serious error in VM. The two shutdown paths are not exactly -// the same, but they share Shutdown.shutdown() at Java level and before_exit() -// and VM_Exit op at VM level. +// vm_exit(), when the program calls System.exit() to return a value, or when +// there is a serious error in VM. +// These two separate shutdown paths are not exactly the same, but they share +// Shutdown.shutdown() at Java level and before_exit() and VM_Exit op at VM level. // // Shutdown sequence: // + Shutdown native memory tracking if it is on From 74b11ccf143b335c0e3f21e9fe5dc024742b1bc4 Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang <ayang@openjdk.org> Date: Wed, 24 Apr 2024 13:34:35 +0000 Subject: [PATCH 089/141] 8331004: Serial: Remove unused GenClosure Reviewed-by: gli, tschatzl --- src/hotspot/share/gc/serial/serialHeap.hpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/hotspot/share/gc/serial/serialHeap.hpp b/src/hotspot/share/gc/serial/serialHeap.hpp index 4a88412ced680..12a4261feece7 100644 --- a/src/hotspot/share/gc/serial/serialHeap.hpp +++ b/src/hotspot/share/gc/serial/serialHeap.hpp @@ -236,15 +236,6 @@ class SerialHeap : public CollectedHeap { void print_heap_change(const PreGenGCValues& pre_gc_values) const; - // The functions below are helper functions that a subclass of - // "CollectedHeap" can use in the implementation of its virtual - // functions. - - class GenClosure : public StackObj { - public: - virtual void do_generation(Generation* gen) = 0; - }; - // Return "true" if all generations have reached the // maximal committed limit that they can reach, without a garbage // collection. From f1d0e715b67e2ca47b525069d8153abbb33f75b9 Mon Sep 17 00:00:00 2001 From: Gerard Ziemski <gziemski@openjdk.org> Date: Wed, 24 Apr 2024 14:27:10 +0000 Subject: [PATCH 090/141] 8324577: [REDO] - [IMPROVE] OPEN_MAX is no longer the max limit on macOS >= 10.6 for RLIMIT_NOFILE Reviewed-by: dcubed, dholmes --- src/hotspot/os/bsd/os_bsd.cpp | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp index 4b849c5bad416..ca4a77d2b4a26 100644 --- a/src/hotspot/os/bsd/os_bsd.cpp +++ b/src/hotspot/os/bsd/os_bsd.cpp @@ -2140,16 +2140,25 @@ jint os::init_2(void) { if (status != 0) { log_info(os)("os::init_2 getrlimit failed: %s", os::strerror(errno)); } else { - nbr_files.rlim_cur = nbr_files.rlim_max; - -#ifdef __APPLE__ - // Darwin returns RLIM_INFINITY for rlim_max, but fails with EINVAL if - // you attempt to use RLIM_INFINITY. As per setrlimit(2), OPEN_MAX must - // be used instead - nbr_files.rlim_cur = MIN(OPEN_MAX, nbr_files.rlim_cur); -#endif + rlim_t rlim_original = nbr_files.rlim_cur; + + // On macOS according to setrlimit(2), OPEN_MAX must be used instead + // of RLIM_INFINITY, but testing on macOS >= 10.6, reveals that + // we can, in fact, use even RLIM_INFINITY, so try the max value + // that the system claims can be used first, same as other BSD OSes. + // However, some terminals (ksh) will internally use "int" type + // to store this value and since RLIM_INFINITY overflows an "int" + // we might end up with a negative value, so cap the system limit max + // at INT_MAX instead, just in case, for everyone. + nbr_files.rlim_cur = MIN(INT_MAX, nbr_files.rlim_max); status = setrlimit(RLIMIT_NOFILE, &nbr_files); + if (status != 0) { + // If that fails then try lowering the limit to either OPEN_MAX + // (which is safe) or the original limit, whichever was greater. + nbr_files.rlim_cur = MAX(OPEN_MAX, rlim_original); + status = setrlimit(RLIMIT_NOFILE, &nbr_files); + } if (status != 0) { log_info(os)("os::init_2 setrlimit failed: %s", os::strerror(errno)); } From 1d06170758bd76a0ea32e5bb7d4a017e829ae710 Mon Sep 17 00:00:00 2001 From: Joshua Cao <joshcao@amazon.com> Date: Wed, 24 Apr 2024 17:06:45 +0000 Subject: [PATCH 091/141] 8300148: Consider using a StoreStore barrier instead of Release barrier on ctor exit Reviewed-by: shade, kvn, dlong --- src/hotspot/share/opto/c2_globals.hpp | 4 + src/hotspot/share/opto/escape.cpp | 4 +- src/hotspot/share/opto/macro.cpp | 5 +- src/hotspot/share/opto/memnode.cpp | 2 +- src/hotspot/share/opto/parse1.cpp | 3 +- src/hotspot/share/opto/stringopts.cpp | 2 +- .../c2/irTests/ConstructorBarriers.java | 311 ++++++++++++++++++ .../compiler/lib/ir_framework/IRNode.java | 15 + .../vm/compiler/ConstructorBarriers.java | 269 +++++++++++++++ 9 files changed, 610 insertions(+), 5 deletions(-) create mode 100644 test/hotspot/jtreg/compiler/c2/irTests/ConstructorBarriers.java create mode 100644 test/micro/org/openjdk/bench/vm/compiler/ConstructorBarriers.java diff --git a/src/hotspot/share/opto/c2_globals.hpp b/src/hotspot/share/opto/c2_globals.hpp index 785b76849c161..baf2256005e66 100644 --- a/src/hotspot/share/opto/c2_globals.hpp +++ b/src/hotspot/share/opto/c2_globals.hpp @@ -797,6 +797,10 @@ \ product(bool, InlineSecondarySupersTest, true, DIAGNOSTIC, \ "Inline the secondary supers hash lookup.") \ + \ + product(bool, UseStoreStoreForCtor, true, DIAGNOSTIC, \ + "Use StoreStore barrier instead of Release barrier at the end " \ + "of constructors") \ // end of C2_FLAGS diff --git a/src/hotspot/share/opto/escape.cpp b/src/hotspot/share/opto/escape.cpp index 2fb5e6b13b392..55d54d44545b7 100644 --- a/src/hotspot/share/opto/escape.cpp +++ b/src/hotspot/share/opto/escape.cpp @@ -199,7 +199,9 @@ bool ConnectionGraph::compute_escape() { // Collect all MemBarStoreStore nodes so that depending on the // escape status of the associated Allocate node some of them // may be eliminated. - storestore_worklist.append(n->as_MemBarStoreStore()); + if (!UseStoreStoreForCtor || n->req() > MemBarNode::Precedent) { + storestore_worklist.append(n->as_MemBarStoreStore()); + } break; case Op_MemBarRelease: if (n->req() > MemBarNode::Precedent) { diff --git a/src/hotspot/share/opto/macro.cpp b/src/hotspot/share/opto/macro.cpp index 23928b554e4e0..d4ecadf0cfce5 100644 --- a/src/hotspot/share/opto/macro.cpp +++ b/src/hotspot/share/opto/macro.cpp @@ -633,7 +633,10 @@ bool PhaseMacroExpand::can_eliminate_allocation(PhaseIterGVN* igvn, AllocateNode } else if (!reduce_merge_precheck) { safepoints->append_if_missing(sfpt); } - } else if (reduce_merge_precheck && (use->is_Phi() || use->is_EncodeP() || use->Opcode() == Op_MemBarRelease)) { + } else if (reduce_merge_precheck && + (use->is_Phi() || use->is_EncodeP() || + use->Opcode() == Op_MemBarRelease || + (UseStoreStoreForCtor && use->Opcode() == Op_MemBarStoreStore))) { // Nothing to do } else if (use->Opcode() != Op_CastP2X) { // CastP2X is used by card mark if (use->is_Phi()) { diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp index 8347321fe9077..dea4640b9d15c 100644 --- a/src/hotspot/share/opto/memnode.cpp +++ b/src/hotspot/share/opto/memnode.cpp @@ -4125,7 +4125,7 @@ Node *MemBarNode::Ideal(PhaseGVN *phase, bool can_reshape) { eliminate = true; } } - } else if (opc == Op_MemBarRelease) { + } else if (opc == Op_MemBarRelease || (UseStoreStoreForCtor && opc == Op_MemBarStoreStore)) { // Final field stores. Node* alloc = AllocateNode::Ideal_allocation(in(MemBarNode::Precedent)); if ((alloc != nullptr) && alloc->is_Allocate() && diff --git a/src/hotspot/share/opto/parse1.cpp b/src/hotspot/share/opto/parse1.cpp index 5f86847442208..80cb6721fceaa 100644 --- a/src/hotspot/share/opto/parse1.cpp +++ b/src/hotspot/share/opto/parse1.cpp @@ -1016,7 +1016,8 @@ void Parse::do_exits() { (wrote_final() || (AlwaysSafeConstructors && wrote_fields()) || (support_IRIW_for_not_multiple_copy_atomic_cpu && wrote_volatile()))) { - _exits.insert_mem_bar(Op_MemBarRelease, alloc_with_final()); + _exits.insert_mem_bar(UseStoreStoreForCtor ? Op_MemBarStoreStore : Op_MemBarRelease, + alloc_with_final()); // If Memory barrier is created for final fields write // and allocation node does not escape the initialize method, diff --git a/src/hotspot/share/opto/stringopts.cpp b/src/hotspot/share/opto/stringopts.cpp index fca532bd9a54f..2e227be765cfa 100644 --- a/src/hotspot/share/opto/stringopts.cpp +++ b/src/hotspot/share/opto/stringopts.cpp @@ -2010,7 +2010,7 @@ void PhaseStringOpts::replace_string_concat(StringConcat* sc) { // of the initialization is committed to memory before any code publishes // a reference to the newly constructed object (see Parse::do_exits()). assert(AllocateNode::Ideal_allocation(result) != nullptr, "should be newly allocated"); - kit.insert_mem_bar(Op_MemBarRelease, result); + kit.insert_mem_bar(UseStoreStoreForCtor ? Op_MemBarStoreStore : Op_MemBarRelease, result); } else { result = C->top(); } diff --git a/test/hotspot/jtreg/compiler/c2/irTests/ConstructorBarriers.java b/test/hotspot/jtreg/compiler/c2/irTests/ConstructorBarriers.java new file mode 100644 index 0000000000000..7252427ffcdac --- /dev/null +++ b/test/hotspot/jtreg/compiler/c2/irTests/ConstructorBarriers.java @@ -0,0 +1,311 @@ +/* + * Copyright Amazon.com Inc. 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 compiler.c2.irTests; + +import compiler.lib.ir_framework.*; + +/* + * @test + * @bug 8300148 + * @summary Test barriers emitted in constructors + * @library /test/lib / + * @requires os.arch=="aarch64" | os.arch=="riscv64" | os.arch=="x86_64" | os.arch=="amd64" + * @run main compiler.c2.irTests.ConstructorBarriers + */ +public class ConstructorBarriers { + public static void main(String[] args) { + TestFramework.run(); + } + + // Checks the barrier coalescing/optimization around field initializations. + // Uses long fields to avoid store merging. + + public static class PlainPlain { + long f1; + long f2; + public PlainPlain(long i) { + f1 = i; + f2 = i; + } + } + + private static class FinalPlain { + final long f1; + long f2; + public FinalPlain(long i) { + f1 = i; + f2 = i; + } + } + + private static class PlainFinal { + long f1; + final long f2; + public PlainFinal(long i) { + f1 = i; + f2 = i; + } + } + + private static class FinalFinal { + final long f1; + final long f2; + public FinalFinal(long i) { + f1 = i; + f2 = i; + } + } + + private static class PlainVolatile { + long f1; + volatile long f2; + public PlainVolatile(long i) { + f1 = i; + f2 = i; + } + } + + private static class VolatilePlain { + volatile long f1; + long f2; + public VolatilePlain(long i) { + f1 = i; + f2 = i; + } + } + + private static class FinalVolatile { + final long f1; + volatile long f2; + public FinalVolatile(long i) { + f1 = i; + f2 = i; + } + } + + private static class VolatileFinal { + volatile long f1; + final long f2; + public VolatileFinal(long i) { + f1 = i; + f2 = i; + } + } + + private static class VolatileVolatile { + volatile long f1; + volatile long f2; + public VolatileVolatile(long i) { + f1 = i; + f2 = i; + } + } + + long l = 42; + + @DontInline + public void consume(Object o) {} + + @Test + @IR(counts = {IRNode.MEMBAR_STORESTORE, "1"}) + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + public long escaping_plainPlain() { + PlainPlain c = new PlainPlain(l); + consume(c); + return c.f1 + c.f2; + } + + @Test + @IR(counts = {IRNode.MEMBAR_STORESTORE, "1"}) + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + public long escaping_plainFinal() { + PlainFinal c = new PlainFinal(l); + consume(c); + return c.f1 + c.f2; + } + + @Test + @IR(counts = {IRNode.MEMBAR_STORESTORE, "1"}) + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + public long escaping_finalPlain() { + FinalPlain c = new FinalPlain(l); + consume(c); + return c.f1 + c.f2; + } + + @Test + @IR(counts = {IRNode.MEMBAR_STORESTORE, "1"}) + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + public long escaping_finalFinal() { + FinalFinal c = new FinalFinal(l); + consume(c); + return c.f1 + c.f2; + } + + @Test + @IR(counts = {IRNode.MEMBAR_RELEASE, "1"}) + @IR(counts = {IRNode.MEMBAR_STORESTORE, "1"}) + @IR(counts = {IRNode.MEMBAR_VOLATILE, "1"}) + public long escaping_plainVolatile() { + PlainVolatile c = new PlainVolatile(l); + consume(c); + return c.f1 + c.f2; + } + + @Test + @IR(counts = {IRNode.MEMBAR_RELEASE, "1"}) + @IR(counts = {IRNode.MEMBAR_STORESTORE, "1"}) + @IR(counts = {IRNode.MEMBAR_VOLATILE, "1"}) + public long escaping_volatilePlain() { + VolatilePlain c = new VolatilePlain(l); + consume(c); + return c.f1 + c.f2; + } + + @Test + @IR(counts = {IRNode.MEMBAR_RELEASE, "2"}) + @IR(counts = {IRNode.MEMBAR_STORESTORE, "1"}) + @IR(counts = {IRNode.MEMBAR_VOLATILE, "2"}) + public long escaping_volatileVolatile() { + VolatileVolatile c = new VolatileVolatile(l); + consume(c); + return c.f1 + c.f2; + } + + @Test + @IR(counts = {IRNode.MEMBAR_RELEASE, "1"}) + @IR(counts = {IRNode.MEMBAR_STORESTORE, "1"}) + @IR(counts = {IRNode.MEMBAR_VOLATILE, "1"}) + public long escaping_finalVolatile() { + FinalVolatile c = new FinalVolatile(l); + consume(c); + return c.f1 + c.f2; + } + + @Test + @IR(counts = {IRNode.MEMBAR_RELEASE, "1"}) + @IR(counts = {IRNode.MEMBAR_STORESTORE, "1"}) + @IR(counts = {IRNode.MEMBAR_VOLATILE, "1"}) + public long escaping_volatileFinal() { + VolatileFinal c = new VolatileFinal(l); + consume(c); + return c.f1 + c.f2; + } + + @Test + @IR(failOn = IRNode.MEMBAR) + public long non_escaping_plainPlain() { + PlainPlain c = new PlainPlain(l); + return c.f1 + c.f2; + } + + @Test + @IR(failOn = IRNode.MEMBAR) + public long non_escaping_plainFinal() { + PlainFinal c = new PlainFinal(l); + return c.f1 + c.f2; + } + + @Test + @IR(failOn = IRNode.MEMBAR) + public long non_escaping_finalPlain() { + FinalPlain c = new FinalPlain(l); + return c.f1 + c.f2; + } + + @Test + @IR(failOn = IRNode.MEMBAR) + public long non_escaping_finalFinal() { + FinalFinal c = new FinalFinal(l); + return c.f1 + c.f2; + } + + @Test + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_STORESTORE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + @IR(counts = {IRNode.MEMBAR_ACQUIRE, "1"}) + public long non_escaping_plainVolatile() { + PlainVolatile c = new PlainVolatile(l); + return c.f1 + c.f2; + } + + @Test + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_STORESTORE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + @IR(counts = {IRNode.MEMBAR_ACQUIRE, "1"}) + public long non_escaping_volatilePlain() { + VolatilePlain c = new VolatilePlain(l); + return c.f1 + c.f2; + } + + @Test + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_STORESTORE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + @IR(counts = {IRNode.MEMBAR_ACQUIRE, "2"}) + public long non_escaping_volatileVolatile() { + VolatileVolatile c = new VolatileVolatile(l); + return c.f1 + c.f2; + } + + @Test + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_STORESTORE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + @IR(counts = {IRNode.MEMBAR_ACQUIRE, "1"}) + public long non_escaping_finalVolatile() { + FinalVolatile c = new FinalVolatile(l); + return c.f1 + c.f2; + } + + @Test + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_STORESTORE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + @IR(counts = {IRNode.MEMBAR_ACQUIRE, "1"}) + public long non_escaping_volatileFinal() { + VolatileFinal c = new VolatileFinal(l); + return c.f1 + c.f2; + } + + @Setup + Object[] stringBuilderSetup() { + return new Object[] { "foo", "bar", "baz" }; + } + + @Test + @Arguments(setup = "stringBuilderSetup") + @IR(failOn = IRNode.MEMBAR_RELEASE) + @IR(failOn = IRNode.MEMBAR_VOLATILE) + @IR(counts = {IRNode.MEMBAR_STORESTORE, "3"}) + public String stringBuilder(String s1, String s2, String s3) { + return new StringBuilder().append(s1).append(s2).append(s3).toString(); + } +} diff --git a/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java b/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java index 966985400192b..449252b6badab 100644 --- a/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java +++ b/test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java @@ -887,11 +887,26 @@ public class IRNode { beforeMatchingNameRegex(MEMBAR, "MemBar"); } + public static final String MEMBAR_ACQUIRE = PREFIX + "MEMBAR_ACQUIRE" + POSTFIX; + static { + beforeMatchingNameRegex(MEMBAR_ACQUIRE, "MemBarAcquire"); + } + + public static final String MEMBAR_RELEASE = PREFIX + "MEMBAR_RELEASE" + POSTFIX; + static { + beforeMatchingNameRegex(MEMBAR_RELEASE, "MemBarRelease"); + } + public static final String MEMBAR_STORESTORE = PREFIX + "MEMBAR_STORESTORE" + POSTFIX; static { beforeMatchingNameRegex(MEMBAR_STORESTORE, "MemBarStoreStore"); } + public static final String MEMBAR_VOLATILE = PREFIX + "MEMBAR_VOLATILE" + POSTFIX; + static { + beforeMatchingNameRegex(MEMBAR_VOLATILE, "MemBarVolatile"); + } + public static final String MIN = PREFIX + "MIN" + POSTFIX; static { beforeMatchingNameRegex(MIN, "Min(I|L)"); diff --git a/test/micro/org/openjdk/bench/vm/compiler/ConstructorBarriers.java b/test/micro/org/openjdk/bench/vm/compiler/ConstructorBarriers.java new file mode 100644 index 0000000000000..7adbbe0e1a71e --- /dev/null +++ b/test/micro/org/openjdk/bench/vm/compiler/ConstructorBarriers.java @@ -0,0 +1,269 @@ +/* + * Copyright Amazon.com Inc. 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 org.openjdk.bench.vm.compiler; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.CompilerControl; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; +import org.openjdk.jmh.infra.Blackhole; +import java.util.concurrent.TimeUnit; + +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@State(Scope.Thread) +@Warmup(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS) +@Measurement(iterations = 3, time = 1, timeUnit = TimeUnit.SECONDS) +@Fork(value = 3, jvmArgsAppend = {"-Xms512m", "-Xmx512m", "-XX:+AlwaysPreTouch", "-XX:+UseParallelGC"}) +public class ConstructorBarriers { + + // Checks the barrier coalescing/optimization around field initializations. + // Uses long fields to avoid store merging. + + public static class PlainPlain { + long f1; + long f2; + public PlainPlain(long i) { + f1 = i; + f2 = i; + } + } + + private static class FinalPlain { + final long f1; + long f2; + public FinalPlain(long i) { + f1 = i; + f2 = i; + } + } + + private static class PlainFinal { + long f1; + final long f2; + public PlainFinal(long i) { + f1 = i; + f2 = i; + } + } + + private static class FinalFinal { + final long f1; + final long f2; + public FinalFinal(long i) { + f1 = i; + f2 = i; + } + } + + private static class PlainVolatile { + long f1; + volatile long f2; + public PlainVolatile(long i) { + f1 = i; + f2 = i; + } + } + + private static class VolatilePlain { + volatile long f1; + long f2; + public VolatilePlain(long i) { + f1 = i; + f2 = i; + } + } + + private static class FinalVolatile { + final long f1; + volatile long f2; + public FinalVolatile(long i) { + f1 = i; + f2 = i; + } + } + + private static class VolatileFinal { + volatile long f1; + final long f2; + public VolatileFinal(long i) { + f1 = i; + f2 = i; + } + } + + private static class VolatileVolatile { + volatile long f1; + volatile long f2; + public VolatileVolatile(long i) { + f1 = i; + f2 = i; + } + } + + long l = 42; + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long escaping_plainPlain(Blackhole bh) { + PlainPlain c = new PlainPlain(l); + bh.consume(c); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long escaping_plainFinal(Blackhole bh) { + PlainFinal c = new PlainFinal(l); + bh.consume(c); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long escaping_finalPlain(Blackhole bh) { + FinalPlain c = new FinalPlain(l); + bh.consume(c); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long escaping_finalFinal(Blackhole bh) { + FinalFinal c = new FinalFinal(l); + bh.consume(c); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long escaping_plainVolatile(Blackhole bh) { + PlainVolatile c = new PlainVolatile(l); + bh.consume(c); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long escaping_volatilePlain(Blackhole bh) { + VolatilePlain c = new VolatilePlain(l); + bh.consume(c); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long escaping_volatileVolatile(Blackhole bh) { + VolatileVolatile c = new VolatileVolatile(l); + bh.consume(c); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long escaping_finalVolatile(Blackhole bh) { + FinalVolatile c = new FinalVolatile(l); + bh.consume(c); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long escaping_volatileFinal(Blackhole bh) { + VolatileFinal c = new VolatileFinal(l); + bh.consume(c); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long non_escaping_plainPlain() { + PlainPlain c = new PlainPlain(l); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long non_escaping_plainFinal() { + PlainFinal c = new PlainFinal(l); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long non_escaping_finalPlain() { + FinalPlain c = new FinalPlain(l); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long non_escaping_finalFinal() { + FinalFinal c = new FinalFinal(l); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long non_escaping_plainVolatile() { + PlainVolatile c = new PlainVolatile(l); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long non_escaping_volatilePlain() { + VolatilePlain c = new VolatilePlain(l); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long non_escaping_volatileVolatile() { + VolatileVolatile c = new VolatileVolatile(l); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long non_escaping_finalVolatile() { + FinalVolatile c = new FinalVolatile(l); + return c.f1 + c.f2; + } + + @Benchmark + @CompilerControl(CompilerControl.Mode.DONT_INLINE) + public long non_escaping_volatileFinal() { + VolatileFinal c = new VolatileFinal(l); + return c.f1 + c.f2; + } + +} + From 25871af36b1397bdc3715ab0edc589f0483ea0b1 Mon Sep 17 00:00:00 2001 From: Phil Race <prr@openjdk.org> Date: Wed, 24 Apr 2024 17:54:10 +0000 Subject: [PATCH 092/141] 8328896: Fontmetrics for large Fonts has zero width Reviewed-by: tr, serb --- .../macosx/classes/sun/font/CStrike.java | 2 +- .../native/libawt_lwawt/font/CGGlyphImages.m | 18 ++- .../classes/sun/font/FileFontStrike.java | 16 +++ .../native/libfontmanager/freetypeScaler.c | 14 +++ .../awt/FontMetrics/ExtremeFontSizeTest.java | 118 ++++++++++++++++++ 5 files changed, 166 insertions(+), 2 deletions(-) create mode 100644 test/jdk/java/awt/FontMetrics/ExtremeFontSizeTest.java diff --git a/src/java.desktop/macosx/classes/sun/font/CStrike.java b/src/java.desktop/macosx/classes/sun/font/CStrike.java index eb049c3d449d4..b0131711ca5c3 100644 --- a/src/java.desktop/macosx/classes/sun/font/CStrike.java +++ b/src/java.desktop/macosx/classes/sun/font/CStrike.java @@ -199,7 +199,7 @@ void getGlyphImageBounds(int glyphCode, Point2D.Float pt, Rectangle result) { getGlyphImageBounds(glyphCode, pt.x, pt.y, floatRect); if (floatRect.width == 0 && floatRect.height == 0) { - result.setRect(0, 0, -1, -1); + result.setRect(0, 0, 0, 0); return; } diff --git a/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.m b/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.m index f6e8fe6af552e..ecdd6e4cdf804 100644 --- a/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.m +++ b/src/java.desktop/macosx/native/libawt_lwawt/font/CGGlyphImages.m @@ -1020,4 +1020,20 @@ @implementation CGGI_GlyphCanvas CTFontGetAdvancesForGlyphs(font, kCTFontDefaultOrientation, glyphs, advances, count); } } -} \ No newline at end of file + int MAX_SIZE = 1 << 30; + if (bboxes) { + for (int i = 0; i < count; i++) { + if (bboxes[i].origin.x > (double)MAX_SIZE) bboxes[i].origin.x = 0; + if (bboxes[i].origin.y > (double)MAX_SIZE) bboxes[i].origin.y = 0; + if (bboxes[i].size.width > (double)MAX_SIZE) bboxes[i].size.width = 0; + if (bboxes[i].size.height > (double)MAX_SIZE) bboxes[i].size.height = 0; + } + } + if (advances) { + for (int i = 0; i < count; i++) { + if (advances[i].width > (double)MAX_SIZE) advances[i].width = 0; + if (advances[i].height > (double)MAX_SIZE) advances[i].height = 0; + } + } +} + diff --git a/src/java.desktop/share/classes/sun/font/FileFontStrike.java b/src/java.desktop/share/classes/sun/font/FileFontStrike.java index ea2a1608f2d17..bf98b8ca57863 100644 --- a/src/java.desktop/share/classes/sun/font/FileFontStrike.java +++ b/src/java.desktop/share/classes/sun/font/FileFontStrike.java @@ -37,6 +37,7 @@ import java.awt.geom.Rectangle2D; import java.util.concurrent.ConcurrentHashMap; import static sun.awt.SunHints.*; +import sun.java2d.pipe.OutlineTextRenderer; public class FileFontStrike extends PhysicalStrike { @@ -107,6 +108,7 @@ public class FileFontStrike extends PhysicalStrike { boolean useNatives; NativeStrike[] nativeStrikes; + static final int MAX_IMAGE_SIZE = OutlineTextRenderer.THRESHHOLD; /* Used only for communication to native layer */ private int intPtSize; @@ -697,6 +699,20 @@ float getCodePointAdvance(int cp) { void getGlyphImageBounds(int glyphCode, Point2D.Float pt, Rectangle result) { + if (intPtSize > MAX_IMAGE_SIZE) { + Rectangle.Float obds = getGlyphOutlineBounds(glyphCode); + if (obds.isEmpty()) { + Rectangle bds = getGlyphOutline(glyphCode, pt.x, pt.y).getBounds(); + result.setBounds(bds); + } else { + result.x = (int)Math.floor(pt.x + obds.getX() + 0.5f); + result.y = (int)Math.floor(pt.y + obds.getY() + 0.5f); + result.width = (int)Math.floor(obds.getWidth() + 0.5f); + result.height = (int)Math.floor(obds.getHeight() + 0.5f); + } + return; + } + long ptr = getGlyphImagePtr(glyphCode); float topLeftX, topLeftY; diff --git a/src/java.desktop/share/native/libfontmanager/freetypeScaler.c b/src/java.desktop/share/native/libfontmanager/freetypeScaler.c index 21ac280f0fb0b..f9ebacad66be8 100644 --- a/src/java.desktop/share/native/libfontmanager/freetypeScaler.c +++ b/src/java.desktop/share/native/libfontmanager/freetypeScaler.c @@ -504,6 +504,8 @@ static double euclidianDistance(double a, double b) { return sqrt(a*a+b*b); } +#define TOO_LARGE(a, b) (abs((int)(a / b)) > 32766) + JNIEXPORT jlong JNICALL Java_sun_font_FreetypeFontScaler_createScalerContextNative( JNIEnv *env, jobject scaler, jlong pScaler, jdoubleArray matrix, @@ -515,6 +517,7 @@ Java_sun_font_FreetypeFontScaler_createScalerContextNative( (FTScalerInfo*) jlong_to_ptr(pScaler); if (context == NULL) { + free(context); invalidateJavaScaler(env, scaler, NULL); return (jlong) 0; } @@ -524,7 +527,18 @@ Java_sun_font_FreetypeFontScaler_createScalerContextNative( //text can not be smaller than 1 point ptsz = 1.0; } + if (ptsz > 16384) { + ptsz = 16384; // far enough from 32767 + fm = TEXT_FM_ON; // avoids calculations which might overflow + } context->ptsz = (int)(ptsz * 64); + if (TOO_LARGE(dmat[0], ptsz) || TOO_LARGE(dmat[1], ptsz) || + TOO_LARGE(dmat[2], ptsz) || TOO_LARGE(dmat[3], ptsz)) + { + free(context); + return (jlong)0; + } + context->transform.xx = FloatToFTFixed((float)(dmat[0]/ptsz)); context->transform.yx = -FloatToFTFixed((float)(dmat[1]/ptsz)); context->transform.xy = -FloatToFTFixed((float)(dmat[2]/ptsz)); diff --git a/test/jdk/java/awt/FontMetrics/ExtremeFontSizeTest.java b/test/jdk/java/awt/FontMetrics/ExtremeFontSizeTest.java new file mode 100644 index 0000000000000..caa365a3f219f --- /dev/null +++ b/test/jdk/java/awt/FontMetrics/ExtremeFontSizeTest.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2024, 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.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.awt.image.BufferedImage; + +/* + * @test + * @bug 8328896 + * @summary test that using very large font sizes used don't break later uses + */ + +public class ExtremeFontSizeTest { + + static BufferedImage bi = new BufferedImage(1,1,1); + static Graphics2D g2d = bi.createGraphics(); + static String testString = "M"; + static Font font = new Font("SansSerif", Font.PLAIN, 12); + static int fontSize = 0; + static boolean failed = false; + static int[] fontSizes = { 10, 12, 1000, 2000, 20000, 100000, 8 }; + static double[] scales = { 1.0, 900.0}; + static boolean[] fms = { false, true }; + + public static void main(String[] args) { + + /* run tests validating bounds etc are non-zero + * then run with extreme scales for which zero is allowed - but not required + * then run the first tests again to be sure they are still reasonable. + */ + runTests(); + test(5_000_000, 10_000, false, testString, false); + test(5_000_000, 10_000, true, testString, false); + test(0, 0.00000001, false, testString, false); + runTests(); + + if (failed) { + throw new RuntimeException("Test failed. Check stdout log."); + } + } + + static void runTests() { + for (int fontSize : fontSizes) { + for (double scale : scales) { + for (boolean fm : fms) { + test(fontSize, scale, fm, testString, true); + } + } + } + } + + static void test(int size, double scale, boolean fm, String str, boolean checkAll) { + + AffineTransform at = AffineTransform.getScaleInstance(scale, scale); + FontRenderContext frc = new FontRenderContext(at, false, fm); + font = font.deriveFont((float)size); + g2d.setTransform(at); + g2d.setFont(font); + FontMetrics metrics = g2d.getFontMetrics(); + int height = metrics.getHeight(); + double width = font.getStringBounds(str, frc).getWidth(); + + GlyphVector gv = font.createGlyphVector(frc, str.toCharArray()); + Rectangle pixelBounds = gv.getPixelBounds(frc, 0, 0); + Rectangle2D visualBounds = gv.getVisualBounds(); + + System.out.println("Test parameters: size="+size+" scale="+scale+" fm="+fm+" str="+str); + System.out.println("font height="+metrics.getHeight()); + System.out.println("string bounds width="+width); + System.out.println("GlyphVector Pixel Bounds="+ pixelBounds); + System.out.println("GlyphVector Visual Bounds="+ visualBounds); + + + if (height < 0 || width < 0 || pixelBounds.getWidth() < 0 || visualBounds.getWidth() < 0) { + failed = true; + System.out.println(" *** Unexpected negative size reported *** "); + } + if (!checkAll) { + System.out.println(); + return; + } + + if (height == 0 || width == 0 || (pixelBounds.isEmpty()) || visualBounds.isEmpty() ) { + failed = true; + System.out.println("Pixel bounds empty="+pixelBounds.isEmpty()); + System.out.println("Visual bounds empty="+visualBounds.isEmpty()); + System.out.println(" *** RESULTS NOT AS EXPECTED *** "); + } + System.out.println(); + } +} From 7b2560b4904d80629d3f4f25c65d9b96eee9bdb6 Mon Sep 17 00:00:00 2001 From: Roman Kennke <rkennke@openjdk.org> Date: Wed, 24 Apr 2024 18:56:47 +0000 Subject: [PATCH 093/141] 8330849: Add test to verify memory usage with recursive locking Reviewed-by: lmesnik, shade --- .../locking/TestRecursiveMonitorChurn.java | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 test/hotspot/jtreg/runtime/locking/TestRecursiveMonitorChurn.java diff --git a/test/hotspot/jtreg/runtime/locking/TestRecursiveMonitorChurn.java b/test/hotspot/jtreg/runtime/locking/TestRecursiveMonitorChurn.java new file mode 100644 index 0000000000000..47cb561317196 --- /dev/null +++ b/test/hotspot/jtreg/runtime/locking/TestRecursiveMonitorChurn.java @@ -0,0 +1,95 @@ +/* + * Copyright Amazon.com Inc. 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 jdk.test.lib.process.OutputAnalyzer; +import jdk.test.lib.process.ProcessTools; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/* + * @test + * @summary Tests that recursive locking doesn't cause excessive native memory usage + * @library /test/lib + * @run driver TestRecursiveMonitorChurn + */ +public class TestRecursiveMonitorChurn { + static class Monitor { + public static volatile int i, j; + synchronized void doSomething() { + i++; + doSomethingElse(); + } + synchronized void doSomethingElse() { + j++; + } + } + + public static volatile Monitor monitor; + public static void main(String[] args) throws IOException { + if (args.length == 1 && args[0].equals("test")) { + // The actual test, in a forked JVM. + for (int i = 0; i < 100000; i++) { + monitor = new Monitor(); + monitor.doSomething(); + } + System.out.println("i + j = " + (Monitor.i + Monitor.j)); + } else { + ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder( + "-XX:+UnlockDiagnosticVMOptions", + "-Xmx100M", "-XX:AsyncDeflationInterval=0", "-XX:GuaranteedAsyncDeflationInterval=0", + "-XX:NativeMemoryTracking=summary", "-XX:+PrintNMTStatistics", + "TestRecursiveMonitorChurn", + "test"); + OutputAnalyzer output = new OutputAnalyzer(pb.start()); + output.reportDiagnosticSummary(); + + output.shouldHaveExitValue(0); + + // We want to see, in the final NMT printout, a committed object monitor size that is reasonably low. + // Like this: + // - Object Monitors (reserved=208, committed=208) + // (malloc=208 #1) (at peak) + // + // Without recursive locking support, this would look more like this: + // - Object Monitors (reserved=20800624, committed=20800624) + // (malloc=20800624 #100003) (at peak) + + Pattern pat = Pattern.compile("- *Object Monitors.*reserved=(\\d+), committed=(\\d+).*"); + for (String line : output.asLines()) { + Matcher m = pat.matcher(line); + if (m.matches()) { + long reserved = Long.parseLong(m.group(1)); + long committed = Long.parseLong(m.group(2)); + System.out.println(">>>>> " + line + ": " + reserved + " - " + committed); + if (committed > 1000) { + throw new RuntimeException("Allocated too many monitors"); + } + return; + } + } + throw new RuntimeException("Did not find expected NMT output"); + } + } +} From ea3909acd117cab97c6c0b496f98f9a4a3a22be4 Mon Sep 17 00:00:00 2001 From: Emanuel Peter <epeter@openjdk.org> Date: Wed, 24 Apr 2024 19:06:46 +0000 Subject: [PATCH 094/141] 8331054: C2 MergeStores: assert failed: unexpected basic type after JDK-8318446 and JDK-8329555 Reviewed-by: thartmann, kvn --- src/hotspot/share/opto/memnode.cpp | 17 ++++-- .../jtreg/compiler/c2/TestMergeStores.java | 58 ++++++++++++++++++- 2 files changed, 68 insertions(+), 7 deletions(-) diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp index dea4640b9d15c..4eae4a49dbb9e 100644 --- a/src/hotspot/share/opto/memnode.cpp +++ b/src/hotspot/share/opto/memnode.cpp @@ -2972,8 +2972,12 @@ StoreNode* MergePrimitiveArrayStores::run() { // Only merge stores on arrays, and the stores must have the same size as the elements. const TypeAryPtr* aryptr_t = _store->adr_type()->isa_aryptr(); - if (aryptr_t == nullptr || - type2aelembytes(aryptr_t->elem()->array_element_basic_type()) != _store->memory_size()) { + if (aryptr_t == nullptr) { + return nullptr; + } + BasicType bt = aryptr_t->elem()->array_element_basic_type(); + if (!is_java_primitive(bt) || + type2aelembytes(bt) != _store->memory_size()) { return nullptr; } @@ -3019,8 +3023,13 @@ bool MergePrimitiveArrayStores::is_compatible_store(const StoreNode* other_store // Check that the size of the stores, and the array elements are all the same. const TypeAryPtr* aryptr_t1 = _store->adr_type()->is_aryptr(); const TypeAryPtr* aryptr_t2 = other_store->adr_type()->is_aryptr(); - int size1 = type2aelembytes(aryptr_t1->elem()->array_element_basic_type()); - int size2 = type2aelembytes(aryptr_t2->elem()->array_element_basic_type()); + BasicType aryptr_bt1 = aryptr_t1->elem()->array_element_basic_type(); + BasicType aryptr_bt2 = aryptr_t2->elem()->array_element_basic_type(); + if (!is_java_primitive(aryptr_bt1) || !is_java_primitive(aryptr_bt2)) { + return false; + } + int size1 = type2aelembytes(aryptr_bt1); + int size2 = type2aelembytes(aryptr_bt2); if (size1 != size2 || size1 != _store->memory_size() || _store->memory_size() != other_store->memory_size()) { diff --git a/test/hotspot/jtreg/compiler/c2/TestMergeStores.java b/test/hotspot/jtreg/compiler/c2/TestMergeStores.java index 0af46b56a56c0..2f662a1ed263c 100644 --- a/test/hotspot/jtreg/compiler/c2/TestMergeStores.java +++ b/test/hotspot/jtreg/compiler/c2/TestMergeStores.java @@ -33,7 +33,7 @@ /* * @test - * @bug 8318446 + * @bug 8318446 8331054 * @summary Test merging of consecutive stores * @modules java.base/jdk.internal.misc * @library /test/lib / @@ -42,7 +42,7 @@ /* * @test - * @bug 8318446 + * @bug 8318446 8331054 * @summary Test merging of consecutive stores * @modules java.base/jdk.internal.misc * @library /test/lib / @@ -183,6 +183,10 @@ public TestMergeStores() { // +-----+ +-------------------+ // First use something in range, and after warmup randomize going outside the range. // Consequence: all RangeChecks stay in the final compilation. + + testGroups.put("test600", new HashMap<String,TestFunction>()); + testGroups.get("test600").put("test600R", (_,i) -> { return test600R(aB.clone(), aI.clone(), i); }); + testGroups.get("test600").put("test600a", (_,i) -> { return test600a(aB.clone(), aI.clone(), i); }); } @Warmup(100) @@ -215,7 +219,8 @@ public TestMergeStores() { "test400a", "test500a", "test501a", - "test502a"}) + "test502a", + "test600a"}) public void runTests(RunInfo info) { // Repeat many times, so that we also have multiple iterations for post-warmup to potentially recompile int iters = info.isWarmUp() ? 1_000 : 50_000; @@ -1244,4 +1249,51 @@ static Object[] test502a(byte[] a, int offset, long v) { } catch (ArrayIndexOutOfBoundsException _) {} return new Object[]{ a, new int[]{ idx } }; } + + @DontCompile + static Object[] test600R(byte[] aB, int[] aI, int i) { + Object a = null; + long base = 0; + if (i % 2 == 0) { + a = aB; + base = UNSAFE.ARRAY_BYTE_BASE_OFFSET; + } else { + a = aI; + base = UNSAFE.ARRAY_INT_BASE_OFFSET; + } + UNSAFE.putByte(a, base + 0, (byte)0xbe); + UNSAFE.putByte(a, base + 1, (byte)0xba); + UNSAFE.putByte(a, base + 2, (byte)0xad); + UNSAFE.putByte(a, base + 3, (byte)0xba); + UNSAFE.putByte(a, base + 4, (byte)0xef); + UNSAFE.putByte(a, base + 5, (byte)0xbe); + UNSAFE.putByte(a, base + 6, (byte)0xad); + UNSAFE.putByte(a, base + 7, (byte)0xde); + return new Object[]{ aB, aI }; + } + + @Test + @IR(counts = {IRNode.STORE_B_OF_CLASS, "bottom\\\\[int:>=0] \\\\(java/lang/Cloneable,java/io/Serializable\\\\)", "8"}) // note: bottom type + static Object[] test600a(byte[] aB, int[] aI, int i) { + Object a = null; + long base = 0; + if (i % 2 == 0) { + a = aB; + base = UNSAFE.ARRAY_BYTE_BASE_OFFSET; + } else { + a = aI; + base = UNSAFE.ARRAY_INT_BASE_OFFSET; + } + // array a is an aryptr, but its element type is unknown, i.e. bottom. + UNSAFE.putByte(a, base + 0, (byte)0xbe); + UNSAFE.putByte(a, base + 1, (byte)0xba); + UNSAFE.putByte(a, base + 2, (byte)0xad); + UNSAFE.putByte(a, base + 3, (byte)0xba); + UNSAFE.putByte(a, base + 4, (byte)0xef); + UNSAFE.putByte(a, base + 5, (byte)0xbe); + UNSAFE.putByte(a, base + 6, (byte)0xad); + UNSAFE.putByte(a, base + 7, (byte)0xde); + return new Object[]{ aB, aI }; + } + } From 0014e0e6b90502ed284a57ce2d1ff48843cbc0fa Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang <ayang@openjdk.org> Date: Wed, 24 Apr 2024 19:56:20 +0000 Subject: [PATCH 095/141] 8331061: Serial: Missed BOT update in TenuredGeneration::expand_and_allocate Reviewed-by: tschatzl, gli --- src/hotspot/share/gc/serial/tenuredGeneration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index 35dc84773aab2..e7cf16ea9afe1 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -480,7 +480,7 @@ HeapWord* TenuredGeneration::expand_and_allocate(size_t word_size, bool is_tlab) { assert(!is_tlab, "TenuredGeneration does not support TLAB allocation"); expand(word_size*HeapWordSize, _min_heap_delta_bytes); - return _the_space->allocate(word_size); + return allocate(word_size, is_tlab); } size_t TenuredGeneration::contiguous_available() const { From 8a8d9288980513db459f7d6b36554b65844951ca Mon Sep 17 00:00:00 2001 From: Martin Balao <mbalao@openjdk.org> Date: Wed, 24 Apr 2024 20:23:25 +0000 Subject: [PATCH 096/141] 8330611: AES-CTR vector intrinsic may read out of bounds (x86_64, AVX-512) Co-authored-by: Francisco Ferrari Bihurriet <fferrari@openjdk.org> Co-authored-by: Martin Balao <mbalao@openjdk.org> Reviewed-by: aph, sviswanathan --- src/hotspot/cpu/x86/assembler_x86.cpp | 8 ++++++++ src/hotspot/cpu/x86/assembler_x86.hpp | 1 + .../cpu/x86/stubGenerator_x86_64_aes.cpp | 18 +++++++++++++----- 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/hotspot/cpu/x86/assembler_x86.cpp b/src/hotspot/cpu/x86/assembler_x86.cpp index f5a6cb845addc..bcf4d5ea13b60 100644 --- a/src/hotspot/cpu/x86/assembler_x86.cpp +++ b/src/hotspot/cpu/x86/assembler_x86.cpp @@ -6650,6 +6650,14 @@ void Assembler::xorw(Register dst, Register src) { emit_arith(0x33, 0xC0, dst, src); } +void Assembler::xorw(Register dst, Address src) { + InstructionMark im(this); + emit_int8(0x66); + prefix(src, dst); + emit_int8(0x33); + emit_operand(dst, src, 0); +} + // AVX 3-operands scalar float-point arithmetic instructions void Assembler::vaddsd(XMMRegister dst, XMMRegister nds, Address src) { diff --git a/src/hotspot/cpu/x86/assembler_x86.hpp b/src/hotspot/cpu/x86/assembler_x86.hpp index a8747a4308aa6..097bc9de62a39 100644 --- a/src/hotspot/cpu/x86/assembler_x86.hpp +++ b/src/hotspot/cpu/x86/assembler_x86.hpp @@ -2262,6 +2262,7 @@ class Assembler : public AbstractAssembler { void xorb(Address dst, Register src); void xorb(Register dst, Address src); void xorw(Register dst, Register src); + void xorw(Register dst, Address src); void xorq(Register dst, Address src); void xorq(Address dst, int32_t imm32); diff --git a/src/hotspot/cpu/x86/stubGenerator_x86_64_aes.cpp b/src/hotspot/cpu/x86/stubGenerator_x86_64_aes.cpp index 1a256d0913deb..9744169498c8b 100644 --- a/src/hotspot/cpu/x86/stubGenerator_x86_64_aes.cpp +++ b/src/hotspot/cpu/x86/stubGenerator_x86_64_aes.cpp @@ -2181,6 +2181,7 @@ void StubGenerator::aesctr_encrypt(Register src_addr, Register dest_addr, Regist const Register rounds = rax; const Register pos = r12; + const Register tail = r15; Label PRELOOP_START, EXIT_PRELOOP, REMAINDER, REMAINDER_16, LOOP, END, EXIT, END_LOOP, AES192, AES256, AES192_REMAINDER16, REMAINDER16_END_LOOP, AES256_REMAINDER16, @@ -2615,29 +2616,36 @@ void StubGenerator::aesctr_encrypt(Register src_addr, Register dest_addr, Regist // Save encrypted counter value in xmm0 for next invocation, before XOR operation __ movdqu(Address(saved_encCounter_start, 0), xmm0); // XOR encryted block cipher in xmm0 with PT to produce CT - __ evpxorq(xmm0, xmm0, Address(src_addr, pos, Address::times_1, 0), Assembler::AVX_128bit); // extract up to 15 bytes of CT from xmm0 as specified by length register __ testptr(len_reg, 8); __ jcc(Assembler::zero, EXTRACT_TAIL_4BYTES); - __ pextrq(Address(dest_addr, pos), xmm0, 0); + __ pextrq(tail, xmm0, 0); + __ xorq(tail, Address(src_addr, pos, Address::times_1, 0)); + __ movq(Address(dest_addr, pos), tail); __ psrldq(xmm0, 8); __ addl(pos, 8); __ bind(EXTRACT_TAIL_4BYTES); __ testptr(len_reg, 4); __ jcc(Assembler::zero, EXTRACT_TAIL_2BYTES); - __ pextrd(Address(dest_addr, pos), xmm0, 0); + __ pextrd(tail, xmm0, 0); + __ xorl(tail, Address(src_addr, pos, Address::times_1, 0)); + __ movl(Address(dest_addr, pos), tail); __ psrldq(xmm0, 4); __ addq(pos, 4); __ bind(EXTRACT_TAIL_2BYTES); __ testptr(len_reg, 2); __ jcc(Assembler::zero, EXTRACT_TAIL_1BYTE); - __ pextrw(Address(dest_addr, pos), xmm0, 0); + __ pextrw(tail, xmm0, 0); + __ xorw(tail, Address(src_addr, pos, Address::times_1, 0)); + __ movw(Address(dest_addr, pos), tail); __ psrldq(xmm0, 2); __ addl(pos, 2); __ bind(EXTRACT_TAIL_1BYTE); __ testptr(len_reg, 1); __ jcc(Assembler::zero, END); - __ pextrb(Address(dest_addr, pos), xmm0, 0); + __ pextrb(tail, xmm0, 0); + __ xorb(tail, Address(src_addr, pos, Address::times_1, 0)); + __ movb(Address(dest_addr, pos), tail); __ addl(pos, 1); __ bind(END); From a44ac026c599df629305588e09fbbcff9be2a5c0 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov <kvn@openjdk.org> Date: Wed, 24 Apr 2024 20:42:50 +0000 Subject: [PATCH 097/141] 8330853: Add missing checks for ConnectionGraph::can_reduce_cmp() call Reviewed-by: iveresov, dlong, cslucas --- src/hotspot/share/opto/escape.cpp | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/src/hotspot/share/opto/escape.cpp b/src/hotspot/share/opto/escape.cpp index 55d54d44545b7..c82eaad50e1ba 100644 --- a/src/hotspot/share/opto/escape.cpp +++ b/src/hotspot/share/opto/escape.cpp @@ -492,11 +492,11 @@ bool ConnectionGraph::can_reduce_phi_check_inputs(PhiNode* ophi) const { // I require the 'other' input to be a constant so that I can move the Cmp // around safely. bool ConnectionGraph::can_reduce_cmp(Node* n, Node* cmp) const { + assert(cmp->Opcode() == Op_CmpP || cmp->Opcode() == Op_CmpN, "not expected node: %s", cmp->Name()); Node* left = cmp->in(1); Node* right = cmp->in(2); - return (cmp->Opcode() == Op_CmpP || cmp->Opcode() == Op_CmpN) && - (left == n || right == n) && + return (left == n || right == n) && (left->is_Con() || right->is_Con()) && cmp->outcnt() == 1; } @@ -559,8 +559,12 @@ bool ConnectionGraph::can_reduce_check_users(Node* n, uint nesting) const { } else if (use->is_CastPP()) { const Type* cast_t = _igvn->type(use); if (cast_t == nullptr || cast_t->make_ptr()->isa_instptr() == nullptr) { - NOT_PRODUCT(use->dump();) - NOT_PRODUCT(if (TraceReduceAllocationMerges) tty->print_cr("Can NOT reduce Phi %d on invocation %d. CastPP is not to an instance.", n->_idx, _invocation);) +#ifndef PRODUCT + if (TraceReduceAllocationMerges) { + tty->print_cr("Can NOT reduce Phi %d on invocation %d. CastPP is not to an instance.", n->_idx, _invocation); + use->dump(); + } +#endif return false; } @@ -570,11 +574,18 @@ bool ConnectionGraph::can_reduce_check_users(Node* n, uint nesting) const { // CmpP/N used by the If controlling the cast. if (use->in(0)->is_IfTrue() || use->in(0)->is_IfFalse()) { Node* iff = use->in(0)->in(0); - Node* iff_cmp = iff->in(1)->in(1); // if->bool->cmp - if (!can_reduce_cmp(n, iff_cmp)) { - NOT_PRODUCT(if (TraceReduceAllocationMerges) tty->print_cr("Can NOT reduce Phi %d on invocation %d. CastPP %d doesn't have simple control.", n->_idx, _invocation, use->_idx);) - NOT_PRODUCT(n->dump(5);) - return false; + if (iff->Opcode() == Op_If && iff->in(1)->is_Bool() && iff->in(1)->in(1)->is_Cmp()) { + Node* iff_cmp = iff->in(1)->in(1); + int opc = iff_cmp->Opcode(); + if ((opc == Op_CmpP || opc == Op_CmpN) && !can_reduce_cmp(n, iff_cmp)) { +#ifndef PRODUCT + if (TraceReduceAllocationMerges) { + tty->print_cr("Can NOT reduce Phi %d on invocation %d. CastPP %d doesn't have simple control.", n->_idx, _invocation, use->_idx); + n->dump(5); + } +#endif + return false; + } } } } From e6118ce784342e1f1996f1569cf636a6b435145d Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons <jjg@openjdk.org> Date: Wed, 24 Apr 2024 20:45:23 +0000 Subject: [PATCH 098/141] 8331018: Clean up non-standard use of /** comments in `jdk.jshell` Reviewed-by: iris, darcy, jlahoda --- src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java | 2 +- src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java | 2 +- src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java | 2 +- .../share/classes/jdk/jshell/MaskCommentsAndModifiers.java | 2 +- src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java | 2 +- src/jdk.jshell/share/classes/jdk/jshell/Snippet.java | 2 +- src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java b/src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java index 1e6cc0f4534f2..df21f17898931 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/DeclarationSnippet.java @@ -65,7 +65,7 @@ public abstract class DeclarationSnippet extends PersistentSnippet { this.bodyReferences = bodyReferences; } - /**** internal access ****/ + //*** internal access **** /** * @return the corralled guts diff --git a/src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java b/src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java index 887e8dc9a34ec..064bcbaf55629 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/ExpressionSnippet.java @@ -65,7 +65,7 @@ public String typeName() { return key().typeName(); } - /**** internal access ****/ + //**** internal access **** @Override ExpressionKey key() { diff --git a/src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java b/src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java index ea30984b64068..188b34ab183e8 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/ImportSnippet.java @@ -96,7 +96,7 @@ public boolean isStatic() { return isStatic; } - /**** internal access ****/ + //**** internal access **** @Override ImportKey key() { diff --git a/src/jdk.jshell/share/classes/jdk/jshell/MaskCommentsAndModifiers.java b/src/jdk.jshell/share/classes/jdk/jshell/MaskCommentsAndModifiers.java index 8d5198758fb70..5a6c1688dc08d 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/MaskCommentsAndModifiers.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/MaskCommentsAndModifiers.java @@ -107,7 +107,7 @@ boolean endsWithOpenToken() { return openToken; } - /****** private implementation methods ******/ + //****** private implementation methods ****** /** * Read the next character diff --git a/src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java b/src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java index c231fbe672df3..3642ed3fc06c5 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/MethodSnippet.java @@ -85,7 +85,7 @@ public String toString() { return sb.toString(); } - /**** internal access ****/ + //**** internal access **** @Override MethodKey key() { diff --git a/src/jdk.jshell/share/classes/jdk/jshell/Snippet.java b/src/jdk.jshell/share/classes/jdk/jshell/Snippet.java index 70e556e40f215..2b4d817a588b6 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/Snippet.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/Snippet.java @@ -593,7 +593,7 @@ public boolean isDefined() { setSequenceNumber(0); } - /**** public access ****/ + //**** public access **** /** * The unique identifier for the snippet. No two active snippets will have diff --git a/src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java b/src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java index 0e71784ec08ac..fb6378b24f93f 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/TypeDeclSnippet.java @@ -50,7 +50,7 @@ public class TypeDeclSnippet extends DeclarationSnippet { declareReferences, bodyReferences, syntheticDiags); } - /**** internal access ****/ + //**** internal access **** @Override TypeDeclKey key() { From 21480a7ae8dce67cf3a844d8caafb0b96c37ac0e Mon Sep 17 00:00:00 2001 From: Tejesh R <tr@openjdk.org> Date: Thu, 25 Apr 2024 04:31:55 +0000 Subject: [PATCH 099/141] 8322135: Printing JTable in Windows L&F throws InternalError: HTHEME is null Reviewed-by: abhiscxk, honkar, aivanov --- .../classes/sun/awt/windows/ThemeReader.java | 19 ++++++++++++++----- .../swing/JTable/JTableScrollPrintTest.java | 2 +- .../javax/swing/JTable/PrintAllPagesTest.java | 4 ++-- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/java.desktop/windows/classes/sun/awt/windows/ThemeReader.java b/src/java.desktop/windows/classes/sun/awt/windows/ThemeReader.java index 61972bf4ed57d..7c0d8c1ea4d19 100644 --- a/src/java.desktop/windows/classes/sun/awt/windows/ThemeReader.java +++ b/src/java.desktop/windows/classes/sun/awt/windows/ThemeReader.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2024, 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 @@ -100,21 +100,30 @@ public static boolean isXPStyleEnabled() { return xpStyleEnabled; } - private static Long openThemeImpl(String widget, int dpi) { - Long theme; + private static long openThemeImpl(String widget, int dpi) { + long theme; int i = widget.indexOf("::"); if (i > 0) { // We're using the syntax "subAppName::controlName" here, as used by msstyles. // See documentation for SetWindowTheme on MSDN. setWindowTheme(widget.substring(0, i)); - theme = openTheme(widget.substring(i + 2), dpi); + theme = getOpenThemeValue(widget.substring(i + 2), dpi); setWindowTheme(null); } else { - theme = openTheme(widget, dpi); + theme = getOpenThemeValue(widget, dpi); } return theme; } + private static long getOpenThemeValue(String widget, int dpi) { + long theme; + theme = openTheme(widget, dpi); + if (theme == 0) { + theme = openTheme(widget, defaultDPI); + } + return theme; + } + // this should be called only with writeLock held private static Long getThemeImpl(String widget, int dpi) { return dpiAwareWidgetToTheme.computeIfAbsent(dpi, key -> new HashMap<>()) diff --git a/test/jdk/javax/swing/JTable/JTableScrollPrintTest.java b/test/jdk/javax/swing/JTable/JTableScrollPrintTest.java index 5621b35934606..a2bd03081a9bc 100644 --- a/test/jdk/javax/swing/JTable/JTableScrollPrintTest.java +++ b/test/jdk/javax/swing/JTable/JTableScrollPrintTest.java @@ -41,7 +41,7 @@ /* * @test * @key headful - * @bug 8210807 8322140 + * @bug 8210807 8322140 8322135 * @library /java/awt/regtesthelpers * @build PassFailJFrame * @summary Test to check if JTable can be printed when JScrollPane added to it. diff --git a/test/jdk/javax/swing/JTable/PrintAllPagesTest.java b/test/jdk/javax/swing/JTable/PrintAllPagesTest.java index 263415f641b48..284fbe57097b8 100644 --- a/test/jdk/javax/swing/JTable/PrintAllPagesTest.java +++ b/test/jdk/javax/swing/JTable/PrintAllPagesTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ */ /* * @test - * @bug 8257810 + * @bug 8257810 8322135 * @library /java/awt/regtesthelpers * @build PassFailJFrame * @summary Verifies if all pages are printed if scrollRectToVisible is set. From d43654e5733a4ad535e95d908de528ef29285e92 Mon Sep 17 00:00:00 2001 From: Christian Stein <cstein@openjdk.org> Date: Thu, 25 Apr 2024 06:49:45 +0000 Subject: [PATCH 100/141] 8331030: langtools/tools/javac/tree tests fail with SOE with fastdebug and -Xcomp Reviewed-by: jjg, vromero --- .../patterns/SOEDeeplyNestedBlocksTest.java | 1183 +---------------- 1 file changed, 28 insertions(+), 1155 deletions(-) diff --git a/test/langtools/tools/javac/patterns/SOEDeeplyNestedBlocksTest.java b/test/langtools/tools/javac/patterns/SOEDeeplyNestedBlocksTest.java index e521f062748cf..4e738cce02809 100644 --- a/test/langtools/tools/javac/patterns/SOEDeeplyNestedBlocksTest.java +++ b/test/langtools/tools/javac/patterns/SOEDeeplyNestedBlocksTest.java @@ -23,1165 +23,38 @@ /** * @test - * @bug 8322992 + * @bug 8322992 8331030 * @summary Javac fails with StackOverflowError when compiling deeply nested synchronized blocks - * @compile SOEDeeplyNestedBlocksTest.java + * @run main SOEDeeplyNestedBlocksTest */ +import java.net.*; +import java.util.*; +import javax.tools.*; + public class SOEDeeplyNestedBlocksTest { - public static void test() { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - synchronized (SOEDeeplyNestedBlocksTest.class) { - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } + static final int NESTING_DEPTH = 1000; + + public static void main(String... args) { + var lines = new ArrayList<String>(); + lines.add("class Test {"); + lines.add(" static { "); + for (int i = 0; i < NESTING_DEPTH; i++) lines.add(" synchronized (Test.class) {"); + for (int i = 0; i < NESTING_DEPTH; i++) lines.add(" }"); + lines.add(" }"); + lines.add("}"); + + var source = SimpleJavaFileObject.forSource(URI.create("mem://Test.java"), String.join("\n", lines)); + var compiler = ToolProvider.getSystemJavaCompiler(); + var task = compiler.getTask(null, null, noErrors, null, null, List.of(source)); + task.call(); + } + + static DiagnosticListener<? super JavaFileObject> noErrors = d -> { + System.out.println(d); + if (d.getKind() == Diagnostic.Kind.ERROR) { + throw new AssertionError(d.getMessage(null)); } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } - } + }; } From e818ab60a0c1dac277b8b15301cdfb7d439ed26c Mon Sep 17 00:00:00 2001 From: Christoph Langer <clanger@openjdk.org> Date: Thu, 25 Apr 2024 06:53:36 +0000 Subject: [PATCH 101/141] 8330815: Use pattern matching for instanceof in KeepAliveCache Reviewed-by: jpai, djelinski --- .../share/classes/sun/net/www/http/KeepAliveCache.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java b/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java index 6c601793c491a..153de588938ca 100644 --- a/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java +++ b/src/java.base/share/classes/sun/net/www/http/KeepAliveCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2024, 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 @@ -389,9 +389,9 @@ public KeepAliveKey(URL url, Object obj) { */ @Override public boolean equals(Object obj) { - if ((obj instanceof KeepAliveKey) == false) + if (!(obj instanceof KeepAliveKey kae)) return false; - KeepAliveKey kae = (KeepAliveKey)obj; + return host.equals(kae.host) && (port == kae.port) && protocol.equals(kae.protocol) @@ -405,7 +405,7 @@ public boolean equals(Object obj) { @Override public int hashCode() { String str = protocol+host+port; - return this.obj == null? str.hashCode() : + return this.obj == null ? str.hashCode() : str.hashCode() + this.obj.hashCode(); } } From ccc0d0f7b194a9941e2cadba1c389aa0834c52e4 Mon Sep 17 00:00:00 2001 From: Adam Sotona <asotona@openjdk.org> Date: Thu, 25 Apr 2024 07:04:39 +0000 Subject: [PATCH 102/141] 8325373: Improve StackCounter error reporting for bad switch cases Reviewed-by: psandoz --- .../internal/classfile/impl/StackCounter.java | 30 ++++++++---- .../classfile/impl/StackMapGenerator.java | 33 +------------ .../jdk/internal/classfile/impl/Util.java | 46 ++++++++++++++++++- 3 files changed, 67 insertions(+), 42 deletions(-) diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/StackCounter.java b/src/java.base/share/classes/jdk/internal/classfile/impl/StackCounter.java index 688af262c7053..0b52d4e1ea595 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/StackCounter.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/StackCounter.java @@ -37,6 +37,8 @@ import java.util.Queue; import static java.lang.classfile.ClassFile.*; +import java.lang.constant.ClassDesc; +import java.util.stream.Collectors; public final class StackCounter { @@ -45,6 +47,7 @@ private record Target(int bci, int stack) {} static StackCounter of(DirectCodeBuilder dcb, BufWriterImpl buf) { return new StackCounter( dcb, + buf.thisClass().asSymbol(), dcb.methodInfo.methodName().stringValue(), dcb.methodInfo.methodTypeSymbol(), (dcb.methodInfo.methodFlags() & ACC_STATIC) != 0, @@ -56,8 +59,11 @@ static StackCounter of(DirectCodeBuilder dcb, BufWriterImpl buf) { private int stack, maxStack, maxLocals, rets; private final RawBytecodeHelper bcs; + private final ClassDesc thisClass; private final String methodName; private final MethodTypeDesc methodDesc; + private final boolean isStatic; + private final ByteBuffer bytecode; private final SplitConstantPool cp; private final Queue<Target> targets; private final BitSet visited; @@ -91,14 +97,18 @@ private boolean next() { } public StackCounter(LabelContext labelContext, + ClassDesc thisClass, String methodName, MethodTypeDesc methodDesc, boolean isStatic, ByteBuffer bytecode, SplitConstantPool cp, List<AbstractPseudoInstruction.ExceptionCatchImpl> handlers) { + this.thisClass = thisClass; this.methodName = methodName; this.methodDesc = methodDesc; + this.isStatic = isStatic; + this.bytecode = bytecode; this.cp = cp; targets = new ArrayDeque<>(); maxStack = stack = rets = 0; @@ -247,24 +257,24 @@ public StackCounter(LabelContext labelContext, int low = bcs.getInt(alignedBci + 4); int high = bcs.getInt(alignedBci + 2 * 4); if (low > high) { - error("low must be less than or equal to high in tableswitch"); + throw error("low must be less than or equal to high in tableswitch"); } keys = high - low + 1; if (keys < 0) { - error("too many keys in tableswitch"); + throw error("too many keys in tableswitch"); } delta = 1; } else { keys = bcs.getInt(alignedBci + 4); if (keys < 0) { - error("number of keys in lookupswitch less than 0"); + throw error("number of keys in lookupswitch less than 0"); } delta = 2; for (int i = 0; i < (keys - 1); i++) { int this_key = bcs.getInt(alignedBci + (2 + 2 * i) * 4); int next_key = bcs.getInt(alignedBci + (2 + 2 * i + 2) * 4); if (this_key >= next_key) { - error("Bad lookupswitch instruction"); + throw error("Bad lookupswitch instruction"); } } } @@ -326,7 +336,7 @@ public StackCounter(LabelContext labelContext, next(); } default -> - error(String.format("Bad instruction: %02x", opcode)); + throw error(String.format("Bad instruction: %02x", opcode)); } } } @@ -360,15 +370,17 @@ private void processLdc(int index) { case TAG_CONSTANTDYNAMIC -> addStackSlot(((ConstantDynamicEntry)cp.entryByIndex(index)).typeKind().slotSize()); default -> - error("CP entry #%d %s is not loadable constant".formatted(index, cp.entryByIndex(index).tag())); + throw error("CP entry #%d %s is not loadable constant".formatted(index, cp.entryByIndex(index).tag())); } } - private void error(String msg) { - throw new IllegalArgumentException("%s at bytecode offset %d of method %s(%s)".formatted( + private IllegalArgumentException error(String msg) { + var sb = new StringBuilder("%s at bytecode offset %d of method %s(%s)".formatted( msg, bcs.bci, methodName, - methodDesc.displayDescriptor())); + methodDesc.parameterList().stream().map(ClassDesc::displayName).collect(Collectors.joining(",")))); + Util.dumpMethod(cp, thisClass, methodName, methodDesc, isStatic ? ACC_STATIC : 0, bytecode, sb::append); + return new IllegalArgumentException(sb.toString()); } } diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java index 9d4f898e5cd62..81e6f341a13fb 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/StackMapGenerator.java @@ -48,8 +48,6 @@ import java.lang.classfile.Label; import java.lang.classfile.attribute.StackMapTableAttribute; import java.lang.classfile.Attributes; -import java.lang.classfile.components.ClassPrinter; -import java.lang.classfile.attribute.CodeAttribute; /** * StackMapGenerator is responsible for stack map frames generation. @@ -836,36 +834,7 @@ private IllegalArgumentException generatorError(String msg, int offset) { offset, methodName, methodDesc.parameterList().stream().map(ClassDesc::displayName).collect(Collectors.joining(",")))); - //try to attach debug info about corrupted bytecode to the message - try { - var cc = ClassFile.of(); - var clm = cc.parse(cc.build(cp.classEntry(thisType.sym()), cp, clb -> - clb.withMethod(methodName, methodDesc, isStatic ? ACC_STATIC : 0, mb -> - ((DirectMethodBuilder)mb).writeAttribute(new UnboundAttribute.AdHocAttribute<CodeAttribute>(Attributes.CODE) { - @Override - public void writeBody(BufWriter b) { - b.writeU2(-1);//max stack - b.writeU2(-1);//max locals - b.writeInt(bytecode.limit()); - b.writeBytes(bytecode.array(), 0, bytecode.limit()); - b.writeU2(0);//exception handlers - b.writeU2(0);//attributes - } - })))); - ClassPrinter.toYaml(clm.methods().get(0).code().get(), ClassPrinter.Verbosity.TRACE_ALL, sb::append); - } catch (Error | Exception suppresed) { - //fallback to bytecode hex dump - bytecode.rewind(); - while (bytecode.position() < bytecode.limit()) { - sb.append("%n%04x:".formatted(bytecode.position())); - for (int i = 0; i < 16 && bytecode.position() < bytecode.limit(); i++) { - sb.append(" %02x".formatted(bytecode.get())); - } - } - var err = new IllegalArgumentException(sb.toString()); - err.addSuppressed(suppresed); - return err; - } + Util.dumpMethod(cp, thisType.sym(), methodName, methodDesc, isStatic ? ACC_STATIC : 0, bytecode, sb::append); return new IllegalArgumentException(sb.toString()); } diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/Util.java b/src/java.base/share/classes/jdk/internal/classfile/impl/Util.java index 11e3328e7759b..7bff7e6f06dbb 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/Util.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/Util.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,8 @@ import java.lang.classfile.Attribute; import java.lang.classfile.AttributeMapper; +import java.lang.classfile.Attributes; +import java.lang.classfile.BufWriter; import java.lang.classfile.ClassFile; import java.lang.classfile.Opcode; import java.lang.classfile.constantpool.ClassEntry; @@ -43,6 +45,11 @@ import jdk.internal.access.SharedSecrets; import static java.lang.classfile.ClassFile.ACC_STATIC; +import java.lang.classfile.attribute.CodeAttribute; +import java.lang.classfile.components.ClassPrinter; +import java.lang.classfile.constantpool.ConstantPoolBuilder; +import java.nio.ByteBuffer; +import java.util.function.Consumer; /** * Helper to create and manipulate type descriptors, where type descriptors are @@ -193,4 +200,41 @@ public static boolean isDoubleSlot(ClassDesc desc) { char ch = desc.descriptorString().charAt(0); return ch == 'D' || ch == 'J'; } + + public static void dumpMethod(SplitConstantPool cp, + ClassDesc cls, + String methodName, + MethodTypeDesc methodDesc, + int acc, + ByteBuffer bytecode, + Consumer<String> dump) { + + // try to dump debug info about corrupted bytecode + try { + var cc = ClassFile.of(); + var clm = cc.parse(cc.build(cp.classEntry(cls), cp, clb -> + clb.withMethod(methodName, methodDesc, acc, mb -> + ((DirectMethodBuilder)mb).writeAttribute(new UnboundAttribute.AdHocAttribute<CodeAttribute>(Attributes.CODE) { + @Override + public void writeBody(BufWriter b) { + b.writeU2(-1);//max stack + b.writeU2(-1);//max locals + b.writeInt(bytecode.limit()); + b.writeBytes(bytecode.array(), 0, bytecode.limit()); + b.writeU2(0);//exception handlers + b.writeU2(0);//attributes + } + })))); + ClassPrinter.toYaml(clm.methods().get(0).code().get(), ClassPrinter.Verbosity.TRACE_ALL, dump); + } catch (Error | Exception _) { + // fallback to bytecode hex dump + bytecode.rewind(); + while (bytecode.position() < bytecode.limit()) { + dump.accept("%n%04x:".formatted(bytecode.position())); + for (int i = 0; i < 16 && bytecode.position() < bytecode.limit(); i++) { + dump.accept(" %02x".formatted(bytecode.get())); + } + } + } + } } From d32f10921985031505718ec29fb97a36f9ba24c0 Mon Sep 17 00:00:00 2001 From: Joshua Cao <joshcao@amazon.com> Date: Thu, 25 Apr 2024 07:11:12 +0000 Subject: [PATCH 103/141] 8329797: Shenandoah: Default case invoked for: "MaxL" (bad AD file) Reviewed-by: shade, thartmann --- src/hotspot/share/opto/compile.cpp | 2 + src/hotspot/share/opto/compile.hpp | 4 ++ src/hotspot/share/opto/macro.cpp | 2 + src/hotspot/share/opto/movenode.cpp | 5 +-- .../compiler/c2/irTests/TestIfMinMax.java | 40 ++++++++++++++++++- 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp index 3066367397794..d5ed95187a893 100644 --- a/src/hotspot/share/opto/compile.cpp +++ b/src/hotspot/share/opto/compile.cpp @@ -624,6 +624,7 @@ Compile::Compile( ciEnv* ci_env, ciMethod* target, int osr_bci, _stub_entry_point(nullptr), _max_node_limit(MaxNodeLimit), _post_loop_opts_phase(false), + _allow_macro_nodes(true), _inlining_progress(false), _inlining_incrementally(false), _do_cleanup(false), @@ -915,6 +916,7 @@ Compile::Compile( ciEnv* ci_env, _stub_entry_point(nullptr), _max_node_limit(MaxNodeLimit), _post_loop_opts_phase(false), + _allow_macro_nodes(true), _inlining_progress(false), _inlining_incrementally(false), _has_reserved_stack_access(false), diff --git a/src/hotspot/share/opto/compile.hpp b/src/hotspot/share/opto/compile.hpp index 8f49c1616726e..df93b388daa8d 100644 --- a/src/hotspot/share/opto/compile.hpp +++ b/src/hotspot/share/opto/compile.hpp @@ -318,6 +318,7 @@ class Compile : public Phase { uintx _max_node_limit; // Max unique node count during a single compilation. bool _post_loop_opts_phase; // Loop opts are finished. + bool _allow_macro_nodes; // True if we allow creation of macro nodes. int _major_progress; // Count of something big happening bool _inlining_progress; // progress doing incremental inlining? @@ -787,6 +788,9 @@ class Compile : public Phase { void set_post_loop_opts_phase() { _post_loop_opts_phase = true; } void reset_post_loop_opts_phase() { _post_loop_opts_phase = false; } + bool allow_macro_nodes() { return _allow_macro_nodes; } + void reset_allow_macro_nodes() { _allow_macro_nodes = false; } + void record_for_post_loop_opts_igvn(Node* n); void remove_from_post_loop_opts_igvn(Node* n); void process_for_post_loop_opts_igvn(PhaseIterGVN& igvn); diff --git a/src/hotspot/share/opto/macro.cpp b/src/hotspot/share/opto/macro.cpp index d4ecadf0cfce5..1f6473616dcd1 100644 --- a/src/hotspot/share/opto/macro.cpp +++ b/src/hotspot/share/opto/macro.cpp @@ -2448,6 +2448,8 @@ void PhaseMacroExpand::eliminate_macro_nodes() { //------------------------------expand_macro_nodes---------------------- // Returns true if a failure occurred. bool PhaseMacroExpand::expand_macro_nodes() { + // Do not allow new macro nodes once we started to expand + C->reset_allow_macro_nodes(); if (StressMacroExpansion) { C->shuffle_macro_nodes(); } diff --git a/src/hotspot/share/opto/movenode.cpp b/src/hotspot/share/opto/movenode.cpp index 58feb3ec9cef9..eb0a914b99433 100644 --- a/src/hotspot/share/opto/movenode.cpp +++ b/src/hotspot/share/opto/movenode.cpp @@ -200,9 +200,8 @@ CMoveNode *CMoveNode::make(Node *c, Node *bol, Node *left, Node *right, const Ty // Try to identify min/max patterns in CMoves Node* CMoveNode::Ideal_minmax(PhaseGVN* phase, CMoveNode* cmove) { - // If we're post loop opts then don't attempt to match the min/max pattern, as this node might have been a - // MinL or MaxL that was already expanded during macro expansion. - if (phase->C->post_loop_opts_phase()) { + // Only create MinL/MaxL if we are allowed to create macro nodes. + if (!phase->C->allow_macro_nodes()) { return nullptr; } diff --git a/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java b/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java index f59328fc64a38..de0b41e73ea86 100644 --- a/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java +++ b/test/hotspot/jtreg/compiler/c2/irTests/TestIfMinMax.java @@ -30,12 +30,12 @@ /* * @test + * @bug 8324655 8329797 * @key randomness - * @bug 8324655 * @summary Test that if expressions are properly folded into min/max nodes * @requires os.arch != "riscv64" * @library /test/lib / - * @run main compiler.c2.irTests.TestIfMinMax + * @run driver compiler.c2.irTests.TestIfMinMax */ public class TestIfMinMax { private static final Random RANDOM = Utils.getRandomInstance(); @@ -140,6 +140,42 @@ public long testMaxL2E(long a, long b) { return a <= b ? b : a; } + public class Dummy { + long l; + public Dummy(long l) { this.l = l; } + } + + @Setup + Object[] setupDummyArray() { + Dummy[] arr = new Dummy[512]; + for (int i = 0; i < 512; i++) { + arr[i] = new Dummy(RANDOM.nextLong()); + } + return new Object[] { arr }; + } + + @Test + @Arguments(setup = "setupDummyArray") + @IR(failOn = { IRNode.MAX_L }) + public long testMaxLAndBarrierInLoop(Dummy[] arr) { + long result = 0; + for (int i = 0; i < arr.length; ++i) { + result += Math.max(arr[i].l, 1); + } + return result; + } + + @Test + @Arguments(setup = "setupDummyArray") + @IR(failOn = { IRNode.MIN_L }) + public long testMinLAndBarrierInLoop(Dummy[] arr) { + long result = 0; + for (int i = 0; i < arr.length; ++i) { + result += Math.min(arr[i].l, 1); + } + return result; + } + @Setup static Object[] setupIntArrays() { int[] a = new int[512]; From ef745a6c6e4068e786a70fc5574d272140c01e0f Mon Sep 17 00:00:00 2001 From: Adam Sotona <asotona@openjdk.org> Date: Thu, 25 Apr 2024 08:09:52 +0000 Subject: [PATCH 104/141] 8331097: Tests build is broken after pr/18914 Reviewed-by: alanb --- .../org/openjdk/bench/jdk/classfile/CodeAttributeTools.java | 1 + 1 file changed, 1 insertion(+) diff --git a/test/micro/org/openjdk/bench/jdk/classfile/CodeAttributeTools.java b/test/micro/org/openjdk/bench/jdk/classfile/CodeAttributeTools.java index 1a9d989c54601..d2defd6c5ef0c 100644 --- a/test/micro/org/openjdk/bench/jdk/classfile/CodeAttributeTools.java +++ b/test/micro/org/openjdk/bench/jdk/classfile/CodeAttributeTools.java @@ -122,6 +122,7 @@ public void benchmarkStackMapsGenerator(Blackhole bh) { public void benchmarkStackCounter(Blackhole bh) { for (var d : data) bh.consume(new StackCounter( d.labelContext(), + d.thisClass(), d.methodName(), d.methodDesc(), d.isStatic(), From 87e864bf21d71daae4e001ec4edbb4ef1f60c36d Mon Sep 17 00:00:00 2001 From: Jan Lahoda <jlahoda@openjdk.org> Date: Thu, 25 Apr 2024 08:11:56 +0000 Subject: [PATCH 105/141] 8328703: Illegal accesses in Java_jdk_internal_org_jline_terminal_impl_jna_linux_CLibraryImpl_ioctl0 Reviewed-by: asotona, shade --- .../linux/native/lible/CLibrary.cpp | 16 ++++++++-------- .../macosx/native/lible/CLibrary.cpp | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/jdk.internal.le/linux/native/lible/CLibrary.cpp b/src/jdk.internal.le/linux/native/lible/CLibrary.cpp index 7815fe0cd2e15..3215e1f5013bf 100644 --- a/src/jdk.internal.le/linux/native/lible/CLibrary.cpp +++ b/src/jdk.internal.le/linux/native/lible/CLibrary.cpp @@ -150,20 +150,20 @@ JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_linux_CLibr (JNIEnv *env, jobject, jint fd, jint cmd, jobject data) { winsize ws; - ws.ws_row = env->GetIntField(data, ws_row); - ws.ws_col = env->GetIntField(data, ws_col); - ws.ws_xpixel = env->GetIntField(data, ws_xpixel); - ws.ws_ypixel = env->GetIntField(data, ws_ypixel); + ws.ws_row = env->GetShortField(data, ws_row); + ws.ws_col = env->GetShortField(data, ws_col); + ws.ws_xpixel = env->GetShortField(data, ws_xpixel); + ws.ws_ypixel = env->GetShortField(data, ws_ypixel); if (ioctl(fd, cmd, &ws) != 0) { throw_errno(env); return ; } - env->SetIntField(data, ws_row, ws.ws_row); - env->SetIntField(data, ws_col, ws.ws_col); - env->SetIntField(data, ws_xpixel, ws.ws_xpixel); - env->SetIntField(data, ws_ypixel, ws.ws_ypixel); + env->SetShortField(data, ws_row, ws.ws_row); + env->SetShortField(data, ws_col, ws.ws_col); + env->SetShortField(data, ws_xpixel, ws.ws_xpixel); + env->SetShortField(data, ws_ypixel, ws.ws_ypixel); } /* diff --git a/src/jdk.internal.le/macosx/native/lible/CLibrary.cpp b/src/jdk.internal.le/macosx/native/lible/CLibrary.cpp index 760e090f5e81d..3bc481f4afaa5 100644 --- a/src/jdk.internal.le/macosx/native/lible/CLibrary.cpp +++ b/src/jdk.internal.le/macosx/native/lible/CLibrary.cpp @@ -154,20 +154,20 @@ JNIEXPORT void JNICALL Java_jdk_internal_org_jline_terminal_impl_jna_osx_CLibrar (JNIEnv *env, jobject, jint fd, jlong cmd, jobject data) { winsize ws; - ws.ws_row = env->GetIntField(data, ws_row); - ws.ws_col = env->GetIntField(data, ws_col); - ws.ws_xpixel = env->GetIntField(data, ws_xpixel); - ws.ws_ypixel = env->GetIntField(data, ws_ypixel); + ws.ws_row = env->GetShortField(data, ws_row); + ws.ws_col = env->GetShortField(data, ws_col); + ws.ws_xpixel = env->GetShortField(data, ws_xpixel); + ws.ws_ypixel = env->GetShortField(data, ws_ypixel); if (ioctl(fd, cmd, &ws) != 0) { throw_errno(env); return ; } - env->SetIntField(data, ws_row, ws.ws_row); - env->SetIntField(data, ws_col, ws.ws_col); - env->SetIntField(data, ws_xpixel, ws.ws_xpixel); - env->SetIntField(data, ws_ypixel, ws.ws_ypixel); + env->SetShortField(data, ws_row, ws.ws_row); + env->SetShortField(data, ws_col, ws.ws_col); + env->SetShortField(data, ws_xpixel, ws.ws_xpixel); + env->SetShortField(data, ws_ypixel, ws.ws_ypixel); } /* From b1b953c427b9562f050760ab3c2d0ae09aeec3e5 Mon Sep 17 00:00:00 2001 From: Guoxiong Li <gli@openjdk.org> Date: Thu, 25 Apr 2024 08:56:18 +0000 Subject: [PATCH 106/141] 8330972: Serial: Inline Generation::max_contiguous_available Reviewed-by: ayang --- src/hotspot/share/gc/serial/generation.cpp | 10 ---------- src/hotspot/share/gc/serial/generation.hpp | 2 -- src/hotspot/share/gc/serial/tenuredGeneration.cpp | 2 +- 3 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/hotspot/share/gc/serial/generation.cpp b/src/hotspot/share/gc/serial/generation.cpp index da5a54367f03a..02edd8ae0a193 100644 --- a/src/hotspot/share/gc/serial/generation.cpp +++ b/src/hotspot/share/gc/serial/generation.cpp @@ -81,13 +81,3 @@ void Generation::print_summary_info_on(outputStream* st) { sr->invocations, sr->invocations > 0 ? time / sr->invocations : 0.0); } - -size_t Generation::max_contiguous_available() const { - // The largest number of contiguous free words in this or any higher generation. - size_t avail = contiguous_available(); - size_t old_avail = 0; - if (SerialHeap::heap()->is_young_gen(this)) { - old_avail = SerialHeap::heap()->old_gen()->contiguous_available(); - } - return MAX2(avail, old_avail); -} diff --git a/src/hotspot/share/gc/serial/generation.hpp b/src/hotspot/share/gc/serial/generation.hpp index c1a88a64b2aef..50531705dd3cd 100644 --- a/src/hotspot/share/gc/serial/generation.hpp +++ b/src/hotspot/share/gc/serial/generation.hpp @@ -99,8 +99,6 @@ class Generation: public CHeapObj<mtGC> { // The largest number of contiguous free bytes in the generation, // including expansion (Assumes called at a safepoint.) virtual size_t contiguous_available() const = 0; - // The largest number of contiguous free bytes in this or any higher generation. - virtual size_t max_contiguous_available() const; MemRegion reserved() const { return _reserved; } diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.cpp b/src/hotspot/share/gc/serial/tenuredGeneration.cpp index e7cf16ea9afe1..8a851fba6428f 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.cpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.cpp @@ -418,7 +418,7 @@ void TenuredGeneration::update_counters() { } bool TenuredGeneration::promotion_attempt_is_safe(size_t max_promotion_in_bytes) const { - size_t available = max_contiguous_available(); + size_t available = contiguous_available(); size_t av_promo = (size_t)_avg_promoted->padded_average(); bool res = (available >= av_promo) || (available >= max_promotion_in_bytes); From c9f8d0eff706d9ac59179afbb821367da09c9aae Mon Sep 17 00:00:00 2001 From: Albert Mingkun Yang <ayang@openjdk.org> Date: Thu, 25 Apr 2024 09:49:10 +0000 Subject: [PATCH 107/141] 8331050: Serial: Remove unused _saved_mark_word in DefNewGeneration and TenuredGeneration Reviewed-by: gli, tschatzl --- src/hotspot/share/gc/serial/defNewGeneration.hpp | 3 --- src/hotspot/share/gc/serial/tenuredGeneration.hpp | 2 -- 2 files changed, 5 deletions(-) diff --git a/src/hotspot/share/gc/serial/defNewGeneration.hpp b/src/hotspot/share/gc/serial/defNewGeneration.hpp index 0418d6e459fab..2feb92505e660 100644 --- a/src/hotspot/share/gc/serial/defNewGeneration.hpp +++ b/src/hotspot/share/gc/serial/defNewGeneration.hpp @@ -139,9 +139,6 @@ class DefNewGeneration: public Generation { ContiguousSpace* _from_space; ContiguousSpace* _to_space; - // Saved mark word, for to-space - HeapWord* _saved_mark_word; - STWGCTimer* _gc_timer; DefNewTracer* _gc_tracer; diff --git a/src/hotspot/share/gc/serial/tenuredGeneration.hpp b/src/hotspot/share/gc/serial/tenuredGeneration.hpp index cc83f129b68c8..965208e20eeb4 100644 --- a/src/hotspot/share/gc/serial/tenuredGeneration.hpp +++ b/src/hotspot/share/gc/serial/tenuredGeneration.hpp @@ -66,7 +66,6 @@ class TenuredGeneration: public Generation { void assert_correct_size_change_locking(); ContiguousSpace* _the_space; // Actual space holding objects - HeapWord* _saved_mark_word; GenerationCounters* _gen_counters; CSpaceCounters* _space_counters; @@ -89,7 +88,6 @@ class TenuredGeneration: public Generation { void compute_new_size(); ContiguousSpace* space() const { return _the_space; } - HeapWord* saved_mark_word() const { return _saved_mark_word; } // Grow generation with specified size (returns false if unable to grow) bool grow_by(size_t bytes); From 8031dabf8344108a1c225311f2f270764fb2bc00 Mon Sep 17 00:00:00 2001 From: Stefan Johansson <sjohanss@openjdk.org> Date: Thu, 25 Apr 2024 10:43:07 +0000 Subject: [PATCH 108/141] 8331094: ZGC: GTest fails due to incompatible Windows version Reviewed-by: aboldtch, tschatzl --- test/hotspot/gtest/gc/z/test_zMapper_windows.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp b/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp index 2c93fa2bba75f..744ea1f9c262b 100644 --- a/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp +++ b/test/hotspot/gtest/gc/z/test_zMapper_windows.cpp @@ -67,6 +67,12 @@ class ZMapperTest : public Test { } virtual void SetUp() { + // Only run test on supported Windows versions + if (!ZSyscall::is_supported()) { + GTEST_SKIP() << "Requires Windows version 1803 or later"; + return; + } + ZSyscall::initialize(); ZGlobalsPointers::initialize(); @@ -78,8 +84,7 @@ class ZMapperTest : public Test { // Reserve address space for the test if (!reserve_for_test()) { - // Failed to reserve address space - GTEST_SKIP(); + GTEST_SKIP() << "Failed to reserve address space"; return; } @@ -87,6 +92,11 @@ class ZMapperTest : public Test { } virtual void TearDown() { + if (!ZSyscall::is_supported()) { + // Test skipped, nothing to cleanup + return; + } + if (_initialized) { _vmm->pd_unreserve(ZOffset::address_unsafe(zoffset(0)), 0); } From c9442014e561f8e1cb43a0e9f18a9a5ae2a7a2da Mon Sep 17 00:00:00 2001 From: Matthias Baesken <mbaesken@openjdk.org> Date: Thu, 25 Apr 2024 12:02:31 +0000 Subject: [PATCH 109/141] 8331031: unify os::dont_yield and os::naked_yield across Posix platforms Reviewed-by: coleenp, mdoerr --- src/hotspot/os/aix/os_aix.cpp | 9 --------- src/hotspot/os/bsd/os_bsd.cpp | 9 --------- src/hotspot/os/linux/os_linux.cpp | 19 ------------------- src/hotspot/os/posix/os_posix.cpp | 8 ++++++++ 4 files changed, 8 insertions(+), 37 deletions(-) diff --git a/src/hotspot/os/aix/os_aix.cpp b/src/hotspot/os/aix/os_aix.cpp index 71a9aa576ea1d..1925357e1b435 100644 --- a/src/hotspot/os/aix/os_aix.cpp +++ b/src/hotspot/os/aix/os_aix.cpp @@ -2059,15 +2059,6 @@ size_t os::vm_min_address() { return _vm_min_address_default; } -// Used to convert frequent JVM_Yield() to nops -bool os::dont_yield() { - return DontYieldALot; -} - -void os::naked_yield() { - sched_yield(); -} - //////////////////////////////////////////////////////////////////////////////// // thread priority support diff --git a/src/hotspot/os/bsd/os_bsd.cpp b/src/hotspot/os/bsd/os_bsd.cpp index ca4a77d2b4a26..17b52bc1efab0 100644 --- a/src/hotspot/os/bsd/os_bsd.cpp +++ b/src/hotspot/os/bsd/os_bsd.cpp @@ -1936,15 +1936,6 @@ size_t os::vm_min_address() { #endif } -// Used to convert frequent JVM_Yield() to nops -bool os::dont_yield() { - return DontYieldALot; -} - -void os::naked_yield() { - sched_yield(); -} - //////////////////////////////////////////////////////////////////////////////// // thread priority support diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp index 24e80accfdeb7..3180dddfe50d7 100644 --- a/src/hotspot/os/linux/os_linux.cpp +++ b/src/hotspot/os/linux/os_linux.cpp @@ -4310,25 +4310,6 @@ size_t os::vm_min_address() { return value; } -// Used to convert frequent JVM_Yield() to nops -bool os::dont_yield() { - return DontYieldALot; -} - -// Linux CFS scheduler (since 2.6.23) does not guarantee sched_yield(2) will -// actually give up the CPU. Since skip buddy (v2.6.28): -// -// * Sets the yielding task as skip buddy for current CPU's run queue. -// * Picks next from run queue, if empty, picks a skip buddy (can be the yielding task). -// * Clears skip buddies for this run queue (yielding task no longer a skip buddy). -// -// An alternative is calling os::naked_short_nanosleep with a small number to avoid -// getting re-scheduled immediately. -// -void os::naked_yield() { - sched_yield(); -} - //////////////////////////////////////////////////////////////////////////////// // thread priority support diff --git a/src/hotspot/os/posix/os_posix.cpp b/src/hotspot/os/posix/os_posix.cpp index 76a6080305b35..a18a633002c4b 100644 --- a/src/hotspot/os/posix/os_posix.cpp +++ b/src/hotspot/os/posix/os_posix.cpp @@ -854,6 +854,14 @@ void os::_exit(int num) { ALLOW_C_FUNCTION(::_exit, ::_exit(num);) } +bool os::dont_yield() { + return DontYieldALot; +} + +void os::naked_yield() { + sched_yield(); +} + // Builds a platform dependent Agent_OnLoad_<lib_name> function name // which is used to find statically linked in agents. // Parameters: From b9927aa3a4c77812bfc53b14a6695ec436737661 Mon Sep 17 00:00:00 2001 From: Jasmine Karthikeyan <jkarthikeyan@openjdk.org> Date: Thu, 25 Apr 2024 13:13:25 +0000 Subject: [PATCH 110/141] 8329194: Cleanup Type::cmp definition and usage Reviewed-by: dfenacci, chagedorn, qamai --- src/hotspot/cpu/x86/x86.ad | 2 +- src/hotspot/share/opto/cfgnode.cpp | 6 +++--- src/hotspot/share/opto/memnode.cpp | 2 +- src/hotspot/share/opto/node.cpp | 2 +- src/hotspot/share/opto/type.cpp | 22 +++++++++++++-------- src/hotspot/share/opto/type.hpp | 14 ++++++------- src/hotspot/share/opto/vectorIntrinsics.cpp | 4 ++-- src/hotspot/share/opto/vectornode.cpp | 8 ++++---- src/hotspot/share/opto/vectornode.hpp | 4 ++-- 9 files changed, 35 insertions(+), 29 deletions(-) diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad index 7bbae30c83279..8c9bbfc35922a 100644 --- a/src/hotspot/cpu/x86/x86.ad +++ b/src/hotspot/cpu/x86/x86.ad @@ -10249,7 +10249,7 @@ instruct mask_opers_evex(kReg dst, kReg src1, kReg src2, kReg kscratch) %{ ins_encode %{ const MachNode* mask1 = static_cast<const MachNode*>(this->in(this->operand_index($src1))); const MachNode* mask2 = static_cast<const MachNode*>(this->in(this->operand_index($src2))); - assert(0 == Type::cmp(mask1->bottom_type(), mask2->bottom_type()), ""); + assert(Type::equals(mask1->bottom_type(), mask2->bottom_type()), "Mask types must be equal"); uint masklen = Matcher::vector_length(this); masklen = (masklen < 16 && !VM_Version::supports_avx512dq()) ? 16 : masklen; __ masked_op(this->ideal_Opcode(), masklen, $dst$$KRegister, $src1$$KRegister, $src2$$KRegister); diff --git a/src/hotspot/share/opto/cfgnode.cpp b/src/hotspot/share/opto/cfgnode.cpp index 5362a7b0751af..3e451fc789eeb 100644 --- a/src/hotspot/share/opto/cfgnode.cpp +++ b/src/hotspot/share/opto/cfgnode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, 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 @@ -2724,10 +2724,10 @@ Node* PhiNode::merge_through_phi(Node* root_phi, PhaseIterGVN* igvn) { cached_vbox = vbox; } else if (vbox->vec_type() != cached_vbox->vec_type()) { // TODO: vector type mismatch can be handled with additional reinterpret casts - assert(Type::cmp(vbox->vec_type(), cached_vbox->vec_type()) != 0, "inconsistent"); + assert(!Type::equals(vbox->vec_type(), cached_vbox->vec_type()), "inconsistent"); return nullptr; // not optimizable: vector type mismatch } else if (vbox->box_type() != cached_vbox->box_type()) { - assert(Type::cmp(vbox->box_type(), cached_vbox->box_type()) != 0, "inconsistent"); + assert(!Type::equals(vbox->box_type(), cached_vbox->box_type()), "inconsistent"); return nullptr; // not optimizable: box type mismatch } } else { diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp index 4eae4a49dbb9e..a13a53f9b1952 100644 --- a/src/hotspot/share/opto/memnode.cpp +++ b/src/hotspot/share/opto/memnode.cpp @@ -856,7 +856,7 @@ bool LoadNode::can_remove_control() const { uint LoadNode::size_of() const { return sizeof(*this); } bool LoadNode::cmp(const Node &n) const { LoadNode& load = (LoadNode &)n; - return !Type::cmp(_type, load._type) && + return Type::equals(_type, load._type) && _control_dependency == load._control_dependency && _mo == load._mo; } diff --git a/src/hotspot/share/opto/node.cpp b/src/hotspot/share/opto/node.cpp index cb3b519ba5d8c..fa85344d0da24 100644 --- a/src/hotspot/share/opto/node.cpp +++ b/src/hotspot/share/opto/node.cpp @@ -3011,7 +3011,7 @@ uint TypeNode::hash() const { return Node::hash() + _type->hash(); } bool TypeNode::cmp(const Node& n) const { - return !Type::cmp(_type, ((TypeNode&)n)._type); + return Type::equals(_type, n.as_Type()->_type); } const Type* TypeNode::bottom_type() const { return _type; } const Type* TypeNode::Value(PhaseGVN* phase) const { return _type; } diff --git a/src/hotspot/share/opto/type.cpp b/src/hotspot/share/opto/type.cpp index 7fecf0b4d354d..70b2c705cd34c 100644 --- a/src/hotspot/share/opto/type.cpp +++ b/src/hotspot/share/opto/type.cpp @@ -399,11 +399,13 @@ const Type *Type::make( enum TYPES t ) { } //------------------------------cmp-------------------------------------------- -int Type::cmp( const Type *const t1, const Type *const t2 ) { - if( t1->_base != t2->_base ) - return 1; // Missed badly +bool Type::equals(const Type* t1, const Type* t2) { + if (t1->_base != t2->_base) { + return false; // Missed badly + } + assert(t1 != t2 || t1->eq(t2), "eq must be reflexive"); - return !t1->eq(t2); // Return ZERO if equal + return t1->eq(t2); } const Type* Type::maybe_remove_speculative(bool include_speculative) const { @@ -433,9 +435,13 @@ void Type::Initialize_shared(Compile* current) { Arena* shared_type_arena = new (mtCompiler)Arena(mtCompiler); current->set_type_arena(shared_type_arena); - _shared_type_dict = - new (shared_type_arena) Dict( (CmpKey)Type::cmp, (Hash)Type::uhash, - shared_type_arena, 128 ); + + // Map the boolean result of Type::equals into a comparator result that CmpKey expects. + CmpKey type_cmp = [](const void* t1, const void* t2) -> int32_t { + return Type::equals((Type*) t1, (Type*) t2) ? 0 : 1; + }; + + _shared_type_dict = new (shared_type_arena) Dict(type_cmp, (Hash) Type::uhash, shared_type_arena, 128); current->set_type_dict(_shared_type_dict); // Make shared pre-built types. @@ -744,7 +750,7 @@ const Type *Type::hashcons(void) { // Since we just discovered a new Type, compute its dual right now. assert( !_dual, "" ); // No dual yet _dual = xdual(); // Compute the dual - if (cmp(this, _dual) == 0) { // Handle self-symmetric + if (equals(this, _dual)) { // Handle self-symmetric if (_dual != this) { delete _dual; _dual = this; diff --git a/src/hotspot/share/opto/type.hpp b/src/hotspot/share/opto/type.hpp index de9b52b4cc4bd..1b11ed9536766 100644 --- a/src/hotspot/share/opto/type.hpp +++ b/src/hotspot/share/opto/type.hpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, 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 @@ -157,7 +157,7 @@ class Type { static const TypeInfo _type_info[]; static int uhash( const Type *const t ); - // Structural equality check. Assumes that cmp() has already compared + // Structural equality check. Assumes that equals() has already compared // the _base types and thus knows it can cast 't' appropriately. virtual bool eq( const Type *t ) const; @@ -216,15 +216,15 @@ class Type { // Create a new hash-consd type static const Type *make(enum TYPES); // Test for equivalence of types - static int cmp( const Type *const t1, const Type *const t2 ); + static bool equals(const Type* t1, const Type* t2); // Test for higher or equal in lattice // Variant that drops the speculative part of the types - bool higher_equal(const Type *t) const { - return !cmp(meet(t),t->remove_speculative()); + bool higher_equal(const Type* t) const { + return equals(meet(t), t->remove_speculative()); } // Variant that keeps the speculative part of the types - bool higher_equal_speculative(const Type *t) const { - return !cmp(meet_speculative(t),t); + bool higher_equal_speculative(const Type* t) const { + return equals(meet_speculative(t), t); } // MEET operation; lower in lattice. diff --git a/src/hotspot/share/opto/vectorIntrinsics.cpp b/src/hotspot/share/opto/vectorIntrinsics.cpp index 139dd62dc2838..2039e9c27be74 100644 --- a/src/hotspot/share/opto/vectorIntrinsics.cpp +++ b/src/hotspot/share/opto/vectorIntrinsics.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -2629,7 +2629,7 @@ bool LibraryCallKit::inline_vector_convert() { op = gvn().transform(VectorCastNode::make(cast_vopc, op, elem_bt_to, num_elem_to)); } } - } else if (Type::cmp(src_type, dst_type) != 0) { + } else if (!Type::equals(src_type, dst_type)) { assert(!is_cast, "must be reinterpret"); op = gvn().transform(new VectorReinterpretNode(op, src_type, dst_type)); } diff --git a/src/hotspot/share/opto/vectornode.cpp b/src/hotspot/share/opto/vectornode.cpp index bef4a2a109570..5489a13b87106 100644 --- a/src/hotspot/share/opto/vectornode.cpp +++ b/src/hotspot/share/opto/vectornode.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2007, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2007, 2024, 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 @@ -1668,7 +1668,7 @@ Node* VectorReinterpretNode::Identity(PhaseGVN *phase) { // "VectorReinterpret (VectorReinterpret node) ==> node" if: // 1) Types of 'node' and 'this' are identical // 2) Truncations are not introduced by the first VectorReinterpret - if (Type::cmp(bottom_type(), n->in(1)->bottom_type()) == 0 && + if (Type::equals(bottom_type(), n->in(1)->bottom_type()) && length_in_bytes() <= n->bottom_type()->is_vect()->length_in_bytes()) { return n->in(1); } @@ -1685,7 +1685,7 @@ Node* VectorInsertNode::make(Node* vec, Node* new_val, int position, PhaseGVN& g Node* VectorUnboxNode::Ideal(PhaseGVN* phase, bool can_reshape) { Node* n = obj()->uncast(); if (EnableVectorReboxing && n->Opcode() == Op_VectorBox) { - if (Type::cmp(bottom_type(), n->in(VectorBoxNode::Value)->bottom_type()) == 0) { + if (Type::equals(bottom_type(), n->in(VectorBoxNode::Value)->bottom_type())) { // Handled by VectorUnboxNode::Identity() } else { VectorBoxNode* vbox = static_cast<VectorBoxNode*>(n); @@ -1722,7 +1722,7 @@ Node* VectorUnboxNode::Ideal(PhaseGVN* phase, bool can_reshape) { Node* VectorUnboxNode::Identity(PhaseGVN* phase) { Node* n = obj()->uncast(); if (EnableVectorReboxing && n->Opcode() == Op_VectorBox) { - if (Type::cmp(bottom_type(), n->in(VectorBoxNode::Value)->bottom_type()) == 0) { + if (Type::equals(bottom_type(), n->in(VectorBoxNode::Value)->bottom_type())) { return n->in(VectorBoxNode::Value); // VectorUnbox (VectorBox v) ==> v } else { // Handled by VectorUnboxNode::Ideal(). diff --git a/src/hotspot/share/opto/vectornode.hpp b/src/hotspot/share/opto/vectornode.hpp index ff31d2a51b8bd..d35f623555db4 100644 --- a/src/hotspot/share/opto/vectornode.hpp +++ b/src/hotspot/share/opto/vectornode.hpp @@ -1560,7 +1560,7 @@ class VectorReinterpretNode : public VectorNode { const TypeVect* src_type() { return _src_vt; } virtual uint hash() const { return VectorNode::hash() + _src_vt->hash(); } virtual bool cmp( const Node &n ) const { - return VectorNode::cmp(n) && !Type::cmp(_src_vt,((VectorReinterpretNode&)n)._src_vt); + return VectorNode::cmp(n) && Type::equals(_src_vt, ((VectorReinterpretNode&) n)._src_vt); } virtual Node* Identity(PhaseGVN* phase); @@ -1696,7 +1696,7 @@ class VectorInsertNode : public VectorNode { VectorInsertNode(Node* vsrc, Node* new_val, ConINode* pos, const TypeVect* vt) : VectorNode(vsrc, new_val, (Node*)pos, vt) { assert(pos->get_int() >= 0, "positive constants"); assert(pos->get_int() < (int)vt->length(), "index must be less than vector length"); - assert(Type::cmp(vt, vsrc->bottom_type()) == 0, "input and output must be same type"); + assert(Type::equals(vt, vsrc->bottom_type()), "input and output must be same type"); } virtual int Opcode() const; uint pos() const { return in(3)->get_int(); } From 4dfaa9b5bd4f9733e5a67d7c5b55eaa5ad4e27e4 Mon Sep 17 00:00:00 2001 From: Roger Riggs <rriggs@openjdk.org> Date: Thu, 25 Apr 2024 14:37:38 +0000 Subject: [PATCH 111/141] 8329805: Deprecate for removal ObjectOutputStream.PutField.write Reviewed-by: naoto, iris --- src/java.base/share/classes/java/io/ObjectOutputStream.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/java/io/ObjectOutputStream.java b/src/java.base/share/classes/java/io/ObjectOutputStream.java index dda9318f9bd46..2dcf174cf5399 100644 --- a/src/java.base/share/classes/java/io/ObjectOutputStream.java +++ b/src/java.base/share/classes/java/io/ObjectOutputStream.java @@ -1027,7 +1027,7 @@ public PutField() {} * calling the {@link java.io.ObjectOutputStream#writeFields()} * method. */ - @Deprecated + @Deprecated(forRemoval = true, since = "1.4") public abstract void write(ObjectOutput out) throws IOException; } From 5af6b45eefd227e3e046ca22a404ae8a23174160 Mon Sep 17 00:00:00 2001 From: Matthias Baesken <mbaesken@openjdk.org> Date: Thu, 25 Apr 2024 15:23:48 +0000 Subject: [PATCH 112/141] 8330615: avoid signed integer overflows in zip_util.c readCen / hashN Reviewed-by: lucy, mdoerr --- src/java.base/share/native/libzip/zip_util.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/native/libzip/zip_util.c b/src/java.base/share/native/libzip/zip_util.c index a996b450ad412..8f2f19c66a2ec 100644 --- a/src/java.base/share/native/libzip/zip_util.c +++ b/src/java.base/share/native/libzip/zip_util.c @@ -437,7 +437,7 @@ hash(const char *s) static unsigned int hashN(const char *s, int length) { - int h = 0; + unsigned int h = 0; while (length-- > 0) h = 31*h + *s++; return h; From ce9eac38191fa700afa3ac06b2b202576a11dd71 Mon Sep 17 00:00:00 2001 From: SendaoYan <syan@openjdk.org> Date: Thu, 25 Apr 2024 15:54:13 +0000 Subject: [PATCH 113/141] 8331113: createJMHBundle.sh support configurable maven repo mirror Reviewed-by: redestad, erikj --- make/devkit/createJMHBundle.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/make/devkit/createJMHBundle.sh b/make/devkit/createJMHBundle.sh index c3c97947dabf0..b2b10769d1533 100644 --- a/make/devkit/createJMHBundle.sh +++ b/make/devkit/createJMHBundle.sh @@ -1,6 +1,6 @@ #!/bin/bash -e # -# Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -29,6 +29,7 @@ JMH_VERSION=1.37 COMMONS_MATH3_VERSION=3.6.1 JOPT_SIMPLE_VERSION=5.0.4 +MAVEN_MIRROR=${MAVEN_MIRROR:-https://repo.maven.apache.org/maven2} BUNDLE_NAME=jmh-$JMH_VERSION.tar.gz @@ -41,7 +42,7 @@ cd $JAR_DIR rm -f * fetchJar() { - url="https://repo.maven.apache.org/maven2/$1/$2/$3/$2-$3.jar" + url="${MAVEN_MIRROR}/$1/$2/$3/$2-$3.jar" if command -v curl > /dev/null; then curl -O --fail $url elif command -v wget > /dev/null; then From 1c238d43e81acf516297f26660059d0bab5b5b8a Mon Sep 17 00:00:00 2001 From: Naoto Sato <naoto@openjdk.org> Date: Thu, 25 Apr 2024 16:19:51 +0000 Subject: [PATCH 114/141] 8319990: Update CLDR to Version 45.0 Reviewed-by: joehw, jlu --- make/data/cldr/{LICENSE.txt => LICENSE} | 6 +- make/data/cldr/README | 4 - make/data/cldr/README-common.md | 10 + make/data/cldr/common/bcp47/collation.xml | 2 +- make/data/cldr/common/bcp47/currency.xml | 1 + make/data/cldr/common/dtd/ldml.dtd | 6 +- make/data/cldr/common/dtd/ldml.xsd | 8 +- make/data/cldr/common/dtd/ldmlBCP47.dtd | 6 +- make/data/cldr/common/dtd/ldmlBCP47.xsd | 8 +- make/data/cldr/common/dtd/ldmlICU.dtd | 2 +- .../data/cldr/common/dtd/ldmlSupplemental.dtd | 47 ++++- .../data/cldr/common/dtd/ldmlSupplemental.xsd | 55 ++++- make/data/cldr/common/main/aa.xml | 4 +- make/data/cldr/common/main/aa_DJ.xml | 4 +- make/data/cldr/common/main/aa_ER.xml | 4 +- make/data/cldr/common/main/aa_ET.xml | 4 +- make/data/cldr/common/main/ab.xml | 40 +--- make/data/cldr/common/main/ab_GE.xml | 4 +- make/data/cldr/common/main/af.xml | 29 +-- make/data/cldr/common/main/af_NA.xml | 4 +- make/data/cldr/common/main/af_ZA.xml | 4 +- make/data/cldr/common/main/agq.xml | 4 +- make/data/cldr/common/main/agq_CM.xml | 4 +- make/data/cldr/common/main/ak.xml | 4 +- make/data/cldr/common/main/ak_GH.xml | 4 +- make/data/cldr/common/main/am.xml | 47 +---- make/data/cldr/common/main/am_ET.xml | 4 +- make/data/cldr/common/main/an.xml | 4 +- make/data/cldr/common/main/an_ES.xml | 4 +- make/data/cldr/common/main/ann.xml | 4 +- make/data/cldr/common/main/ann_NG.xml | 4 +- make/data/cldr/common/main/apc.xml | 4 +- make/data/cldr/common/main/apc_SY.xml | 4 +- make/data/cldr/common/main/ar.xml | 47 +---- make/data/cldr/common/main/ar_001.xml | 4 +- make/data/cldr/common/main/ar_AE.xml | 4 +- make/data/cldr/common/main/ar_BH.xml | 4 +- make/data/cldr/common/main/ar_DJ.xml | 4 +- make/data/cldr/common/main/ar_DZ.xml | 4 +- make/data/cldr/common/main/ar_EG.xml | 4 +- make/data/cldr/common/main/ar_EH.xml | 4 +- make/data/cldr/common/main/ar_ER.xml | 4 +- make/data/cldr/common/main/ar_IL.xml | 4 +- make/data/cldr/common/main/ar_IQ.xml | 4 +- make/data/cldr/common/main/ar_JO.xml | 4 +- make/data/cldr/common/main/ar_KM.xml | 4 +- make/data/cldr/common/main/ar_KW.xml | 4 +- make/data/cldr/common/main/ar_LB.xml | 4 +- make/data/cldr/common/main/ar_LY.xml | 4 +- make/data/cldr/common/main/ar_MA.xml | 4 +- make/data/cldr/common/main/ar_MR.xml | 4 +- make/data/cldr/common/main/ar_OM.xml | 4 +- make/data/cldr/common/main/ar_PS.xml | 4 +- make/data/cldr/common/main/ar_QA.xml | 4 +- make/data/cldr/common/main/ar_SA.xml | 4 +- make/data/cldr/common/main/ar_SD.xml | 4 +- make/data/cldr/common/main/ar_SO.xml | 4 +- make/data/cldr/common/main/ar_SS.xml | 4 +- make/data/cldr/common/main/ar_SY.xml | 4 +- make/data/cldr/common/main/ar_TD.xml | 4 +- make/data/cldr/common/main/ar_TN.xml | 4 +- make/data/cldr/common/main/ar_YE.xml | 4 +- make/data/cldr/common/main/arn.xml | 4 +- make/data/cldr/common/main/arn_CL.xml | 4 +- make/data/cldr/common/main/as.xml | 43 +--- make/data/cldr/common/main/as_IN.xml | 4 +- make/data/cldr/common/main/asa.xml | 4 +- make/data/cldr/common/main/asa_TZ.xml | 4 +- make/data/cldr/common/main/ast.xml | 23 +-- make/data/cldr/common/main/ast_ES.xml | 4 +- make/data/cldr/common/main/az.xml | 46 +---- make/data/cldr/common/main/az_Arab.xml | 4 +- make/data/cldr/common/main/az_Arab_IQ.xml | 4 +- make/data/cldr/common/main/az_Arab_IR.xml | 4 +- make/data/cldr/common/main/az_Arab_TR.xml | 4 +- make/data/cldr/common/main/az_Cyrl.xml | 4 +- make/data/cldr/common/main/az_Cyrl_AZ.xml | 4 +- make/data/cldr/common/main/az_Latn.xml | 4 +- make/data/cldr/common/main/az_Latn_AZ.xml | 4 +- make/data/cldr/common/main/ba.xml | 4 +- make/data/cldr/common/main/ba_RU.xml | 4 +- make/data/cldr/common/main/bal.xml | 16 +- make/data/cldr/common/main/bal_Arab.xml | 4 +- make/data/cldr/common/main/bal_Arab_PK.xml | 4 +- make/data/cldr/common/main/bal_Latn.xml | 16 +- make/data/cldr/common/main/bal_Latn_PK.xml | 4 +- make/data/cldr/common/main/bas.xml | 4 +- make/data/cldr/common/main/bas_CM.xml | 4 +- make/data/cldr/common/main/be.xml | 46 +---- make/data/cldr/common/main/be_BY.xml | 4 +- make/data/cldr/common/main/be_TARASK.xml | 20 +- make/data/cldr/common/main/bem.xml | 4 +- make/data/cldr/common/main/bem_ZM.xml | 4 +- make/data/cldr/common/main/bew.xml | 25 +-- make/data/cldr/common/main/bew_ID.xml | 4 +- make/data/cldr/common/main/bez.xml | 4 +- make/data/cldr/common/main/bez_TZ.xml | 4 +- make/data/cldr/common/main/bg.xml | 47 +---- make/data/cldr/common/main/bg_BG.xml | 4 +- make/data/cldr/common/main/bgc.xml | 4 +- make/data/cldr/common/main/bgc_IN.xml | 4 +- make/data/cldr/common/main/bgn.xml | 4 +- make/data/cldr/common/main/bgn_AE.xml | 4 +- make/data/cldr/common/main/bgn_AF.xml | 4 +- make/data/cldr/common/main/bgn_IR.xml | 4 +- make/data/cldr/common/main/bgn_OM.xml | 4 +- make/data/cldr/common/main/bgn_PK.xml | 4 +- make/data/cldr/common/main/bho.xml | 4 +- make/data/cldr/common/main/bho_IN.xml | 4 +- make/data/cldr/common/main/blo.xml | 40 +--- make/data/cldr/common/main/blo_BJ.xml | 4 +- make/data/cldr/common/main/blt.xml | 4 +- make/data/cldr/common/main/blt_VN.xml | 4 +- make/data/cldr/common/main/bm.xml | 4 +- make/data/cldr/common/main/bm_ML.xml | 4 +- make/data/cldr/common/main/bm_Nkoo.xml | 4 +- make/data/cldr/common/main/bm_Nkoo_ML.xml | 4 +- make/data/cldr/common/main/bn.xml | 46 +---- make/data/cldr/common/main/bn_BD.xml | 4 +- make/data/cldr/common/main/bn_IN.xml | 4 +- make/data/cldr/common/main/bo.xml | 4 +- make/data/cldr/common/main/bo_CN.xml | 4 +- make/data/cldr/common/main/bo_IN.xml | 4 +- make/data/cldr/common/main/br.xml | 17 +- make/data/cldr/common/main/br_FR.xml | 4 +- make/data/cldr/common/main/brx.xml | 43 +--- make/data/cldr/common/main/brx_IN.xml | 4 +- make/data/cldr/common/main/bs.xml | 29 +-- make/data/cldr/common/main/bs_Cyrl.xml | 43 +--- make/data/cldr/common/main/bs_Cyrl_BA.xml | 4 +- make/data/cldr/common/main/bs_Latn.xml | 4 +- make/data/cldr/common/main/bs_Latn_BA.xml | 4 +- make/data/cldr/common/main/bss.xml | 4 +- make/data/cldr/common/main/bss_CM.xml | 4 +- make/data/cldr/common/main/byn.xml | 4 +- make/data/cldr/common/main/byn_ER.xml | 4 +- make/data/cldr/common/main/ca.xml | 29 +-- make/data/cldr/common/main/ca_AD.xml | 4 +- make/data/cldr/common/main/ca_ES.xml | 4 +- make/data/cldr/common/main/ca_ES_VALENCIA.xml | 4 +- make/data/cldr/common/main/ca_FR.xml | 4 +- make/data/cldr/common/main/ca_IT.xml | 4 +- make/data/cldr/common/main/cad.xml | 4 +- make/data/cldr/common/main/cad_US.xml | 4 +- make/data/cldr/common/main/cch.xml | 4 +- make/data/cldr/common/main/cch_NG.xml | 4 +- make/data/cldr/common/main/ccp.xml | 47 +---- make/data/cldr/common/main/ccp_BD.xml | 4 +- make/data/cldr/common/main/ccp_IN.xml | 4 +- make/data/cldr/common/main/ce.xml | 46 +---- make/data/cldr/common/main/ce_RU.xml | 4 +- make/data/cldr/common/main/ceb.xml | 16 +- make/data/cldr/common/main/ceb_PH.xml | 4 +- make/data/cldr/common/main/cgg.xml | 4 +- make/data/cldr/common/main/cgg_UG.xml | 4 +- make/data/cldr/common/main/cho.xml | 4 +- make/data/cldr/common/main/cho_US.xml | 4 +- make/data/cldr/common/main/chr.xml | 43 +--- make/data/cldr/common/main/chr_US.xml | 4 +- make/data/cldr/common/main/cic.xml | 4 +- make/data/cldr/common/main/cic_US.xml | 4 +- make/data/cldr/common/main/ckb.xml | 4 +- make/data/cldr/common/main/ckb_IQ.xml | 4 +- make/data/cldr/common/main/ckb_IR.xml | 4 +- make/data/cldr/common/main/co.xml | 4 +- make/data/cldr/common/main/co_FR.xml | 4 +- make/data/cldr/common/main/cs.xml | 29 +-- make/data/cldr/common/main/cs_CZ.xml | 4 +- make/data/cldr/common/main/csw.xml | 4 +- make/data/cldr/common/main/csw_CA.xml | 4 +- make/data/cldr/common/main/cu.xml | 10 +- make/data/cldr/common/main/cu_RU.xml | 4 +- make/data/cldr/common/main/cv.xml | 40 +--- make/data/cldr/common/main/cv_RU.xml | 4 +- make/data/cldr/common/main/cy.xml | 26 +-- make/data/cldr/common/main/cy_GB.xml | 4 +- make/data/cldr/common/main/da.xml | 29 +-- make/data/cldr/common/main/da_DK.xml | 4 +- make/data/cldr/common/main/da_GL.xml | 4 +- make/data/cldr/common/main/dav.xml | 4 +- make/data/cldr/common/main/dav_KE.xml | 4 +- make/data/cldr/common/main/de.xml | 29 +-- make/data/cldr/common/main/de_AT.xml | 4 +- make/data/cldr/common/main/de_BE.xml | 4 +- make/data/cldr/common/main/de_CH.xml | 4 +- make/data/cldr/common/main/de_DE.xml | 4 +- make/data/cldr/common/main/de_IT.xml | 4 +- make/data/cldr/common/main/de_LI.xml | 4 +- make/data/cldr/common/main/de_LU.xml | 4 +- make/data/cldr/common/main/dje.xml | 4 +- make/data/cldr/common/main/dje_NE.xml | 4 +- make/data/cldr/common/main/doi.xml | 4 +- make/data/cldr/common/main/doi_IN.xml | 4 +- make/data/cldr/common/main/dsb.xml | 22 +- make/data/cldr/common/main/dsb_DE.xml | 4 +- make/data/cldr/common/main/dua.xml | 4 +- make/data/cldr/common/main/dua_CM.xml | 4 +- make/data/cldr/common/main/dv.xml | 4 +- make/data/cldr/common/main/dv_MV.xml | 4 +- make/data/cldr/common/main/dyo.xml | 4 +- make/data/cldr/common/main/dyo_SN.xml | 4 +- make/data/cldr/common/main/dz.xml | 19 +- make/data/cldr/common/main/dz_BT.xml | 4 +- make/data/cldr/common/main/ebu.xml | 4 +- make/data/cldr/common/main/ebu_KE.xml | 4 +- make/data/cldr/common/main/ee.xml | 20 +- make/data/cldr/common/main/ee_GH.xml | 4 +- make/data/cldr/common/main/ee_TG.xml | 4 +- make/data/cldr/common/main/el.xml | 47 +---- make/data/cldr/common/main/el_CY.xml | 4 +- make/data/cldr/common/main/el_GR.xml | 4 +- make/data/cldr/common/main/el_POLYTON.xml | 4 +- make/data/cldr/common/main/en.xml | 34 ++- make/data/cldr/common/main/en_001.xml | 8 +- make/data/cldr/common/main/en_150.xml | 4 +- make/data/cldr/common/main/en_AE.xml | 4 +- make/data/cldr/common/main/en_AG.xml | 4 +- make/data/cldr/common/main/en_AI.xml | 4 +- make/data/cldr/common/main/en_AS.xml | 4 +- make/data/cldr/common/main/en_AT.xml | 4 +- make/data/cldr/common/main/en_AU.xml | 6 +- make/data/cldr/common/main/en_BB.xml | 4 +- make/data/cldr/common/main/en_BE.xml | 4 +- make/data/cldr/common/main/en_BI.xml | 4 +- make/data/cldr/common/main/en_BM.xml | 4 +- make/data/cldr/common/main/en_BS.xml | 4 +- make/data/cldr/common/main/en_BW.xml | 4 +- make/data/cldr/common/main/en_BZ.xml | 4 +- make/data/cldr/common/main/en_CA.xml | 14 +- make/data/cldr/common/main/en_CC.xml | 4 +- make/data/cldr/common/main/en_CH.xml | 4 +- make/data/cldr/common/main/en_CK.xml | 4 +- make/data/cldr/common/main/en_CM.xml | 4 +- make/data/cldr/common/main/en_CX.xml | 4 +- make/data/cldr/common/main/en_CY.xml | 4 +- make/data/cldr/common/main/en_DE.xml | 4 +- make/data/cldr/common/main/en_DG.xml | 4 +- make/data/cldr/common/main/en_DK.xml | 4 +- make/data/cldr/common/main/en_DM.xml | 4 +- make/data/cldr/common/main/en_Dsrt.xml | 7 +- make/data/cldr/common/main/en_Dsrt_US.xml | 4 +- make/data/cldr/common/main/en_ER.xml | 4 +- make/data/cldr/common/main/en_FI.xml | 4 +- make/data/cldr/common/main/en_FJ.xml | 4 +- make/data/cldr/common/main/en_FK.xml | 4 +- make/data/cldr/common/main/en_FM.xml | 4 +- make/data/cldr/common/main/en_GB.xml | 12 +- make/data/cldr/common/main/en_GD.xml | 4 +- make/data/cldr/common/main/en_GG.xml | 4 +- make/data/cldr/common/main/en_GH.xml | 4 +- make/data/cldr/common/main/en_GI.xml | 4 +- make/data/cldr/common/main/en_GM.xml | 4 +- make/data/cldr/common/main/en_GU.xml | 4 +- make/data/cldr/common/main/en_GY.xml | 4 +- make/data/cldr/common/main/en_HK.xml | 4 +- make/data/cldr/common/main/en_ID.xml | 4 +- make/data/cldr/common/main/en_IE.xml | 4 +- make/data/cldr/common/main/en_IL.xml | 4 +- make/data/cldr/common/main/en_IM.xml | 4 +- make/data/cldr/common/main/en_IN.xml | 52 ++--- make/data/cldr/common/main/en_IO.xml | 4 +- make/data/cldr/common/main/en_JE.xml | 4 +- make/data/cldr/common/main/en_JM.xml | 4 +- make/data/cldr/common/main/en_KE.xml | 4 +- make/data/cldr/common/main/en_KI.xml | 4 +- make/data/cldr/common/main/en_KN.xml | 4 +- make/data/cldr/common/main/en_KY.xml | 4 +- make/data/cldr/common/main/en_LC.xml | 4 +- make/data/cldr/common/main/en_LR.xml | 4 +- make/data/cldr/common/main/en_LS.xml | 4 +- make/data/cldr/common/main/en_MG.xml | 4 +- make/data/cldr/common/main/en_MH.xml | 4 +- make/data/cldr/common/main/en_MO.xml | 4 +- make/data/cldr/common/main/en_MP.xml | 4 +- make/data/cldr/common/main/en_MS.xml | 4 +- make/data/cldr/common/main/en_MT.xml | 4 +- make/data/cldr/common/main/en_MU.xml | 4 +- make/data/cldr/common/main/en_MV.xml | 4 +- make/data/cldr/common/main/en_MW.xml | 4 +- make/data/cldr/common/main/en_MY.xml | 4 +- make/data/cldr/common/main/en_NA.xml | 4 +- make/data/cldr/common/main/en_NF.xml | 4 +- make/data/cldr/common/main/en_NG.xml | 4 +- make/data/cldr/common/main/en_NL.xml | 4 +- make/data/cldr/common/main/en_NR.xml | 4 +- make/data/cldr/common/main/en_NU.xml | 4 +- make/data/cldr/common/main/en_NZ.xml | 4 +- make/data/cldr/common/main/en_PG.xml | 4 +- make/data/cldr/common/main/en_PH.xml | 4 +- make/data/cldr/common/main/en_PK.xml | 4 +- make/data/cldr/common/main/en_PN.xml | 4 +- make/data/cldr/common/main/en_PR.xml | 4 +- make/data/cldr/common/main/en_PW.xml | 4 +- make/data/cldr/common/main/en_RW.xml | 4 +- make/data/cldr/common/main/en_SB.xml | 4 +- make/data/cldr/common/main/en_SC.xml | 4 +- make/data/cldr/common/main/en_SD.xml | 4 +- make/data/cldr/common/main/en_SE.xml | 4 +- make/data/cldr/common/main/en_SG.xml | 4 +- make/data/cldr/common/main/en_SH.xml | 4 +- make/data/cldr/common/main/en_SI.xml | 4 +- make/data/cldr/common/main/en_SL.xml | 4 +- make/data/cldr/common/main/en_SS.xml | 4 +- make/data/cldr/common/main/en_SX.xml | 4 +- make/data/cldr/common/main/en_SZ.xml | 4 +- make/data/cldr/common/main/en_Shaw.xml | 4 +- make/data/cldr/common/main/en_Shaw_GB.xml | 4 +- make/data/cldr/common/main/en_TC.xml | 4 +- make/data/cldr/common/main/en_TK.xml | 4 +- make/data/cldr/common/main/en_TO.xml | 4 +- make/data/cldr/common/main/en_TT.xml | 4 +- make/data/cldr/common/main/en_TV.xml | 4 +- make/data/cldr/common/main/en_TZ.xml | 4 +- make/data/cldr/common/main/en_UG.xml | 4 +- make/data/cldr/common/main/en_UM.xml | 4 +- make/data/cldr/common/main/en_US.xml | 4 +- make/data/cldr/common/main/en_US_POSIX.xml | 4 +- make/data/cldr/common/main/en_VC.xml | 4 +- make/data/cldr/common/main/en_VG.xml | 4 +- make/data/cldr/common/main/en_VI.xml | 4 +- make/data/cldr/common/main/en_VU.xml | 4 +- make/data/cldr/common/main/en_WS.xml | 4 +- make/data/cldr/common/main/en_ZA.xml | 4 +- make/data/cldr/common/main/en_ZM.xml | 4 +- make/data/cldr/common/main/en_ZW.xml | 4 +- make/data/cldr/common/main/eo.xml | 22 +- make/data/cldr/common/main/eo_001.xml | 4 +- make/data/cldr/common/main/es.xml | 34 +-- make/data/cldr/common/main/es_419.xml | 9 +- make/data/cldr/common/main/es_AR.xml | 4 +- make/data/cldr/common/main/es_BO.xml | 4 +- make/data/cldr/common/main/es_BR.xml | 4 +- make/data/cldr/common/main/es_BZ.xml | 4 +- make/data/cldr/common/main/es_CL.xml | 4 +- make/data/cldr/common/main/es_CO.xml | 4 +- make/data/cldr/common/main/es_CR.xml | 4 +- make/data/cldr/common/main/es_CU.xml | 4 +- make/data/cldr/common/main/es_DO.xml | 4 +- make/data/cldr/common/main/es_EA.xml | 4 +- make/data/cldr/common/main/es_EC.xml | 4 +- make/data/cldr/common/main/es_ES.xml | 4 +- make/data/cldr/common/main/es_GQ.xml | 4 +- make/data/cldr/common/main/es_GT.xml | 4 +- make/data/cldr/common/main/es_HN.xml | 4 +- make/data/cldr/common/main/es_IC.xml | 4 +- make/data/cldr/common/main/es_MX.xml | 9 +- make/data/cldr/common/main/es_NI.xml | 4 +- make/data/cldr/common/main/es_PA.xml | 4 +- make/data/cldr/common/main/es_PE.xml | 4 +- make/data/cldr/common/main/es_PH.xml | 4 +- make/data/cldr/common/main/es_PR.xml | 4 +- make/data/cldr/common/main/es_PY.xml | 4 +- make/data/cldr/common/main/es_SV.xml | 4 +- make/data/cldr/common/main/es_US.xml | 9 +- make/data/cldr/common/main/es_UY.xml | 4 +- make/data/cldr/common/main/es_VE.xml | 4 +- make/data/cldr/common/main/et.xml | 29 +-- make/data/cldr/common/main/et_EE.xml | 4 +- make/data/cldr/common/main/eu.xml | 29 +-- make/data/cldr/common/main/eu_ES.xml | 4 +- make/data/cldr/common/main/ewo.xml | 4 +- make/data/cldr/common/main/ewo_CM.xml | 4 +- make/data/cldr/common/main/fa.xml | 47 +---- make/data/cldr/common/main/fa_AF.xml | 4 +- make/data/cldr/common/main/fa_IR.xml | 4 +- make/data/cldr/common/main/ff.xml | 4 +- make/data/cldr/common/main/ff_Adlm.xml | 47 +---- make/data/cldr/common/main/ff_Adlm_BF.xml | 4 +- make/data/cldr/common/main/ff_Adlm_CM.xml | 4 +- make/data/cldr/common/main/ff_Adlm_GH.xml | 4 +- make/data/cldr/common/main/ff_Adlm_GM.xml | 4 +- make/data/cldr/common/main/ff_Adlm_GN.xml | 4 +- make/data/cldr/common/main/ff_Adlm_GW.xml | 4 +- make/data/cldr/common/main/ff_Adlm_LR.xml | 4 +- make/data/cldr/common/main/ff_Adlm_MR.xml | 4 +- make/data/cldr/common/main/ff_Adlm_NE.xml | 4 +- make/data/cldr/common/main/ff_Adlm_NG.xml | 4 +- make/data/cldr/common/main/ff_Adlm_SL.xml | 4 +- make/data/cldr/common/main/ff_Adlm_SN.xml | 4 +- make/data/cldr/common/main/ff_Latn.xml | 4 +- make/data/cldr/common/main/ff_Latn_BF.xml | 4 +- make/data/cldr/common/main/ff_Latn_CM.xml | 4 +- make/data/cldr/common/main/ff_Latn_GH.xml | 4 +- make/data/cldr/common/main/ff_Latn_GM.xml | 4 +- make/data/cldr/common/main/ff_Latn_GN.xml | 4 +- make/data/cldr/common/main/ff_Latn_GW.xml | 4 +- make/data/cldr/common/main/ff_Latn_LR.xml | 4 +- make/data/cldr/common/main/ff_Latn_MR.xml | 4 +- make/data/cldr/common/main/ff_Latn_NE.xml | 4 +- make/data/cldr/common/main/ff_Latn_NG.xml | 4 +- make/data/cldr/common/main/ff_Latn_SL.xml | 4 +- make/data/cldr/common/main/ff_Latn_SN.xml | 4 +- make/data/cldr/common/main/fi.xml | 29 +-- make/data/cldr/common/main/fi_FI.xml | 4 +- make/data/cldr/common/main/fil.xml | 23 +-- make/data/cldr/common/main/fil_PH.xml | 4 +- make/data/cldr/common/main/fo.xml | 25 +-- make/data/cldr/common/main/fo_DK.xml | 4 +- make/data/cldr/common/main/fo_FO.xml | 4 +- make/data/cldr/common/main/fr.xml | 43 +--- make/data/cldr/common/main/fr_BE.xml | 5 +- make/data/cldr/common/main/fr_BF.xml | 4 +- make/data/cldr/common/main/fr_BI.xml | 4 +- make/data/cldr/common/main/fr_BJ.xml | 4 +- make/data/cldr/common/main/fr_BL.xml | 4 +- make/data/cldr/common/main/fr_CA.xml | 16 +- make/data/cldr/common/main/fr_CD.xml | 4 +- make/data/cldr/common/main/fr_CF.xml | 4 +- make/data/cldr/common/main/fr_CG.xml | 4 +- make/data/cldr/common/main/fr_CH.xml | 4 +- make/data/cldr/common/main/fr_CI.xml | 4 +- make/data/cldr/common/main/fr_CM.xml | 4 +- make/data/cldr/common/main/fr_DJ.xml | 4 +- make/data/cldr/common/main/fr_DZ.xml | 4 +- make/data/cldr/common/main/fr_FR.xml | 4 +- make/data/cldr/common/main/fr_GA.xml | 4 +- make/data/cldr/common/main/fr_GF.xml | 4 +- make/data/cldr/common/main/fr_GN.xml | 4 +- make/data/cldr/common/main/fr_GP.xml | 4 +- make/data/cldr/common/main/fr_GQ.xml | 4 +- make/data/cldr/common/main/fr_HT.xml | 4 +- make/data/cldr/common/main/fr_KM.xml | 4 +- make/data/cldr/common/main/fr_LU.xml | 4 +- make/data/cldr/common/main/fr_MA.xml | 4 +- make/data/cldr/common/main/fr_MC.xml | 4 +- make/data/cldr/common/main/fr_MF.xml | 4 +- make/data/cldr/common/main/fr_MG.xml | 4 +- make/data/cldr/common/main/fr_ML.xml | 4 +- make/data/cldr/common/main/fr_MQ.xml | 4 +- make/data/cldr/common/main/fr_MR.xml | 4 +- make/data/cldr/common/main/fr_MU.xml | 4 +- make/data/cldr/common/main/fr_NC.xml | 4 +- make/data/cldr/common/main/fr_NE.xml | 4 +- make/data/cldr/common/main/fr_PF.xml | 4 +- make/data/cldr/common/main/fr_PM.xml | 4 +- make/data/cldr/common/main/fr_RE.xml | 4 +- make/data/cldr/common/main/fr_RW.xml | 4 +- make/data/cldr/common/main/fr_SC.xml | 4 +- make/data/cldr/common/main/fr_SN.xml | 4 +- make/data/cldr/common/main/fr_SY.xml | 4 +- make/data/cldr/common/main/fr_TD.xml | 4 +- make/data/cldr/common/main/fr_TG.xml | 4 +- make/data/cldr/common/main/fr_TN.xml | 4 +- make/data/cldr/common/main/fr_VU.xml | 4 +- make/data/cldr/common/main/fr_WF.xml | 4 +- make/data/cldr/common/main/fr_YT.xml | 4 +- make/data/cldr/common/main/frr.xml | 22 +- make/data/cldr/common/main/frr_DE.xml | 4 +- make/data/cldr/common/main/fur.xml | 4 +- make/data/cldr/common/main/fur_IT.xml | 4 +- make/data/cldr/common/main/fy.xml | 15 +- make/data/cldr/common/main/fy_NL.xml | 4 +- make/data/cldr/common/main/ga.xml | 23 +-- make/data/cldr/common/main/ga_GB.xml | 4 +- make/data/cldr/common/main/ga_IE.xml | 4 +- make/data/cldr/common/main/gaa.xml | 23 +-- make/data/cldr/common/main/gaa_GH.xml | 4 +- make/data/cldr/common/main/gd.xml | 26 +-- make/data/cldr/common/main/gd_GB.xml | 4 +- make/data/cldr/common/main/gez.xml | 4 +- make/data/cldr/common/main/gez_ER.xml | 4 +- make/data/cldr/common/main/gez_ET.xml | 4 +- make/data/cldr/common/main/gl.xml | 29 +-- make/data/cldr/common/main/gl_ES.xml | 4 +- make/data/cldr/common/main/gn.xml | 4 +- make/data/cldr/common/main/gn_PY.xml | 4 +- make/data/cldr/common/main/gsw.xml | 10 +- make/data/cldr/common/main/gsw_CH.xml | 4 +- make/data/cldr/common/main/gsw_FR.xml | 4 +- make/data/cldr/common/main/gsw_LI.xml | 4 +- make/data/cldr/common/main/gu.xml | 47 +---- make/data/cldr/common/main/gu_IN.xml | 4 +- make/data/cldr/common/main/guz.xml | 4 +- make/data/cldr/common/main/guz_KE.xml | 4 +- make/data/cldr/common/main/gv.xml | 4 +- make/data/cldr/common/main/gv_IM.xml | 4 +- make/data/cldr/common/main/ha.xml | 16 +- make/data/cldr/common/main/ha_Arab.xml | 4 +- make/data/cldr/common/main/ha_Arab_NG.xml | 4 +- make/data/cldr/common/main/ha_Arab_SD.xml | 4 +- make/data/cldr/common/main/ha_GH.xml | 4 +- make/data/cldr/common/main/ha_NE.xml | 4 +- make/data/cldr/common/main/ha_NG.xml | 4 +- make/data/cldr/common/main/haw.xml | 4 +- make/data/cldr/common/main/haw_US.xml | 4 +- make/data/cldr/common/main/he.xml | 47 +---- make/data/cldr/common/main/he_IL.xml | 4 +- make/data/cldr/common/main/hi.xml | 47 +---- make/data/cldr/common/main/hi_IN.xml | 4 +- make/data/cldr/common/main/hi_Latn.xml | 19 +- make/data/cldr/common/main/hi_Latn_IN.xml | 4 +- make/data/cldr/common/main/hnj.xml | 4 +- make/data/cldr/common/main/hnj_Hmnp.xml | 4 +- make/data/cldr/common/main/hnj_Hmnp_US.xml | 4 +- make/data/cldr/common/main/hr.xml | 29 +-- make/data/cldr/common/main/hr_BA.xml | 4 +- make/data/cldr/common/main/hr_HR.xml | 4 +- make/data/cldr/common/main/hsb.xml | 22 +- make/data/cldr/common/main/hsb_DE.xml | 4 +- make/data/cldr/common/main/hu.xml | 29 +-- make/data/cldr/common/main/hu_HU.xml | 4 +- make/data/cldr/common/main/hy.xml | 46 +---- make/data/cldr/common/main/hy_AM.xml | 4 +- make/data/cldr/common/main/ia.xml | 16 +- make/data/cldr/common/main/ia_001.xml | 4 +- make/data/cldr/common/main/id.xml | 29 +-- make/data/cldr/common/main/id_ID.xml | 4 +- make/data/cldr/common/main/ie.xml | 22 +- make/data/cldr/common/main/ie_EE.xml | 4 +- make/data/cldr/common/main/ig.xml | 16 +- make/data/cldr/common/main/ig_NG.xml | 4 +- make/data/cldr/common/main/ii.xml | 4 +- make/data/cldr/common/main/ii_CN.xml | 4 +- make/data/cldr/common/main/io.xml | 4 +- make/data/cldr/common/main/io_001.xml | 4 +- make/data/cldr/common/main/is.xml | 23 +-- make/data/cldr/common/main/is_IS.xml | 4 +- make/data/cldr/common/main/it.xml | 50 ++--- make/data/cldr/common/main/it_CH.xml | 4 +- make/data/cldr/common/main/it_IT.xml | 4 +- make/data/cldr/common/main/it_SM.xml | 4 +- make/data/cldr/common/main/it_VA.xml | 4 +- make/data/cldr/common/main/iu.xml | 4 +- make/data/cldr/common/main/iu_CA.xml | 4 +- make/data/cldr/common/main/iu_Latn.xml | 4 +- make/data/cldr/common/main/iu_Latn_CA.xml | 4 +- make/data/cldr/common/main/ja.xml | 47 +---- make/data/cldr/common/main/ja_JP.xml | 4 +- make/data/cldr/common/main/jbo.xml | 4 +- make/data/cldr/common/main/jbo_001.xml | 4 +- make/data/cldr/common/main/jgo.xml | 4 +- make/data/cldr/common/main/jgo_CM.xml | 4 +- make/data/cldr/common/main/jmc.xml | 4 +- make/data/cldr/common/main/jmc_TZ.xml | 4 +- make/data/cldr/common/main/jv.xml | 25 +-- make/data/cldr/common/main/jv_ID.xml | 4 +- make/data/cldr/common/main/ka.xml | 46 +---- make/data/cldr/common/main/ka_GE.xml | 4 +- make/data/cldr/common/main/kab.xml | 19 +- make/data/cldr/common/main/kab_DZ.xml | 4 +- make/data/cldr/common/main/kaj.xml | 4 +- make/data/cldr/common/main/kaj_NG.xml | 4 +- make/data/cldr/common/main/kam.xml | 4 +- make/data/cldr/common/main/kam_KE.xml | 4 +- make/data/cldr/common/main/kcg.xml | 4 +- make/data/cldr/common/main/kcg_NG.xml | 4 +- make/data/cldr/common/main/kde.xml | 4 +- make/data/cldr/common/main/kde_TZ.xml | 4 +- make/data/cldr/common/main/kea.xml | 11 +- make/data/cldr/common/main/kea_CV.xml | 4 +- make/data/cldr/common/main/ken.xml | 4 +- make/data/cldr/common/main/ken_CM.xml | 4 +- make/data/cldr/common/main/kgp.xml | 47 +---- make/data/cldr/common/main/kgp_BR.xml | 4 +- make/data/cldr/common/main/khq.xml | 4 +- make/data/cldr/common/main/khq_ML.xml | 4 +- make/data/cldr/common/main/ki.xml | 4 +- make/data/cldr/common/main/ki_KE.xml | 4 +- make/data/cldr/common/main/kk.xml | 46 +---- make/data/cldr/common/main/kk_KZ.xml | 4 +- make/data/cldr/common/main/kkj.xml | 4 +- make/data/cldr/common/main/kkj_CM.xml | 4 +- make/data/cldr/common/main/kl.xml | 4 +- make/data/cldr/common/main/kl_GL.xml | 4 +- make/data/cldr/common/main/kln.xml | 4 +- make/data/cldr/common/main/kln_KE.xml | 4 +- make/data/cldr/common/main/km.xml | 46 +---- make/data/cldr/common/main/km_KH.xml | 4 +- make/data/cldr/common/main/kn.xml | 47 +---- make/data/cldr/common/main/kn_IN.xml | 4 +- make/data/cldr/common/main/ko.xml | 47 +---- make/data/cldr/common/main/ko_CN.xml | 4 +- make/data/cldr/common/main/ko_KP.xml | 4 +- make/data/cldr/common/main/ko_KR.xml | 4 +- make/data/cldr/common/main/kok.xml | 43 +--- make/data/cldr/common/main/kok_IN.xml | 4 +- make/data/cldr/common/main/kpe.xml | 4 +- make/data/cldr/common/main/kpe_GN.xml | 4 +- make/data/cldr/common/main/kpe_LR.xml | 4 +- make/data/cldr/common/main/ks.xml | 136 +++++------- make/data/cldr/common/main/ks_Arab.xml | 4 +- make/data/cldr/common/main/ks_Arab_IN.xml | 4 +- make/data/cldr/common/main/ks_Deva.xml | 4 +- make/data/cldr/common/main/ks_Deva_IN.xml | 4 +- make/data/cldr/common/main/ksb.xml | 4 +- make/data/cldr/common/main/ksb_TZ.xml | 4 +- make/data/cldr/common/main/ksf.xml | 4 +- make/data/cldr/common/main/ksf_CM.xml | 4 +- make/data/cldr/common/main/ksh.xml | 10 +- make/data/cldr/common/main/ksh_DE.xml | 4 +- make/data/cldr/common/main/ku.xml | 49 +---- make/data/cldr/common/main/ku_TR.xml | 4 +- make/data/cldr/common/main/kw.xml | 4 +- make/data/cldr/common/main/kw_GB.xml | 4 +- make/data/cldr/common/main/kxv.xml | 40 +--- make/data/cldr/common/main/kxv_Deva.xml | 4 +- make/data/cldr/common/main/kxv_Deva_IN.xml | 4 +- make/data/cldr/common/main/kxv_Latn.xml | 4 +- make/data/cldr/common/main/kxv_Latn_IN.xml | 4 +- make/data/cldr/common/main/kxv_Orya.xml | 4 +- make/data/cldr/common/main/kxv_Orya_IN.xml | 4 +- make/data/cldr/common/main/kxv_Telu.xml | 4 +- make/data/cldr/common/main/kxv_Telu_IN.xml | 4 +- make/data/cldr/common/main/ky.xml | 46 +---- make/data/cldr/common/main/ky_KG.xml | 4 +- make/data/cldr/common/main/la.xml | 4 +- make/data/cldr/common/main/la_VA.xml | 4 +- make/data/cldr/common/main/lag.xml | 4 +- make/data/cldr/common/main/lag_TZ.xml | 4 +- make/data/cldr/common/main/lb.xml | 23 +-- make/data/cldr/common/main/lb_LU.xml | 4 +- make/data/cldr/common/main/lg.xml | 4 +- make/data/cldr/common/main/lg_UG.xml | 4 +- make/data/cldr/common/main/lij.xml | 16 +- make/data/cldr/common/main/lij_IT.xml | 4 +- make/data/cldr/common/main/lkt.xml | 4 +- make/data/cldr/common/main/lkt_US.xml | 4 +- make/data/cldr/common/main/lmo.xml | 4 +- make/data/cldr/common/main/lmo_IT.xml | 4 +- make/data/cldr/common/main/ln.xml | 4 +- make/data/cldr/common/main/ln_AO.xml | 4 +- make/data/cldr/common/main/ln_CD.xml | 4 +- make/data/cldr/common/main/ln_CF.xml | 4 +- make/data/cldr/common/main/ln_CG.xml | 4 +- make/data/cldr/common/main/lo.xml | 47 +---- make/data/cldr/common/main/lo_LA.xml | 4 +- make/data/cldr/common/main/lrc.xml | 4 +- make/data/cldr/common/main/lrc_IQ.xml | 4 +- make/data/cldr/common/main/lrc_IR.xml | 4 +- make/data/cldr/common/main/lt.xml | 47 +---- make/data/cldr/common/main/lt_LT.xml | 4 +- make/data/cldr/common/main/lu.xml | 4 +- make/data/cldr/common/main/lu_CD.xml | 4 +- make/data/cldr/common/main/luo.xml | 4 +- make/data/cldr/common/main/luo_KE.xml | 4 +- make/data/cldr/common/main/luy.xml | 4 +- make/data/cldr/common/main/luy_KE.xml | 4 +- make/data/cldr/common/main/lv.xml | 51 +---- make/data/cldr/common/main/lv_LV.xml | 4 +- make/data/cldr/common/main/mai.xml | 37 +--- make/data/cldr/common/main/mai_IN.xml | 4 +- make/data/cldr/common/main/mas.xml | 4 +- make/data/cldr/common/main/mas_KE.xml | 4 +- make/data/cldr/common/main/mas_TZ.xml | 4 +- make/data/cldr/common/main/mdf.xml | 4 +- make/data/cldr/common/main/mdf_RU.xml | 4 +- make/data/cldr/common/main/mer.xml | 4 +- make/data/cldr/common/main/mer_KE.xml | 4 +- make/data/cldr/common/main/mfe.xml | 4 +- make/data/cldr/common/main/mfe_MU.xml | 4 +- make/data/cldr/common/main/mg.xml | 4 +- make/data/cldr/common/main/mg_MG.xml | 4 +- make/data/cldr/common/main/mgh.xml | 4 +- make/data/cldr/common/main/mgh_MZ.xml | 4 +- make/data/cldr/common/main/mgo.xml | 4 +- make/data/cldr/common/main/mgo_CM.xml | 4 +- make/data/cldr/common/main/mi.xml | 19 +- make/data/cldr/common/main/mi_NZ.xml | 4 +- make/data/cldr/common/main/mic.xml | 4 +- make/data/cldr/common/main/mic_CA.xml | 4 +- make/data/cldr/common/main/mk.xml | 46 +---- make/data/cldr/common/main/mk_MK.xml | 4 +- make/data/cldr/common/main/ml.xml | 46 +---- make/data/cldr/common/main/ml_IN.xml | 4 +- make/data/cldr/common/main/mn.xml | 47 +---- make/data/cldr/common/main/mn_MN.xml | 4 +- make/data/cldr/common/main/mn_Mong.xml | 4 +- make/data/cldr/common/main/mn_Mong_CN.xml | 4 +- make/data/cldr/common/main/mn_Mong_MN.xml | 4 +- make/data/cldr/common/main/mni.xml | 4 +- make/data/cldr/common/main/mni_Beng.xml | 4 +- make/data/cldr/common/main/mni_Beng_IN.xml | 4 +- make/data/cldr/common/main/mni_Mtei.xml | 4 +- make/data/cldr/common/main/mni_Mtei_IN.xml | 4 +- make/data/cldr/common/main/moh.xml | 4 +- make/data/cldr/common/main/moh_CA.xml | 4 +- make/data/cldr/common/main/mr.xml | 47 +---- make/data/cldr/common/main/mr_IN.xml | 4 +- make/data/cldr/common/main/ms.xml | 26 +-- make/data/cldr/common/main/ms_Arab.xml | 4 +- make/data/cldr/common/main/ms_Arab_BN.xml | 4 +- make/data/cldr/common/main/ms_Arab_MY.xml | 4 +- make/data/cldr/common/main/ms_BN.xml | 4 +- make/data/cldr/common/main/ms_ID.xml | 4 +- make/data/cldr/common/main/ms_MY.xml | 4 +- make/data/cldr/common/main/ms_SG.xml | 4 +- make/data/cldr/common/main/mt.xml | 7 +- make/data/cldr/common/main/mt_MT.xml | 4 +- make/data/cldr/common/main/mua.xml | 4 +- make/data/cldr/common/main/mua_CM.xml | 4 +- make/data/cldr/common/main/mus.xml | 14 +- make/data/cldr/common/main/mus_US.xml | 4 +- make/data/cldr/common/main/my.xml | 46 +---- make/data/cldr/common/main/my_MM.xml | 4 +- make/data/cldr/common/main/myv.xml | 10 +- make/data/cldr/common/main/myv_RU.xml | 4 +- make/data/cldr/common/main/mzn.xml | 4 +- make/data/cldr/common/main/mzn_IR.xml | 4 +- make/data/cldr/common/main/naq.xml | 4 +- make/data/cldr/common/main/naq_NA.xml | 4 +- make/data/cldr/common/main/nb.xml | 4 +- make/data/cldr/common/main/nb_NO.xml | 4 +- make/data/cldr/common/main/nb_SJ.xml | 4 +- make/data/cldr/common/main/nd.xml | 4 +- make/data/cldr/common/main/nd_ZW.xml | 4 +- make/data/cldr/common/main/nds.xml | 10 +- make/data/cldr/common/main/nds_DE.xml | 4 +- make/data/cldr/common/main/nds_NL.xml | 4 +- make/data/cldr/common/main/ne.xml | 46 +---- make/data/cldr/common/main/ne_IN.xml | 4 +- make/data/cldr/common/main/ne_NP.xml | 4 +- make/data/cldr/common/main/nl.xml | 193 ++++++++---------- make/data/cldr/common/main/nl_AW.xml | 4 +- make/data/cldr/common/main/nl_BE.xml | 4 +- make/data/cldr/common/main/nl_BQ.xml | 4 +- make/data/cldr/common/main/nl_CW.xml | 4 +- make/data/cldr/common/main/nl_NL.xml | 4 +- make/data/cldr/common/main/nl_SR.xml | 4 +- make/data/cldr/common/main/nl_SX.xml | 4 +- make/data/cldr/common/main/nmg.xml | 4 +- make/data/cldr/common/main/nmg_CM.xml | 4 +- make/data/cldr/common/main/nn.xml | 11 +- make/data/cldr/common/main/nn_NO.xml | 4 +- make/data/cldr/common/main/nnh.xml | 4 +- make/data/cldr/common/main/nnh_CM.xml | 4 +- make/data/cldr/common/main/no.xml | 29 +-- make/data/cldr/common/main/nqo.xml | 4 +- make/data/cldr/common/main/nqo_GN.xml | 4 +- make/data/cldr/common/main/nr.xml | 4 +- make/data/cldr/common/main/nr_ZA.xml | 4 +- make/data/cldr/common/main/nso.xml | 4 +- make/data/cldr/common/main/nso_ZA.xml | 4 +- make/data/cldr/common/main/nus.xml | 4 +- make/data/cldr/common/main/nus_SS.xml | 4 +- make/data/cldr/common/main/nv.xml | 4 +- make/data/cldr/common/main/nv_US.xml | 4 +- make/data/cldr/common/main/ny.xml | 4 +- make/data/cldr/common/main/ny_MW.xml | 4 +- make/data/cldr/common/main/nyn.xml | 4 +- make/data/cldr/common/main/nyn_UG.xml | 4 +- make/data/cldr/common/main/oc.xml | 16 +- make/data/cldr/common/main/oc_ES.xml | 19 +- make/data/cldr/common/main/oc_FR.xml | 4 +- make/data/cldr/common/main/om.xml | 4 +- make/data/cldr/common/main/om_ET.xml | 4 +- make/data/cldr/common/main/om_KE.xml | 4 +- make/data/cldr/common/main/or.xml | 43 +--- make/data/cldr/common/main/or_IN.xml | 4 +- make/data/cldr/common/main/os.xml | 4 +- make/data/cldr/common/main/os_GE.xml | 4 +- make/data/cldr/common/main/os_RU.xml | 4 +- make/data/cldr/common/main/osa.xml | 4 +- make/data/cldr/common/main/osa_US.xml | 4 +- make/data/cldr/common/main/pa.xml | 46 +---- make/data/cldr/common/main/pa_Arab.xml | 4 +- make/data/cldr/common/main/pa_Arab_PK.xml | 4 +- make/data/cldr/common/main/pa_Guru.xml | 4 +- make/data/cldr/common/main/pa_Guru_IN.xml | 4 +- make/data/cldr/common/main/pap.xml | 8 +- make/data/cldr/common/main/pap_AW.xml | 4 +- make/data/cldr/common/main/pap_CW.xml | 4 +- make/data/cldr/common/main/pcm.xml | 43 +--- make/data/cldr/common/main/pcm_NG.xml | 4 +- make/data/cldr/common/main/pis.xml | 4 +- make/data/cldr/common/main/pis_SB.xml | 4 +- make/data/cldr/common/main/pl.xml | 29 +-- make/data/cldr/common/main/pl_PL.xml | 4 +- make/data/cldr/common/main/prg.xml | 4 +- make/data/cldr/common/main/prg_PL.xml | 4 +- make/data/cldr/common/main/ps.xml | 43 +--- make/data/cldr/common/main/ps_AF.xml | 4 +- make/data/cldr/common/main/ps_PK.xml | 9 +- make/data/cldr/common/main/pt.xml | 26 +-- make/data/cldr/common/main/pt_AO.xml | 4 +- make/data/cldr/common/main/pt_BR.xml | 4 +- make/data/cldr/common/main/pt_CH.xml | 4 +- make/data/cldr/common/main/pt_CV.xml | 4 +- make/data/cldr/common/main/pt_GQ.xml | 4 +- make/data/cldr/common/main/pt_GW.xml | 4 +- make/data/cldr/common/main/pt_LU.xml | 4 +- make/data/cldr/common/main/pt_MO.xml | 4 +- make/data/cldr/common/main/pt_MZ.xml | 4 +- make/data/cldr/common/main/pt_PT.xml | 16 +- make/data/cldr/common/main/pt_ST.xml | 4 +- make/data/cldr/common/main/pt_TL.xml | 4 +- make/data/cldr/common/main/qu.xml | 19 +- make/data/cldr/common/main/qu_BO.xml | 4 +- make/data/cldr/common/main/qu_EC.xml | 4 +- make/data/cldr/common/main/qu_PE.xml | 4 +- make/data/cldr/common/main/quc.xml | 4 +- make/data/cldr/common/main/quc_GT.xml | 4 +- make/data/cldr/common/main/raj.xml | 4 +- make/data/cldr/common/main/raj_IN.xml | 4 +- make/data/cldr/common/main/rhg.xml | 4 +- make/data/cldr/common/main/rhg_Rohg.xml | 4 +- make/data/cldr/common/main/rhg_Rohg_BD.xml | 4 +- make/data/cldr/common/main/rhg_Rohg_MM.xml | 4 +- make/data/cldr/common/main/rif.xml | 11 +- make/data/cldr/common/main/rif_MA.xml | 4 +- make/data/cldr/common/main/rm.xml | 10 +- make/data/cldr/common/main/rm_CH.xml | 4 +- make/data/cldr/common/main/rn.xml | 4 +- make/data/cldr/common/main/rn_BI.xml | 4 +- make/data/cldr/common/main/ro.xml | 29 +-- make/data/cldr/common/main/ro_MD.xml | 4 +- make/data/cldr/common/main/ro_RO.xml | 4 +- make/data/cldr/common/main/rof.xml | 4 +- make/data/cldr/common/main/rof_TZ.xml | 4 +- make/data/cldr/common/main/root.xml | 31 +-- make/data/cldr/common/main/ru.xml | 47 +---- make/data/cldr/common/main/ru_BY.xml | 4 +- make/data/cldr/common/main/ru_KG.xml | 4 +- make/data/cldr/common/main/ru_KZ.xml | 4 +- make/data/cldr/common/main/ru_MD.xml | 4 +- make/data/cldr/common/main/ru_RU.xml | 4 +- make/data/cldr/common/main/ru_UA.xml | 4 +- make/data/cldr/common/main/rw.xml | 4 +- make/data/cldr/common/main/rw_RW.xml | 4 +- make/data/cldr/common/main/rwk.xml | 4 +- make/data/cldr/common/main/rwk_TZ.xml | 4 +- make/data/cldr/common/main/sa.xml | 4 +- make/data/cldr/common/main/sa_IN.xml | 4 +- make/data/cldr/common/main/sah.xml | 4 +- make/data/cldr/common/main/sah_RU.xml | 4 +- make/data/cldr/common/main/saq.xml | 4 +- make/data/cldr/common/main/saq_KE.xml | 4 +- make/data/cldr/common/main/sat.xml | 26 +-- make/data/cldr/common/main/sat_Deva.xml | 4 +- make/data/cldr/common/main/sat_Deva_IN.xml | 4 +- make/data/cldr/common/main/sat_Olck.xml | 4 +- make/data/cldr/common/main/sat_Olck_IN.xml | 4 +- make/data/cldr/common/main/sbp.xml | 4 +- make/data/cldr/common/main/sbp_TZ.xml | 4 +- make/data/cldr/common/main/sc.xml | 20 +- make/data/cldr/common/main/sc_IT.xml | 4 +- make/data/cldr/common/main/scn.xml | 4 +- make/data/cldr/common/main/scn_IT.xml | 4 +- make/data/cldr/common/main/sd.xml | 43 +--- make/data/cldr/common/main/sd_Arab.xml | 4 +- make/data/cldr/common/main/sd_Arab_PK.xml | 4 +- make/data/cldr/common/main/sd_Deva.xml | 4 +- make/data/cldr/common/main/sd_Deva_IN.xml | 4 +- make/data/cldr/common/main/sdh.xml | 4 +- make/data/cldr/common/main/sdh_IQ.xml | 4 +- make/data/cldr/common/main/sdh_IR.xml | 4 +- make/data/cldr/common/main/se.xml | 4 +- make/data/cldr/common/main/se_FI.xml | 16 +- make/data/cldr/common/main/se_NO.xml | 4 +- make/data/cldr/common/main/se_SE.xml | 4 +- make/data/cldr/common/main/seh.xml | 4 +- make/data/cldr/common/main/seh_MZ.xml | 4 +- make/data/cldr/common/main/ses.xml | 4 +- make/data/cldr/common/main/ses_ML.xml | 4 +- make/data/cldr/common/main/sg.xml | 4 +- make/data/cldr/common/main/sg_CF.xml | 4 +- make/data/cldr/common/main/shi.xml | 4 +- make/data/cldr/common/main/shi_Latn.xml | 4 +- make/data/cldr/common/main/shi_Latn_MA.xml | 4 +- make/data/cldr/common/main/shi_Tfng.xml | 4 +- make/data/cldr/common/main/shi_Tfng_MA.xml | 4 +- make/data/cldr/common/main/shn.xml | 4 +- make/data/cldr/common/main/shn_MM.xml | 4 +- make/data/cldr/common/main/shn_TH.xml | 4 +- make/data/cldr/common/main/si.xml | 46 +---- make/data/cldr/common/main/si_LK.xml | 4 +- make/data/cldr/common/main/sid.xml | 4 +- make/data/cldr/common/main/sid_ET.xml | 4 +- make/data/cldr/common/main/sk.xml | 29 +-- make/data/cldr/common/main/sk_SK.xml | 4 +- make/data/cldr/common/main/skr.xml | 4 +- make/data/cldr/common/main/skr_PK.xml | 4 +- make/data/cldr/common/main/sl.xml | 29 +-- make/data/cldr/common/main/sl_SI.xml | 4 +- make/data/cldr/common/main/sma.xml | 4 +- make/data/cldr/common/main/sma_NO.xml | 4 +- make/data/cldr/common/main/sma_SE.xml | 4 +- make/data/cldr/common/main/smj.xml | 4 +- make/data/cldr/common/main/smj_NO.xml | 4 +- make/data/cldr/common/main/smj_SE.xml | 4 +- make/data/cldr/common/main/smn.xml | 4 +- make/data/cldr/common/main/smn_FI.xml | 4 +- make/data/cldr/common/main/sms.xml | 4 +- make/data/cldr/common/main/sms_FI.xml | 4 +- make/data/cldr/common/main/sn.xml | 4 +- make/data/cldr/common/main/sn_ZW.xml | 4 +- make/data/cldr/common/main/so.xml | 44 +--- make/data/cldr/common/main/so_DJ.xml | 4 +- make/data/cldr/common/main/so_ET.xml | 4 +- make/data/cldr/common/main/so_KE.xml | 4 +- make/data/cldr/common/main/so_SO.xml | 4 +- make/data/cldr/common/main/sq.xml | 38 +--- make/data/cldr/common/main/sq_AL.xml | 4 +- make/data/cldr/common/main/sq_MK.xml | 4 +- make/data/cldr/common/main/sq_XK.xml | 4 +- make/data/cldr/common/main/sr.xml | 47 +---- make/data/cldr/common/main/sr_Cyrl.xml | 4 +- make/data/cldr/common/main/sr_Cyrl_BA.xml | 17 +- make/data/cldr/common/main/sr_Cyrl_ME.xml | 4 +- make/data/cldr/common/main/sr_Cyrl_RS.xml | 4 +- make/data/cldr/common/main/sr_Cyrl_XK.xml | 4 +- make/data/cldr/common/main/sr_Latn.xml | 47 +---- make/data/cldr/common/main/sr_Latn_BA.xml | 17 +- make/data/cldr/common/main/sr_Latn_ME.xml | 4 +- make/data/cldr/common/main/sr_Latn_RS.xml | 4 +- make/data/cldr/common/main/sr_Latn_XK.xml | 4 +- make/data/cldr/common/main/ss.xml | 4 +- make/data/cldr/common/main/ss_SZ.xml | 4 +- make/data/cldr/common/main/ss_ZA.xml | 4 +- make/data/cldr/common/main/ssy.xml | 4 +- make/data/cldr/common/main/ssy_ER.xml | 4 +- make/data/cldr/common/main/st.xml | 4 +- make/data/cldr/common/main/st_LS.xml | 4 +- make/data/cldr/common/main/st_ZA.xml | 4 +- make/data/cldr/common/main/su.xml | 4 +- make/data/cldr/common/main/su_Latn.xml | 4 +- make/data/cldr/common/main/su_Latn_ID.xml | 4 +- make/data/cldr/common/main/sv.xml | 32 +-- make/data/cldr/common/main/sv_AX.xml | 4 +- make/data/cldr/common/main/sv_FI.xml | 4 +- make/data/cldr/common/main/sv_SE.xml | 4 +- make/data/cldr/common/main/sw.xml | 23 +-- make/data/cldr/common/main/sw_CD.xml | 4 +- make/data/cldr/common/main/sw_KE.xml | 16 +- make/data/cldr/common/main/sw_TZ.xml | 4 +- make/data/cldr/common/main/sw_UG.xml | 4 +- make/data/cldr/common/main/syr.xml | 42 +--- make/data/cldr/common/main/syr_IQ.xml | 4 +- make/data/cldr/common/main/syr_SY.xml | 4 +- make/data/cldr/common/main/szl.xml | 20 +- make/data/cldr/common/main/szl_PL.xml | 4 +- make/data/cldr/common/main/ta.xml | 133 ++++-------- make/data/cldr/common/main/ta_IN.xml | 4 +- make/data/cldr/common/main/ta_LK.xml | 4 +- make/data/cldr/common/main/ta_MY.xml | 4 +- make/data/cldr/common/main/ta_SG.xml | 4 +- make/data/cldr/common/main/te.xml | 47 +---- make/data/cldr/common/main/te_IN.xml | 4 +- make/data/cldr/common/main/teo.xml | 4 +- make/data/cldr/common/main/teo_KE.xml | 4 +- make/data/cldr/common/main/teo_UG.xml | 4 +- make/data/cldr/common/main/tg.xml | 4 +- make/data/cldr/common/main/tg_TJ.xml | 4 +- make/data/cldr/common/main/th.xml | 47 +---- make/data/cldr/common/main/th_TH.xml | 4 +- make/data/cldr/common/main/ti.xml | 31 +-- make/data/cldr/common/main/ti_ER.xml | 4 +- make/data/cldr/common/main/ti_ET.xml | 4 +- make/data/cldr/common/main/tig.xml | 4 +- make/data/cldr/common/main/tig_ER.xml | 4 +- make/data/cldr/common/main/tk.xml | 43 +--- make/data/cldr/common/main/tk_TM.xml | 4 +- make/data/cldr/common/main/tn.xml | 4 +- make/data/cldr/common/main/tn_BW.xml | 4 +- make/data/cldr/common/main/tn_ZA.xml | 4 +- make/data/cldr/common/main/to.xml | 28 +-- make/data/cldr/common/main/to_TO.xml | 4 +- make/data/cldr/common/main/tok.xml | 4 +- make/data/cldr/common/main/tok_001.xml | 4 +- make/data/cldr/common/main/tpi.xml | 4 +- make/data/cldr/common/main/tpi_PG.xml | 4 +- make/data/cldr/common/main/tr.xml | 29 +-- make/data/cldr/common/main/tr_CY.xml | 4 +- make/data/cldr/common/main/tr_TR.xml | 4 +- make/data/cldr/common/main/trv.xml | 4 +- make/data/cldr/common/main/trv_TW.xml | 4 +- make/data/cldr/common/main/trw.xml | 43 +--- make/data/cldr/common/main/trw_PK.xml | 4 +- make/data/cldr/common/main/ts.xml | 4 +- make/data/cldr/common/main/ts_ZA.xml | 4 +- make/data/cldr/common/main/tt.xml | 4 +- make/data/cldr/common/main/tt_RU.xml | 4 +- make/data/cldr/common/main/twq.xml | 4 +- make/data/cldr/common/main/twq_NE.xml | 4 +- make/data/cldr/common/main/tyv.xml | 4 +- make/data/cldr/common/main/tyv_RU.xml | 4 +- make/data/cldr/common/main/tzm.xml | 4 +- make/data/cldr/common/main/tzm_MA.xml | 4 +- make/data/cldr/common/main/ug.xml | 16 +- make/data/cldr/common/main/ug_CN.xml | 4 +- make/data/cldr/common/main/uk.xml | 51 +---- make/data/cldr/common/main/uk_UA.xml | 4 +- make/data/cldr/common/main/ur.xml | 47 +---- make/data/cldr/common/main/ur_IN.xml | 9 +- make/data/cldr/common/main/ur_PK.xml | 4 +- make/data/cldr/common/main/uz.xml | 43 +--- make/data/cldr/common/main/uz_Arab.xml | 4 +- make/data/cldr/common/main/uz_Arab_AF.xml | 4 +- make/data/cldr/common/main/uz_Cyrl.xml | 9 +- make/data/cldr/common/main/uz_Cyrl_UZ.xml | 4 +- make/data/cldr/common/main/uz_Latn.xml | 4 +- make/data/cldr/common/main/uz_Latn_UZ.xml | 4 +- make/data/cldr/common/main/vai.xml | 4 +- make/data/cldr/common/main/vai_Latn.xml | 4 +- make/data/cldr/common/main/vai_Latn_LR.xml | 4 +- make/data/cldr/common/main/vai_Vaii.xml | 4 +- make/data/cldr/common/main/vai_Vaii_LR.xml | 4 +- make/data/cldr/common/main/ve.xml | 4 +- make/data/cldr/common/main/ve_ZA.xml | 4 +- make/data/cldr/common/main/vec.xml | 28 +-- make/data/cldr/common/main/vec_IT.xml | 4 +- make/data/cldr/common/main/vi.xml | 116 +++++------ make/data/cldr/common/main/vi_VN.xml | 4 +- make/data/cldr/common/main/vmw.xml | 4 +- make/data/cldr/common/main/vmw_MZ.xml | 4 +- make/data/cldr/common/main/vo.xml | 4 +- make/data/cldr/common/main/vo_001.xml | 4 +- make/data/cldr/common/main/vun.xml | 4 +- make/data/cldr/common/main/vun_TZ.xml | 4 +- make/data/cldr/common/main/wa.xml | 4 +- make/data/cldr/common/main/wa_BE.xml | 4 +- make/data/cldr/common/main/wae.xml | 4 +- make/data/cldr/common/main/wae_CH.xml | 4 +- make/data/cldr/common/main/wal.xml | 4 +- make/data/cldr/common/main/wal_ET.xml | 4 +- make/data/cldr/common/main/wbp.xml | 4 +- make/data/cldr/common/main/wbp_AU.xml | 4 +- make/data/cldr/common/main/wo.xml | 4 +- make/data/cldr/common/main/wo_SN.xml | 4 +- make/data/cldr/common/main/xh.xml | 19 +- make/data/cldr/common/main/xh_ZA.xml | 4 +- make/data/cldr/common/main/xnr.xml | 16 +- make/data/cldr/common/main/xnr_IN.xml | 4 +- make/data/cldr/common/main/xog.xml | 4 +- make/data/cldr/common/main/xog_UG.xml | 4 +- make/data/cldr/common/main/yav.xml | 4 +- make/data/cldr/common/main/yav_CM.xml | 4 +- make/data/cldr/common/main/yi.xml | 4 +- make/data/cldr/common/main/yi_UA.xml | 4 +- make/data/cldr/common/main/yo.xml | 31 +-- make/data/cldr/common/main/yo_BJ.xml | 11 +- make/data/cldr/common/main/yo_NG.xml | 4 +- make/data/cldr/common/main/yrl.xml | 47 +---- make/data/cldr/common/main/yrl_BR.xml | 4 +- make/data/cldr/common/main/yrl_CO.xml | 4 +- make/data/cldr/common/main/yrl_VE.xml | 4 +- make/data/cldr/common/main/yue.xml | 47 +---- make/data/cldr/common/main/yue_Hans.xml | 47 +---- make/data/cldr/common/main/yue_Hans_CN.xml | 4 +- make/data/cldr/common/main/yue_Hant.xml | 4 +- make/data/cldr/common/main/yue_Hant_HK.xml | 4 +- make/data/cldr/common/main/za.xml | 4 +- make/data/cldr/common/main/za_CN.xml | 4 +- make/data/cldr/common/main/zgh.xml | 4 +- make/data/cldr/common/main/zgh_MA.xml | 4 +- make/data/cldr/common/main/zh.xml | 47 +---- make/data/cldr/common/main/zh_Hans.xml | 4 +- make/data/cldr/common/main/zh_Hans_CN.xml | 4 +- make/data/cldr/common/main/zh_Hans_HK.xml | 4 +- make/data/cldr/common/main/zh_Hans_MO.xml | 4 +- make/data/cldr/common/main/zh_Hans_SG.xml | 4 +- make/data/cldr/common/main/zh_Hant.xml | 47 +---- make/data/cldr/common/main/zh_Hant_HK.xml | 28 +-- make/data/cldr/common/main/zh_Hant_MO.xml | 4 +- make/data/cldr/common/main/zh_Hant_TW.xml | 4 +- make/data/cldr/common/main/zu.xml | 47 +---- make/data/cldr/common/main/zu_ZA.xml | 4 +- .../cldr/common/properties/coverageLevels.txt | 1 - .../common/supplemental/coverageLevels.xml | 8 +- .../common/supplemental/languageGroup.xml | 18 +- .../cldr/common/supplemental/languageInfo.xml | 1 - .../common/supplemental/likelySubtags.xml | 33 ++- .../cldr/common/supplemental/metaZones.xml | 61 ++---- .../cldr/common/supplemental/ordinals.xml | 2 +- .../cldr/common/supplemental/pluralRanges.xml | 2 +- .../data/cldr/common/supplemental/plurals.xml | 2 +- .../cldr/common/supplemental/subdivisions.xml | 2 +- .../common/supplemental/supplementalData.xml | 26 +-- .../supplemental/supplementalMetadata.xml | 22 ++ make/data/cldr/common/supplemental/units.xml | 36 ++++ .../cldr/common/supplemental/windowsZones.xml | 21 +- .../java/util/spi/LocaleServiceProvider.java | 2 + src/java.base/share/legal/cldr.md | 57 +++++- src/jdk.localedata/share/legal/cldr.md | 57 +++++- .../TestCompactNumber.java | 14 +- .../TestParseBigDecimal.java | 10 +- 1075 files changed, 2761 insertions(+), 7094 deletions(-) rename make/data/cldr/{LICENSE.txt => LICENSE} (95%) delete mode 100644 make/data/cldr/README create mode 100644 make/data/cldr/README-common.md diff --git a/make/data/cldr/LICENSE.txt b/make/data/cldr/LICENSE similarity index 95% rename from make/data/cldr/LICENSE.txt rename to make/data/cldr/LICENSE index 4c6a432d71387..99bd0beafbb07 100644 --- a/make/data/cldr/LICENSE.txt +++ b/make/data/cldr/LICENSE @@ -1,8 +1,8 @@ -UNICODE LICENSE V3 +UNICODE LICENSE V3 COPYRIGHT AND PERMISSION NOTICE -Copyright © 2019-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR @@ -37,3 +37,5 @@ Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. + +SPDX-License-Identifier: Unicode-3.0 diff --git a/make/data/cldr/README b/make/data/cldr/README deleted file mode 100644 index 16cb6ba56c7ed..0000000000000 --- a/make/data/cldr/README +++ /dev/null @@ -1,4 +0,0 @@ -CLDR - Unicode Common Locale Data Repository -http://cldr.unicode.org - -CLDR version installed: 44 diff --git a/make/data/cldr/README-common.md b/make/data/cldr/README-common.md new file mode 100644 index 0000000000000..cadf839fb2609 --- /dev/null +++ b/make/data/cldr/README-common.md @@ -0,0 +1,10 @@ +# CLDR Common Data + +This zipfile contains [CLDR](http://cldr.unicode.org) Common Data. + +## LICENSE + +See [LICENSE.txt](./LICENSE.txt) + +>Copyright © 2019-2022 Unicode, Inc. All rights reserved. +>Distributed under the Terms of Use in https://www.unicode.org/copyright.html \ No newline at end of file diff --git a/make/data/cldr/common/bcp47/collation.xml b/make/data/cldr/common/bcp47/collation.xml index afbfa0079fda9..bb51229ede1ae 100644 --- a/make/data/cldr/common/bcp47/collation.xml +++ b/make/data/cldr/common/bcp47/collation.xml @@ -21,7 +21,7 @@ For terms of use, see http://www.unicode.org/copyright.html <type name="phonebk" description="Phonebook style ordering (such as in German)" alias="phonebook"/> <type name="phonetic" description="Phonetic ordering (sorting based on pronunciation)"/> <type name="pinyin" description="Pinyin ordering for Latin and for CJK characters (used in Chinese)"/> - <type name="reformed" description="Reformed ordering (such as in Swedish)"/> + <type name="reformed" description="Reformed ordering (such as in Swedish)" deprecated="true"/> <type name="search" description="Special collation type for string search" since="1.9"/> <type name="searchjl" description="Special collation type for Korean initial consonant search" since="2.0.1"/> <type name="standard" description="Default ordering for each language"/> diff --git a/make/data/cldr/common/bcp47/currency.xml b/make/data/cldr/common/bcp47/currency.xml index f357a38dd2fb6..7b291fba785c8 100644 --- a/make/data/cldr/common/bcp47/currency.xml +++ b/make/data/cldr/common/bcp47/currency.xml @@ -291,6 +291,7 @@ For terms of use, see http://www.unicode.org/copyright.html <type name="xbc" description="European Unit of Account (XBC)" since="1.9"/> <type name="xbd" description="European Unit of Account (XBD)" since="1.9"/> <type name="xcd" description="East Caribbean Dollar"/> + <type name="xcg" description="Caribbean Guilder"/> <type name="xdr" description="Special Drawing Rights" since="1.9"/> <type name="xeu" description="European Currency Unit" since="1.9"/> <type name="xfo" description="French Gold Franc" since="1.9"/> diff --git a/make/data/cldr/common/dtd/ldml.dtd b/make/data/cldr/common/dtd/ldml.dtd index 9b9b7b60cac78..d968a6962d577 100644 --- a/make/data/cldr/common/dtd/ldml.dtd +++ b/make/data/cldr/common/dtd/ldml.dtd @@ -1,7 +1,7 @@ <!-- -Copyright © 1991-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> @@ -42,7 +42,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <!ATTLIST version number CDATA #REQUIRED > <!--@MATCH:regex/\$Revision.*\$--> <!--@METADATA--> -<!ATTLIST version cldrVersion CDATA #FIXED "44" > +<!ATTLIST version cldrVersion CDATA #FIXED "45" > <!--@MATCH:any--> <!--@VALUE--> <!ATTLIST version draft (approved | contributed | provisional | unconfirmed | true | false) #IMPLIED > diff --git a/make/data/cldr/common/dtd/ldml.xsd b/make/data/cldr/common/dtd/ldml.xsd index 56a64a730a857..92a0f5482867f 100644 --- a/make/data/cldr/common/dtd/ldml.xsd +++ b/make/data/cldr/common/dtd/ldml.xsd @@ -5,9 +5,9 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file --> <!-- - Copyright © 1991-2023 Unicode, Inc. + Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html - SPDX-License-Identifier: Unicode-DFS-2016 + SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="xml.xsd"/> @@ -128,10 +128,10 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file <xs:element name="version"> <xs:complexType> <xs:attribute name="number" use="required"/> - <xs:attribute default="44" name="cldrVersion"> + <xs:attribute default="45" name="cldrVersion"> <xs:simpleType> <xs:restriction base="xs:string"> - <xs:enumeration value="44"/> + <xs:enumeration value="45"/> </xs:restriction> </xs:simpleType> </xs:attribute> diff --git a/make/data/cldr/common/dtd/ldmlBCP47.dtd b/make/data/cldr/common/dtd/ldmlBCP47.dtd index 14ddc68d72f89..f608a6e8a6048 100644 --- a/make/data/cldr/common/dtd/ldmlBCP47.dtd +++ b/make/data/cldr/common/dtd/ldmlBCP47.dtd @@ -1,7 +1,7 @@ <!-- -Copyright © 1991-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> @@ -12,7 +12,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <!ATTLIST version number CDATA #REQUIRED > <!--@MATCH:regex/\$Revision.*\$--> <!--@METADATA--> -<!ATTLIST version cldrVersion CDATA #FIXED "44" > +<!ATTLIST version cldrVersion CDATA #FIXED "45" > <!--@MATCH:version--> <!--@VALUE--> diff --git a/make/data/cldr/common/dtd/ldmlBCP47.xsd b/make/data/cldr/common/dtd/ldmlBCP47.xsd index b38e4566df48b..39d6cd2d2c680 100644 --- a/make/data/cldr/common/dtd/ldmlBCP47.xsd +++ b/make/data/cldr/common/dtd/ldmlBCP47.xsd @@ -5,9 +5,9 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file --> <!-- - Copyright © 1991-2023 Unicode, Inc. + Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html - SPDX-License-Identifier: Unicode-DFS-2016 + SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="ldmlBCP47"> @@ -24,10 +24,10 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file <xs:element name="version"> <xs:complexType> <xs:attribute name="number" use="required"/> - <xs:attribute default="44" name="cldrVersion"> + <xs:attribute default="45" name="cldrVersion"> <xs:simpleType> <xs:restriction base="xs:string"> - <xs:enumeration value="44"/> + <xs:enumeration value="45"/> </xs:restriction> </xs:simpleType> </xs:attribute> diff --git a/make/data/cldr/common/dtd/ldmlICU.dtd b/make/data/cldr/common/dtd/ldmlICU.dtd index e8abdedcbab65..c6058c4c3b2ea 100644 --- a/make/data/cldr/common/dtd/ldmlICU.dtd +++ b/make/data/cldr/common/dtd/ldmlICU.dtd @@ -1,7 +1,7 @@ <!-- Copyright © 1991-2021 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> diff --git a/make/data/cldr/common/dtd/ldmlSupplemental.dtd b/make/data/cldr/common/dtd/ldmlSupplemental.dtd index 7841782b8782f..864e696e03097 100644 --- a/make/data/cldr/common/dtd/ldmlSupplemental.dtd +++ b/make/data/cldr/common/dtd/ldmlSupplemental.dtd @@ -1,21 +1,21 @@ <!-- -Copyright © 1991-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> -<!ELEMENT supplementalData ( version, generation?, cldrVersion?, currencyData?, territoryContainment?, subdivisionContainment?, languageData?, territoryInfo?, postalCodeData?, calendarData?, calendarPreferenceData?, weekData?, timeData?, measurementData?, unitIdComponents?, unitConstants*, unitQuantities*, convertUnits*, unitPreferenceData?, timezoneData?, characters?, transforms?, metadata?, codeMappings?, parentLocales*, personNamesDefaults?, likelySubtags?, metazoneInfo?, plurals?, telephoneCodeData?, numberingSystems?, bcp47KeywordMappings?, gender?, references?, languageMatching?, dayPeriodRuleSet*, metaZones?, primaryZones?, windowsZones?, coverageLevels?, idValidity?, rgScope?, languageGroups?, grammaticalData? ) > +<!ELEMENT supplementalData ( version, generation?, cldrVersion?, currencyData?, territoryContainment?, subdivisionContainment?, languageData?, territoryInfo?, postalCodeData?, calendarData?, calendarPreferenceData?, weekData?, timeData?, measurementData?, unitIdComponents?, unitPrefixes?, unitConstants*, unitQuantities*, convertUnits*, unitPreferenceData?, timezoneData?, characters?, transforms?, metadata?, codeMappings?, parentLocales*, personNamesDefaults?, likelySubtags?, metazoneInfo?, plurals?, telephoneCodeData?, numberingSystems?, bcp47KeywordMappings?, gender?, references?, languageMatching?, dayPeriodRuleSet*, metaZones?, primaryZones?, windowsZones?, coverageLevels?, idValidity?, rgScope?, languageGroups?, grammaticalData? ) > <!ELEMENT version EMPTY > <!--@METADATA--> <!ATTLIST version number CDATA #REQUIRED > <!--@MATCH:any--> <!--@METADATA--> -<!ATTLIST version cldrVersion CDATA #FIXED "44" > +<!ATTLIST version cldrVersion CDATA #FIXED "45" > <!--@MATCH:version--> <!--@VALUE--> -<!ATTLIST version unicodeVersion CDATA #FIXED "15.0.0" > +<!ATTLIST version unicodeVersion CDATA #FIXED "15.1.0" > <!--@MATCH:version--> <!--@VALUE--> @@ -75,12 +75,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <!-- use from and to instead. --> <!--@VALUE--> <!--@DEPRECATED--> +<!ATTLIST currency iso4217 NMTOKEN #REQUIRED > + <!--@MATCH:validity/currency--> <!ATTLIST currency from NMTOKEN #IMPLIED > <!--@MATCH:time/yyyy-MM-dd--> <!ATTLIST currency to NMTOKEN #IMPLIED > <!--@MATCH:time/yyyy-MM-dd--> -<!ATTLIST currency iso4217 NMTOKEN #REQUIRED > - <!--@MATCH:validity/currency--> +<!ATTLIST currency tz CDATA #IMPLIED > + <!--@MATCH:bcp47/tz--> + <!--@VALUE--> +<!ATTLIST currency to-tz CDATA #IMPLIED > + <!--@MATCH:bcp47/tz--> + <!--@VALUE--> <!ATTLIST currency digits NMTOKEN #IMPLIED > <!--@VALUE--> <!ATTLIST currency rounding NMTOKEN #IMPLIED > @@ -388,6 +394,23 @@ CLDR data files are interpreted according to the LDML specification (http://unic <!--@MATCH:set/regex/[a-z]+[0-9]*--> <!--@VALUE--> +<!ELEMENT unitPrefixes ( unitPrefix* ) > + +<!ELEMENT unitPrefix EMPTY > + <!-- <unitPrefix type='quecto' symbol='q' power10='-30'> + <unitPrefix type='kibi' symbol='Ki' power2='10'> --> +<!ATTLIST unitPrefix type NMTOKEN #REQUIRED > + <!--@MATCH:regex/[A-Za-z]{3,6}--> +<!ATTLIST unitPrefix symbol NMTOKEN #REQUIRED > + <!--@MATCH:regex/[a-zA-Zμ]{1,2}--> + <!--@VALUE--> +<!ATTLIST unitPrefix power10 NMTOKEN #IMPLIED > + <!--@MATCH:regex/-?[0-9]{1,2}--> + <!--@VALUE--> +<!ATTLIST unitPrefix power2 NMTOKEN #IMPLIED > + <!--@MATCH:regex/[0-9]0--> + <!--@VALUE--> + <!ELEMENT unitConstants ( unitConstant* ) > <!ELEMENT unitConstant EMPTY > @@ -432,6 +455,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <!ATTLIST convertUnit offset CDATA #IMPLIED > <!--@MATCH:regex/[-+*/\._ 0-9a-zA-Z]+--> <!--@VALUE--> +<!ATTLIST convertUnit special NMTOKEN #IMPLIED > + <!--@MATCH:regex/[A-Za-z][-A-Za-z0-9]*--> + <!--@VALUE--> <!ATTLIST convertUnit systems NMTOKENS #IMPLIED > <!--@MATCH:set/literal/si, si_acceptable, metric, metric_adjacent, ussystem, uksystem, jpsystem, astronomical, person_age, other, prefixable--> <!--@VALUE--> @@ -912,12 +938,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic <!-- # Parent locales --> <!ELEMENT parentLocales ( parentLocale* ) > -<!ATTLIST parentLocales component NMTOKEN #IMPLIED > - <!--@MATCH:literal/segmentations, collations--> +<!ATTLIST parentLocales component NMTOKENS #IMPLIED > + <!--@MATCH:set/literal/segmentations, collations, plurals, grammaticalFeatures--> <!ELEMENT parentLocale EMPTY > <!ATTLIST parentLocale parent NMTOKEN #REQUIRED > <!--@MATCH:validity/locale--> +<!ATTLIST parentLocale localeRules NMTOKENS #IMPLIED > + <!--@MATCH:set/literal/nonlikelyScript--> + <!--@VALUE--> <!ATTLIST parentLocale locales NMTOKENS #REQUIRED > <!--@MATCH:set/validity/locale--> <!--@VALUE--> diff --git a/make/data/cldr/common/dtd/ldmlSupplemental.xsd b/make/data/cldr/common/dtd/ldmlSupplemental.xsd index 7c07d2b1b9ebe..2aeeecf10845f 100644 --- a/make/data/cldr/common/dtd/ldmlSupplemental.xsd +++ b/make/data/cldr/common/dtd/ldmlSupplemental.xsd @@ -5,9 +5,9 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file --> <!-- - Copyright © 1991-2023 Unicode, Inc. + Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html - SPDX-License-Identifier: Unicode-DFS-2016 + SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="supplementalData"> @@ -28,6 +28,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file <xs:element minOccurs="0" ref="timeData"/> <xs:element minOccurs="0" ref="measurementData"/> <xs:element minOccurs="0" ref="unitIdComponents"/> + <xs:element minOccurs="0" ref="unitPrefixes"/> <xs:element maxOccurs="unbounded" minOccurs="0" ref="unitConstants"/> <xs:element maxOccurs="unbounded" minOccurs="0" ref="unitQuantities"/> <xs:element maxOccurs="unbounded" minOccurs="0" ref="convertUnits"/> @@ -63,17 +64,17 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file <xs:element name="version"> <xs:complexType> <xs:attribute name="number" use="required"/> - <xs:attribute default="44" name="cldrVersion"> + <xs:attribute default="45" name="cldrVersion"> <xs:simpleType> <xs:restriction base="xs:string"> - <xs:enumeration value="44"/> + <xs:enumeration value="45"/> </xs:restriction> </xs:simpleType> </xs:attribute> - <xs:attribute default="15.0.0" name="unicodeVersion"> + <xs:attribute default="15.1.0" name="unicodeVersion"> <xs:simpleType> <xs:restriction base="xs:string"> - <xs:enumeration value="15.0.0"/> + <xs:enumeration value="15.1.0"/> </xs:restriction> </xs:simpleType> </xs:attribute> @@ -209,9 +210,11 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file <xs:element maxOccurs="unbounded" minOccurs="0" ref="alternate"/> </xs:sequence> <xs:attribute name="before" type="xs:NMTOKEN"/> + <xs:attribute name="iso4217" type="xs:NMTOKEN" use="required"/> <xs:attribute name="from" type="xs:NMTOKEN"/> <xs:attribute name="to" type="xs:NMTOKEN"/> - <xs:attribute name="iso4217" type="xs:NMTOKEN" use="required"/> + <xs:attribute name="tz"/> + <xs:attribute name="to-tz"/> <xs:attribute name="digits" type="xs:NMTOKEN"/> <xs:attribute name="rounding" type="xs:NMTOKEN"/> <xs:attribute name="cashRounding" type="xs:NMTOKEN"/> @@ -251,6 +254,10 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + + + <xs:element name="alternate"> <xs:complexType> <xs:attribute name="iso4217" type="xs:NMTOKEN" use="required"/> @@ -919,6 +926,32 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + <xs:element name="unitPrefixes"> + <xs:complexType> + <xs:sequence> + <xs:element maxOccurs="unbounded" minOccurs="0" ref="unitPrefix"/> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="unitPrefix"> + <xs:complexType> + <xs:attribute name="type" type="xs:NMTOKEN" use="required"/> + <xs:attribute name="symbol" type="xs:NMTOKEN" use="required"/> + <xs:attribute name="power10" type="xs:NMTOKEN"/> + <xs:attribute name="power2" type="xs:NMTOKEN"/> + </xs:complexType> + </xs:element> + <!-- + <unitPrefix type='quecto' symbol='q' power10='-30'> + <unitPrefix type='kibi' symbol='Ki' power2='10'> + --> + + + + + + + <xs:element name="unitConstants"> <xs:complexType> <xs:sequence> @@ -976,6 +1009,7 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file <xs:attribute name="baseUnit" type="xs:NMTOKEN" use="required"/> <xs:attribute name="factor"/> <xs:attribute name="offset"/> + <xs:attribute name="special" type="xs:NMTOKEN"/> <xs:attribute name="systems" type="xs:NMTOKENS"/> <xs:attribute name="description"/> </xs:complexType> @@ -991,6 +1025,8 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file + + <xs:element name="unitPreferenceData"> <xs:complexType> <xs:sequence> @@ -2049,19 +2085,22 @@ Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file <xs:sequence> <xs:element maxOccurs="unbounded" minOccurs="0" ref="parentLocale"/> </xs:sequence> - <xs:attribute name="component" type="xs:NMTOKEN"/> + <xs:attribute name="component" type="xs:NMTOKENS"/> </xs:complexType> </xs:element> <xs:element name="parentLocale"> <xs:complexType> <xs:attribute name="parent" type="xs:NMTOKEN" use="required"/> + <xs:attribute name="localeRules" type="xs:NMTOKENS"/> <xs:attribute name="locales" type="xs:NMTOKENS" use="required"/> </xs:complexType> </xs:element> + + <xs:element name="personNamesDefaults"> <xs:complexType> <xs:choice> diff --git a/make/data/cldr/common/main/aa.xml b/make/data/cldr/common/main/aa.xml index 9e4fba43ed015..bb823863fa49e 100644 --- a/make/data/cldr/common/main/aa.xml +++ b/make/data/cldr/common/main/aa.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/aa_DJ.xml b/make/data/cldr/common/main/aa_DJ.xml index f8f3194a14f70..e5e7af3d720db 100644 --- a/make/data/cldr/common/main/aa_DJ.xml +++ b/make/data/cldr/common/main/aa_DJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/aa_ER.xml b/make/data/cldr/common/main/aa_ER.xml index ea1daef97dc09..d1d87be1704a8 100644 --- a/make/data/cldr/common/main/aa_ER.xml +++ b/make/data/cldr/common/main/aa_ER.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/aa_ET.xml b/make/data/cldr/common/main/aa_ET.xml index 6ccfb6dad6bc0..3a8f936daf965 100644 --- a/make/data/cldr/common/main/aa_ET.xml +++ b/make/data/cldr/common/main/aa_ET.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ab.xml b/make/data/cldr/common/main/ab.xml index 748b80ce388e1..0a0bf6d526e7c 100644 --- a/make/data/cldr/common/main/ab.xml +++ b/make/data/cldr/common/main/ab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Proper interpretation of these files requires synthesis of missing items, as per @@ -1733,9 +1733,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity draft="unconfirmed">Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity draft="unconfirmed">Иеллоунаиф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity draft="unconfirmed">Едмонтон</exemplarCity> </zone> @@ -1754,30 +1751,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity draft="unconfirmed">Резолиут</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity draft="unconfirmed">Реини-Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity draft="unconfirmed">Ранкин-Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity draft="unconfirmed">Корал-Харбор</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity draft="unconfirmed">Тандер-Беи</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity draft="unconfirmed">Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity draft="unconfirmed">Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity draft="unconfirmed">Икалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity draft="unconfirmed">Пангниртанг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity draft="unconfirmed">Монктон</exemplarCity> </zone> @@ -2585,18 +2570,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity draft="unconfirmed">Дар-ес-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="unconfirmed">Ужҳород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity draft="unconfirmed">Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity draft="unconfirmed">Симферопол</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">Запороже</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity draft="unconfirmed">Кампала</exemplarCity> </zone> @@ -2612,9 +2591,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Nome"> <exemplarCity draft="unconfirmed">Ном</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity draft="unconfirmed">Џонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity draft="unconfirmed">Анкориџ</exemplarCity> </zone> @@ -3314,11 +3290,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="unconfirmed">Макао, аԥхынтәи аамҭа</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">Маккуори</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="unconfirmed">Магадан</generic> @@ -3358,13 +3329,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard draft="unconfirmed">Моусон</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">Аҩадамра-Ҭашәаратәи амексикатә аамҭа</generic> - <standard draft="unconfirmed">Аҩадамра-Ҭашәаратәи амексикатә астандартә аамҭа</standard> - <daylight draft="unconfirmed">Аҩадамра-Ҭашәаратәи амексикатә аԥхынтәи аамҭа</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">Аокеанҭынчтәи амексикатә аамҭа</generic> diff --git a/make/data/cldr/common/main/ab_GE.xml b/make/data/cldr/common/main/ab_GE.xml index 601803816742a..25fd9298245de 100644 --- a/make/data/cldr/common/main/ab_GE.xml +++ b/make/data/cldr/common/main/ab_GE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Proper interpretation of these files requires synthesis of missing items, as per diff --git a/make/data/cldr/common/main/af.xml b/make/data/cldr/common/main/af.xml index 04667f25fb630..36c0414e44224 100644 --- a/make/data/cldr/common/main/af.xml +++ b/make/data/cldr/common/main/af.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -909,7 +909,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Foonboek-sorteervolgorde</type> <type key="collation" type="phonetic">Fonetiese sorteerorde</type> <type key="collation" type="pinyin">Pinyin-sorteervolgorde</type> - <type key="collation" type="reformed">Gereformeerde sorteervolgorde</type> <type key="collation" type="search">Algemenedoel-soektog</type> <type key="collation" type="searchjl">Soek volgens Hangul-beginkonsonant</type> <type key="collation" type="standard">Standaard rangskikvolgorde</type> @@ -2053,9 +2052,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0}-tyd</regionFormat> <regionFormat type="daylight">{0}-dagligtyd</regionFormat> <regionFormat type="standard">{0}-standaardtyd</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Gekoördineerde universele tyd</standard> @@ -2076,9 +2072,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Wene</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Baku"> <exemplarCity>Bakoe</exemplarCity> </zone> @@ -2097,12 +2090,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Cambridge_Bay"> <exemplarCity>Cambridgebaai</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Rainyrivier</exemplarCity> - </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Thunderbaai</exemplarCity> - </zone> <zone type="America/Goose_Bay"> <exemplarCity>Goosebaai</exemplarCity> </zone> @@ -2894,11 +2881,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Lord Howe-dagligtyd</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie-eiland-tyd</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan-tyd</generic> @@ -2938,13 +2920,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawson-tyd</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Noordwes-Meksiko-tyd</generic> - <standard>Noordwes-Meksiko-standaardtyd</standard> - <daylight>Noordwes-Meksiko-dagligtyd</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksikaanse Pasifiese tyd</generic> diff --git a/make/data/cldr/common/main/af_NA.xml b/make/data/cldr/common/main/af_NA.xml index 8fcdfbca3ff08..555c035b0b033 100644 --- a/make/data/cldr/common/main/af_NA.xml +++ b/make/data/cldr/common/main/af_NA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/af_ZA.xml b/make/data/cldr/common/main/af_ZA.xml index caa5bc3f19f10..5d04978a1e832 100644 --- a/make/data/cldr/common/main/af_ZA.xml +++ b/make/data/cldr/common/main/af_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/agq.xml b/make/data/cldr/common/main/agq.xml index 290487804242f..29ca92bb63300 100644 --- a/make/data/cldr/common/main/agq.xml +++ b/make/data/cldr/common/main/agq.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/agq_CM.xml b/make/data/cldr/common/main/agq_CM.xml index 8bba291e7b361..4ed8914f419df 100644 --- a/make/data/cldr/common/main/agq_CM.xml +++ b/make/data/cldr/common/main/agq_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ak.xml b/make/data/cldr/common/main/ak.xml index 57e67d88f2f32..210bde48f91c6 100644 --- a/make/data/cldr/common/main/ak.xml +++ b/make/data/cldr/common/main/ak.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ak_GH.xml b/make/data/cldr/common/main/ak_GH.xml index d93cf2563fda1..820e726a52c57 100644 --- a/make/data/cldr/common/main/ak_GH.xml +++ b/make/data/cldr/common/main/ak_GH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/am.xml b/make/data/cldr/common/main/am.xml index c0f69016a30f2..d8ed339d21c8f 100644 --- a/make/data/cldr/common/main/am.xml +++ b/make/data/cldr/common/main/am.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -985,7 +985,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">የስልክ ደብተር ድርድር ቅደም ተከተል</type> <type key="collation" type="phonetic">የፎነቲክ ድርደራ ቅደም ተከተል</type> <type key="collation" type="pinyin">ፒንይን የድርድር ቅደም ተከተል</type> - <type key="collation" type="reformed">ዳግም የተፈጠረ የድርድር ቅደም ተከተል</type> <type key="collation" type="search">ለጠቅላላ ጉዳይ ፍለጋ</type> <type key="collation" type="searchjl">በሃንጉል የመጀመሪያ ተነባቢ ፈልግ</type> <type key="collation" type="standard">መደበኛ</type> @@ -1982,9 +1981,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} ጊዜ</regionFormat> <regionFormat type="daylight">{0} የቀን ብርሃን ሰዓት</regionFormat> <regionFormat type="standard">{0} መደበኛ ሰዓት</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>ሳንታ ኢዛቤል</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>የተቀነባበረ ሁለገብ ሰዓት</standard> @@ -2107,9 +2103,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>ሜልቦርን</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ከሪ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ሆባርት</exemplarCity> </zone> @@ -2263,9 +2256,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ክረስተን</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>የሎውናይፍ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ኤድመንተን</exemplarCity> </zone> @@ -2284,30 +2274,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ሪዞሊዩት</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ሬኒ ሪቨር</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ራንኪን ኢንሌት</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>አቲኮካን</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ተንደር ቤይ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ኒፒጎን</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ቶሮንቶ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ኢኳሊውት</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ፓንግኒርተንግ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ሞንክቶን</exemplarCity> </zone> @@ -3121,18 +3099,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ዳሬ ሰላም</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ኡዝጎሮድ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>ኪየቭ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ሲምፈሮፖል</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ዛፖሮዚይ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>ካምፓላ</exemplarCity> </zone> @@ -3151,9 +3123,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ሆኖሉሉ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ጆንስተን</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>አንኮራጅ</exemplarCity> </zone> @@ -3803,11 +3772,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>የሎርድ ሆዌ የቀን ሰዓት አቆጣጠር</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>የማከሪ ደሴት ሰዓት</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>የማጋዳን የሰዓት አቆጣጠር</generic> @@ -3847,13 +3811,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>የማውሰን ሰዓት</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>ሰሜናዊ ምእራብ የሜክሲኮ ሰዓት አቆጣጠር</generic> - <standard>ሰሜናዊ ምእራብ የሜክሲኮ መደበኛ ሰዓት አቆጣጠር</standard> - <daylight>ሰሜናዊ ምእራብ የሜክሲኮ የቀን ሰዓት አቆጣጠር</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>የሜክሲኮ ፓሲፊክ ሰዓት አቆጣጠር</generic> diff --git a/make/data/cldr/common/main/am_ET.xml b/make/data/cldr/common/main/am_ET.xml index 053774606a26f..c66f2029440f5 100644 --- a/make/data/cldr/common/main/am_ET.xml +++ b/make/data/cldr/common/main/am_ET.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/an.xml b/make/data/cldr/common/main/an.xml index 52a1d5be4795d..58d722c182184 100644 --- a/make/data/cldr/common/main/an.xml +++ b/make/data/cldr/common/main/an.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/an_ES.xml b/make/data/cldr/common/main/an_ES.xml index 03e10f9bda627..7e83c2651ea6f 100644 --- a/make/data/cldr/common/main/an_ES.xml +++ b/make/data/cldr/common/main/an_ES.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ann.xml b/make/data/cldr/common/main/ann.xml index 2be454cafbf6b..49486a7f08fad 100644 --- a/make/data/cldr/common/main/ann.xml +++ b/make/data/cldr/common/main/ann.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ann_NG.xml b/make/data/cldr/common/main/ann_NG.xml index 30d805cf1928a..66709ee4860be 100644 --- a/make/data/cldr/common/main/ann_NG.xml +++ b/make/data/cldr/common/main/ann_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/apc.xml b/make/data/cldr/common/main/apc.xml index 91484788d5a78..1db7a71aa2dcf 100644 --- a/make/data/cldr/common/main/apc.xml +++ b/make/data/cldr/common/main/apc.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. diff --git a/make/data/cldr/common/main/apc_SY.xml b/make/data/cldr/common/main/apc_SY.xml index b6113b39be233..e249c49bf9a98 100644 --- a/make/data/cldr/common/main/apc_SY.xml +++ b/make/data/cldr/common/main/apc_SY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar.xml b/make/data/cldr/common/main/ar.xml index 25dbef485532d..9d9809182786f 100644 --- a/make/data/cldr/common/main/ar.xml +++ b/make/data/cldr/common/main/ar.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1114,7 +1114,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">الترتيب حسب دليل الهاتف</type> <type key="collation" type="phonetic">الترتيب حسب اللفظ</type> <type key="collation" type="pinyin">الترتيب حسب نظام بنيين الصيني</type> - <type key="collation" type="reformed">الترتيب المحسَّن</type> <type key="collation" type="search">بحث لأغراض عامة</type> <type key="collation" type="searchjl" draft="contributed">بحث باستخدام حرف الهانغول الساكن الأول</type> <type key="collation" type="standard">ترتيب الفرز القياسي</type> @@ -2817,9 +2816,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>توقيت {0}</regionFormat> <regionFormat type="daylight">توقيت {0} الصيفي</regionFormat> <regionFormat type="standard">توقيت {0} الرسمي</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>سانتا إيزابيل</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>التوقيت العالمي المنسق</standard> @@ -2942,9 +2938,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>ميلبورن</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>كوري</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>هوبارت</exemplarCity> </zone> @@ -3098,9 +3091,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>كريستون</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>يلونيف</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ايدمونتون</exemplarCity> </zone> @@ -3119,30 +3109,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ريزولوت</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>راني ريفر</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>رانكن انلت</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>كورال هاربر</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ثندر باي</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>نيبيجون</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>تورونتو</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>اكويلت</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>بانجينتينج</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>وينكتون</exemplarCity> </zone> @@ -3956,18 +3934,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>دار السلام</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>أوزجرود</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>كييف</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>سيمفروبول</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>زابوروزي</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>كامبالا</exemplarCity> </zone> @@ -3986,9 +3958,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>هونولولو</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>جونستون</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>أنشوراج</exemplarCity> </zone> @@ -4646,11 +4615,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>التوقيت الصيفي للورد هاو</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>توقيت ماكواري</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>توقيت ماغادان</generic> @@ -4690,13 +4654,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>توقيت ماوسون</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>توقيت شمال غرب المكسيك</generic> - <standard>التوقيت الرسمي لشمال غرب المكسيك</standard> - <daylight>التوقيت الصيفي لشمال غرب المكسيك</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>توقيت المحيط الهادي للمكسيك</generic> diff --git a/make/data/cldr/common/main/ar_001.xml b/make/data/cldr/common/main/ar_001.xml index c388fbdd2430f..7ef8518fb50f4 100644 --- a/make/data/cldr/common/main/ar_001.xml +++ b/make/data/cldr/common/main/ar_001.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_AE.xml b/make/data/cldr/common/main/ar_AE.xml index 0c13c9f3469e0..16529b392274f 100644 --- a/make/data/cldr/common/main/ar_AE.xml +++ b/make/data/cldr/common/main/ar_AE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_BH.xml b/make/data/cldr/common/main/ar_BH.xml index 4fbcabf776776..c105c64066659 100644 --- a/make/data/cldr/common/main/ar_BH.xml +++ b/make/data/cldr/common/main/ar_BH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_DJ.xml b/make/data/cldr/common/main/ar_DJ.xml index 9b56d7ed107d6..434afd02fac69 100644 --- a/make/data/cldr/common/main/ar_DJ.xml +++ b/make/data/cldr/common/main/ar_DJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_DZ.xml b/make/data/cldr/common/main/ar_DZ.xml index 41c22b3822e3a..75594030bb0cc 100644 --- a/make/data/cldr/common/main/ar_DZ.xml +++ b/make/data/cldr/common/main/ar_DZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_EG.xml b/make/data/cldr/common/main/ar_EG.xml index 2959ab81a782a..d135bfe008547 100644 --- a/make/data/cldr/common/main/ar_EG.xml +++ b/make/data/cldr/common/main/ar_EG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_EH.xml b/make/data/cldr/common/main/ar_EH.xml index f52fba4d9e35c..881bb4af65547 100644 --- a/make/data/cldr/common/main/ar_EH.xml +++ b/make/data/cldr/common/main/ar_EH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_ER.xml b/make/data/cldr/common/main/ar_ER.xml index e1952f9336f69..954a1c05d9b65 100644 --- a/make/data/cldr/common/main/ar_ER.xml +++ b/make/data/cldr/common/main/ar_ER.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_IL.xml b/make/data/cldr/common/main/ar_IL.xml index 0e5f1f1561b1a..5fed505dbd63d 100644 --- a/make/data/cldr/common/main/ar_IL.xml +++ b/make/data/cldr/common/main/ar_IL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_IQ.xml b/make/data/cldr/common/main/ar_IQ.xml index 0d2f1923a1f99..0520aec07dfc9 100644 --- a/make/data/cldr/common/main/ar_IQ.xml +++ b/make/data/cldr/common/main/ar_IQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_JO.xml b/make/data/cldr/common/main/ar_JO.xml index 76beed59cf69c..59e71c756c8f1 100644 --- a/make/data/cldr/common/main/ar_JO.xml +++ b/make/data/cldr/common/main/ar_JO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_KM.xml b/make/data/cldr/common/main/ar_KM.xml index 543b940a62725..ddb79577b6d6b 100644 --- a/make/data/cldr/common/main/ar_KM.xml +++ b/make/data/cldr/common/main/ar_KM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_KW.xml b/make/data/cldr/common/main/ar_KW.xml index b6614a87d18c6..845b88f9b7fe6 100644 --- a/make/data/cldr/common/main/ar_KW.xml +++ b/make/data/cldr/common/main/ar_KW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_LB.xml b/make/data/cldr/common/main/ar_LB.xml index ac3f61017fe38..c048345b83ff6 100644 --- a/make/data/cldr/common/main/ar_LB.xml +++ b/make/data/cldr/common/main/ar_LB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_LY.xml b/make/data/cldr/common/main/ar_LY.xml index 1d8cd68a28b0f..cdae03aa3fb62 100644 --- a/make/data/cldr/common/main/ar_LY.xml +++ b/make/data/cldr/common/main/ar_LY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_MA.xml b/make/data/cldr/common/main/ar_MA.xml index dc7b40ddcda54..2db269ed2bf48 100644 --- a/make/data/cldr/common/main/ar_MA.xml +++ b/make/data/cldr/common/main/ar_MA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_MR.xml b/make/data/cldr/common/main/ar_MR.xml index 3c5b1f2bf338f..1d027ddd2b073 100644 --- a/make/data/cldr/common/main/ar_MR.xml +++ b/make/data/cldr/common/main/ar_MR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_OM.xml b/make/data/cldr/common/main/ar_OM.xml index 1471e9684230a..aba4c2d718dc9 100644 --- a/make/data/cldr/common/main/ar_OM.xml +++ b/make/data/cldr/common/main/ar_OM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_PS.xml b/make/data/cldr/common/main/ar_PS.xml index 3b42f22e1bd41..8d815fa7aea23 100644 --- a/make/data/cldr/common/main/ar_PS.xml +++ b/make/data/cldr/common/main/ar_PS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_QA.xml b/make/data/cldr/common/main/ar_QA.xml index 1c2c8febfa93e..bf6acd6b0c45e 100644 --- a/make/data/cldr/common/main/ar_QA.xml +++ b/make/data/cldr/common/main/ar_QA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_SA.xml b/make/data/cldr/common/main/ar_SA.xml index d93264e55b53d..067dfa747a452 100644 --- a/make/data/cldr/common/main/ar_SA.xml +++ b/make/data/cldr/common/main/ar_SA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_SD.xml b/make/data/cldr/common/main/ar_SD.xml index e604376d98d35..ca321a31d405f 100644 --- a/make/data/cldr/common/main/ar_SD.xml +++ b/make/data/cldr/common/main/ar_SD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_SO.xml b/make/data/cldr/common/main/ar_SO.xml index 0c1a603dd711c..f5ff04ffce655 100644 --- a/make/data/cldr/common/main/ar_SO.xml +++ b/make/data/cldr/common/main/ar_SO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_SS.xml b/make/data/cldr/common/main/ar_SS.xml index 2760e390bb494..a48c816497817 100644 --- a/make/data/cldr/common/main/ar_SS.xml +++ b/make/data/cldr/common/main/ar_SS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_SY.xml b/make/data/cldr/common/main/ar_SY.xml index 1cbd30b84d142..08c412f9ba02e 100644 --- a/make/data/cldr/common/main/ar_SY.xml +++ b/make/data/cldr/common/main/ar_SY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_TD.xml b/make/data/cldr/common/main/ar_TD.xml index 97a3ea99b8813..e3e3a7d22a492 100644 --- a/make/data/cldr/common/main/ar_TD.xml +++ b/make/data/cldr/common/main/ar_TD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_TN.xml b/make/data/cldr/common/main/ar_TN.xml index 853b0e52fecb1..d62cfba31575b 100644 --- a/make/data/cldr/common/main/ar_TN.xml +++ b/make/data/cldr/common/main/ar_TN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ar_YE.xml b/make/data/cldr/common/main/ar_YE.xml index 8345af2df5b35..453fd471a92de 100644 --- a/make/data/cldr/common/main/ar_YE.xml +++ b/make/data/cldr/common/main/ar_YE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/arn.xml b/make/data/cldr/common/main/arn.xml index cbbc0837e2fae..ad324bf5568d7 100644 --- a/make/data/cldr/common/main/arn.xml +++ b/make/data/cldr/common/main/arn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/arn_CL.xml b/make/data/cldr/common/main/arn_CL.xml index 105e0609de8ce..25b3f50ca3709 100644 --- a/make/data/cldr/common/main/arn_CL.xml +++ b/make/data/cldr/common/main/arn_CL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/as.xml b/make/data/cldr/common/main/as.xml index 7b3ffc64abbac..a86c2f4545499 100644 --- a/make/data/cldr/common/main/as.xml +++ b/make/data/cldr/common/main/as.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1910,9 +1910,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>মেলব’ৰ্ণ</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ক্যুৰি</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>হোবাৰ্ট</exemplarCity> </zone> @@ -2066,9 +2063,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ক্ৰেষ্টন</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>য়েল্লোনাইফ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>এডমণ্টন</exemplarCity> </zone> @@ -2087,30 +2081,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ৰিজ’লিউট</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ৰেইনী নদী</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ৰেংকিন ইনলেট</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>আটিকোকান</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>থাণ্ডাৰ উপসাগৰ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>নিপিগন</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ট’ৰ’ণ্টো</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ইকালুইট</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>পাংনিৰ্টুংগ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>মন্‌কটন</exemplarCity> </zone> @@ -2924,18 +2906,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ডাৰ এছ ছালাম</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>উজ্গোৰোড</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>কিভ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ছিম্ফেৰোপোল</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>জাপোৰোজাই</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>কাম্পালা</exemplarCity> </zone> @@ -2951,9 +2927,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Nome"> <exemplarCity>নোম</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>জনষ্টন</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>এংকোৰেজ</exemplarCity> </zone> @@ -3592,11 +3565,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>লৰ্ড হাওৰ ডেলাইট সময়</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>মেক্‌কুৱেৰী দ্বীপৰ সময়</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>মাগাদানৰ সময়</generic> @@ -3636,13 +3604,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>মাউছনৰ সময়</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>উত্তৰ-পশ্চিম মেক্সিকোৰ সময়</generic> - <standard>উত্তৰ-পশ্চিম মেক্সিকোৰ মান সময়</standard> - <daylight>উত্তৰ-পশ্চিম মেক্সিকোৰ ডেলাইট সময়</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>মেক্সিকোৰ প্ৰশান্ত সময়</generic> diff --git a/make/data/cldr/common/main/as_IN.xml b/make/data/cldr/common/main/as_IN.xml index 2671ebdd61a84..3c265965eef93 100644 --- a/make/data/cldr/common/main/as_IN.xml +++ b/make/data/cldr/common/main/as_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/asa.xml b/make/data/cldr/common/main/asa.xml index f684a84d704d2..b7359144dc923 100644 --- a/make/data/cldr/common/main/asa.xml +++ b/make/data/cldr/common/main/asa.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/asa_TZ.xml b/make/data/cldr/common/main/asa_TZ.xml index c1434d962726c..9b70fcded7286 100644 --- a/make/data/cldr/common/main/asa_TZ.xml +++ b/make/data/cldr/common/main/asa_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ast.xml b/make/data/cldr/common/main/ast.xml index d7d254866b7ad..aa3a3d6f65271 100644 --- a/make/data/cldr/common/main/ast.xml +++ b/make/data/cldr/common/main/ast.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1208,7 +1208,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="gb2312han">orde de clasificación chinu simplificáu - GB2312</type> <type key="collation" type="phonebook">orde de clasificación de llista telefónica</type> <type key="collation" type="pinyin">orde de clasificación pinyin</type> - <type key="collation" type="reformed">orde de clasificación reformáu</type> <type key="collation" type="search">gueta xeneral</type> <type key="collation" type="searchjl">gueta por consonante Hangul d’aniciu</type> <type key="collation" type="standard">orde de clasificación estándar</type> @@ -3377,9 +3376,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <regionFormat>Hora de {0}</regionFormat> <regionFormat type="daylight">Hora braniega de {0}</regionFormat> <regionFormat type="standard">Hora estándar de {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Hora coordinada universal</standard> @@ -3406,9 +3402,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Adelaide"> <exemplarCity>Adelaida</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Baku"> <exemplarCity>Bakú</exemplarCity> </zone> @@ -4370,11 +4363,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Hora braniega de Macáu</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Hora de la Islla Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Hora de Magadán</generic> @@ -4414,13 +4402,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Hora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Hora del noroeste de Méxicu</generic> - <standard>Hora estándar del noroeste de Méxicu</standard> - <daylight>Hora braniega del noroeste de Méxicu</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Hora del Pacíficu de Méxicu</generic> diff --git a/make/data/cldr/common/main/ast_ES.xml b/make/data/cldr/common/main/ast_ES.xml index 72d7634fed8ca..476f1892a4c3d 100644 --- a/make/data/cldr/common/main/ast_ES.xml +++ b/make/data/cldr/common/main/ast_ES.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/az.xml b/make/data/cldr/common/main/az.xml index 08cd6d60b21b2..2eb5a1769eff0 100644 --- a/make/data/cldr/common/main/az.xml +++ b/make/data/cldr/common/main/az.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2028,9 +2028,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} Vaxtı</regionFormat> <regionFormat type="daylight">{0} Yay Vaxtı</regionFormat> <regionFormat type="standard">{0} Standart Vaxtı</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa İzabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Koordinasiya edilmiş ümumdünya vaxtı</standard> @@ -2117,9 +2114,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Melburn</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kuriye</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity>Sidney</exemplarCity> </zone> @@ -2228,9 +2222,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Kreston</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Yellounayf</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Edmondton</exemplarCity> </zone> @@ -2249,24 +2240,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Rezolyut</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Reyni Çayı</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Rankin Girişi</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>İldırım Körfəzi</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Nipiqon</exemplarCity> - </zone> <zone type="America/Iqaluit"> <exemplarCity>İqaluit</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Panqnirtanq</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Monkton</exemplarCity> </zone> @@ -2862,15 +2841,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar es Salam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ujqorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiyev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporojye</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity>Midvey</exemplarCity> </zone> @@ -2883,9 +2856,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Conston</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Ankorac</exemplarCity> </zone> @@ -3488,11 +3458,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Lord Hau Yay vaxtı</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Makari Adası Vaxtı</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Maqadan Vaxtı</generic> @@ -3532,13 +3497,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mouson Vaxtı</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Şimal-Qərbi Meksika Vaxtı</generic> - <standard>Şimal-Qərbi Meksika Standart Vaxtı</standard> - <daylight>Şimal-Qərbi Meksika Yay Vaxtı</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksika Sakit Okean Vaxtı</generic> diff --git a/make/data/cldr/common/main/az_Arab.xml b/make/data/cldr/common/main/az_Arab.xml index 6ed662dffdf01..5c59e7e39ca58 100644 --- a/make/data/cldr/common/main/az_Arab.xml +++ b/make/data/cldr/common/main/az_Arab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/az_Arab_IQ.xml b/make/data/cldr/common/main/az_Arab_IQ.xml index 27d806cf2a069..8445320375e17 100644 --- a/make/data/cldr/common/main/az_Arab_IQ.xml +++ b/make/data/cldr/common/main/az_Arab_IQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/az_Arab_IR.xml b/make/data/cldr/common/main/az_Arab_IR.xml index cc9305ae00984..7ffa77c8b7b99 100644 --- a/make/data/cldr/common/main/az_Arab_IR.xml +++ b/make/data/cldr/common/main/az_Arab_IR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/az_Arab_TR.xml b/make/data/cldr/common/main/az_Arab_TR.xml index 45d76176e2dca..f6fd51e08a81f 100644 --- a/make/data/cldr/common/main/az_Arab_TR.xml +++ b/make/data/cldr/common/main/az_Arab_TR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/az_Cyrl.xml b/make/data/cldr/common/main/az_Cyrl.xml index 906f8e7d0f226..1cc1e2beb921a 100644 --- a/make/data/cldr/common/main/az_Cyrl.xml +++ b/make/data/cldr/common/main/az_Cyrl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/az_Cyrl_AZ.xml b/make/data/cldr/common/main/az_Cyrl_AZ.xml index 0c23a7fc30cb4..0f167dc4f75b4 100644 --- a/make/data/cldr/common/main/az_Cyrl_AZ.xml +++ b/make/data/cldr/common/main/az_Cyrl_AZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/az_Latn.xml b/make/data/cldr/common/main/az_Latn.xml index 69a2891e01ca8..81c4777cdc421 100644 --- a/make/data/cldr/common/main/az_Latn.xml +++ b/make/data/cldr/common/main/az_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/az_Latn_AZ.xml b/make/data/cldr/common/main/az_Latn_AZ.xml index f23b99aa94c14..ceaf9de3eff42 100644 --- a/make/data/cldr/common/main/az_Latn_AZ.xml +++ b/make/data/cldr/common/main/az_Latn_AZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ba.xml b/make/data/cldr/common/main/ba.xml index 372127a9384d3..e4fd73536476c 100644 --- a/make/data/cldr/common/main/ba.xml +++ b/make/data/cldr/common/main/ba.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ba_RU.xml b/make/data/cldr/common/main/ba_RU.xml index 177674d93cf15..b835b6839f745 100644 --- a/make/data/cldr/common/main/ba_RU.xml +++ b/make/data/cldr/common/main/ba_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bal.xml b/make/data/cldr/common/main/bal.xml index a5cd9ad9dd11d..4b1b1f16696a1 100644 --- a/make/data/cldr/common/main/bal.xml +++ b/make/data/cldr/common/main/bal.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -426,11 +426,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="provisional">لۆرڈ هئو اُسترالیائے گرماگی ساهت</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="provisional">ماکواریئے گیشّتگێن ساهت</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="provisional">مَگَدَنئے ساهت</generic> @@ -438,13 +433,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="provisional">مَگَدَنئے گرماگی ساهت</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="provisional">شمالی مِکسیکۆئے ساهت</generic> - <standard draft="provisional">شمالی مِکسیکۆئے گیشّتگێن ساهت</standard> - <daylight draft="provisional">شمالی مِکسیکۆئے گرماگی ساهت</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="provisional">آرامزِری مِکسیکۆئے ساهت</generic> diff --git a/make/data/cldr/common/main/bal_Arab.xml b/make/data/cldr/common/main/bal_Arab.xml index a6fb072f7ef7f..9872b379b4552 100644 --- a/make/data/cldr/common/main/bal_Arab.xml +++ b/make/data/cldr/common/main/bal_Arab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bal_Arab_PK.xml b/make/data/cldr/common/main/bal_Arab_PK.xml index 0c75544898beb..78d2338d90e5a 100644 --- a/make/data/cldr/common/main/bal_Arab_PK.xml +++ b/make/data/cldr/common/main/bal_Arab_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bal_Latn.xml b/make/data/cldr/common/main/bal_Latn.xml index 78bcb0e66a2d0..68f2f264bae09 100644 --- a/make/data/cldr/common/main/bal_Latn.xml +++ b/make/data/cldr/common/main/bal_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -419,11 +419,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="provisional">Ástréliáay, Ládhaway garmági wahd</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="provisional">Makwáriay anjári wahd</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="provisional">Mágadánay wahd</generic> @@ -431,13 +426,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="provisional">Mágadánay garmági wahd</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="provisional">Shemálrónendi Meksikóay wahd</generic> - <standard draft="provisional">Górichánrónendi Meksikóay anjári wahd</standard> - <daylight draft="provisional">Shemálrónendi Meksikóay garmági wahd</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="provisional">Árámzeri Meksikóay wahd</generic> diff --git a/make/data/cldr/common/main/bal_Latn_PK.xml b/make/data/cldr/common/main/bal_Latn_PK.xml index 9bfffa1f9774c..4d8bb32b57013 100644 --- a/make/data/cldr/common/main/bal_Latn_PK.xml +++ b/make/data/cldr/common/main/bal_Latn_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bas.xml b/make/data/cldr/common/main/bas.xml index 1e3a4fc4964a6..923b500ae36e0 100644 --- a/make/data/cldr/common/main/bas.xml +++ b/make/data/cldr/common/main/bas.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bas_CM.xml b/make/data/cldr/common/main/bas_CM.xml index 76905e9ea31af..b3766fa7fe360 100644 --- a/make/data/cldr/common/main/bas_CM.xml +++ b/make/data/cldr/common/main/bas_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/be.xml b/make/data/cldr/common/main/be.xml index 200ac68cfe659..8c1ed8788d230 100644 --- a/make/data/cldr/common/main/be.xml +++ b/make/data/cldr/common/main/be.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2170,9 +2170,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Час: {0}</regionFormat> <regionFormat type="daylight">Летні час: {0}</regionFormat> <regionFormat type="standard">Стандартны час: {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Санта-Ісабель</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Універсальны каардынаваны час</standard> @@ -2295,9 +2292,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Мельбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Керы</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -2451,9 +2445,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Крэстан</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Елаўнайф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Эдмантан</exemplarCity> </zone> @@ -2472,30 +2463,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Рэзальют</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рэйні-Рывер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ранкін-Інлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Атыкокан</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тандэр-Бэй</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Ніпіган</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Таронта</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Ікалуіт</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангніртанг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктан</exemplarCity> </zone> @@ -3309,18 +3288,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар-эс-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгарад</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Кіеў</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Сімферопаль</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запарожжа</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -3339,9 +3312,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Ганалулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Джонстан</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Анкарыдж</exemplarCity> </zone> @@ -3977,11 +3947,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Летні час Лорд-Хау</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Час вострава Макуоры</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магаданскі час</generic> @@ -4021,13 +3986,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Час станцыі Моўсан</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Паўночна-заходні мексіканскі час</generic> - <standard>Паўночна-заходні мексіканскі стандартны час</standard> - <daylight>Паўночна-заходні мексіканскі летні час</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Мексіканскі ціхаакіянскі час</generic> diff --git a/make/data/cldr/common/main/be_BY.xml b/make/data/cldr/common/main/be_BY.xml index e8f9651f3f88c..d17bb251e5a52 100644 --- a/make/data/cldr/common/main/be_BY.xml +++ b/make/data/cldr/common/main/be_BY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/be_TARASK.xml b/make/data/cldr/common/main/be_TARASK.xml index 550857a75eb21..e39083692d7c5 100644 --- a/make/data/cldr/common/main/be_TARASK.xml +++ b/make/data/cldr/common/main/be_TARASK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1007,9 +1007,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat draft="provisional">час: {0}</regionFormat> <regionFormat type="daylight" draft="provisional">летні час: {0}</regionFormat> <regionFormat type="standard" draft="provisional">змоўчны час: {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity draft="provisional">Санта-Ісабэль</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard draft="provisional">унівэрсальны каардынаваны час</standard> @@ -1045,9 +1042,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity draft="provisional">Мэльбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity draft="provisional">Кэры</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity draft="provisional">Сіднэй</exemplarCity> </zone> @@ -1108,9 +1102,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Winnipeg"> <exemplarCity draft="provisional">Вініпэг</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity draft="provisional">Рэйні-Рывэр</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity draft="provisional">Ранкін-Інлэт</exemplarCity> </zone> @@ -1810,13 +1801,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard draft="provisional">Час станцыі Мосан</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="provisional">Паўночна-заходні Мэксыканскі час</generic> - <standard draft="provisional">Паўночна-заходні Мэксыканскі змоўчны час</standard> - <daylight draft="provisional">Паўночна-заходні Мэксыканскі летні час</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="provisional">Мэксыканскі ціхаакіянскі час</generic> diff --git a/make/data/cldr/common/main/bem.xml b/make/data/cldr/common/main/bem.xml index 9fe9bfc7e70c4..ba5dd7b75ac8b 100644 --- a/make/data/cldr/common/main/bem.xml +++ b/make/data/cldr/common/main/bem.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bem_ZM.xml b/make/data/cldr/common/main/bem_ZM.xml index a76f60b95ee8d..82360f3f8538b 100644 --- a/make/data/cldr/common/main/bem_ZM.xml +++ b/make/data/cldr/common/main/bem_ZM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bew.xml b/make/data/cldr/common/main/bew.xml index abad9435a2109..30adaac310edf 100644 --- a/make/data/cldr/common/main/bew.xml +++ b/make/data/cldr/common/main/bew.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -3009,27 +3009,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity draft="unconfirmed">Darussalam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="unconfirmed">Usgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity draft="unconfirmed">Kiip</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity draft="unconfirmed">Akmesjid</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">Saporijiah</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity draft="unconfirmed">Midwé</exemplarCity> </zone> <zone type="Pacific/Wake"> <exemplarCity draft="unconfirmed">Wék</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity draft="unconfirmed">Jonsten</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity draft="unconfirmed">Angkorèt</exemplarCity> </zone> @@ -3652,11 +3643,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">Waktu Musim Pentèr Makao</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">Waktu Pulo Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="unconfirmed">Waktu Magadan</generic> @@ -3696,13 +3682,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard draft="unconfirmed">Waktu Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">Waktu Mèksiko Lor-kulon</generic> - <standard draft="unconfirmed">Waktu Pakem Mèksiko Lor-kulon</standard> - <daylight draft="unconfirmed">Waktu Musim Pentèr Mèksiko Lor-kulon</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">Waktu Mèksiko Teduh</generic> diff --git a/make/data/cldr/common/main/bew_ID.xml b/make/data/cldr/common/main/bew_ID.xml index 14b6c21f07c84..ce5a2c288b430 100644 --- a/make/data/cldr/common/main/bew_ID.xml +++ b/make/data/cldr/common/main/bew_ID.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bez.xml b/make/data/cldr/common/main/bez.xml index 8ed4b4ecf5910..1ca290667bc70 100644 --- a/make/data/cldr/common/main/bez.xml +++ b/make/data/cldr/common/main/bez.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bez_TZ.xml b/make/data/cldr/common/main/bez_TZ.xml index b9d80fc368468..d587ae7266241 100644 --- a/make/data/cldr/common/main/bez_TZ.xml +++ b/make/data/cldr/common/main/bez_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bg.xml b/make/data/cldr/common/main/bg.xml index bb303d52d578f..57e2140549b6c 100644 --- a/make/data/cldr/common/main/bg.xml +++ b/make/data/cldr/common/main/bg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1102,7 +1102,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Азбучен ред</type> <type key="collation" type="phonetic">Фонетичен ред на сортиране</type> <type key="collation" type="pinyin">Сортиране Пинин</type> - <type key="collation" type="reformed">Следреформен ред на сортиране</type> <type key="collation" type="search">търсене с общо предназначение</type> <type key="collation" type="searchjl">Търсене по първоначални съгласни в хангул</type> <type key="collation" type="standard">стандартен ред на сортиране</type> @@ -2554,9 +2553,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <gmtZeroFormat>Гринуич</gmtZeroFormat> <regionFormat type="daylight">{0} – лятно часово време</regionFormat> <regionFormat type="standard">{0} – стандартно време</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Санта Исабел</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Координирано универсално време</standard> @@ -2679,9 +2675,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Мелбърн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Къри</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -2835,9 +2828,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Крестън</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Йелоунайф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Едмънтън</exemplarCity> </zone> @@ -2856,30 +2846,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Резолют</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рейни Ривър</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ранкин Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Атикокан</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тъндър Бей</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Иквалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангниртунг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -3693,18 +3671,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар ес Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферопол</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожие</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -3723,9 +3695,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Хонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Джонстън</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Анкъридж</exemplarCity> </zone> @@ -4375,11 +4344,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Лорд Хау – лятно часово време</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Маккуори</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магаданско време</generic> @@ -4419,13 +4383,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Моусън</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Северозападно мексиканско време</generic> - <standard>Северозападно стандартно мексиканско време</standard> - <daylight>Северозападно лятно часово мексиканско време</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Мексиканско тихоокеанско време</generic> diff --git a/make/data/cldr/common/main/bg_BG.xml b/make/data/cldr/common/main/bg_BG.xml index ce7375c105a8b..2285ed3ee04bc 100644 --- a/make/data/cldr/common/main/bg_BG.xml +++ b/make/data/cldr/common/main/bg_BG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bgc.xml b/make/data/cldr/common/main/bgc.xml index 74cfb591f55b5..c34f081a1a8b5 100644 --- a/make/data/cldr/common/main/bgc.xml +++ b/make/data/cldr/common/main/bgc.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bgc_IN.xml b/make/data/cldr/common/main/bgc_IN.xml index 5cc169e31d166..5d19790f3e9b3 100644 --- a/make/data/cldr/common/main/bgc_IN.xml +++ b/make/data/cldr/common/main/bgc_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bgn.xml b/make/data/cldr/common/main/bgn.xml index fd2220ce03fa5..9d1daad06c661 100644 --- a/make/data/cldr/common/main/bgn.xml +++ b/make/data/cldr/common/main/bgn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bgn_AE.xml b/make/data/cldr/common/main/bgn_AE.xml index 773bfd72b5653..b9cb9a052d47a 100644 --- a/make/data/cldr/common/main/bgn_AE.xml +++ b/make/data/cldr/common/main/bgn_AE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bgn_AF.xml b/make/data/cldr/common/main/bgn_AF.xml index 53cc222ffaac0..be65d4d117d1c 100644 --- a/make/data/cldr/common/main/bgn_AF.xml +++ b/make/data/cldr/common/main/bgn_AF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bgn_IR.xml b/make/data/cldr/common/main/bgn_IR.xml index e4eea64176db1..83f9ac9da11bf 100644 --- a/make/data/cldr/common/main/bgn_IR.xml +++ b/make/data/cldr/common/main/bgn_IR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bgn_OM.xml b/make/data/cldr/common/main/bgn_OM.xml index 0155f7d6fb1cd..87fe449558ce8 100644 --- a/make/data/cldr/common/main/bgn_OM.xml +++ b/make/data/cldr/common/main/bgn_OM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bgn_PK.xml b/make/data/cldr/common/main/bgn_PK.xml index 456d8df2f1f72..9b449ca80a55f 100644 --- a/make/data/cldr/common/main/bgn_PK.xml +++ b/make/data/cldr/common/main/bgn_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bho.xml b/make/data/cldr/common/main/bho.xml index 03792404f486f..a2fbfa63dfbc6 100644 --- a/make/data/cldr/common/main/bho.xml +++ b/make/data/cldr/common/main/bho.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bho_IN.xml b/make/data/cldr/common/main/bho_IN.xml index b57dc4606531c..650d36cc8e27d 100644 --- a/make/data/cldr/common/main/bho_IN.xml +++ b/make/data/cldr/common/main/bho_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/blo.xml b/make/data/cldr/common/main/blo.xml index 868fc968dcfd9..f4f72e94d4308 100644 --- a/make/data/cldr/common/main/blo.xml +++ b/make/data/cldr/common/main/blo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1489,9 +1489,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>Krɛstɔn</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Yɛloonaɩf</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Ɛɖmɔntɔn</exemplarCity> </zone> @@ -1510,27 +1507,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>Rɛsoluut</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Rɛɩni Riifa</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Raŋkɩn Ɩnlɛɛtɩ</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Sanɖɛɛr Baɩ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Nipigɔn</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Torɔntoo</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikaluwiit</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Panyɩrtʊʊŋ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Mɔŋtɔn</exemplarCity> </zone> @@ -2323,15 +2308,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Ɖarɛsalaam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Usgɔrɔɖ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiyɛf</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Sapɔrɔsɩyɛ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Kampalaa</exemplarCity> </zone> @@ -2344,9 +2323,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Adak"> <exemplarCity>Aɖak</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Jɔnstɔn</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Aŋkɔraajɩ</exemplarCity> </zone> @@ -2996,11 +2972,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>akawoo kaakɔŋkɔŋɔ̀ gafʊbaka</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Makarii kaAtukǝltǝna kaakɔŋkɔŋɔ̀</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magaɖan kaakɔŋkɔŋɔ̀</generic> @@ -3040,13 +3011,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mɔsɔn kaakɔŋkɔŋɔ̀</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Mɛsik gʊpɛnɛ na gɩteŋshilelaŋ kʊfɔɔ nɩ kaakɔŋkɔŋɔ̀</generic> - <standard>Mɛsik gʊpɛnɛ na gɩteŋshilelaŋ kʊfɔɔ nɩ kaakɔŋkɔŋɔ̀ ɖeiɖei</standard> - <daylight>Mɛsik gʊpɛnɛ na gɩteŋshilelaŋ kʊfɔɔ nɩ kaakɔŋkɔŋɔ̀ gafʊbaka</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mɛsik kapasifika kaakɔŋkɔŋɔ̀</generic> diff --git a/make/data/cldr/common/main/blo_BJ.xml b/make/data/cldr/common/main/blo_BJ.xml index dd6e8ba598e63..6c98cd14af331 100644 --- a/make/data/cldr/common/main/blo_BJ.xml +++ b/make/data/cldr/common/main/blo_BJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/blt.xml b/make/data/cldr/common/main/blt.xml index bc085ab382231..d794eb40b4750 100644 --- a/make/data/cldr/common/main/blt.xml +++ b/make/data/cldr/common/main/blt.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/blt_VN.xml b/make/data/cldr/common/main/blt_VN.xml index 1746f69fb2001..1b88b04e88c3e 100644 --- a/make/data/cldr/common/main/blt_VN.xml +++ b/make/data/cldr/common/main/blt_VN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bm.xml b/make/data/cldr/common/main/bm.xml index 116de1e5c4b0e..72c8c9915f802 100644 --- a/make/data/cldr/common/main/bm.xml +++ b/make/data/cldr/common/main/bm.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bm_ML.xml b/make/data/cldr/common/main/bm_ML.xml index 5536dc98f6df0..0bea4c7f333ca 100644 --- a/make/data/cldr/common/main/bm_ML.xml +++ b/make/data/cldr/common/main/bm_ML.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bm_Nkoo.xml b/make/data/cldr/common/main/bm_Nkoo.xml index 1f4e1d5157bdd..2bc069dded5fb 100644 --- a/make/data/cldr/common/main/bm_Nkoo.xml +++ b/make/data/cldr/common/main/bm_Nkoo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bm_Nkoo_ML.xml b/make/data/cldr/common/main/bm_Nkoo_ML.xml index 3951e5f06a79a..1154ba21bfbd9 100644 --- a/make/data/cldr/common/main/bm_Nkoo_ML.xml +++ b/make/data/cldr/common/main/bm_Nkoo_ML.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bn.xml b/make/data/cldr/common/main/bn.xml index 3d547b72ae7bb..8aaaeb1622111 100644 --- a/make/data/cldr/common/main/bn.xml +++ b/make/data/cldr/common/main/bn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2303,9 +2303,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} সময়</regionFormat> <regionFormat type="daylight">{0} দিবালোক সময়</regionFormat> <regionFormat type="standard">{0} মানক সময়</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>সান্তা ইসাবেল</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>স্থানাংকিত আন্তর্জাতিক সময়</standard> @@ -2428,9 +2425,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>মেলবোর্ন</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>কিউরি</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>হোবার্ট</exemplarCity> </zone> @@ -2584,9 +2578,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ক্রিস্টান</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ইয়েলোনাইফ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>এডমন্টোন</exemplarCity> </zone> @@ -2605,30 +2596,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>রেসোলুট</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>রেইনি রিভার</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>র‍্যাঙ্কিন ইনলেট</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>আটিকোকান</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>থান্ডার বে</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>নিপিগোন</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>টোরন্টো</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ইকুয়ালুইট</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>প্যাঙ্গনির্টুং</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>মঙ্কটোন</exemplarCity> </zone> @@ -3442,18 +3421,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>দার এস সালাম</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>উঝগোরোড</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>কিয়েভ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>সিমফেরোপোল</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>জেপোরোজাইয়াই</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>কামপালা</exemplarCity> </zone> @@ -3472,9 +3445,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>হনোলুলু</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>জনস্টন</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>এনকোরেজ</exemplarCity> </zone> @@ -4172,11 +4142,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="provisional">মাকাও গ্রীষ্মকাল সময়</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>ম্যাককুরি দ্বীপ সময়</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>ম্যাগাডান সময়</generic> @@ -4216,13 +4181,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>মসন সময়</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>উত্তরপশ্চিম মেক্সিকোর সময়</generic> - <standard>উত্তরপশ্চিম মেক্সিকোর মানক সময়</standard> - <daylight>উত্তরপশ্চিম মেক্সিকোর দিনের সময়</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>মেক্সিকান প্রশান্ত মহাসাগরীয় সময়</generic> diff --git a/make/data/cldr/common/main/bn_BD.xml b/make/data/cldr/common/main/bn_BD.xml index 38b1138356522..8539fa3158106 100644 --- a/make/data/cldr/common/main/bn_BD.xml +++ b/make/data/cldr/common/main/bn_BD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bn_IN.xml b/make/data/cldr/common/main/bn_IN.xml index ea2750e0af9d0..692ec6e7bc712 100644 --- a/make/data/cldr/common/main/bn_IN.xml +++ b/make/data/cldr/common/main/bn_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bo.xml b/make/data/cldr/common/main/bo.xml index 80cd0b7f9286d..cc6e160d83053 100644 --- a/make/data/cldr/common/main/bo.xml +++ b/make/data/cldr/common/main/bo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bo_CN.xml b/make/data/cldr/common/main/bo_CN.xml index 8727c70011123..468941b265b95 100644 --- a/make/data/cldr/common/main/bo_CN.xml +++ b/make/data/cldr/common/main/bo_CN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bo_IN.xml b/make/data/cldr/common/main/bo_IN.xml index a2ed0e678d2e6..a9190c3a051f5 100644 --- a/make/data/cldr/common/main/bo_IN.xml +++ b/make/data/cldr/common/main/bo_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/br.xml b/make/data/cldr/common/main/br.xml index 39d71cd9f0944..c299b6138228c 100644 --- a/make/data/cldr/common/main/br.xml +++ b/make/data/cldr/common/main/br.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1155,7 +1155,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="gb2312han">urzh rummañ sinaek eeunaet - GB2312</type> <type key="collation" type="phonebook">urzh rummañ al levr-pellgomz</type> <type key="collation" type="pinyin">urzh rummañ pinyin</type> - <type key="collation" type="reformed">urzh rummañ adreizhet</type> <type key="collation" type="search">enklask hollek</type> <type key="collation" type="standard">urzh rummañ standart</type> <type key="collation" type="stroke">urzh rummañ an tresoù</type> @@ -3708,11 +3707,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>eur hañv Macau</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>eur Enez Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>eur Magadan</generic> @@ -3752,13 +3746,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>eur Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>eur Gwalarn Mecʼhiko</generic> - <standard>eur cʼhoañv Gwalarn Mecʼhiko</standard> - <daylight>eur hañv Gwalarn Mecʼhiko</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>eur an Habask mecʼhikan</generic> diff --git a/make/data/cldr/common/main/br_FR.xml b/make/data/cldr/common/main/br_FR.xml index b3c069557cd4c..38985b583295f 100644 --- a/make/data/cldr/common/main/br_FR.xml +++ b/make/data/cldr/common/main/br_FR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/brx.xml b/make/data/cldr/common/main/brx.xml index de79ea76c8621..e9a622735d1bd 100644 --- a/make/data/cldr/common/main/brx.xml +++ b/make/data/cldr/common/main/brx.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2078,9 +2078,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>मेलबौर्न</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>करी</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>हबार्ट</exemplarCity> </zone> @@ -2234,9 +2231,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>क्रेस्टन</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>येल्ल’नाईफ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>एडमन्टन</exemplarCity> </zone> @@ -2255,30 +2249,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>रेजल्युत</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>रैनी रिभार</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>रेनकिन इनलेट</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>आतिककान</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>थान्डार गाथोन</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>निपिग’न</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>टरन्ट’</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>इकालुईत</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>पांग्नीरटुं</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>मक्ट’न</exemplarCity> </zone> @@ -3089,18 +3071,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>दार एस सलाम</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ऊज्ह’र’ड</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>कीभ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>सिम्फेर’प’ल</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>झाप’र’झ्ये</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>काम्पाला</exemplarCity> </zone> @@ -3119,9 +3095,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>हनलुलु</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ज’नस्ट’न</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>एंकरेज</exemplarCity> </zone> @@ -3819,11 +3792,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>माकाऊ समर टाईम</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>माक्वारी द्वीप सम</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>मागादान सम</generic> @@ -3863,13 +3831,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>मौसन सम</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>साहा-सोनाब मेक्सिक’ सम</generic> - <standard>साहा-सोनाब मेक्सिक’ थाखोआरि सम</standard> - <daylight>साहा-सोनाब मेक्सिक’ सानारि सम</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>मेक्सिक’नि पेसिफिक सम</generic> diff --git a/make/data/cldr/common/main/brx_IN.xml b/make/data/cldr/common/main/brx_IN.xml index 830883f22bccb..1e20219d4e855 100644 --- a/make/data/cldr/common/main/brx_IN.xml +++ b/make/data/cldr/common/main/brx_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bs.xml b/make/data/cldr/common/main/bs.xml index 27bf53c54c2f8..5662ea0803397 100644 --- a/make/data/cldr/common/main/bs.xml +++ b/make/data/cldr/common/main/bs.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1269,7 +1269,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Sortiranje kao telefonski imenik</type> <type key="collation" type="phonetic">Fonetsko sortiranje</type> <type key="collation" type="pinyin">Pinjin sortiranje</type> - <type key="collation" type="reformed">Reformirano sortiranje</type> <type key="collation" type="search">općenito pretraživanje</type> <type key="collation" type="searchjl">Pretraživanje po početnom suglasniku hangula</type> <type key="collation" type="standard">standardno sortiranje</type> @@ -2848,9 +2847,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <gmtFormat>GMT {0}</gmtFormat> <regionFormat type="daylight">{0}, ljetno vrijeme</regionFormat> <regionFormat type="standard">{0}, standardno vrijeme</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Koordinirano svjetsko vrijeme</standard> @@ -2883,9 +2879,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Melburn</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity>Sidnej</exemplarCity> </zone> @@ -3215,18 +3208,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Taipei"> <exemplarCity>Tajpej</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kijev</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Simferopolj</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporožje</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3834,11 +3821,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Makao letnje računanje vremena</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Vrijeme na Ostrvu Makvori</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadansko vrijeme</generic> @@ -3878,13 +3860,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Vrijeme stanice Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Sjeverozapadno meksičko vrijeme</generic> - <standard>Sjeverozapadno meksičko standardno vrijeme</standard> - <daylight>Sjeverozapadno meksičko ljetno vrijeme</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksičko pacifičko vrijeme</generic> diff --git a/make/data/cldr/common/main/bs_Cyrl.xml b/make/data/cldr/common/main/bs_Cyrl.xml index c599fc852fdf4..a27f0b85fa20b 100644 --- a/make/data/cldr/common/main/bs_Cyrl.xml +++ b/make/data/cldr/common/main/bs_Cyrl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2650,9 +2650,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>Мелбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Курие</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -2806,9 +2803,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Јелоунајф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Едмонтон</exemplarCity> </zone> @@ -2827,30 +2821,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>Ресолут</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рејни Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ранкин Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Атикокан</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тандер Беј</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Иквалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангниртунг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -3658,18 +3640,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар-ес-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Кијев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферопољ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожје</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -3688,9 +3664,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>Хонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Џонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Енкориџ</exemplarCity> </zone> @@ -4385,11 +4358,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Макао летње рачунање вемена</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Макверијско вријеме</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магадан вријеме</generic> @@ -4429,13 +4397,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Мосон вријеме</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Сјеверномексичко вријеме</generic> - <standard>Сјеверномексичко стандардно вријеме</standard> - <daylight>Сјеверномексичко љетње рачунање времена</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Мексичко пацифичко вријеме</generic> diff --git a/make/data/cldr/common/main/bs_Cyrl_BA.xml b/make/data/cldr/common/main/bs_Cyrl_BA.xml index eb1ae35df4b36..051a01c7e9c65 100644 --- a/make/data/cldr/common/main/bs_Cyrl_BA.xml +++ b/make/data/cldr/common/main/bs_Cyrl_BA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bs_Latn.xml b/make/data/cldr/common/main/bs_Latn.xml index 96bb934703e52..a48060f5de629 100644 --- a/make/data/cldr/common/main/bs_Latn.xml +++ b/make/data/cldr/common/main/bs_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bs_Latn_BA.xml b/make/data/cldr/common/main/bs_Latn_BA.xml index 459f3d269c059..eb8626bd891e0 100644 --- a/make/data/cldr/common/main/bs_Latn_BA.xml +++ b/make/data/cldr/common/main/bs_Latn_BA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bss.xml b/make/data/cldr/common/main/bss.xml index d908632183ba6..509605db1b42a 100644 --- a/make/data/cldr/common/main/bss.xml +++ b/make/data/cldr/common/main/bss.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/bss_CM.xml b/make/data/cldr/common/main/bss_CM.xml index be5edffb7d150..fa49ba19698bc 100644 --- a/make/data/cldr/common/main/bss_CM.xml +++ b/make/data/cldr/common/main/bss_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/byn.xml b/make/data/cldr/common/main/byn.xml index 35c3a7b783bae..0eec9bde36eae 100644 --- a/make/data/cldr/common/main/byn.xml +++ b/make/data/cldr/common/main/byn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/byn_ER.xml b/make/data/cldr/common/main/byn_ER.xml index 508caef4825c4..ff33c7038ab40 100644 --- a/make/data/cldr/common/main/byn_ER.xml +++ b/make/data/cldr/common/main/byn_ER.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ca.xml b/make/data/cldr/common/main/ca.xml index 7e4253d90fd93..cd7cc403042fa 100644 --- a/make/data/cldr/common/main/ca.xml +++ b/make/data/cldr/common/main/ca.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1245,7 +1245,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">ordre de la guia telefònica</type> <type key="collation" type="phonetic">ordre fonètic</type> <type key="collation" type="pinyin">ordre pinyin</type> - <type key="collation" type="reformed">ordre reformat</type> <type key="collation" type="search">cerca de propòsit general</type> <type key="collation" type="searchjl" draft="contributed">cerca per consonant inicial del hangul</type> <type key="collation" type="standard">ordre estàndard</type> @@ -2575,9 +2574,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Hora de: {0}</regionFormat> <regionFormat type="daylight">Hora d’estiu, {0}</regionFormat> <regionFormat type="standard">Hora estàndard, {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Temps universal coordinat</standard> @@ -2601,9 +2597,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Viena</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Baku"> <exemplarCity>Bakú</exemplarCity> </zone> @@ -2934,18 +2927,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Ashgabat"> <exemplarCity>Aşgabat</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Újhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kíiv</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Simferòpol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporíjia</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3524,11 +3511,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Hora d’estiu de Macau</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Hora de Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Hora de Magadan</generic> @@ -3568,13 +3550,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Hora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Hora del nord-oest de Mèxic</generic> - <standard>Hora estàndard del nord-oest de Mèxic</standard> - <daylight>Hora d’estiu del nord-oest de Mèxic</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Hora del Pacífic de Mèxic</generic> diff --git a/make/data/cldr/common/main/ca_AD.xml b/make/data/cldr/common/main/ca_AD.xml index 6c3b9be198e0c..f4e922404ef28 100644 --- a/make/data/cldr/common/main/ca_AD.xml +++ b/make/data/cldr/common/main/ca_AD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ca_ES.xml b/make/data/cldr/common/main/ca_ES.xml index 296b05a026401..85b7785b1cce0 100644 --- a/make/data/cldr/common/main/ca_ES.xml +++ b/make/data/cldr/common/main/ca_ES.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ca_ES_VALENCIA.xml b/make/data/cldr/common/main/ca_ES_VALENCIA.xml index d0fce06ed8e2a..9c0482f08ab31 100644 --- a/make/data/cldr/common/main/ca_ES_VALENCIA.xml +++ b/make/data/cldr/common/main/ca_ES_VALENCIA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ca_FR.xml b/make/data/cldr/common/main/ca_FR.xml index 0ec859c10f3d3..5291f34d629e9 100644 --- a/make/data/cldr/common/main/ca_FR.xml +++ b/make/data/cldr/common/main/ca_FR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ca_IT.xml b/make/data/cldr/common/main/ca_IT.xml index 071a3ad5e5425..4220b9037338b 100644 --- a/make/data/cldr/common/main/ca_IT.xml +++ b/make/data/cldr/common/main/ca_IT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cad.xml b/make/data/cldr/common/main/cad.xml index 66628cd5dd51d..ff3541988180b 100644 --- a/make/data/cldr/common/main/cad.xml +++ b/make/data/cldr/common/main/cad.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cad_US.xml b/make/data/cldr/common/main/cad_US.xml index 1ca1eff9b5a5e..f3a8b989566c0 100644 --- a/make/data/cldr/common/main/cad_US.xml +++ b/make/data/cldr/common/main/cad_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cch.xml b/make/data/cldr/common/main/cch.xml index 03223204d2e20..1dcd468a6fe30 100644 --- a/make/data/cldr/common/main/cch.xml +++ b/make/data/cldr/common/main/cch.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cch_NG.xml b/make/data/cldr/common/main/cch_NG.xml index 9f11c33797368..b703402cb08c0 100644 --- a/make/data/cldr/common/main/cch_NG.xml +++ b/make/data/cldr/common/main/cch_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ccp.xml b/make/data/cldr/common/main/ccp.xml index faae1ebd25624..10a56431c724d 100644 --- a/make/data/cldr/common/main/ccp.xml +++ b/make/data/cldr/common/main/ccp.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1042,7 +1042,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="phonebook">𑄜𑄮𑄚𑄴𑄝𑄪𑄇𑄴 𑄥𑄎𑄚</type> <type key="collation" type="phonetic">𑄢𑄳𑄦𑄧 𑄝𑄬𑄭𑄣𑄧𑄚</type> <type key="collation" type="pinyin">𑄛𑄨𑄚𑄨𑄚𑄴 𑄥𑄎𑄚</type> - <type key="collation" type="reformed">𑄢𑄨𑄜𑄧𑄟𑄴𑄓𑄨 𑄝𑄬𑄭𑄣𑄧𑄚</type> <type key="collation" type="search">𑄃𑄧𑄎𑄧𑄃𑄧𑄌𑄴-𑄅𑄪𑄘𑄨𑄌𑄴𑄥𑄳𑄠 𑄖𑄮𑄉𑄚</type> <type key="collation" type="searchjl">𑄦𑄋𑄴𑄉𑄪𑄣𑄴 𑄛𑄧𑄖𑄴𑄗𑄧𑄟𑄴 𑄝𑄧𑄣𑄬𑄟𑄖𑄳𑄠𑄬 𑄦𑄧𑄢𑄧𑄇𑄴 𑄘𑄨𑄚𑄬𑄭 𑄖𑄮𑄉𑄚</type> <type key="collation" type="standard">𑄉𑄧𑄟𑄴 𑄘𑄮𑄣𑄴 𑄝𑄬𑄭𑄣𑄧𑄚</type> @@ -1932,9 +1931,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <regionFormat>{0} 𑄃𑄧𑄇𑄴𑄖𑄧</regionFormat> <regionFormat type="daylight">{0} 𑄘𑄨𑄝𑄪𑄌𑄴𑄎𑄳𑄠 𑄃𑄧𑄇𑄴𑄖𑄧𑄖𑄴</regionFormat> <regionFormat type="standard">{0} 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧𑄖𑄴</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>𑄥𑄚𑄴𑄖 𑄃𑄨𑄥𑄝𑄬𑄣𑄴</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>𑄘𑄇𑄴𑄘𑄨𑄠 𑄛𑄨𑄖𑄴𑄗𑄨𑄟𑄨𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧</standard> @@ -2057,9 +2053,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>𑄟𑄬𑄣𑄴𑄝𑄢𑄴𑄚𑄴</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>𑄇𑄨𑄃𑄪𑄢𑄨</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>𑄦𑄮𑄝𑄢𑄴𑄑𑄴</exemplarCity> </zone> @@ -2213,9 +2206,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>𑄇𑄳𑄢𑄨𑄌𑄴𑄑𑄚𑄴</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>𑄃𑄨𑄠𑄬𑄣𑄮𑄚𑄭𑄜𑄴</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>𑄃𑄬𑄓𑄴𑄟𑄧𑄚𑄴𑄑𑄮𑄚𑄴</exemplarCity> </zone> @@ -2234,30 +2224,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>𑄢𑄬𑄥𑄮𑄣𑄪𑄑𑄴</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>𑄣𑄬𑄭𑄚𑄨 𑄢𑄨𑄞𑄢𑄴</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>𑄢𑄳𑄠𑄋𑄴𑄇𑄨𑄚𑄴 𑄃𑄨𑄚𑄴𑄣𑄬𑄑𑄴</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>𑄇𑄮𑄢𑄣𑄴 𑄦𑄢𑄴𑄝𑄢𑄴</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>𑄐𑄚𑄴𑄓𑄢𑄴 𑄝𑄬</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>𑄚𑄨𑄛𑄨𑄉𑄮𑄚𑄴</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>𑄑𑄮𑄢𑄧𑄚𑄴𑄑𑄮</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>𑄃𑄨𑄇𑄱𑄣𑄪𑄃𑄨𑄑𑄴</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>𑄛𑄳𑄠𑄋𑄴𑄉𑄧𑄚𑄨𑄢𑄴𑄑𑄪𑄁</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>𑄟𑄧𑄋𑄴𑄑𑄮𑄚𑄴</exemplarCity> </zone> @@ -3050,18 +3028,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>𑄘𑄢𑄴 𑄃𑄬𑄌𑄴 𑄥𑄣𑄟𑄴</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>𑄅𑄪𑄏𑄴𑄉𑄮𑄢𑄮𑄓𑄴</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>𑄇𑄨𑄠𑄬𑄞𑄴</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>𑄥𑄨𑄟𑄴𑄜𑄬𑄢𑄮𑄛𑄮𑄣𑄴</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>𑄎𑄬𑄛𑄮𑄢𑄮𑄎𑄭𑄠𑄭</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>𑄇𑄟𑄴𑄛𑄣</exemplarCity> </zone> @@ -3080,9 +3052,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>𑄦𑄧𑄚𑄮𑄣𑄪𑄣𑄪</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>𑄎𑄧𑄚𑄴𑄥𑄳𑄑𑄧𑄚𑄴</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>𑄃𑄬𑄚𑄴𑄇𑄮𑄢𑄬𑄌𑄴</exemplarCity> </zone> @@ -3773,11 +3742,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="provisional">𑄟𑄇𑄃𑄮 𑄉𑄧𑄢𑄧𑄟𑄴𑄇𑄣𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>𑄟𑄳𑄠𑄇𑄴𑄇𑄪𑄢𑄨 𑄉𑄭 𑄉𑄭 𑄞𑄬𑄘 𑄃𑄧𑄇𑄴𑄖𑄧</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>𑄟𑄳𑄠𑄉𑄓𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧</generic> @@ -3817,13 +3781,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>𑄟𑄧𑄥𑄳𑄦𑄧𑄚𑄴 𑄃𑄧𑄇𑄴𑄖𑄧</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧</generic> - <standard>𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄟𑄚𑄧𑄇𑄴 𑄃𑄧𑄇𑄴𑄖𑄧</standard> - <daylight>𑄃𑄪𑄖𑄴𑄖𑄮𑄢𑄴 𑄛𑄧𑄏𑄨𑄟𑄴 𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄮𑄢𑄴 𑄘𑄨𑄚𑄮𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>𑄟𑄬𑄇𑄴𑄥𑄨𑄇𑄚𑄴 𑄛𑄳𑄢𑄧𑄥𑄚𑄴𑄖𑄧 𑄟𑄧𑄦𑄥𑄉𑄧𑄢𑄧𑄢𑄴 𑄃𑄧𑄇𑄴𑄖𑄧</generic> diff --git a/make/data/cldr/common/main/ccp_BD.xml b/make/data/cldr/common/main/ccp_BD.xml index 6c8cde12e610f..4fbec9f850337 100644 --- a/make/data/cldr/common/main/ccp_BD.xml +++ b/make/data/cldr/common/main/ccp_BD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ccp_IN.xml b/make/data/cldr/common/main/ccp_IN.xml index 6950d8f5c29b6..8d2ca5ea2617c 100644 --- a/make/data/cldr/common/main/ccp_IN.xml +++ b/make/data/cldr/common/main/ccp_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ce.xml b/make/data/cldr/common/main/ce.xml index 26e0494c036fd..6a0fcd6432076 100644 --- a/make/data/cldr/common/main/ce.xml +++ b/make/data/cldr/common/main/ce.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1250,9 +1250,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic </field> </fields> <timeZoneNames> - <zone type="America/Santa_Isabel"> - <exemplarCity>Санта-Изабел</exemplarCity> - </zone> <zone type="Etc/Unknown"> <exemplarCity>Йоьвзуш йоцу гӀала</exemplarCity> </zone> @@ -1370,9 +1367,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>Мельбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Керри</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -1526,9 +1520,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Йеллоунайф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Эдмонтон</exemplarCity> </zone> @@ -1547,30 +1538,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>Резолют</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рейни-Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ранкин-Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Корал-Харбор</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тандер-Бей</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Икалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангниртанг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -2375,18 +2354,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар-эс-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферополь</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожье</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -2405,9 +2378,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>Гонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Джонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Анкоридж</exemplarCity> </zone> @@ -3043,11 +3013,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Лорд-Хау, аьхкенан хан</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Маккуори</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магадан</generic> @@ -3087,13 +3052,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Моусон</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Къилбаседа Американ Мексикан хан</generic> - <standard>Къилбаседа Американ Мексикан стандартан хан</standard> - <daylight>Къилбаседа Американ Мексикан аьхкенан хан</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Тийна океанан Мексикан хан</generic> diff --git a/make/data/cldr/common/main/ce_RU.xml b/make/data/cldr/common/main/ce_RU.xml index 486fd76083346..98ee73d543530 100644 --- a/make/data/cldr/common/main/ce_RU.xml +++ b/make/data/cldr/common/main/ce_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ceb.xml b/make/data/cldr/common/main/ceb.xml index 562381cbf94a5..814a72dfd4474 100644 --- a/make/data/cldr/common/main/ceb.xml +++ b/make/data/cldr/common/main/ceb.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) the U.S. and other countries. CLDR data files are interpreted according to @@ -1527,11 +1527,6 @@ the LDML specification (http://unicode.org/reports/tr35/) <daylight>Oras sa Tag-init sa Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Oras sa Macquarie Island</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Oras sa Magadan</generic> @@ -1571,13 +1566,6 @@ the LDML specification (http://unicode.org/reports/tr35/) <standard>Oras sa Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Oras sa Northwest Mexico</generic> - <standard>Tamdanang Oras sa Northwest Mexico</standard> - <daylight>Oras sa Tag-init sa Northwest Mexico</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Oras sa Mexican Pacific</generic> diff --git a/make/data/cldr/common/main/ceb_PH.xml b/make/data/cldr/common/main/ceb_PH.xml index dac5b5536bf24..720bca662a33f 100644 --- a/make/data/cldr/common/main/ceb_PH.xml +++ b/make/data/cldr/common/main/ceb_PH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cgg.xml b/make/data/cldr/common/main/cgg.xml index 17a257a2f9770..ce3e6c1724e8e 100644 --- a/make/data/cldr/common/main/cgg.xml +++ b/make/data/cldr/common/main/cgg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cgg_UG.xml b/make/data/cldr/common/main/cgg_UG.xml index c2c296258339e..be094e50917eb 100644 --- a/make/data/cldr/common/main/cgg_UG.xml +++ b/make/data/cldr/common/main/cgg_UG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cho.xml b/make/data/cldr/common/main/cho.xml index 4d3cb27ada6dd..b82979f63cdb0 100644 --- a/make/data/cldr/common/main/cho.xml +++ b/make/data/cldr/common/main/cho.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cho_US.xml b/make/data/cldr/common/main/cho_US.xml index 7d860d2bed72d..545a93f54a1e9 100644 --- a/make/data/cldr/common/main/cho_US.xml +++ b/make/data/cldr/common/main/cho_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/chr.xml b/make/data/cldr/common/main/chr.xml index 61d4fbe9c4393..36c2aaad4c13b 100644 --- a/make/data/cldr/common/main/chr.xml +++ b/make/data/cldr/common/main/chr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2149,9 +2149,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>ᎺᎵᏉᏁ</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ᎫᎵ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ᎰᏆᏘ</exemplarCity> </zone> @@ -2305,9 +2302,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>ᏞᏍᏔᏂ</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ᏓᎶᏂᎨ ᎭᏰᏍᏗ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ᎡᏗᎹᏂᏔᏂ</exemplarCity> </zone> @@ -2326,30 +2320,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>ᎴᏐᎷᏘ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ᎠᎦᏍᎦ ᎤᏪᏴ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ᎴᏂᎩᏂ ᎢᏂᎴᏘ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ᎠᏘᎪᎦᏂ</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ᎠᏴᏓᏆᎶᏍᎦ ᎡᏉᏄᎸᏗ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ᏂᏈᎪᏂ</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ᏙᎳᎾᏙ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ᎢᏆᎷᏱᏘ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ᏆᏂᏂᏚᏂᎦ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ᎹᎾᏔᏂ</exemplarCity> </zone> @@ -3163,18 +3145,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Ꮣ ᎡᏏ ᏌᎳᎻ</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ᎤᏍᎪᎶᏗ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>ᎩᏫ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ᏏᎻᏪᎶᏉᎵ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ᏌᏉᎶᏌᏱ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>ᎧᎻᏆᎳ</exemplarCity> </zone> @@ -3198,9 +3174,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic </short> <exemplarCity>ᎭᏃᎷᎷ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ᏣᏂᏏᏂ</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ᎠᏂᎪᎴᏥ</exemplarCity> </zone> @@ -3871,11 +3844,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>ᎤᎬᏫᏳᎯ ᎭᏫ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>ᎹᏇᎵ ᎤᎦᏚᏛᎢ ᎠᏟᎢᎵᏒ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>ᎹᎦᏓᏂ ᎠᏟᎢᎵᏒ</generic> @@ -3915,13 +3883,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>ᎹᏌᏂ ᎠᏟᎢᎵᏒ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>ᏧᏴᏢ ᏭᏕᎵᎬ ᎠᏂᏍᏆᏂ ᎠᏟᎢᎵᏒ</generic> - <standard>ᏧᏴᏢ ᏭᏕᎵᎬ ᎠᏂᏍᏆᏂ ᎠᏟᎶᏍᏗ ᎠᏟᎢᎵᏒ</standard> - <daylight>ᏧᏴᏢ ᏭᏕᎵᎬ ᎠᏂᏍᏆᏂ ᎪᎯ ᎢᎦ ᎠᏟᎢᎵᏒ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>ᎠᏂᏍᏆᏂ ᏭᏕᎵᎬ ᎠᏟᎢᎵᏒ</generic> diff --git a/make/data/cldr/common/main/chr_US.xml b/make/data/cldr/common/main/chr_US.xml index 753f7ad5e50da..c4765608100c5 100644 --- a/make/data/cldr/common/main/chr_US.xml +++ b/make/data/cldr/common/main/chr_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cic.xml b/make/data/cldr/common/main/cic.xml index 3714110a8c342..19ef45c939ecd 100644 --- a/make/data/cldr/common/main/cic.xml +++ b/make/data/cldr/common/main/cic.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cic_US.xml b/make/data/cldr/common/main/cic_US.xml index 3eaf1b337921d..06358d5e3a9b9 100644 --- a/make/data/cldr/common/main/cic_US.xml +++ b/make/data/cldr/common/main/cic_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ckb.xml b/make/data/cldr/common/main/ckb.xml index dc05102053f0b..e657cfdd3598e 100644 --- a/make/data/cldr/common/main/ckb.xml +++ b/make/data/cldr/common/main/ckb.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ckb_IQ.xml b/make/data/cldr/common/main/ckb_IQ.xml index 867fc0f702bcf..d556666831171 100644 --- a/make/data/cldr/common/main/ckb_IQ.xml +++ b/make/data/cldr/common/main/ckb_IQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ckb_IR.xml b/make/data/cldr/common/main/ckb_IR.xml index 3baaa3bafb0de..82e50bf7ebe36 100644 --- a/make/data/cldr/common/main/ckb_IR.xml +++ b/make/data/cldr/common/main/ckb_IR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/co.xml b/make/data/cldr/common/main/co.xml index d4d846700fa10..c3dc3a138e33c 100644 --- a/make/data/cldr/common/main/co.xml +++ b/make/data/cldr/common/main/co.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/co_FR.xml b/make/data/cldr/common/main/co_FR.xml index b70e6839dceb8..7ec66b708a188 100644 --- a/make/data/cldr/common/main/co_FR.xml +++ b/make/data/cldr/common/main/co_FR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cs.xml b/make/data/cldr/common/main/cs.xml index b9d607310dabd..2b12c2e7923af 100644 --- a/make/data/cldr/common/main/cs.xml +++ b/make/data/cldr/common/main/cs.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1220,7 +1220,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Řazení telefonního seznamu</type> <type key="collation" type="phonetic">Fonetické řazení</type> <type key="collation" type="pinyin">Řazení podle pchin-jinu</type> - <type key="collation" type="reformed">Reformované řazení</type> <type key="collation" type="search">Obecné hledání</type> <type key="collation" type="searchjl" draft="contributed">Vyhledávat podle počáteční souhlásky písma hangul</type> <type key="collation" type="standard">Standardní řazení</type> @@ -2839,9 +2838,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <timeZoneNames> <hourFormat>+H:mm;-H:mm</hourFormat> <regionFormat>časové pásmo {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>koordinovaný světový čas</standard> @@ -2868,9 +2864,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Vídeň</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Dhaka"> <exemplarCity>Dháka</exemplarCity> </zone> @@ -3278,15 +3271,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Taipei"> <exemplarCity>Tchaj-pej</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kyjev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Záporoží</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <short> <generic draft="contributed">HST</generic> @@ -3927,11 +3914,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Macajský letní čas</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>čas ostrova Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>magadanský čas</generic> @@ -3971,13 +3953,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>čas Mawsonovy stanice</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>severozápadní mexický čas</generic> - <standard>severozápadní mexický standardní čas</standard> - <daylight>severozápadní mexický letní čas</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>mexický pacifický čas</generic> diff --git a/make/data/cldr/common/main/cs_CZ.xml b/make/data/cldr/common/main/cs_CZ.xml index 04e724eda84c2..24aaba7de65a5 100644 --- a/make/data/cldr/common/main/cs_CZ.xml +++ b/make/data/cldr/common/main/cs_CZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/csw.xml b/make/data/cldr/common/main/csw.xml index 0c69a7d45b3db..aa49f5eb2243e 100644 --- a/make/data/cldr/common/main/csw.xml +++ b/make/data/cldr/common/main/csw.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/csw_CA.xml b/make/data/cldr/common/main/csw_CA.xml index 28baa8fd8e0fe..8b68feb93f809 100644 --- a/make/data/cldr/common/main/csw_CA.xml +++ b/make/data/cldr/common/main/csw_CA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cu.xml b/make/data/cldr/common/main/cu.xml index fec2d5afa471b..bd6ba061339c7 100644 --- a/make/data/cldr/common/main/cu.xml +++ b/make/data/cldr/common/main/cu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -492,18 +492,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Asia/Anadyr"> <exemplarCity draft="unconfirmed">а҆на́дырь</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="unconfirmed">ᲂу҆́жградъ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity draft="unconfirmed">кі́евъ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity draft="unconfirmed">сѷмферꙋ́поль</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">запра́жїе</exemplarCity> - </zone> <metazone type="America_Central"> <long> <generic draft="unconfirmed">среднеамерїка́нское вре́мѧ</generic> diff --git a/make/data/cldr/common/main/cu_RU.xml b/make/data/cldr/common/main/cu_RU.xml index 120c8710823cb..746300296e075 100644 --- a/make/data/cldr/common/main/cu_RU.xml +++ b/make/data/cldr/common/main/cu_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cv.xml b/make/data/cldr/common/main/cv.xml index b91b17d85b08c..ef9e1f2245ab3 100644 --- a/make/data/cldr/common/main/cv.xml +++ b/make/data/cldr/common/main/cv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1257,9 +1257,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Йеллоунайф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Эдмонтон</exemplarCity> </zone> @@ -1278,30 +1275,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>Резольют</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рейни-Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ранкин-Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Корал-Харбор</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тандер-Бей</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Икалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангниртанг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -2109,18 +2094,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар-эс-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферополь</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожье</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -2136,9 +2115,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Nome"> <exemplarCity>Ном</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Джонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Анкоридж</exemplarCity> </zone> @@ -2774,11 +2750,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Лорд-Хау ҫуллахи вӑхӑчӗ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Маккуори вӑхӑчӗ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магадан вӑхӑчӗ</generic> @@ -2818,13 +2789,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Моусон вӑхӑчӗ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Ҫурҫӗр-анӑҫ Мексика вӑхӑчӗ</generic> - <standard>Ҫурҫӗр-анӑҫ Мексика стандартлӑ вӑхӑчӗ</standard> - <daylight>Ҫурҫӗр-анӑҫ Мексика ҫуллахи вӑхӑчӗ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Мексика Лӑпкӑ океан вӑхӑчӗ</generic> diff --git a/make/data/cldr/common/main/cv_RU.xml b/make/data/cldr/common/main/cv_RU.xml index 79e419ecd2edd..042cde46b8a3f 100644 --- a/make/data/cldr/common/main/cv_RU.xml +++ b/make/data/cldr/common/main/cv_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/cy.xml b/make/data/cldr/common/main/cy.xml index 5cb956fede026..d9883189a704f 100644 --- a/make/data/cldr/common/main/cy.xml +++ b/make/data/cldr/common/main/cy.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1036,7 +1036,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="gb2312han">Trefn Symledig Tsieina - GB2312</type> <type key="collation" type="phonebook">Trefn Llyfr Ffôn</type> <type key="collation" type="pinyin">Trefn Pinyin</type> - <type key="collation" type="reformed">Trefn Diwygiedig</type> <type key="collation" type="search">Chwilio at Ddibenion Cyffredinol</type> <type key="collation" type="standard">Trefn Safonol</type> <type key="collation" type="traditional">Trefn Traddodiadol</type> @@ -2494,9 +2493,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Amser {0}</regionFormat> <regionFormat type="daylight">Amser Haf {0}</regionFormat> <regionFormat type="standard">Amser Safonol {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Amser Cyffredniol Cydlynol</standard> @@ -2511,9 +2507,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Fienna</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Brussels"> <exemplarCity>Brwsel</exemplarCity> </zone> @@ -2631,9 +2624,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Istanbul"> <exemplarCity>Caergystennin</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzhhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> @@ -3185,11 +3175,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Amser Haf yr Arglwydd Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Amser Ynys Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Amser Magadan</generic> @@ -3229,13 +3214,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Amser Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Amser Gogledd Orllewin Mecsico</generic> - <standard>Amser Safonol Gogledd Orllewin Mecsico</standard> - <daylight>Amser Haf Gogledd Orllewin Mecsico</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Amser Pasiffig Mecsico</generic> diff --git a/make/data/cldr/common/main/cy_GB.xml b/make/data/cldr/common/main/cy_GB.xml index 46d835c256ee1..688ce3f6aa76e 100644 --- a/make/data/cldr/common/main/cy_GB.xml +++ b/make/data/cldr/common/main/cy_GB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/da.xml b/make/data/cldr/common/main/da.xml index 80277259bd2f5..1bb32216e19a2 100644 --- a/make/data/cldr/common/main/da.xml +++ b/make/data/cldr/common/main/da.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1194,7 +1194,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">sorteringsrækkefølge i telefonbøger</type> <type key="collation" type="phonetic">fonetisk sorteringsrækkefølge</type> <type key="collation" type="pinyin">pinyin-baseret sorteringsrækkefølge</type> - <type key="collation" type="reformed">ny sorteringsrækkefølge</type> <type key="collation" type="search">generel søgning</type> <type key="collation" type="searchjl" draft="contributed">sortér efter den første konsonant i hangul</type> <type key="collation" type="standard">standardsorteringsrækkefølge</type> @@ -2655,9 +2654,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0}-tid</regionFormat> <regionFormat type="daylight">{0}-sommertid</regionFormat> <regionFormat type="standard">{0}-normaltid</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Koordineret universaltid</standard> @@ -2675,9 +2671,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Wien</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Brussels"> <exemplarCity>Bruxelles</exemplarCity> </zone> @@ -2850,15 +2843,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Ashgabat"> <exemplarCity>Asjkhabad</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzjhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporizjzja</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3451,11 +3438,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Macao-sommertid</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie-tid</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan-tid</generic> @@ -3495,13 +3477,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawson-tid</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Nordvestmexicansk tid</generic> - <standard>Nordvestmexicansk normaltid</standard> - <daylight>Nordvestmexicansk sommertid</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexicansk Pacific-tid</generic> diff --git a/make/data/cldr/common/main/da_DK.xml b/make/data/cldr/common/main/da_DK.xml index 92a4f736c4cdc..8ea345b65770c 100644 --- a/make/data/cldr/common/main/da_DK.xml +++ b/make/data/cldr/common/main/da_DK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/da_GL.xml b/make/data/cldr/common/main/da_GL.xml index e61cbdb956849..290f091331f9e 100644 --- a/make/data/cldr/common/main/da_GL.xml +++ b/make/data/cldr/common/main/da_GL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dav.xml b/make/data/cldr/common/main/dav.xml index d5be35b12fef7..7cd6e77a1c780 100644 --- a/make/data/cldr/common/main/dav.xml +++ b/make/data/cldr/common/main/dav.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dav_KE.xml b/make/data/cldr/common/main/dav_KE.xml index 15c94ce0e943a..b317e2e51e7ae 100644 --- a/make/data/cldr/common/main/dav_KE.xml +++ b/make/data/cldr/common/main/dav_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/de.xml b/make/data/cldr/common/main/de.xml index 5d7b3515abe10..da9426b79f07b 100644 --- a/make/data/cldr/common/main/de.xml +++ b/make/data/cldr/common/main/de.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1265,7 +1265,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Telefonbuch-Sortierung</type> <type key="collation" type="phonetic">Phonetische Sortierung</type> <type key="collation" type="pinyin">Pinyin-Sortierung</type> - <type key="collation" type="reformed">Reformierte Sortierreihenfolge</type> <type key="collation" type="search">Allgemeine Suche</type> <type key="collation" type="searchjl" draft="contributed">Suche nach Anfangsbuchstaben des koreanischen Alphabets</type> <type key="collation" type="standard">Standard-Sortierung</type> @@ -2761,9 +2760,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} (Ortszeit)</regionFormat> <regionFormat type="daylight">{0} (Sommerzeit)</regionFormat> <regionFormat type="standard">{0} (Normalzeit)</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Koordinierte Weltzeit</standard> @@ -2787,9 +2783,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Wien</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Brussels"> <exemplarCity>Brüssel</exemplarCity> </zone> @@ -3076,15 +3069,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Daressalam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uschgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiew</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Saporischschja</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3682,11 +3669,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Macau-Sommerzeit</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarieinsel-Zeit</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan-Zeit</generic> @@ -3726,13 +3708,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawson-Zeit</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Nordwestmexiko-Zeit</generic> - <standard>Nordwestmexiko-Normalzeit</standard> - <daylight>Nordwestmexiko-Sommerzeit</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexikanische Pazifikzeit</generic> diff --git a/make/data/cldr/common/main/de_AT.xml b/make/data/cldr/common/main/de_AT.xml index 462619703d295..2c96f6eeb9854 100644 --- a/make/data/cldr/common/main/de_AT.xml +++ b/make/data/cldr/common/main/de_AT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/de_BE.xml b/make/data/cldr/common/main/de_BE.xml index b9f95deb36d45..65168659e95e6 100644 --- a/make/data/cldr/common/main/de_BE.xml +++ b/make/data/cldr/common/main/de_BE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/de_CH.xml b/make/data/cldr/common/main/de_CH.xml index 7ab945a0a7b41..db1486853037d 100644 --- a/make/data/cldr/common/main/de_CH.xml +++ b/make/data/cldr/common/main/de_CH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/de_DE.xml b/make/data/cldr/common/main/de_DE.xml index 6b538e156d25f..215f3071fb511 100644 --- a/make/data/cldr/common/main/de_DE.xml +++ b/make/data/cldr/common/main/de_DE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/de_IT.xml b/make/data/cldr/common/main/de_IT.xml index 4c9900f4619d0..c02cf2d054acb 100644 --- a/make/data/cldr/common/main/de_IT.xml +++ b/make/data/cldr/common/main/de_IT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/de_LI.xml b/make/data/cldr/common/main/de_LI.xml index a088c592f0888..f9d02706ab88b 100644 --- a/make/data/cldr/common/main/de_LI.xml +++ b/make/data/cldr/common/main/de_LI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/de_LU.xml b/make/data/cldr/common/main/de_LU.xml index d6b0047899b30..3090319548c8c 100644 --- a/make/data/cldr/common/main/de_LU.xml +++ b/make/data/cldr/common/main/de_LU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dje.xml b/make/data/cldr/common/main/dje.xml index e65a81575f792..72c95576a9eec 100644 --- a/make/data/cldr/common/main/dje.xml +++ b/make/data/cldr/common/main/dje.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dje_NE.xml b/make/data/cldr/common/main/dje_NE.xml index a348258a672d2..8cbabd42fdb38 100644 --- a/make/data/cldr/common/main/dje_NE.xml +++ b/make/data/cldr/common/main/dje_NE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/doi.xml b/make/data/cldr/common/main/doi.xml index 58c92dd73a67f..025c806eff545 100644 --- a/make/data/cldr/common/main/doi.xml +++ b/make/data/cldr/common/main/doi.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/doi_IN.xml b/make/data/cldr/common/main/doi_IN.xml index 5618f0f6ba23e..941eaa5fda2ce 100644 --- a/make/data/cldr/common/main/doi_IN.xml +++ b/make/data/cldr/common/main/doi_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dsb.xml b/make/data/cldr/common/main/dsb.xml index a47e5c68f2b47..e36b50c2e4d3b 100644 --- a/make/data/cldr/common/main/dsb.xml +++ b/make/data/cldr/common/main/dsb.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2536,15 +2536,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Daressalam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiew</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Saporižja</exemplarCity> - </zone> <zone type="Asia/Tashkent"> <exemplarCity>Taškent</exemplarCity> </zone> @@ -3075,11 +3069,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>lěśojski cas kupy Lord-Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>cas kupy Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadański cas</generic> @@ -3119,13 +3108,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mawson cas</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Mexiski dłujkowjacorny cas</generic> - <standard>Mexiski dłujkowjacorny standardny cas</standard> - <daylight>Mexiski dłujkowjacorny lěśojski cas</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexiski pacifiski cas</generic> diff --git a/make/data/cldr/common/main/dsb_DE.xml b/make/data/cldr/common/main/dsb_DE.xml index f43aa71ad41c8..312a235443e27 100644 --- a/make/data/cldr/common/main/dsb_DE.xml +++ b/make/data/cldr/common/main/dsb_DE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dua.xml b/make/data/cldr/common/main/dua.xml index 1377547fbe362..0162040d70480 100644 --- a/make/data/cldr/common/main/dua.xml +++ b/make/data/cldr/common/main/dua.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dua_CM.xml b/make/data/cldr/common/main/dua_CM.xml index c69387b038d12..83e862a026987 100644 --- a/make/data/cldr/common/main/dua_CM.xml +++ b/make/data/cldr/common/main/dua_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dv.xml b/make/data/cldr/common/main/dv.xml index 278e2f1b802bc..c169fd9eb7350 100644 --- a/make/data/cldr/common/main/dv.xml +++ b/make/data/cldr/common/main/dv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dv_MV.xml b/make/data/cldr/common/main/dv_MV.xml index 7d07ed90b72af..3518ac6f4b23f 100644 --- a/make/data/cldr/common/main/dv_MV.xml +++ b/make/data/cldr/common/main/dv_MV.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dyo.xml b/make/data/cldr/common/main/dyo.xml index c52eaf648509f..43cc0b410669e 100644 --- a/make/data/cldr/common/main/dyo.xml +++ b/make/data/cldr/common/main/dyo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dyo_SN.xml b/make/data/cldr/common/main/dyo_SN.xml index 12d37238e2948..28753759b1251 100644 --- a/make/data/cldr/common/main/dyo_SN.xml +++ b/make/data/cldr/common/main/dyo_SN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/dz.xml b/make/data/cldr/common/main/dz.xml index 5a58b42de9812..b22ebf6b4cdd4 100644 --- a/make/data/cldr/common/main/dz.xml +++ b/make/data/cldr/common/main/dz.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1197,27 +1197,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>རི་སོ་ལིའུཊ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>རཱེ་ནི་རི་ཝར</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>རེན་ཀིན་ ཨིན་ལེཊ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ཨ་ཏི་ཀོ་ཀཱན</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ཐན་ཌར་ བའེ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ནི་པི་གཱོན</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ཊོ་རོན་ཊོ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>པེང་ནིར་ཏུང</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>མཱོངཀ་ཊོན</exemplarCity> </zone> @@ -1551,9 +1539,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Wake"> <exemplarCity draft="unconfirmed">ཝེཀ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity draft="unconfirmed">ཇཱོནསི་ཊོན</exemplarCity> - </zone> <zone type="America/Yakutat"> <exemplarCity>ཡ་ཀུ་ཏཏ</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/dz_BT.xml b/make/data/cldr/common/main/dz_BT.xml index 9c159da4d70c7..b75cafed86331 100644 --- a/make/data/cldr/common/main/dz_BT.xml +++ b/make/data/cldr/common/main/dz_BT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ebu.xml b/make/data/cldr/common/main/ebu.xml index 30c61237f8008..5bccad8ed1899 100644 --- a/make/data/cldr/common/main/ebu.xml +++ b/make/data/cldr/common/main/ebu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ebu_KE.xml b/make/data/cldr/common/main/ebu_KE.xml index 2d28398e8be3c..1be6fdd248f80 100644 --- a/make/data/cldr/common/main/ebu_KE.xml +++ b/make/data/cldr/common/main/ebu_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ee.xml b/make/data/cldr/common/main/ee.xml index 4bf0edbd2bc69..81b7f9cab6873 100644 --- a/make/data/cldr/common/main/ee.xml +++ b/make/data/cldr/common/main/ee.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -736,7 +736,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="gb2312han">chinagbe yeye ƒe ɖoɖomɔ nu</type> <type key="collation" type="phonebook">fonegbalẽ me ɖoɖomɔ nu</type> <type key="collation" type="pinyin">pinyin ɖoɖomɔ nu</type> - <type key="collation" type="reformed">nugbugbɔtoɖo ƒe ɖoɖomɔ nu</type> <type key="collation" type="search">nudidi hena zazã gbadza</type> <type key="collation" type="searchjl" draft="unconfirmed">nudidi le hangul ƒe ɖoɖo gbãtɔ nu</type> <type key="collation" type="stroke">stroke ɖoɖomɔ nu</type> @@ -1892,9 +1891,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Etc/Unknown"> <exemplarCity>Du manya</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/London"> <long> <daylight>British dzomeŋɔli gaƒoƒo me</daylight> @@ -2493,11 +2489,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">Makau ŋkekeme gaƒoƒome</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie Island gaƒoƒo me</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan gaƒoƒo me</generic> @@ -2537,13 +2528,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mawson gaƒoƒo me</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Northwest Mexico gaƒoƒo me</generic> - <standard>Northwest Mexico nutome gaƒoƒo me</standard> - <daylight>Northwest Mexico kele gaƒoƒo me</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexican Pacific gaƒoƒo me</generic> diff --git a/make/data/cldr/common/main/ee_GH.xml b/make/data/cldr/common/main/ee_GH.xml index 0bfd4e337d890..452647d5bd025 100644 --- a/make/data/cldr/common/main/ee_GH.xml +++ b/make/data/cldr/common/main/ee_GH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ee_TG.xml b/make/data/cldr/common/main/ee_TG.xml index 7ce3b1f73d7fc..4da0b5e63dbdd 100644 --- a/make/data/cldr/common/main/ee_TG.xml +++ b/make/data/cldr/common/main/ee_TG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/el.xml b/make/data/cldr/common/main/el.xml index 4a521ac829c47..9ad122deba529 100644 --- a/make/data/cldr/common/main/el.xml +++ b/make/data/cldr/common/main/el.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1140,7 +1140,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Σειρά ταξινόμησης τηλεφωνικού καταλόγου</type> <type key="collation" type="phonetic">Φωνητική σειρά ταξινόμησης</type> <type key="collation" type="pinyin">Σειρά ταξινόμησης Πινγίν</type> - <type key="collation" type="reformed">Ανασχηματισμένη σειρά ταξινόμησης</type> <type key="collation" type="search">Αναζήτηση γενικού τύπου</type> <type key="collation" type="searchjl" draft="contributed">Αναζήτηση κατά αρχικό σύμφωνο Χανγκούλ</type> <type key="collation" type="standard">Τυπική σειρά ταξινόμησης</type> @@ -2577,9 +2576,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat type="daylight">Θερινή ώρα ({0})</regionFormat> <regionFormat type="standard">Χειμερινή ώρα ({0})</regionFormat> <fallbackFormat>[{1} ({0})]</fallbackFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Σάντα Ιζαμπέλ</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Συντονισμένη Παγκόσμια Ώρα</standard> @@ -2702,9 +2698,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Μελβούρνη</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Κάρι</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Χόμπαρτ</exemplarCity> </zone> @@ -2858,9 +2851,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Κρέστον</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Γέλοουναϊφ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Έντμοντον</exemplarCity> </zone> @@ -2879,30 +2869,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Ρέζολουτ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Ρέινι Ρίβερ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ράνκιν Ίνλετ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Ατικόκαν</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Θάντερ Μπέι</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Νιπιγκόν</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Τορόντο</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Ικαλούιτ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Πανγκνίρτουνγκ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Μόνκτον</exemplarCity> </zone> @@ -3713,18 +3691,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Νταρ ες Σαλάμ</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ούζχοροντ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Κίεβο</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Συμφερόπολη</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Ζαπορόζιε</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Καμπάλα</exemplarCity> </zone> @@ -3743,9 +3715,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Χονολουλού</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Τζόνστον</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Άνκορατζ</exemplarCity> </zone> @@ -4422,11 +4391,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Θερινή ώρα Μακάο</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Ώρα Νησιού Μακουάρι</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Ώρα Μαγκαντάν</generic> @@ -4466,13 +4430,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Ώρα Μόσον</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Ώρα Βορειοδυτικού Μεξικού</generic> - <standard>Χειμερινή ώρα Βορειοδυτικού Μεξικού</standard> - <daylight>Θερινή ώρα Βορειοδυτικού Μεξικού</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Ώρα Ειρηνικού Μεξικού</generic> diff --git a/make/data/cldr/common/main/el_CY.xml b/make/data/cldr/common/main/el_CY.xml index 42c1d3cd660d1..4684acf26e6bc 100644 --- a/make/data/cldr/common/main/el_CY.xml +++ b/make/data/cldr/common/main/el_CY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/el_GR.xml b/make/data/cldr/common/main/el_GR.xml index 63856dd3a156d..486102f53d6df 100644 --- a/make/data/cldr/common/main/el_GR.xml +++ b/make/data/cldr/common/main/el_GR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/el_POLYTON.xml b/make/data/cldr/common/main/el_POLYTON.xml index f1e4021e33536..4ddfe8295c3b5 100644 --- a/make/data/cldr/common/main/el_POLYTON.xml +++ b/make/data/cldr/common/main/el_POLYTON.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en.xml b/make/data/cldr/common/main/en.xml index a2f2412d11ab2..3b65dba442443 100644 --- a/make/data/cldr/common/main/en.xml +++ b/make/data/cldr/common/main/en.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) the U.S. and other countries. CLDR data files are interpreted according to @@ -24,7 +24,7 @@ annotations. <languages> <language type="aa">Afar</language> <language type="ab">Abkhazian</language> - <language type="ace">Achinese</language> + <language type="ace">Acehnese</language> <language type="ach">Acoli</language> <language type="ada">Adangme</language> <language type="ady">Adyghe</language> @@ -1375,7 +1375,6 @@ annotations. <type key="collation" type="phonebook">Phonebook Sort Order</type> <type key="collation" type="phonetic">Phonetic Sort Order</type> <type key="collation" type="pinyin">Pinyin Sort Order</type> - <type key="collation" type="reformed">Reformed Sort Order</type> <type key="collation" type="search">General-Purpose Search</type> <type key="collation" type="searchjl">Search By Hangul Initial Consonant</type> <type key="collation" type="standard">Standard Sort Order</type> @@ -3919,9 +3918,6 @@ annotations. <zone type="Asia/Qostanay"> <exemplarCity>Kostanay</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzhhorod</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <short> <generic>HST</generic> @@ -4362,6 +4358,13 @@ annotations. <standard>GMT</standard> </short> </metazone> + <metazone type="Greenland"> + <long> + <generic>Greenland Time</generic> + <standard>Greenland Standard Time</standard> + <daylight>Greenland Summer Time</daylight> + </long> + </metazone> <metazone type="Greenland_Eastern"> <long> <generic>East Greenland Time</generic> @@ -4540,11 +4543,6 @@ annotations. <daylight>Macao Summer Time</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie Island Time</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan Time</generic> @@ -4584,13 +4582,6 @@ annotations. <standard>Mawson Time</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Northwest Mexico Time</generic> - <standard>Northwest Mexico Standard Time</standard> - <daylight>Northwest Mexico Daylight Time</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexican Pacific Time</generic> @@ -6488,6 +6479,11 @@ annotations. <displayName count="one">East Caribbean dollar</displayName> <displayName count="other">East Caribbean dollars</displayName> </currency> + <currency type="XCG"> + <displayName>Caribbean guilder</displayName> + <displayName count="one">Caribbean guilder</displayName> + <displayName count="other">Caribbean guilders</displayName> + </currency> <currency type="XDR"> <displayName>Special Drawing Rights</displayName> <displayName count="one">special drawing rights</displayName> diff --git a/make/data/cldr/common/main/en_001.xml b/make/data/cldr/common/main/en_001.xml index 43d23d440dcef..45f042ae31a21 100644 --- a/make/data/cldr/common/main/en_001.xml +++ b/make/data/cldr/common/main/en_001.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -288,6 +288,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <dayPeriod type="pm">pm</dayPeriod> </dayPeriodWidth> <dayPeriodWidth type="narrow"> + <dayPeriod type="am">am</dayPeriod> <dayPeriod type="pm">pm</dayPeriod> </dayPeriodWidth> <dayPeriodWidth type="wide"> @@ -777,9 +778,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </field> </fields> <timeZoneNames> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="America/St_Barthelemy"> <exemplarCity>St Barthélemy</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/en_150.xml b/make/data/cldr/common/main/en_150.xml index 1025033dbc286..e4309125fddc7 100644 --- a/make/data/cldr/common/main/en_150.xml +++ b/make/data/cldr/common/main/en_150.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_AE.xml b/make/data/cldr/common/main/en_AE.xml index c4c26388be82c..a06ca32f9d786 100644 --- a/make/data/cldr/common/main/en_AE.xml +++ b/make/data/cldr/common/main/en_AE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) UAE English locale, based on US English orthography, formats from en_001 diff --git a/make/data/cldr/common/main/en_AG.xml b/make/data/cldr/common/main/en_AG.xml index b43d6fa891925..7baadb707fb36 100644 --- a/make/data/cldr/common/main/en_AG.xml +++ b/make/data/cldr/common/main/en_AG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_AI.xml b/make/data/cldr/common/main/en_AI.xml index 44d2da10caa2f..570253439bb0a 100644 --- a/make/data/cldr/common/main/en_AI.xml +++ b/make/data/cldr/common/main/en_AI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_AS.xml b/make/data/cldr/common/main/en_AS.xml index e7fcacd23d741..da6ad816ab3dc 100644 --- a/make/data/cldr/common/main/en_AS.xml +++ b/make/data/cldr/common/main/en_AS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_AT.xml b/make/data/cldr/common/main/en_AT.xml index 552756c441224..f9ed67e12ebf4 100644 --- a/make/data/cldr/common/main/en_AT.xml +++ b/make/data/cldr/common/main/en_AT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_AU.xml b/make/data/cldr/common/main/en_AU.xml index a5ab40fba87ba..bc112f81d0747 100644 --- a/make/data/cldr/common/main/en_AU.xml +++ b/make/data/cldr/common/main/en_AU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -218,9 +218,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <dayPeriod type="noon">midday</dayPeriod> </dayPeriodWidth> <dayPeriodWidth type="narrow"> - <dayPeriod type="am">am</dayPeriod> <dayPeriod type="noon">midday</dayPeriod> - <dayPeriod type="pm">pm</dayPeriod> </dayPeriodWidth> <dayPeriodWidth type="wide"> <dayPeriod type="noon">midday</dayPeriod> diff --git a/make/data/cldr/common/main/en_BB.xml b/make/data/cldr/common/main/en_BB.xml index 8ecf506cbde7d..a42ddcee86769 100644 --- a/make/data/cldr/common/main/en_BB.xml +++ b/make/data/cldr/common/main/en_BB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_BE.xml b/make/data/cldr/common/main/en_BE.xml index 200aea4694f2c..4f11b35c4169f 100644 --- a/make/data/cldr/common/main/en_BE.xml +++ b/make/data/cldr/common/main/en_BE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_BI.xml b/make/data/cldr/common/main/en_BI.xml index d32eb2e11f1f0..08c66ea876ab8 100644 --- a/make/data/cldr/common/main/en_BI.xml +++ b/make/data/cldr/common/main/en_BI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_BM.xml b/make/data/cldr/common/main/en_BM.xml index 4cd252a7a6070..2751a7e6adb35 100644 --- a/make/data/cldr/common/main/en_BM.xml +++ b/make/data/cldr/common/main/en_BM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_BS.xml b/make/data/cldr/common/main/en_BS.xml index b469a2612bca3..606935e873878 100644 --- a/make/data/cldr/common/main/en_BS.xml +++ b/make/data/cldr/common/main/en_BS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_BW.xml b/make/data/cldr/common/main/en_BW.xml index 25b55e6c3d3e2..029a68bd48357 100644 --- a/make/data/cldr/common/main/en_BW.xml +++ b/make/data/cldr/common/main/en_BW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_BZ.xml b/make/data/cldr/common/main/en_BZ.xml index d1a20602fea6d..bf6cd9c6cd1bd 100644 --- a/make/data/cldr/common/main/en_BZ.xml +++ b/make/data/cldr/common/main/en_BZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_CA.xml b/make/data/cldr/common/main/en_CA.xml index b2d5234f2019d..f5e62a7157cdd 100644 --- a/make/data/cldr/common/main/en_CA.xml +++ b/make/data/cldr/common/main/en_CA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -413,7 +413,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic </dayPeriodWidth> <dayPeriodWidth type="narrow"> <dayPeriod type="midnight">mid</dayPeriod> - <dayPeriod type="am">a.m.</dayPeriod> + <dayPeriod type="am">am</dayPeriod> <dayPeriod type="pm">pm</dayPeriod> <dayPeriod type="morning1">mor</dayPeriod> <dayPeriod type="afternoon1">aft</dayPeriod> @@ -1350,13 +1350,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>MVT</standard> </short> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Northwest Mexico Time</generic> - <standard>Northwest Mexico Standard Time</standard> - <daylight>Northwest Mexico Daylight Saving Time</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexican Pacific Time</generic> @@ -1529,7 +1522,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic </currency> <currency type="USD"> <symbol>US$</symbol> - <symbol alt="narrow" draft="contributed">US$</symbol> </currency> <currency type="XXX"> <displayName>unknown currency</displayName> diff --git a/make/data/cldr/common/main/en_CC.xml b/make/data/cldr/common/main/en_CC.xml index 0418a03b4517d..d7c89cceb058b 100644 --- a/make/data/cldr/common/main/en_CC.xml +++ b/make/data/cldr/common/main/en_CC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_CH.xml b/make/data/cldr/common/main/en_CH.xml index 8de22161bb1a6..eb4b4052e0a6d 100644 --- a/make/data/cldr/common/main/en_CH.xml +++ b/make/data/cldr/common/main/en_CH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_CK.xml b/make/data/cldr/common/main/en_CK.xml index 927f073e02b0d..6b90814a5812b 100644 --- a/make/data/cldr/common/main/en_CK.xml +++ b/make/data/cldr/common/main/en_CK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_CM.xml b/make/data/cldr/common/main/en_CM.xml index 6c317a5cf58d8..9e88b643c8eb4 100644 --- a/make/data/cldr/common/main/en_CM.xml +++ b/make/data/cldr/common/main/en_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_CX.xml b/make/data/cldr/common/main/en_CX.xml index 9fa1fa250efba..f74d58fae8d34 100644 --- a/make/data/cldr/common/main/en_CX.xml +++ b/make/data/cldr/common/main/en_CX.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_CY.xml b/make/data/cldr/common/main/en_CY.xml index 68e24327a4b6e..246e69e27a7bb 100644 --- a/make/data/cldr/common/main/en_CY.xml +++ b/make/data/cldr/common/main/en_CY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_DE.xml b/make/data/cldr/common/main/en_DE.xml index a23fa9e950ab4..e0a78572fb7c5 100644 --- a/make/data/cldr/common/main/en_DE.xml +++ b/make/data/cldr/common/main/en_DE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_DG.xml b/make/data/cldr/common/main/en_DG.xml index 3450900d0465e..afedbcd68f1d3 100644 --- a/make/data/cldr/common/main/en_DG.xml +++ b/make/data/cldr/common/main/en_DG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_DK.xml b/make/data/cldr/common/main/en_DK.xml index b8bfa5dadc751..7cfe98003a3e3 100644 --- a/make/data/cldr/common/main/en_DK.xml +++ b/make/data/cldr/common/main/en_DK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_DM.xml b/make/data/cldr/common/main/en_DM.xml index 4ac17acab51f6..4865025f358a7 100644 --- a/make/data/cldr/common/main/en_DM.xml +++ b/make/data/cldr/common/main/en_DM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_Dsrt.xml b/make/data/cldr/common/main/en_Dsrt.xml index 3c720f8498e94..4bbce7fe9428c 100644 --- a/make/data/cldr/common/main/en_Dsrt.xml +++ b/make/data/cldr/common/main/en_Dsrt.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -709,9 +709,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>𐐐𐐪𐑌𐐲𐑊𐐭𐑊𐐭</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>𐐖𐐪𐑌𐑅𐐻𐐲𐑌</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>𐐁𐑍𐐿𐐲𐑉𐐮𐐾</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/en_Dsrt_US.xml b/make/data/cldr/common/main/en_Dsrt_US.xml index f5d45057f16fe..1f5f650afba0a 100644 --- a/make/data/cldr/common/main/en_Dsrt_US.xml +++ b/make/data/cldr/common/main/en_Dsrt_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_ER.xml b/make/data/cldr/common/main/en_ER.xml index 5f7dd967eb6f1..73eb183902394 100644 --- a/make/data/cldr/common/main/en_ER.xml +++ b/make/data/cldr/common/main/en_ER.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_FI.xml b/make/data/cldr/common/main/en_FI.xml index d1ea9bc084b68..c5bd77f0004ed 100644 --- a/make/data/cldr/common/main/en_FI.xml +++ b/make/data/cldr/common/main/en_FI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_FJ.xml b/make/data/cldr/common/main/en_FJ.xml index 1b31f0bcef69d..150d4c9792651 100644 --- a/make/data/cldr/common/main/en_FJ.xml +++ b/make/data/cldr/common/main/en_FJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_FK.xml b/make/data/cldr/common/main/en_FK.xml index 95fdee069c654..0043263afabec 100644 --- a/make/data/cldr/common/main/en_FK.xml +++ b/make/data/cldr/common/main/en_FK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_FM.xml b/make/data/cldr/common/main/en_FM.xml index f7563fc16eb96..302122d86b9b3 100644 --- a/make/data/cldr/common/main/en_FM.xml +++ b/make/data/cldr/common/main/en_FM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_GB.xml b/make/data/cldr/common/main/en_GB.xml index c633f865fa81d..80f1237b319ec 100644 --- a/make/data/cldr/common/main/en_GB.xml +++ b/make/data/cldr/common/main/en_GB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -96,14 +96,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic </dateTimeFormats> </calendar> <calendar type="gregorian"> - <dayPeriods> - <dayPeriodContext type="stand-alone"> - <dayPeriodWidth type="narrow"> - <dayPeriod type="am">am</dayPeriod> - <dayPeriod type="pm">pm</dayPeriod> - </dayPeriodWidth> - </dayPeriodContext> - </dayPeriods> <dateFormats> <dateFormatLength type="full"> <dateFormat> diff --git a/make/data/cldr/common/main/en_GD.xml b/make/data/cldr/common/main/en_GD.xml index c0b98e3aa57a6..ab54007ecca77 100644 --- a/make/data/cldr/common/main/en_GD.xml +++ b/make/data/cldr/common/main/en_GD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_GG.xml b/make/data/cldr/common/main/en_GG.xml index 7ac45fdb4b5ae..f5f305f14d7ae 100644 --- a/make/data/cldr/common/main/en_GG.xml +++ b/make/data/cldr/common/main/en_GG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_GH.xml b/make/data/cldr/common/main/en_GH.xml index b59605c6760bf..360a5852f962f 100644 --- a/make/data/cldr/common/main/en_GH.xml +++ b/make/data/cldr/common/main/en_GH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_GI.xml b/make/data/cldr/common/main/en_GI.xml index e93b1ad6da170..86ebcd6d14008 100644 --- a/make/data/cldr/common/main/en_GI.xml +++ b/make/data/cldr/common/main/en_GI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_GM.xml b/make/data/cldr/common/main/en_GM.xml index ae5521a7a6375..e56a540ba5b5d 100644 --- a/make/data/cldr/common/main/en_GM.xml +++ b/make/data/cldr/common/main/en_GM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_GU.xml b/make/data/cldr/common/main/en_GU.xml index dbd7ef0561d56..2da80b51ca7db 100644 --- a/make/data/cldr/common/main/en_GU.xml +++ b/make/data/cldr/common/main/en_GU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_GY.xml b/make/data/cldr/common/main/en_GY.xml index 9434494aaeede..01cae4613e8a0 100644 --- a/make/data/cldr/common/main/en_GY.xml +++ b/make/data/cldr/common/main/en_GY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_HK.xml b/make/data/cldr/common/main/en_HK.xml index fa80af6f14000..55efa60afe479 100644 --- a/make/data/cldr/common/main/en_HK.xml +++ b/make/data/cldr/common/main/en_HK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_ID.xml b/make/data/cldr/common/main/en_ID.xml index dd1ef0173c2a5..d8967d4d32ea0 100644 --- a/make/data/cldr/common/main/en_ID.xml +++ b/make/data/cldr/common/main/en_ID.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_IE.xml b/make/data/cldr/common/main/en_IE.xml index c44748d4fdd64..4d0cb66f64f9f 100644 --- a/make/data/cldr/common/main/en_IE.xml +++ b/make/data/cldr/common/main/en_IE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_IL.xml b/make/data/cldr/common/main/en_IL.xml index dc7b6dd7270d4..64e6712abf6c0 100644 --- a/make/data/cldr/common/main/en_IL.xml +++ b/make/data/cldr/common/main/en_IL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_IM.xml b/make/data/cldr/common/main/en_IM.xml index 298dc2119c40e..e0cebdc97d74d 100644 --- a/make/data/cldr/common/main/en_IM.xml +++ b/make/data/cldr/common/main/en_IM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_IN.xml b/make/data/cldr/common/main/en_IN.xml index 8a3de0b3eea41..e92b09a0f35aa 100644 --- a/make/data/cldr/common/main/en_IN.xml +++ b/make/data/cldr/common/main/en_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -156,14 +156,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic </dateTimeFormats> </calendar> <calendar type="gregorian"> - <dayPeriods> - <dayPeriodContext type="stand-alone"> - <dayPeriodWidth type="narrow"> - <dayPeriod type="am">am</dayPeriod> - <dayPeriod type="pm">pm</dayPeriod> - </dayPeriodWidth> - </dayPeriodContext> - </dayPeriods> <dateFormats> <dateFormatLength type="full"> <dateFormat> @@ -348,10 +340,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic </decimalFormatLength> <decimalFormatLength type="short"> <decimalFormat> - <pattern type="1000" count="one">0T</pattern> - <pattern type="1000" count="other">0T</pattern> - <pattern type="10000" count="one">00T</pattern> - <pattern type="10000" count="other">00T</pattern> + <pattern type="1000" count="one">0K</pattern> + <pattern type="1000" count="other">0K</pattern> + <pattern type="10000" count="one">00K</pattern> + <pattern type="10000" count="other">00K</pattern> <pattern type="100000" count="one">0L</pattern> <pattern type="100000" count="other">0L</pattern> <pattern type="1000000" count="one">00L</pattern> @@ -362,10 +354,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic <pattern type="100000000" count="other">00Cr</pattern> <pattern type="1000000000" count="one">000Cr</pattern> <pattern type="1000000000" count="other">000Cr</pattern> - <pattern type="10000000000" count="one">0TCr</pattern> - <pattern type="10000000000" count="other">0TCr</pattern> - <pattern type="100000000000" count="one">00TCr</pattern> - <pattern type="100000000000" count="other">00TCr</pattern> + <pattern type="10000000000" count="one">0KCr</pattern> + <pattern type="10000000000" count="other">0KCr</pattern> + <pattern type="100000000000" count="one">00KCr</pattern> + <pattern type="100000000000" count="other">00KCr</pattern> <pattern type="1000000000000" count="one">0LCr</pattern> <pattern type="1000000000000" count="other">0LCr</pattern> <pattern type="10000000000000" count="one">00LCr</pattern> @@ -392,14 +384,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic </currencyFormatLength> <currencyFormatLength type="short"> <currencyFormat type="standard"> - <pattern type="1000" count="one">¤0T</pattern> - <pattern type="1000" count="one" alt="alphaNextToNumber">¤ 0T</pattern> - <pattern type="1000" count="other">¤0T</pattern> - <pattern type="1000" count="other" alt="alphaNextToNumber">¤ 0T</pattern> - <pattern type="10000" count="one">¤00T</pattern> - <pattern type="10000" count="one" alt="alphaNextToNumber">¤ 00T</pattern> - <pattern type="10000" count="other">¤00T</pattern> - <pattern type="10000" count="other" alt="alphaNextToNumber">¤ 00T</pattern> <pattern type="100000" count="one">¤0L</pattern> <pattern type="100000" count="one" alt="alphaNextToNumber">¤ 0L</pattern> <pattern type="100000" count="other">¤0L</pattern> @@ -420,14 +404,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic <pattern type="1000000000" count="one" alt="alphaNextToNumber">¤ 000Cr</pattern> <pattern type="1000000000" count="other">¤000Cr</pattern> <pattern type="1000000000" count="other" alt="alphaNextToNumber">¤ 000Cr</pattern> - <pattern type="10000000000" count="one">¤0TCr</pattern> - <pattern type="10000000000" count="one" alt="alphaNextToNumber">¤ 0TCr</pattern> - <pattern type="10000000000" count="other">¤0TCr</pattern> - <pattern type="10000000000" count="other" alt="alphaNextToNumber">¤ 0TCr</pattern> - <pattern type="100000000000" count="one">¤00TCr</pattern> - <pattern type="100000000000" count="one" alt="alphaNextToNumber">¤ 00TCr</pattern> - <pattern type="100000000000" count="other">¤00TCr</pattern> - <pattern type="100000000000" count="other" alt="alphaNextToNumber">¤ 00TCr</pattern> + <pattern type="10000000000" count="one">¤0KCr</pattern> + <pattern type="10000000000" count="one" alt="alphaNextToNumber">¤ 0KCr</pattern> + <pattern type="10000000000" count="other">¤0KCr</pattern> + <pattern type="10000000000" count="other" alt="alphaNextToNumber">¤ 0KCr</pattern> + <pattern type="100000000000" count="one">¤00KCr</pattern> + <pattern type="100000000000" count="one" alt="alphaNextToNumber">¤ 00KCr</pattern> + <pattern type="100000000000" count="other">¤00KCr</pattern> + <pattern type="100000000000" count="other" alt="alphaNextToNumber">¤ 00KCr</pattern> <pattern type="1000000000000" count="one">¤0LCr</pattern> <pattern type="1000000000000" count="one" alt="alphaNextToNumber">¤ 0LCr</pattern> <pattern type="1000000000000" count="other">¤0LCr</pattern> diff --git a/make/data/cldr/common/main/en_IO.xml b/make/data/cldr/common/main/en_IO.xml index 32bbc146b16bc..92a48e14017b6 100644 --- a/make/data/cldr/common/main/en_IO.xml +++ b/make/data/cldr/common/main/en_IO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_JE.xml b/make/data/cldr/common/main/en_JE.xml index 175301c5a9c14..bb03432537533 100644 --- a/make/data/cldr/common/main/en_JE.xml +++ b/make/data/cldr/common/main/en_JE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_JM.xml b/make/data/cldr/common/main/en_JM.xml index 7b7a8a906dbed..95d0f7ff44679 100644 --- a/make/data/cldr/common/main/en_JM.xml +++ b/make/data/cldr/common/main/en_JM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_KE.xml b/make/data/cldr/common/main/en_KE.xml index 676869a71b197..1bf5307c0fa55 100644 --- a/make/data/cldr/common/main/en_KE.xml +++ b/make/data/cldr/common/main/en_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_KI.xml b/make/data/cldr/common/main/en_KI.xml index 641b0c7b76396..d0e791a7af9f3 100644 --- a/make/data/cldr/common/main/en_KI.xml +++ b/make/data/cldr/common/main/en_KI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_KN.xml b/make/data/cldr/common/main/en_KN.xml index 29f593b7cbcc4..e42abe1b6ca07 100644 --- a/make/data/cldr/common/main/en_KN.xml +++ b/make/data/cldr/common/main/en_KN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_KY.xml b/make/data/cldr/common/main/en_KY.xml index c03f9e247ead0..63702387fea36 100644 --- a/make/data/cldr/common/main/en_KY.xml +++ b/make/data/cldr/common/main/en_KY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_LC.xml b/make/data/cldr/common/main/en_LC.xml index 8fd621102eee9..e1f26e6c5f838 100644 --- a/make/data/cldr/common/main/en_LC.xml +++ b/make/data/cldr/common/main/en_LC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_LR.xml b/make/data/cldr/common/main/en_LR.xml index 4675a76a383f2..eb4bd35354ef5 100644 --- a/make/data/cldr/common/main/en_LR.xml +++ b/make/data/cldr/common/main/en_LR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_LS.xml b/make/data/cldr/common/main/en_LS.xml index 5f1b55ceb8d96..1eae8537fa8f8 100644 --- a/make/data/cldr/common/main/en_LS.xml +++ b/make/data/cldr/common/main/en_LS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MG.xml b/make/data/cldr/common/main/en_MG.xml index db4d89f73ef60..64b115b5eeebd 100644 --- a/make/data/cldr/common/main/en_MG.xml +++ b/make/data/cldr/common/main/en_MG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MH.xml b/make/data/cldr/common/main/en_MH.xml index 40f6bc0876e42..6796e9192e0d6 100644 --- a/make/data/cldr/common/main/en_MH.xml +++ b/make/data/cldr/common/main/en_MH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MO.xml b/make/data/cldr/common/main/en_MO.xml index 2409398a4b012..d8d7f8b4c9a73 100644 --- a/make/data/cldr/common/main/en_MO.xml +++ b/make/data/cldr/common/main/en_MO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MP.xml b/make/data/cldr/common/main/en_MP.xml index 0a5498907f719..7dc20583a0c26 100644 --- a/make/data/cldr/common/main/en_MP.xml +++ b/make/data/cldr/common/main/en_MP.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MS.xml b/make/data/cldr/common/main/en_MS.xml index a51583748b715..8b050edc4008c 100644 --- a/make/data/cldr/common/main/en_MS.xml +++ b/make/data/cldr/common/main/en_MS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MT.xml b/make/data/cldr/common/main/en_MT.xml index 21e101d9b5da0..c5a59d467ee93 100644 --- a/make/data/cldr/common/main/en_MT.xml +++ b/make/data/cldr/common/main/en_MT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MU.xml b/make/data/cldr/common/main/en_MU.xml index ca5d10c48ee98..415c9633f85e9 100644 --- a/make/data/cldr/common/main/en_MU.xml +++ b/make/data/cldr/common/main/en_MU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MV.xml b/make/data/cldr/common/main/en_MV.xml index c235cdf929068..ef0f012484e56 100644 --- a/make/data/cldr/common/main/en_MV.xml +++ b/make/data/cldr/common/main/en_MV.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MW.xml b/make/data/cldr/common/main/en_MW.xml index 0106749d3a477..a082ea1e7957b 100644 --- a/make/data/cldr/common/main/en_MW.xml +++ b/make/data/cldr/common/main/en_MW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_MY.xml b/make/data/cldr/common/main/en_MY.xml index 260e4fabb8b01..b781aba1310d4 100644 --- a/make/data/cldr/common/main/en_MY.xml +++ b/make/data/cldr/common/main/en_MY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_NA.xml b/make/data/cldr/common/main/en_NA.xml index 6c466db17780b..a805dda6fe4d8 100644 --- a/make/data/cldr/common/main/en_NA.xml +++ b/make/data/cldr/common/main/en_NA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_NF.xml b/make/data/cldr/common/main/en_NF.xml index b8985e4780bfc..f0abbefd4a598 100644 --- a/make/data/cldr/common/main/en_NF.xml +++ b/make/data/cldr/common/main/en_NF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_NG.xml b/make/data/cldr/common/main/en_NG.xml index 1cdbe002048c2..cfee35b596784 100644 --- a/make/data/cldr/common/main/en_NG.xml +++ b/make/data/cldr/common/main/en_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_NL.xml b/make/data/cldr/common/main/en_NL.xml index 50e7cdf0e9fd3..ad11fd2356e71 100644 --- a/make/data/cldr/common/main/en_NL.xml +++ b/make/data/cldr/common/main/en_NL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_NR.xml b/make/data/cldr/common/main/en_NR.xml index 759f3d4e049db..461a309c8e632 100644 --- a/make/data/cldr/common/main/en_NR.xml +++ b/make/data/cldr/common/main/en_NR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_NU.xml b/make/data/cldr/common/main/en_NU.xml index 98e4b89097e13..e1f57eb64b790 100644 --- a/make/data/cldr/common/main/en_NU.xml +++ b/make/data/cldr/common/main/en_NU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_NZ.xml b/make/data/cldr/common/main/en_NZ.xml index 7f81af30aa984..9fd2ea95156f7 100644 --- a/make/data/cldr/common/main/en_NZ.xml +++ b/make/data/cldr/common/main/en_NZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_PG.xml b/make/data/cldr/common/main/en_PG.xml index 97e223eac5cde..0f630a113de9e 100644 --- a/make/data/cldr/common/main/en_PG.xml +++ b/make/data/cldr/common/main/en_PG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_PH.xml b/make/data/cldr/common/main/en_PH.xml index 26299daf2c69a..5c556175331b1 100644 --- a/make/data/cldr/common/main/en_PH.xml +++ b/make/data/cldr/common/main/en_PH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_PK.xml b/make/data/cldr/common/main/en_PK.xml index ff0180fc0f8e3..3707a36e215b8 100644 --- a/make/data/cldr/common/main/en_PK.xml +++ b/make/data/cldr/common/main/en_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_PN.xml b/make/data/cldr/common/main/en_PN.xml index 2979154e92ab9..41dfaf5a2bc70 100644 --- a/make/data/cldr/common/main/en_PN.xml +++ b/make/data/cldr/common/main/en_PN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_PR.xml b/make/data/cldr/common/main/en_PR.xml index c12e1a39ec6b4..c2a0b54bac258 100644 --- a/make/data/cldr/common/main/en_PR.xml +++ b/make/data/cldr/common/main/en_PR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_PW.xml b/make/data/cldr/common/main/en_PW.xml index 8edce18f4bfe1..0e6fc103956de 100644 --- a/make/data/cldr/common/main/en_PW.xml +++ b/make/data/cldr/common/main/en_PW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_RW.xml b/make/data/cldr/common/main/en_RW.xml index 43c09b5c2cb31..16cec0390437c 100644 --- a/make/data/cldr/common/main/en_RW.xml +++ b/make/data/cldr/common/main/en_RW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SB.xml b/make/data/cldr/common/main/en_SB.xml index 7f38a06f93509..f7d8a49d231b8 100644 --- a/make/data/cldr/common/main/en_SB.xml +++ b/make/data/cldr/common/main/en_SB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SC.xml b/make/data/cldr/common/main/en_SC.xml index 3dfdfda7e60b6..80db50ef2ca7e 100644 --- a/make/data/cldr/common/main/en_SC.xml +++ b/make/data/cldr/common/main/en_SC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SD.xml b/make/data/cldr/common/main/en_SD.xml index 50bfa1cf5b70b..9e93773256450 100644 --- a/make/data/cldr/common/main/en_SD.xml +++ b/make/data/cldr/common/main/en_SD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SE.xml b/make/data/cldr/common/main/en_SE.xml index 7b05ba2e60e2a..2864cd90b2b8e 100644 --- a/make/data/cldr/common/main/en_SE.xml +++ b/make/data/cldr/common/main/en_SE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SG.xml b/make/data/cldr/common/main/en_SG.xml index ec7df565a7a92..970adc78ac21f 100644 --- a/make/data/cldr/common/main/en_SG.xml +++ b/make/data/cldr/common/main/en_SG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SH.xml b/make/data/cldr/common/main/en_SH.xml index e446a3d42da01..70acafc3aafb8 100644 --- a/make/data/cldr/common/main/en_SH.xml +++ b/make/data/cldr/common/main/en_SH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SI.xml b/make/data/cldr/common/main/en_SI.xml index 07e78e0932852..3a1d997b448f2 100644 --- a/make/data/cldr/common/main/en_SI.xml +++ b/make/data/cldr/common/main/en_SI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SL.xml b/make/data/cldr/common/main/en_SL.xml index 3352baab3c49c..f4a944bcf938b 100644 --- a/make/data/cldr/common/main/en_SL.xml +++ b/make/data/cldr/common/main/en_SL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SS.xml b/make/data/cldr/common/main/en_SS.xml index 6aa773e99cf45..c45a113af4b73 100644 --- a/make/data/cldr/common/main/en_SS.xml +++ b/make/data/cldr/common/main/en_SS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SX.xml b/make/data/cldr/common/main/en_SX.xml index 414c9953914d5..c73851eb280a6 100644 --- a/make/data/cldr/common/main/en_SX.xml +++ b/make/data/cldr/common/main/en_SX.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_SZ.xml b/make/data/cldr/common/main/en_SZ.xml index c3cb2fbd804fe..085aa49bd1843 100644 --- a/make/data/cldr/common/main/en_SZ.xml +++ b/make/data/cldr/common/main/en_SZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_Shaw.xml b/make/data/cldr/common/main/en_Shaw.xml index d5fc8c91d579a..39f2e23af19bb 100644 --- a/make/data/cldr/common/main/en_Shaw.xml +++ b/make/data/cldr/common/main/en_Shaw.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_Shaw_GB.xml b/make/data/cldr/common/main/en_Shaw_GB.xml index f5d1e58a31184..2766c6c6ce29c 100644 --- a/make/data/cldr/common/main/en_Shaw_GB.xml +++ b/make/data/cldr/common/main/en_Shaw_GB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_TC.xml b/make/data/cldr/common/main/en_TC.xml index 799d960c5454b..716b6c0dfa5f1 100644 --- a/make/data/cldr/common/main/en_TC.xml +++ b/make/data/cldr/common/main/en_TC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_TK.xml b/make/data/cldr/common/main/en_TK.xml index eea518c3b1ee8..2b4933cd43df6 100644 --- a/make/data/cldr/common/main/en_TK.xml +++ b/make/data/cldr/common/main/en_TK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_TO.xml b/make/data/cldr/common/main/en_TO.xml index 46bf208ee24c1..3471fd370bcd9 100644 --- a/make/data/cldr/common/main/en_TO.xml +++ b/make/data/cldr/common/main/en_TO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_TT.xml b/make/data/cldr/common/main/en_TT.xml index a7997c035e85d..f2cdc18acf0ff 100644 --- a/make/data/cldr/common/main/en_TT.xml +++ b/make/data/cldr/common/main/en_TT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_TV.xml b/make/data/cldr/common/main/en_TV.xml index 961d8bed22cf8..477b1b1edf8c6 100644 --- a/make/data/cldr/common/main/en_TV.xml +++ b/make/data/cldr/common/main/en_TV.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_TZ.xml b/make/data/cldr/common/main/en_TZ.xml index 10dfceecf00bd..1fb9d69f07633 100644 --- a/make/data/cldr/common/main/en_TZ.xml +++ b/make/data/cldr/common/main/en_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_UG.xml b/make/data/cldr/common/main/en_UG.xml index 7c0b4340b8a1d..ffa4e478f08d4 100644 --- a/make/data/cldr/common/main/en_UG.xml +++ b/make/data/cldr/common/main/en_UG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_UM.xml b/make/data/cldr/common/main/en_UM.xml index be570e817dfc0..90e040619f920 100644 --- a/make/data/cldr/common/main/en_UM.xml +++ b/make/data/cldr/common/main/en_UM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_US.xml b/make/data/cldr/common/main/en_US.xml index 9b090e68cd3f1..1098f0a192b1e 100644 --- a/make/data/cldr/common/main/en_US.xml +++ b/make/data/cldr/common/main/en_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_US_POSIX.xml b/make/data/cldr/common/main/en_US_POSIX.xml index 7b494c78f4499..5a7864a45139d 100644 --- a/make/data/cldr/common/main/en_US_POSIX.xml +++ b/make/data/cldr/common/main/en_US_POSIX.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_VC.xml b/make/data/cldr/common/main/en_VC.xml index e23f496b8af56..5ced863306970 100644 --- a/make/data/cldr/common/main/en_VC.xml +++ b/make/data/cldr/common/main/en_VC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_VG.xml b/make/data/cldr/common/main/en_VG.xml index 10604d44a5960..bff76dad8b908 100644 --- a/make/data/cldr/common/main/en_VG.xml +++ b/make/data/cldr/common/main/en_VG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_VI.xml b/make/data/cldr/common/main/en_VI.xml index 069b002404b24..2d5800e398031 100644 --- a/make/data/cldr/common/main/en_VI.xml +++ b/make/data/cldr/common/main/en_VI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_VU.xml b/make/data/cldr/common/main/en_VU.xml index 7660e9cd47fc6..8d072e673b2af 100644 --- a/make/data/cldr/common/main/en_VU.xml +++ b/make/data/cldr/common/main/en_VU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_WS.xml b/make/data/cldr/common/main/en_WS.xml index 8e2e243fd05a5..c0881e59da81d 100644 --- a/make/data/cldr/common/main/en_WS.xml +++ b/make/data/cldr/common/main/en_WS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_ZA.xml b/make/data/cldr/common/main/en_ZA.xml index 20fce438ca2c5..7bc2afaeaba48 100644 --- a/make/data/cldr/common/main/en_ZA.xml +++ b/make/data/cldr/common/main/en_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_ZM.xml b/make/data/cldr/common/main/en_ZM.xml index f784a772a7b0e..31d055396d638 100644 --- a/make/data/cldr/common/main/en_ZM.xml +++ b/make/data/cldr/common/main/en_ZM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/en_ZW.xml b/make/data/cldr/common/main/en_ZW.xml index 094ee09e5aa6a..415f5896a7863 100644 --- a/make/data/cldr/common/main/en_ZW.xml +++ b/make/data/cldr/common/main/en_ZW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/eo.xml b/make/data/cldr/common/main/eo.xml index 11c4191eb7fcb..4373940cfcacb 100644 --- a/make/data/cldr/common/main/eo.xml +++ b/make/data/cldr/common/main/eo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2690,18 +2690,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity draft="unconfirmed">Daresalamo</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="unconfirmed">Uĵhorodo</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity draft="unconfirmed">Kievo</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity draft="unconfirmed">Simferopolo</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">Zaporiĵo</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity draft="unconfirmed">Kampalo</exemplarCity> </zone> @@ -3231,11 +3225,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">Lord Howe (somera tempo)</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">makvor-insula tempo</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="unconfirmed">magadana tempo</generic> @@ -3255,13 +3244,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">maŭricia somera tempo</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">nordokcidenta meksika tempo</generic> - <standard draft="unconfirmed">nordokcidenta meksika norma tempo</standard> - <daylight draft="unconfirmed">nordokcidenta meksika somera tempo</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">pacifika meksika tempo</generic> diff --git a/make/data/cldr/common/main/eo_001.xml b/make/data/cldr/common/main/eo_001.xml index 74f71a9d7da10..3092db7a06a39 100644 --- a/make/data/cldr/common/main/eo_001.xml +++ b/make/data/cldr/common/main/eo_001.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es.xml b/make/data/cldr/common/main/es.xml index 2da0419dcacd1..b868d6c957bf5 100644 --- a/make/data/cldr/common/main/es.xml +++ b/make/data/cldr/common/main/es.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1137,7 +1137,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">orden de listín telefónico</type> <type key="collation" type="phonetic">orden fonético</type> <type key="collation" type="pinyin">orden pinyin</type> - <type key="collation" type="reformed">orden reformado</type> <type key="collation" type="search">búsqueda de uso general</type> <type key="collation" type="searchjl" draft="contributed">Buscar por consonante inicial de hangul</type> <type key="collation" type="standard">orden estándar</type> @@ -2650,9 +2649,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>hora de {0}</regionFormat> <regionFormat type="daylight">horario de verano de {0}</regionFormat> <regionFormat type="standard">horario estándar de {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>tiempo universal coordinado</standard> @@ -2688,9 +2684,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Adelaide"> <exemplarCity>Adelaida</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity>Sídney</exemplarCity> </zone> @@ -3150,18 +3143,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar es-Salam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Úzhgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Simferópol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporiyia</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulú</exemplarCity> </zone> @@ -3783,11 +3770,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Hora de verano de Macao</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>hora de la isla Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>hora de Magadán</generic> @@ -3827,13 +3809,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>hora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>hora del noroeste de México</generic> - <standard>hora estándar del noroeste de México</standard> - <daylight>hora de verano del noroeste de México</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>hora del Pacífico de México</generic> @@ -5560,6 +5535,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <displayName count="other">dólares del Caribe Oriental</displayName> <symbol>XCD</symbol> </currency> + <currency type="XCG"> + <displayName>florín caribeño</displayName> + <displayName count="one">florín caribeño</displayName> + <displayName count="other">florines caribeños</displayName> + </currency> <currency type="XDR"> <displayName>derechos especiales de giro</displayName> </currency> diff --git a/make/data/cldr/common/main/es_419.xml b/make/data/cldr/common/main/es_419.xml index 8eaf6e1a854c9..76569c82bf9b9 100644 --- a/make/data/cldr/common/main/es_419.xml +++ b/make/data/cldr/common/main/es_419.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -733,11 +733,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>hora de India</standard> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>hora de la Isla Macquarie</standard> - </long> - </metazone> <metazone type="Marshall_Islands"> <long> <standard>hora de Islas Marshall</standard> diff --git a/make/data/cldr/common/main/es_AR.xml b/make/data/cldr/common/main/es_AR.xml index 5a1a6a918348f..2f5905cb86705 100644 --- a/make/data/cldr/common/main/es_AR.xml +++ b/make/data/cldr/common/main/es_AR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_BO.xml b/make/data/cldr/common/main/es_BO.xml index f807fb539061f..b609043344098 100644 --- a/make/data/cldr/common/main/es_BO.xml +++ b/make/data/cldr/common/main/es_BO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_BR.xml b/make/data/cldr/common/main/es_BR.xml index 5bcd1e703fc11..c98cd1291a46a 100644 --- a/make/data/cldr/common/main/es_BR.xml +++ b/make/data/cldr/common/main/es_BR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_BZ.xml b/make/data/cldr/common/main/es_BZ.xml index 1ca6d551f1e05..33864498795e4 100644 --- a/make/data/cldr/common/main/es_BZ.xml +++ b/make/data/cldr/common/main/es_BZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_CL.xml b/make/data/cldr/common/main/es_CL.xml index edfe0d580d079..f61c3a21a3d0f 100644 --- a/make/data/cldr/common/main/es_CL.xml +++ b/make/data/cldr/common/main/es_CL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_CO.xml b/make/data/cldr/common/main/es_CO.xml index 67783e7a7fc38..431c17d8ca99d 100644 --- a/make/data/cldr/common/main/es_CO.xml +++ b/make/data/cldr/common/main/es_CO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_CR.xml b/make/data/cldr/common/main/es_CR.xml index a4c7dbefc795c..84375254780ae 100644 --- a/make/data/cldr/common/main/es_CR.xml +++ b/make/data/cldr/common/main/es_CR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_CU.xml b/make/data/cldr/common/main/es_CU.xml index b6688a39c120f..13f190f8d8b12 100644 --- a/make/data/cldr/common/main/es_CU.xml +++ b/make/data/cldr/common/main/es_CU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_DO.xml b/make/data/cldr/common/main/es_DO.xml index 56812b66e88ba..d5d68e617aa8e 100644 --- a/make/data/cldr/common/main/es_DO.xml +++ b/make/data/cldr/common/main/es_DO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_EA.xml b/make/data/cldr/common/main/es_EA.xml index dd6744aaa5625..1de5b4a13c407 100644 --- a/make/data/cldr/common/main/es_EA.xml +++ b/make/data/cldr/common/main/es_EA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_EC.xml b/make/data/cldr/common/main/es_EC.xml index dabeb20239fd0..d2eb9494c2c90 100644 --- a/make/data/cldr/common/main/es_EC.xml +++ b/make/data/cldr/common/main/es_EC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_ES.xml b/make/data/cldr/common/main/es_ES.xml index eb8bfa7e24afa..0df424e4a5196 100644 --- a/make/data/cldr/common/main/es_ES.xml +++ b/make/data/cldr/common/main/es_ES.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_GQ.xml b/make/data/cldr/common/main/es_GQ.xml index 1ddebd650aa28..15c1dfd26cede 100644 --- a/make/data/cldr/common/main/es_GQ.xml +++ b/make/data/cldr/common/main/es_GQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_GT.xml b/make/data/cldr/common/main/es_GT.xml index 861f3c8b02678..c24654ffe716f 100644 --- a/make/data/cldr/common/main/es_GT.xml +++ b/make/data/cldr/common/main/es_GT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_HN.xml b/make/data/cldr/common/main/es_HN.xml index 35fdf1bde9295..781e326acdd06 100644 --- a/make/data/cldr/common/main/es_HN.xml +++ b/make/data/cldr/common/main/es_HN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_IC.xml b/make/data/cldr/common/main/es_IC.xml index ded49b4e7801d..2f9d5b339e0c6 100644 --- a/make/data/cldr/common/main/es_IC.xml +++ b/make/data/cldr/common/main/es_IC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_MX.xml b/make/data/cldr/common/main/es_MX.xml index b220b77109772..6ff5d7585218d 100644 --- a/make/data/cldr/common/main/es_MX.xml +++ b/make/data/cldr/common/main/es_MX.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -587,11 +587,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>hora de las Islas Gilbert</standard> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>hora de la isla Macquarie</standard> - </long> - </metazone> <metazone type="Marshall_Islands"> <long> <standard>hora de las Islas Marshall</standard> diff --git a/make/data/cldr/common/main/es_NI.xml b/make/data/cldr/common/main/es_NI.xml index 30e62addfaa2c..c232a99bbd382 100644 --- a/make/data/cldr/common/main/es_NI.xml +++ b/make/data/cldr/common/main/es_NI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_PA.xml b/make/data/cldr/common/main/es_PA.xml index cb5e8a1bce5d0..033d71b624a1a 100644 --- a/make/data/cldr/common/main/es_PA.xml +++ b/make/data/cldr/common/main/es_PA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_PE.xml b/make/data/cldr/common/main/es_PE.xml index 1be590a4ba3fb..36da049e783df 100644 --- a/make/data/cldr/common/main/es_PE.xml +++ b/make/data/cldr/common/main/es_PE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_PH.xml b/make/data/cldr/common/main/es_PH.xml index 1d022d74fd5f7..5ad142f21829e 100644 --- a/make/data/cldr/common/main/es_PH.xml +++ b/make/data/cldr/common/main/es_PH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_PR.xml b/make/data/cldr/common/main/es_PR.xml index 2db1ea0bd4785..21eec4a4930f1 100644 --- a/make/data/cldr/common/main/es_PR.xml +++ b/make/data/cldr/common/main/es_PR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_PY.xml b/make/data/cldr/common/main/es_PY.xml index 74af58fe04b9a..14a760ceef00d 100644 --- a/make/data/cldr/common/main/es_PY.xml +++ b/make/data/cldr/common/main/es_PY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_SV.xml b/make/data/cldr/common/main/es_SV.xml index 1dae8dd682468..f1f72ef262ad5 100644 --- a/make/data/cldr/common/main/es_SV.xml +++ b/make/data/cldr/common/main/es_SV.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_US.xml b/make/data/cldr/common/main/es_US.xml index 330f5434fc7da..192cd37c9493d 100644 --- a/make/data/cldr/common/main/es_US.xml +++ b/make/data/cldr/common/main/es_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -530,11 +530,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>hora del Océano Índico</standard> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>hora de la isla Macquarie</standard> - </long> - </metazone> <metazone type="Marquesas"> <long> <standard>hora de las islas Marquesas</standard> diff --git a/make/data/cldr/common/main/es_UY.xml b/make/data/cldr/common/main/es_UY.xml index df6ce01a60faa..9413f6ad7508e 100644 --- a/make/data/cldr/common/main/es_UY.xml +++ b/make/data/cldr/common/main/es_UY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/es_VE.xml b/make/data/cldr/common/main/es_VE.xml index 3da59310136f6..790b39dc6ce86 100644 --- a/make/data/cldr/common/main/es_VE.xml +++ b/make/data/cldr/common/main/es_VE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/et.xml b/make/data/cldr/common/main/et.xml index e0f3c46f7ca34..d592b9a84eaa3 100644 --- a/make/data/cldr/common/main/et.xml +++ b/make/data/cldr/common/main/et.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1291,7 +1291,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">telefoniraamatu sortimisjärjestus</type> <type key="collation" type="phonetic">foneetiline sortimisjärjestus</type> <type key="collation" type="pinyin">pinyin’i sortimisjärjestus</type> - <type key="collation" type="reformed">reformitud sortimisjärjestus</type> <type key="collation" type="search">üldeesmärgiline otsing</type> <type key="collation" type="searchjl">otsing korea alguskonsonandi järgi</type> <type key="collation" type="standard">standardne järjestus</type> @@ -2600,9 +2599,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <hourFormat>+HH:mm;−HH:mm</hourFormat> <gmtFormat>GMT {0}</gmtFormat> <regionFormat>({0})</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Koordineeritud maailmaaeg</standard> @@ -2629,9 +2625,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Viin</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Mariehamn"> <exemplarCity>Maarianhamina</exemplarCity> </zone> @@ -2945,15 +2938,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Istanbul"> <exemplarCity>İstanbul</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporožje</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3548,11 +3535,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Macau suveaeg</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie saare aeg</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadani aeg</generic> @@ -3592,13 +3574,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawsoni aeg</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Loode-Mehhiko aeg</generic> - <standard>Loode-Mehhiko standardaeg</standard> - <daylight>Loode-Mehhiko suveaeg</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mehhiko Vaikse ookeani aeg</generic> diff --git a/make/data/cldr/common/main/et_EE.xml b/make/data/cldr/common/main/et_EE.xml index 07ea7f3faec6a..3c364e5935932 100644 --- a/make/data/cldr/common/main/et_EE.xml +++ b/make/data/cldr/common/main/et_EE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/eu.xml b/make/data/cldr/common/main/eu.xml index f32831ffc88e6..05a24b1cd26d1 100644 --- a/make/data/cldr/common/main/eu.xml +++ b/make/data/cldr/common/main/eu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1137,7 +1137,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Telefonoen zerrenda</type> <type key="collation" type="phonetic">Ordenatzeko irizpide fonetikoa</type> <type key="collation" type="pinyin">Pinyin hurrenkera</type> - <type key="collation" type="reformed">Erreformaren araberako hurrenkera</type> <type key="collation" type="search">Bilaketa orokorra</type> <type key="collation" type="searchjl">Bilatu hangularen lehen kontsonantearen arabera</type> <type key="collation" type="standard">Ordenatzeko irizpide estandarra</type> @@ -2513,9 +2512,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} aldeko ordua</regionFormat> <regionFormat type="daylight">{0} (udako ordua)</regionFormat> <regionFormat type="standard">{0} aldeko ordu estandarra</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>ordu unibertsal koordinatua</standard> @@ -2542,9 +2538,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Viena</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Brussels"> <exemplarCity>Brusela</exemplarCity> </zone> @@ -2865,15 +2858,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Port_of_Spain"> <exemplarCity>Port-of-Spain</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzhhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporizhia</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <short> <generic>HST</generic> @@ -3532,11 +3519,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Macaoko udako ordua</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie uharteko ordua</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadango ordua</generic> @@ -3576,13 +3558,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawsoneko ordua</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Mexikoko ipar-ekialdeko ordua</generic> - <standard>Mexikoko ipar-ekialdeko ordu estandarra</standard> - <daylight>Mexikoko ipar-ekialdeko udako ordua</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexikoko Pazifikoko ordua</generic> diff --git a/make/data/cldr/common/main/eu_ES.xml b/make/data/cldr/common/main/eu_ES.xml index 4426f2ae2f005..3b4cea6aec27e 100644 --- a/make/data/cldr/common/main/eu_ES.xml +++ b/make/data/cldr/common/main/eu_ES.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ewo.xml b/make/data/cldr/common/main/ewo.xml index 9d4eddd28273f..b0aa0bd21bb83 100644 --- a/make/data/cldr/common/main/ewo.xml +++ b/make/data/cldr/common/main/ewo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ewo_CM.xml b/make/data/cldr/common/main/ewo_CM.xml index ca40dbef82641..c1ca412bec077 100644 --- a/make/data/cldr/common/main/ewo_CM.xml +++ b/make/data/cldr/common/main/ewo_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fa.xml b/make/data/cldr/common/main/fa.xml index 85f69c4d04254..70b2b6af8406a 100644 --- a/make/data/cldr/common/main/fa.xml +++ b/make/data/cldr/common/main/fa.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1120,7 +1120,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">ترتیب دفتر تلفن</type> <type key="collation" type="phonetic">مرتب کردن بر اساس آوایی</type> <type key="collation" type="pinyin">ترتیب پین‌یین</type> - <type key="collation" type="reformed">ترتیب اصلاح‌شده</type> <type key="collation" type="search">جستجوی عمومی</type> <type key="collation" type="searchjl">جستجو با صامت اول هانگول</type> <type key="collation" type="standard">ترتیب استاندارد</type> @@ -2582,9 +2581,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>وقت {0}</regionFormat> <regionFormat type="daylight">وقت تابستانی {0}</regionFormat> <regionFormat type="standard">وقت عادی {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>سانتا ایزابل</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>زمان هماهنگ جهانی</standard> @@ -2707,9 +2703,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>ملبورن</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>کوری</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>هوبارت</exemplarCity> </zone> @@ -2863,9 +2856,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>کرستون</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>یلونایف</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ادمونتون</exemplarCity> </zone> @@ -2884,30 +2874,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>رزولوت</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>رینی‌ریور</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>خلیجک رنکین</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>اتکوکان</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>تاندربی</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>نیپیگان</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>تورنتو</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ایکلوئت</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>پانگنیرتونگ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>مانکتون</exemplarCity> </zone> @@ -3721,18 +3699,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>دارالسلام</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>اوژگورود</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>کیف</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>سیمفروپل</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>زاپوروژیا</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>کامپالا</exemplarCity> </zone> @@ -3751,9 +3723,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>هونولولو</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>جانستون</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>انکوریج</exemplarCity> </zone> @@ -4427,11 +4396,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>وقت تابستانی ماکائو</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>وقت جزیرهٔ مکواری</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>وقت ماگادان</generic> @@ -4471,13 +4435,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>وقت ماوسون</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>وقت شمال غرب مکزیک</generic> - <standard>وقت عادی شمال غرب مکزیک</standard> - <daylight>وقت تابستانی شمال غرب مکزیک</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>وقت شرق مکزیک</generic> diff --git a/make/data/cldr/common/main/fa_AF.xml b/make/data/cldr/common/main/fa_AF.xml index af337f4842b0c..5dc2c6b07ab4a 100644 --- a/make/data/cldr/common/main/fa_AF.xml +++ b/make/data/cldr/common/main/fa_AF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fa_IR.xml b/make/data/cldr/common/main/fa_IR.xml index f1c736a270860..6bd954fe747bb 100644 --- a/make/data/cldr/common/main/fa_IR.xml +++ b/make/data/cldr/common/main/fa_IR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff.xml b/make/data/cldr/common/main/ff.xml index a5d227fc334fd..d49da7dd73a8d 100644 --- a/make/data/cldr/common/main/ff.xml +++ b/make/data/cldr/common/main/ff.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm.xml b/make/data/cldr/common/main/ff_Adlm.xml index afd050cd485fa..397938de91c25 100644 --- a/make/data/cldr/common/main/ff_Adlm.xml +++ b/make/data/cldr/common/main/ff_Adlm.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -710,7 +710,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <territory type="BS">𞤄𞤢𞤸𞤢𞤥𞤢𞥄𞤧</territory> <territory type="BT">𞤄𞤵𞥅𞤼𞤢𞥄𞤲</territory> <territory type="BV">𞤅𞤵𞤪𞤭𞥅𞤪𞤫 𞤄𞤵𞥅𞤾𞤫𞥅</territory> - <territory type="BW">‮𞤄𞤮𞤼𞤧𞤵𞤱𞤢𞥄𞤲𞤢</territory> + <territory type="BW">𞤄𞤮𞤼𞤧𞤵𞤱𞤢𞥄𞤲𞤢</territory> <territory type="BY">𞤄𞤫𞤤𞤢𞤪𞤵𞥅𞤧</territory> <territory type="BZ">𞤄𞤫𞤤𞤭𞥅𞥁</territory> <territory type="CA">𞤑𞤢𞤲𞤢𞤣𞤢𞥄</territory> @@ -3392,9 +3392,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>𞤃𞤫𞤤𞤦𞤵𞥅𞤪𞤲𞤵</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>𞤑𞤵𞥅𞤪𞤭𞥅</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>𞤖𞤵𞥅𞤦𞤢𞤪𞤼𞤵</exemplarCity> </zone> @@ -3548,9 +3545,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>𞤑𞤪𞤫𞤧𞤼𞤮𞤲</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>𞤒𞤫𞤤𞤮𞥅𞤲𞤢𞤴𞤬</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>𞤉𞤣𞤥𞤮𞤲𞤼𞤮𞤲</exemplarCity> </zone> @@ -3569,30 +3563,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>𞤈𞤭𞤧𞤮𞤤𞤵𞥅𞤼</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>𞤈𞤫𞤲𞤭𞥅-𞤈𞤭𞤾𞤮𞥅</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>𞤈𞤢𞤲𞤳𞤭𞤲 𞤋𞤲𞤤𞤫𞤼</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>𞤀𞤼𞤭𞤳𞤮𞥅𞤳𞤢𞤲</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>𞤚𞤵𞤲𞤣𞤮𞥅 𞤄𞤫𞥅</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>𞤐𞤭𞤨𞤭𞤺𞤮𞤲</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>𞤚𞤮𞤪𞤮𞤲𞤼𞤮𞥅</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>𞤋𞤳𞤢𞤤𞤵𞤱𞤭𞤼</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>𞤆𞤢𞤲𞤺</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>𞤃𞤮𞤲𞤳𞤼𞤮𞥅𞤲</exemplarCity> </zone> @@ -3789,7 +3771,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <exemplarCity>𞤐𞤵𞥅𞤳</exemplarCity> </zone> <zone type="America/Scoresbysund"> - <exemplarCity>‮𞤋𞤼𞥆𞤮𞤳𞤮𞤪𞤼𞤮𞥅𞤪𞤥𞤭𞥅𞤼</exemplarCity> + <exemplarCity>𞤋𞤼𞥆𞤮𞤳𞤮𞤪𞤼𞤮𞥅𞤪𞤥𞤭𞥅𞤼</exemplarCity> </zone> <zone type="America/Danmarkshavn"> <exemplarCity>𞤁𞤢𞥄𞤲𞤥𞤢𞤪𞤳𞥃𞤢𞥄𞤾𞤲</exemplarCity> @@ -4403,18 +4385,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>𞤁𞤢𞥄𞤪𞤫-𞤅𞤢𞤤𞤢𞥄𞤥𞤵</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>𞤓𞥅𞤶𞤢𞤪𞤵𞥅𞤣𞤵</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>𞤑𞤭𞤴𞤫𞥅𞤾</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>𞤅𞤭𞤥𞤬𞤫𞤪𞤨𞤮𞥅𞤤</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>𞤟𞤢𞤨𞤮𞤪𞤵𞥅𞥁</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>𞤑𞤢𞤥𞤨𞤢𞤤𞤢</exemplarCity> </zone> @@ -4437,9 +4413,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>𞤑𞤕𞤖</daylight> </short> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>𞤔𞤮𞤲𞤧𞤼𞤮𞤲</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>𞤀𞤲𞤧𞤮𞤪𞤢𞥄𞤶𞤵</exemplarCity> </zone> @@ -5127,11 +5100,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤕𞤫𞥅𞤯𞤵 𞤃𞤢𞤳𞤢𞤱𞤮𞥅</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤅𞤵𞤪𞤭𞥅𞤪𞤫 𞤃𞤢𞤳𞤢𞥄𞤪𞤭</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤃𞤢𞤺𞤢𞤣𞤢𞤲</generic> @@ -5171,13 +5139,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤃𞤢𞤱𞤧𞤮𞤲</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤐𞤢𞤲𞤮-𞤸𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤃𞤫𞤳𞤧𞤭𞤳𞤮𞥅</generic> - <standard>𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤖𞤢𞤱𞤪𞤵𞤲𞥋𞤣𞤫 𞤐𞤢𞤲𞤮-𞤸𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤃𞤫𞤳𞤧𞤭𞤳𞤮𞥅</standard> - <daylight>𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤕𞤫𞥅𞤯𞤵 𞤐𞤢𞤲𞤮-𞤸𞤭𞥅𞤪𞤲𞤢𞥄𞤲𞤺𞤫 𞤃𞤫𞤳𞤧𞤭𞤳𞤮𞥅</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>𞤑𞤭𞤶𞤮𞥅𞤪𞤫 𞤁𞤫𞤰𞥆𞤮 𞤃𞤫𞤳𞤧𞤭𞤳𞤮𞥅</generic> diff --git a/make/data/cldr/common/main/ff_Adlm_BF.xml b/make/data/cldr/common/main/ff_Adlm_BF.xml index 3e9e0627b1ec4..90be56319938f 100644 --- a/make/data/cldr/common/main/ff_Adlm_BF.xml +++ b/make/data/cldr/common/main/ff_Adlm_BF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_CM.xml b/make/data/cldr/common/main/ff_Adlm_CM.xml index 3fde1300b30d9..3761a7efe1d62 100644 --- a/make/data/cldr/common/main/ff_Adlm_CM.xml +++ b/make/data/cldr/common/main/ff_Adlm_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_GH.xml b/make/data/cldr/common/main/ff_Adlm_GH.xml index 038a168fdd007..c3477d0486efa 100644 --- a/make/data/cldr/common/main/ff_Adlm_GH.xml +++ b/make/data/cldr/common/main/ff_Adlm_GH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_GM.xml b/make/data/cldr/common/main/ff_Adlm_GM.xml index bcf7075379da4..35fafdbe7901c 100644 --- a/make/data/cldr/common/main/ff_Adlm_GM.xml +++ b/make/data/cldr/common/main/ff_Adlm_GM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_GN.xml b/make/data/cldr/common/main/ff_Adlm_GN.xml index e3c897c0e9980..d8c3db1a6ac16 100644 --- a/make/data/cldr/common/main/ff_Adlm_GN.xml +++ b/make/data/cldr/common/main/ff_Adlm_GN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_GW.xml b/make/data/cldr/common/main/ff_Adlm_GW.xml index 91f2cd631fed5..17ce40babac00 100644 --- a/make/data/cldr/common/main/ff_Adlm_GW.xml +++ b/make/data/cldr/common/main/ff_Adlm_GW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_LR.xml b/make/data/cldr/common/main/ff_Adlm_LR.xml index 35e42c9f3d97b..b6c231d080849 100644 --- a/make/data/cldr/common/main/ff_Adlm_LR.xml +++ b/make/data/cldr/common/main/ff_Adlm_LR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_MR.xml b/make/data/cldr/common/main/ff_Adlm_MR.xml index e3e8053e3458d..0887f910fe8ac 100644 --- a/make/data/cldr/common/main/ff_Adlm_MR.xml +++ b/make/data/cldr/common/main/ff_Adlm_MR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_NE.xml b/make/data/cldr/common/main/ff_Adlm_NE.xml index b87cd3b98adfe..27ba7a82479b5 100644 --- a/make/data/cldr/common/main/ff_Adlm_NE.xml +++ b/make/data/cldr/common/main/ff_Adlm_NE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_NG.xml b/make/data/cldr/common/main/ff_Adlm_NG.xml index 2049af21619b7..2c41f8227def4 100644 --- a/make/data/cldr/common/main/ff_Adlm_NG.xml +++ b/make/data/cldr/common/main/ff_Adlm_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_SL.xml b/make/data/cldr/common/main/ff_Adlm_SL.xml index 0e74f05fe3fea..9f82db107c583 100644 --- a/make/data/cldr/common/main/ff_Adlm_SL.xml +++ b/make/data/cldr/common/main/ff_Adlm_SL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Adlm_SN.xml b/make/data/cldr/common/main/ff_Adlm_SN.xml index 685b6f6923c73..c40e32bd72735 100644 --- a/make/data/cldr/common/main/ff_Adlm_SN.xml +++ b/make/data/cldr/common/main/ff_Adlm_SN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn.xml b/make/data/cldr/common/main/ff_Latn.xml index d3c7025d8e5c0..935b75f448377 100644 --- a/make/data/cldr/common/main/ff_Latn.xml +++ b/make/data/cldr/common/main/ff_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_BF.xml b/make/data/cldr/common/main/ff_Latn_BF.xml index 6a7679a921ae5..e7e6794281953 100644 --- a/make/data/cldr/common/main/ff_Latn_BF.xml +++ b/make/data/cldr/common/main/ff_Latn_BF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_CM.xml b/make/data/cldr/common/main/ff_Latn_CM.xml index e65cdd47bb19b..58cb7f2cbbfef 100644 --- a/make/data/cldr/common/main/ff_Latn_CM.xml +++ b/make/data/cldr/common/main/ff_Latn_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_GH.xml b/make/data/cldr/common/main/ff_Latn_GH.xml index d51d6a2845a15..e41b64f1fd1e4 100644 --- a/make/data/cldr/common/main/ff_Latn_GH.xml +++ b/make/data/cldr/common/main/ff_Latn_GH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_GM.xml b/make/data/cldr/common/main/ff_Latn_GM.xml index 8e29e3085c212..201a089c5a9ee 100644 --- a/make/data/cldr/common/main/ff_Latn_GM.xml +++ b/make/data/cldr/common/main/ff_Latn_GM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_GN.xml b/make/data/cldr/common/main/ff_Latn_GN.xml index 05c35ae80e244..d24fcded06905 100644 --- a/make/data/cldr/common/main/ff_Latn_GN.xml +++ b/make/data/cldr/common/main/ff_Latn_GN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_GW.xml b/make/data/cldr/common/main/ff_Latn_GW.xml index bd4cc979d2ae8..8612937065828 100644 --- a/make/data/cldr/common/main/ff_Latn_GW.xml +++ b/make/data/cldr/common/main/ff_Latn_GW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_LR.xml b/make/data/cldr/common/main/ff_Latn_LR.xml index c4ae1b5cd00e9..54833258e68f3 100644 --- a/make/data/cldr/common/main/ff_Latn_LR.xml +++ b/make/data/cldr/common/main/ff_Latn_LR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_MR.xml b/make/data/cldr/common/main/ff_Latn_MR.xml index ed5cf9f5711ee..410874c338477 100644 --- a/make/data/cldr/common/main/ff_Latn_MR.xml +++ b/make/data/cldr/common/main/ff_Latn_MR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_NE.xml b/make/data/cldr/common/main/ff_Latn_NE.xml index dde07b1844edb..3698286693569 100644 --- a/make/data/cldr/common/main/ff_Latn_NE.xml +++ b/make/data/cldr/common/main/ff_Latn_NE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_NG.xml b/make/data/cldr/common/main/ff_Latn_NG.xml index d6c5f4bb5ce59..5816f40592cc6 100644 --- a/make/data/cldr/common/main/ff_Latn_NG.xml +++ b/make/data/cldr/common/main/ff_Latn_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_SL.xml b/make/data/cldr/common/main/ff_Latn_SL.xml index c4589017208d4..0cbb05f7425b3 100644 --- a/make/data/cldr/common/main/ff_Latn_SL.xml +++ b/make/data/cldr/common/main/ff_Latn_SL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ff_Latn_SN.xml b/make/data/cldr/common/main/ff_Latn_SN.xml index 92d54286e8394..af236d68ca2ee 100644 --- a/make/data/cldr/common/main/ff_Latn_SN.xml +++ b/make/data/cldr/common/main/ff_Latn_SN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fi.xml b/make/data/cldr/common/main/fi.xml index 6ad756f2dfe78..137ee13e62439 100644 --- a/make/data/cldr/common/main/fi.xml +++ b/make/data/cldr/common/main/fi.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1386,7 +1386,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">puhelinluettelojärjestys</type> <type key="collation" type="phonetic">äänteellinen järjestys</type> <type key="collation" type="pinyin">pinyin-järjestys</type> - <type key="collation" type="reformed">uudistettu järjestys</type> <type key="collation" type="search">yleishakujärjestys</type> <type key="collation" type="searchjl">haku hangul-alkukonsonantin mukaan</type> <type key="collation" type="standard">normaalijärjestys</type> @@ -3178,9 +3177,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>aikavyöhyke: {0}</regionFormat> <regionFormat type="daylight">{0} (kesäaika)</regionFormat> <regionFormat type="standard">{0} (normaaliaika)</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>UTC-yleisaika</standard> @@ -3204,9 +3200,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Wien</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Antarctica/Macquarie"> <exemplarCity>Macquariensaari</exemplarCity> </zone> @@ -3531,15 +3524,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Ashgabat"> <exemplarCity>Ašgabat</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiova</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporižžja</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity>Midwaysaaret</exemplarCity> </zone> @@ -4140,11 +4127,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Macaon kesäaika</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquariensaaren aika</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadanin aika</generic> @@ -4184,13 +4166,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawsonin aika</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Luoteis-Meksikon aika</generic> - <standard>Luoteis-Meksikon normaaliaika</standard> - <daylight>Luoteis-Meksikon kesäaika</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksikon Tyynenmeren aika</generic> diff --git a/make/data/cldr/common/main/fi_FI.xml b/make/data/cldr/common/main/fi_FI.xml index d430308582e95..35fdb9512a921 100644 --- a/make/data/cldr/common/main/fi_FI.xml +++ b/make/data/cldr/common/main/fi_FI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fil.xml b/make/data/cldr/common/main/fil.xml index 7959c590d7b1b..3ab1ed46273f0 100644 --- a/make/data/cldr/common/main/fil.xml +++ b/make/data/cldr/common/main/fil.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -915,7 +915,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Pagkakasunud-sunod ng Pag-uuri ng Phonebook</type> <type key="collation" type="phonetic">Phonetic na Ayos ng Pag-uuri-uri</type> <type key="collation" type="pinyin">Pagkakasunud-sunod ng Pag-uuri ng Pinyin</type> - <type key="collation" type="reformed">Pagkakasunud-sunod ng Pag-uuri ng Na-reform</type> <type key="collation" type="search">Pangkalahatang Paghahanap</type> <type key="collation" type="searchjl">Maghanap Ayon sa Unang Katinig ng Hangul</type> <type key="collation" type="standard">Karaniwang Pagkakasunud-sunod ng Ayos</type> @@ -2161,9 +2160,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Oras sa {0}</regionFormat> <regionFormat type="daylight">Daylight Time ng {0}</regionFormat> <regionFormat type="standard">Standard na Oras sa {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Coordinated Universal Time</standard> @@ -2172,9 +2168,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Etc/Unknown"> <exemplarCity>Di-kilalang Lungsod</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="America/St_Barthelemy"> <exemplarCity>St. Barthélemy</exemplarCity> </zone> @@ -2756,11 +2749,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Daylight Time sa Lorde Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Oras sa Macquarie Island</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Oras sa Magadan</generic> @@ -2800,13 +2788,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Oras sa Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Oras sa Hilagang-kanlurang Mexico</generic> - <standard>Standard na Oras sa Hilagang-kanlurang Mexico</standard> - <daylight>Daylight na Oras sa Hilagang-kanlurang Mexico</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Oras sa Pasipiko ng Mexico</generic> diff --git a/make/data/cldr/common/main/fil_PH.xml b/make/data/cldr/common/main/fil_PH.xml index 0e9eee04017af..e9869e5802f24 100644 --- a/make/data/cldr/common/main/fil_PH.xml +++ b/make/data/cldr/common/main/fil_PH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fo.xml b/make/data/cldr/common/main/fo.xml index 8d58f4986855d..ecb45b9a4572c 100644 --- a/make/data/cldr/common/main/fo.xml +++ b/make/data/cldr/common/main/fo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2033,9 +2033,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <regionFormat>{0} tíð</regionFormat> <regionFormat type="daylight">{0} summartíð</regionFormat> <regionFormat type="standard">{0} vanlig tíð</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Samskipað heimstíð</standard> @@ -2047,9 +2044,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Europe/Vienna"> <exemplarCity>Wien</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Brussels"> <exemplarCity>Bruxelles</exemplarCity> </zone> @@ -2186,9 +2180,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Sao_Tome"> <exemplarCity>São Tomé</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzhhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> @@ -2704,11 +2695,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Lord Howe summartíð</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquariesoyggj tíð</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan tíð</generic> @@ -2748,13 +2734,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mawson tíð</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Northwest Mexico tíð</generic> - <standard>Northwest Mexico vanlig tíð</standard> - <daylight>Northwest Mexico summartíð</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexican Pacific tíð</generic> diff --git a/make/data/cldr/common/main/fo_DK.xml b/make/data/cldr/common/main/fo_DK.xml index 474d72512140b..7a060794f5405 100644 --- a/make/data/cldr/common/main/fo_DK.xml +++ b/make/data/cldr/common/main/fo_DK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fo_FO.xml b/make/data/cldr/common/main/fo_FO.xml index c44b292d79204..0d8f10b4dba5d 100644 --- a/make/data/cldr/common/main/fo_FO.xml +++ b/make/data/cldr/common/main/fo_FO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr.xml b/make/data/cldr/common/main/fr.xml index 4563ac55fb64e..d5ace55980ec4 100644 --- a/make/data/cldr/common/main/fr.xml +++ b/make/data/cldr/common/main/fr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -428,7 +428,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <language type="ng">ndonga</language> <language type="nia">niha</language> <language type="niu">niuéen</language> - <language type="njo">Ao</language> + <language type="njo">ao</language> <language type="nl">néerlandais</language> <language type="nl_BE">flamand</language> <language type="nmg">ngoumba</language> @@ -1365,7 +1365,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">ordre de l’annuaire</type> <type key="collation" type="phonetic">ordre de tri phonétique</type> <type key="collation" type="pinyin">ordre pinyin</type> - <type key="collation" type="reformed">ordre réformé</type> <type key="collation" type="search">recherche générique</type> <type key="collation" type="searchjl" draft="contributed">rechercher par consonne initiale en hangeul</type> <type key="collation" type="standard">ordre de tri standard</type> @@ -3297,9 +3296,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>heure : {0}</regionFormat> <regionFormat type="daylight">{0} (heure d’été)</regionFormat> <regionFormat type="standard">{0} (heure standard)</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>temps universel coordonné</standard> @@ -3350,9 +3346,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Adelaide"> <exemplarCity>Adélaïde</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Baku"> <exemplarCity>Bakou</exemplarCity> </zone> @@ -3697,15 +3690,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Port_of_Spain"> <exemplarCity>Port-d’Espagne</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Oujgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporojie</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <short> <generic draft="unconfirmed">HT</generic> @@ -4404,11 +4391,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="unconfirmed">heure d’été de Macao</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>heure de l’île Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>heure de Magadan</generic> @@ -4448,18 +4430,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>heure de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>heure du Nord-Ouest du Mexique</generic> - <standard>heure normale du Nord-Ouest du Mexique</standard> - <daylight>heure d’été du Nord-Ouest du Mexique</daylight> - </long> - <short> - <generic draft="unconfirmed">HNOMX</generic> - <standard draft="unconfirmed">HNNOMX</standard> - <daylight draft="unconfirmed">HENOMX</daylight> - </short> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>heure du Pacifique mexicain</generic> @@ -6378,6 +6348,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <displayName count="other">dollars des Caraïbes orientales</displayName> <symbol>XCD</symbol> </currency> + <currency type="XCG"> + <displayName>florin caribéen</displayName> + <displayName count="one">florin caribéen</displayName> + <displayName count="other">florins caribéens</displayName> + </currency> <currency type="XDR"> <displayName>droit de tirage spécial</displayName> <displayName count="one">droit de tirage spécial</displayName> @@ -8027,7 +8002,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </unit> <unit type="energy-foodcalorie"> <unitPattern count="one">{0} kcal</unitPattern> - <unitPattern count="other">{0}  kcal</unitPattern> + <unitPattern count="other">{0} kcal</unitPattern> </unit> <unit type="energy-kilojoule"> <unitPattern count="one">{0} kJ</unitPattern> diff --git a/make/data/cldr/common/main/fr_BE.xml b/make/data/cldr/common/main/fr_BE.xml index 62764a0d18a7e..01effdbd41bdb 100644 --- a/make/data/cldr/common/main/fr_BE.xml +++ b/make/data/cldr/common/main/fr_BE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -16,7 +16,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="frp" draft="contributed">franco-provençal</language> <language type="goh" draft="contributed">ancien haut-allemand</language> <language type="gu" draft="contributed">gujarati</language> - <language type="njo" draft="contributed">ao</language> </languages> <territories> <territory type="GS" draft="contributed">Îles Géorgie du Sud et Sandwich du Sud</territory> diff --git a/make/data/cldr/common/main/fr_BF.xml b/make/data/cldr/common/main/fr_BF.xml index 04b86314676e7..147d05e30e08a 100644 --- a/make/data/cldr/common/main/fr_BF.xml +++ b/make/data/cldr/common/main/fr_BF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_BI.xml b/make/data/cldr/common/main/fr_BI.xml index 171c8bfe69d6d..621d814c755e4 100644 --- a/make/data/cldr/common/main/fr_BI.xml +++ b/make/data/cldr/common/main/fr_BI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_BJ.xml b/make/data/cldr/common/main/fr_BJ.xml index 4a69b82e63f6d..10ab208c34054 100644 --- a/make/data/cldr/common/main/fr_BJ.xml +++ b/make/data/cldr/common/main/fr_BJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_BL.xml b/make/data/cldr/common/main/fr_BL.xml index 1378fbf1afa57..313cdfa643933 100644 --- a/make/data/cldr/common/main/fr_BL.xml +++ b/make/data/cldr/common/main/fr_BL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_CA.xml b/make/data/cldr/common/main/fr_CA.xml index fab1d94773f66..f4a523c693922 100644 --- a/make/data/cldr/common/main/fr_CA.xml +++ b/make/data/cldr/common/main/fr_CA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -152,7 +152,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="gb2312han">ordre de tri chinois simplifié - GB2312</type> <type key="collation" type="phonebook">ordre de tri de l’annuaire</type> <type key="collation" type="pinyin">ordre de tri pinyin</type> - <type key="collation" type="reformed">ordre de tri réformé</type> <type key="collation" type="searchjl" draft="contributed">Rechercher par consonne initiale en hangeul</type> <type key="collation" type="stroke">ordre de tri des traits</type> <type key="collation" type="traditional">ordre de tri traditionnel</type> @@ -1526,13 +1525,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>heure avancée de Maurice</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>heure du Nord-Ouest du Mexique</generic> - <standard>heure normale du Nord-Ouest du Mexique</standard> - <daylight>heure avancée du Nord-Ouest du Mexique</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>heure du Pacifique mexicain</generic> @@ -2677,10 +2669,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <unitPattern count="one">{0} cal</unitPattern> <unitPattern count="other">{0} cal</unitPattern> </unit> - <unit type="energy-foodcalorie"> - <unitPattern count="one">{0} kcal</unitPattern> - <unitPattern count="other">{0} kcal</unitPattern> - </unit> <unit type="energy-kilojoule"> <unitPattern count="one">{0} kJ</unitPattern> <unitPattern count="other">{0} kJ</unitPattern> diff --git a/make/data/cldr/common/main/fr_CD.xml b/make/data/cldr/common/main/fr_CD.xml index 85c1c16bb9d55..2f522cc844f00 100644 --- a/make/data/cldr/common/main/fr_CD.xml +++ b/make/data/cldr/common/main/fr_CD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_CF.xml b/make/data/cldr/common/main/fr_CF.xml index 63196bbe9fe76..9cb186d2952e2 100644 --- a/make/data/cldr/common/main/fr_CF.xml +++ b/make/data/cldr/common/main/fr_CF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_CG.xml b/make/data/cldr/common/main/fr_CG.xml index 7a45a8376ae96..e1a3b4a716ae0 100644 --- a/make/data/cldr/common/main/fr_CG.xml +++ b/make/data/cldr/common/main/fr_CG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_CH.xml b/make/data/cldr/common/main/fr_CH.xml index aec5ac678ae88..5a168c97697a4 100644 --- a/make/data/cldr/common/main/fr_CH.xml +++ b/make/data/cldr/common/main/fr_CH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_CI.xml b/make/data/cldr/common/main/fr_CI.xml index 9ae53e7370e3a..90208c36bc648 100644 --- a/make/data/cldr/common/main/fr_CI.xml +++ b/make/data/cldr/common/main/fr_CI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_CM.xml b/make/data/cldr/common/main/fr_CM.xml index 6b087f5c2d1e8..6b436ac139c13 100644 --- a/make/data/cldr/common/main/fr_CM.xml +++ b/make/data/cldr/common/main/fr_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_DJ.xml b/make/data/cldr/common/main/fr_DJ.xml index d746ae2215291..1fc0c5046d97c 100644 --- a/make/data/cldr/common/main/fr_DJ.xml +++ b/make/data/cldr/common/main/fr_DJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_DZ.xml b/make/data/cldr/common/main/fr_DZ.xml index 64d9098329766..f807f785beea4 100644 --- a/make/data/cldr/common/main/fr_DZ.xml +++ b/make/data/cldr/common/main/fr_DZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_FR.xml b/make/data/cldr/common/main/fr_FR.xml index b9ec553a9fcf5..aa2e0e5c0ddb7 100644 --- a/make/data/cldr/common/main/fr_FR.xml +++ b/make/data/cldr/common/main/fr_FR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_GA.xml b/make/data/cldr/common/main/fr_GA.xml index f8a10a73af3af..71b364d15fa26 100644 --- a/make/data/cldr/common/main/fr_GA.xml +++ b/make/data/cldr/common/main/fr_GA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_GF.xml b/make/data/cldr/common/main/fr_GF.xml index 0ac69d581288f..5ede4983f336a 100644 --- a/make/data/cldr/common/main/fr_GF.xml +++ b/make/data/cldr/common/main/fr_GF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_GN.xml b/make/data/cldr/common/main/fr_GN.xml index 4bedd27acc770..21062f9a659ea 100644 --- a/make/data/cldr/common/main/fr_GN.xml +++ b/make/data/cldr/common/main/fr_GN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_GP.xml b/make/data/cldr/common/main/fr_GP.xml index 9daf12c795039..60d21f8a045b6 100644 --- a/make/data/cldr/common/main/fr_GP.xml +++ b/make/data/cldr/common/main/fr_GP.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_GQ.xml b/make/data/cldr/common/main/fr_GQ.xml index 3b4d9ba68701c..bd4a2e5727160 100644 --- a/make/data/cldr/common/main/fr_GQ.xml +++ b/make/data/cldr/common/main/fr_GQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_HT.xml b/make/data/cldr/common/main/fr_HT.xml index 9264d4b22d6d6..67376463b43b3 100644 --- a/make/data/cldr/common/main/fr_HT.xml +++ b/make/data/cldr/common/main/fr_HT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_KM.xml b/make/data/cldr/common/main/fr_KM.xml index 4b4929d8ed9f1..4f37867f6b872 100644 --- a/make/data/cldr/common/main/fr_KM.xml +++ b/make/data/cldr/common/main/fr_KM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_LU.xml b/make/data/cldr/common/main/fr_LU.xml index 7d105961792d3..a4b2da9658b56 100644 --- a/make/data/cldr/common/main/fr_LU.xml +++ b/make/data/cldr/common/main/fr_LU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_MA.xml b/make/data/cldr/common/main/fr_MA.xml index da0ec56f128de..9a6291f72f6ee 100644 --- a/make/data/cldr/common/main/fr_MA.xml +++ b/make/data/cldr/common/main/fr_MA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_MC.xml b/make/data/cldr/common/main/fr_MC.xml index bfd995edf61ce..b0c3a56dbd493 100644 --- a/make/data/cldr/common/main/fr_MC.xml +++ b/make/data/cldr/common/main/fr_MC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_MF.xml b/make/data/cldr/common/main/fr_MF.xml index ac2e8c17aaff9..8e8faa565f29f 100644 --- a/make/data/cldr/common/main/fr_MF.xml +++ b/make/data/cldr/common/main/fr_MF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_MG.xml b/make/data/cldr/common/main/fr_MG.xml index 773cf447a346d..24f4c01fd0374 100644 --- a/make/data/cldr/common/main/fr_MG.xml +++ b/make/data/cldr/common/main/fr_MG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_ML.xml b/make/data/cldr/common/main/fr_ML.xml index b3ce944479a58..92baa844d7bf5 100644 --- a/make/data/cldr/common/main/fr_ML.xml +++ b/make/data/cldr/common/main/fr_ML.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_MQ.xml b/make/data/cldr/common/main/fr_MQ.xml index bfae71f5147c0..b0843cdfc3fc3 100644 --- a/make/data/cldr/common/main/fr_MQ.xml +++ b/make/data/cldr/common/main/fr_MQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_MR.xml b/make/data/cldr/common/main/fr_MR.xml index 1b1b0325eae0a..c28494b741b6e 100644 --- a/make/data/cldr/common/main/fr_MR.xml +++ b/make/data/cldr/common/main/fr_MR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_MU.xml b/make/data/cldr/common/main/fr_MU.xml index 19280b8a7aeb3..a34ad049263ff 100644 --- a/make/data/cldr/common/main/fr_MU.xml +++ b/make/data/cldr/common/main/fr_MU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_NC.xml b/make/data/cldr/common/main/fr_NC.xml index a2d43be981da4..5b37c39a95b54 100644 --- a/make/data/cldr/common/main/fr_NC.xml +++ b/make/data/cldr/common/main/fr_NC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_NE.xml b/make/data/cldr/common/main/fr_NE.xml index 0a5a7940a89f1..e9326af410dbf 100644 --- a/make/data/cldr/common/main/fr_NE.xml +++ b/make/data/cldr/common/main/fr_NE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_PF.xml b/make/data/cldr/common/main/fr_PF.xml index 5586e2f523ecb..96285e8276ea0 100644 --- a/make/data/cldr/common/main/fr_PF.xml +++ b/make/data/cldr/common/main/fr_PF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_PM.xml b/make/data/cldr/common/main/fr_PM.xml index 55d4d1670d8b1..40ffe3e536e65 100644 --- a/make/data/cldr/common/main/fr_PM.xml +++ b/make/data/cldr/common/main/fr_PM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_RE.xml b/make/data/cldr/common/main/fr_RE.xml index 4f33c169aae4b..f86d81a11e66f 100644 --- a/make/data/cldr/common/main/fr_RE.xml +++ b/make/data/cldr/common/main/fr_RE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_RW.xml b/make/data/cldr/common/main/fr_RW.xml index 82baf8660ed0f..8040bdfa1624c 100644 --- a/make/data/cldr/common/main/fr_RW.xml +++ b/make/data/cldr/common/main/fr_RW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_SC.xml b/make/data/cldr/common/main/fr_SC.xml index ea5cc52cd5787..c4cb4cf1788df 100644 --- a/make/data/cldr/common/main/fr_SC.xml +++ b/make/data/cldr/common/main/fr_SC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_SN.xml b/make/data/cldr/common/main/fr_SN.xml index 124a6fc3d40ec..89343236f3f42 100644 --- a/make/data/cldr/common/main/fr_SN.xml +++ b/make/data/cldr/common/main/fr_SN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_SY.xml b/make/data/cldr/common/main/fr_SY.xml index 6551fe91d4a42..1dab23168f1e3 100644 --- a/make/data/cldr/common/main/fr_SY.xml +++ b/make/data/cldr/common/main/fr_SY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_TD.xml b/make/data/cldr/common/main/fr_TD.xml index 3c7a3996d34cf..eb5ab733d9877 100644 --- a/make/data/cldr/common/main/fr_TD.xml +++ b/make/data/cldr/common/main/fr_TD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_TG.xml b/make/data/cldr/common/main/fr_TG.xml index 1d0e146987323..a01e06a4909e8 100644 --- a/make/data/cldr/common/main/fr_TG.xml +++ b/make/data/cldr/common/main/fr_TG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_TN.xml b/make/data/cldr/common/main/fr_TN.xml index 7b7beb64b29af..fed2ed7807f56 100644 --- a/make/data/cldr/common/main/fr_TN.xml +++ b/make/data/cldr/common/main/fr_TN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_VU.xml b/make/data/cldr/common/main/fr_VU.xml index 6299c4b0c89a9..f9eb38f20a368 100644 --- a/make/data/cldr/common/main/fr_VU.xml +++ b/make/data/cldr/common/main/fr_VU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_WF.xml b/make/data/cldr/common/main/fr_WF.xml index 8b3ed1a96766b..e644869fdc3b8 100644 --- a/make/data/cldr/common/main/fr_WF.xml +++ b/make/data/cldr/common/main/fr_WF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fr_YT.xml b/make/data/cldr/common/main/fr_YT.xml index 43842e13fac56..134c877e30c3b 100644 --- a/make/data/cldr/common/main/fr_YT.xml +++ b/make/data/cldr/common/main/fr_YT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/frr.xml b/make/data/cldr/common/main/frr.xml index 20fbfe261d8c3..71e59e401e466 100644 --- a/make/data/cldr/common/main/frr.xml +++ b/make/data/cldr/common/main/frr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1900,15 +1900,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Asia/Taipei"> <exemplarCity draft="unconfirmed">Taipee</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="unconfirmed">Uschhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity draft="unconfirmed">Kiew</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">Saporischja</exemplarCity> - </zone> <zone type="America/North_Dakota/Beulah"> <exemplarCity draft="unconfirmed">Beulah, Nuurd Dakota</exemplarCity> </zone> @@ -2433,11 +2427,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">Lord Howe Somertidj</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">Macquarie Eilun Tidj</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="unconfirmed">Magadan Tidj</generic> @@ -2477,13 +2466,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard draft="unconfirmed">Mawson Tidj</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">Nuurdwaast Meksiko Tidj</generic> - <standard draft="unconfirmed">Nuurdwaast Meksiko Standard Tidj</standard> - <daylight draft="unconfirmed">Nuurdwaast Meksiko Somertidj</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">Meksiko Pasiifik Tidj</generic> diff --git a/make/data/cldr/common/main/frr_DE.xml b/make/data/cldr/common/main/frr_DE.xml index e5cebfe7e3ea2..e4dd611312f6e 100644 --- a/make/data/cldr/common/main/frr_DE.xml +++ b/make/data/cldr/common/main/frr_DE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fur.xml b/make/data/cldr/common/main/fur.xml index ec137e51b1239..5f2858e9bd092 100644 --- a/make/data/cldr/common/main/fur.xml +++ b/make/data/cldr/common/main/fur.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fur_IT.xml b/make/data/cldr/common/main/fur_IT.xml index cf04181644d45..fcc1dfb18b4c6 100644 --- a/make/data/cldr/common/main/fur_IT.xml +++ b/make/data/cldr/common/main/fur_IT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/fy.xml b/make/data/cldr/common/main/fy.xml index b83df95b056a2..1e47da09297c2 100644 --- a/make/data/cldr/common/main/fy.xml +++ b/make/data/cldr/common/main/fy.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2308,12 +2308,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Europe/Istanbul"> <exemplarCity draft="contributed">Istanboel</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="contributed">Oezjhorod</exemplarCity> - </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="contributed">Zaporizja</exemplarCity> - </zone> <zone type="America/North_Dakota/Beulah"> <exemplarCity draft="contributed">Beulah, Noard-Dakota</exemplarCity> </zone> @@ -2900,11 +2894,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="contributed">Macause simmertiid</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="contributed">Macquarie-eilânske tiid</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="contributed">Magadan-tiid</generic> diff --git a/make/data/cldr/common/main/fy_NL.xml b/make/data/cldr/common/main/fy_NL.xml index 5cbe6c0bfc6b3..db5f697c8a375 100644 --- a/make/data/cldr/common/main/fy_NL.xml +++ b/make/data/cldr/common/main/fy_NL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ga.xml b/make/data/cldr/common/main/ga.xml index d1402226e4bf5..a4ee7b2efbd08 100644 --- a/make/data/cldr/common/main/ga.xml +++ b/make/data/cldr/common/main/ga.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1069,7 +1069,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="gb2312han">Ord sórtála Síneach simplithe - GB 2312</type> <type key="collation" type="phonebook">Ord sórtála an eolaire teileafóin</type> <type key="collation" type="pinyin">Ord sórtála pinyin</type> - <type key="collation" type="reformed">Ord Sórtála Athfhoirmithe</type> <type key="collation" type="search">Cuardach Ilfhóinteach</type> <type key="collation" type="searchjl">Cuardach de réir Consan Tosaigh Hangul</type> <type key="collation" type="standard">Ord Sórtála Caighdeánach</type> @@ -2480,9 +2479,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <timeZoneNames> <gmtFormat>MAG{0}</gmtFormat> <gmtZeroFormat>MAG</gmtZeroFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Am Uilíoch Lárnach</standard> @@ -2512,9 +2508,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Vín</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Antarctica/Macquarie"> <exemplarCity>Mac Guaire</exemplarCity> </zone> @@ -3534,11 +3527,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Am Samhraidh Mhacao</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Am Oileán Mhic Guaire</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Am Mhagadan</generic> @@ -3578,13 +3566,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Am Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Am Iarthuaisceart Mheicsiceo</generic> - <standard>Am Caighdeánach Iarthuaisceart Mheicsiceo</standard> - <daylight>Am Samhraidh Iarthuaisceart Mheicsiceo</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Am Meicsiceach an Aigéin Chiúin</generic> diff --git a/make/data/cldr/common/main/ga_GB.xml b/make/data/cldr/common/main/ga_GB.xml index 4c141f681aed7..af57908d74718 100644 --- a/make/data/cldr/common/main/ga_GB.xml +++ b/make/data/cldr/common/main/ga_GB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ga_IE.xml b/make/data/cldr/common/main/ga_IE.xml index 8fde2cd1280b3..3a7250e97632e 100644 --- a/make/data/cldr/common/main/ga_IE.xml +++ b/make/data/cldr/common/main/ga_IE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gaa.xml b/make/data/cldr/common/main/gaa.xml index a48870a699aaa..83ffd48e86e85 100644 --- a/make/data/cldr/common/main/gaa.xml +++ b/make/data/cldr/common/main/gaa.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -900,9 +900,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Broken_Hill"> <exemplarCity draft="unconfirmed">Ŋmeŋme Ni Ekumɔ</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity draft="unconfirmed">Kurrie</exemplarCity> - </zone> <zone type="Antarctica/Macquarie"> <exemplarCity draft="unconfirmed">Makwarie</exemplarCity> </zone> @@ -927,24 +924,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity draft="unconfirmed">Kreston</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity draft="unconfirmed">Kakla Wuɔfɔ</exemplarCity> - </zone> <zone type="America/Swift_Current"> <exemplarCity draft="unconfirmed">Swift Karɛnt</exemplarCity> </zone> <zone type="America/Cambridge_Bay"> <exemplarCity draft="unconfirmed">Kambridge Ŋshɔnine Bibioo</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity draft="unconfirmed">Faa Ni Nɛɔ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity draft="unconfirmed">Rankin Ŋshɔnine</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity draft="unconfirmed">Sarawa Ŋshɔnine Bibioo</exemplarCity> - </zone> <zone type="America/Iqaluit"> <exemplarCity draft="unconfirmed">Ikaluit</exemplarCity> </zone> @@ -1276,13 +1264,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">Mauritius Be Yɛ Latsa Beiaŋ</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">Meziko Kooyi-Anaigbɛ Be</generic> - <standard draft="unconfirmed">Meziko Kooyi-Anaigbɛ Be Yɛ Fɛi Beiaŋ</standard> - <daylight draft="unconfirmed">Meziko Kooyi-Anaigbɛ Be Yɛ Latsa Beiaŋ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">Meziko Pasifik Be</generic> diff --git a/make/data/cldr/common/main/gaa_GH.xml b/make/data/cldr/common/main/gaa_GH.xml index 94f9d0dd6d5dd..847159292530b 100644 --- a/make/data/cldr/common/main/gaa_GH.xml +++ b/make/data/cldr/common/main/gaa_GH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gd.xml b/make/data/cldr/common/main/gd.xml index 5c8144a7ea109..fb8f5039aa227 100644 --- a/make/data/cldr/common/main/gd.xml +++ b/make/data/cldr/common/main/gd.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1321,7 +1321,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="gb2312han">Òrdugh seòrsachaidh na Sìnise Simplichte - GB2312</type> <type key="collation" type="phonebook">Òrdugh seòrsachaidh nan leabhraichean-fòn</type> <type key="collation" type="pinyin">Òrdugh seòrsachaidh Pinyin</type> - <type key="collation" type="reformed">Òrdugh seòrsachaidh ath-leasaichte</type> <type key="collation" type="search">Lorg coitcheann</type> <type key="collation" type="searchjl">Lorg leis a’ chiad chonnrag Hangul</type> <type key="collation" type="standard">Òrdugh seòrsachaidh stannardach</type> @@ -3240,9 +3239,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <timeZoneNames> <regionFormat type="daylight">Tìde samhraidh: {0}</regionFormat> <regionFormat type="standard">Bun-àm: {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Àm Uile-choitcheann Co-òrdanaichte</standard> @@ -3269,9 +3265,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Cordoba"> <exemplarCity>Córdoba</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity>Sidni</exemplarCity> </zone> @@ -3332,9 +3325,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Rankin_Inlet"> <exemplarCity>Kangiqliniq</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pangniqtuuq</exemplarCity> - </zone> <zone type="America/Glace_Bay"> <exemplarCity>Glasbaidh</exemplarCity> </zone> @@ -4278,11 +4268,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Tìde samhraidh Macàthu</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Àm Eilein MhicGuaire</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Àm Magadan</generic> @@ -4322,13 +4307,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Àm Mhawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Àm Mheagsago an Iar-thuath</generic> - <standard>Bun-àm Mheagsago an Iar-thuath</standard> - <daylight>Tìde samhraidh Mheagsago an Iar-thuath</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Àm a’ Chuain Sèimh Mheagsago</generic> diff --git a/make/data/cldr/common/main/gd_GB.xml b/make/data/cldr/common/main/gd_GB.xml index 8ff9f1b50d3a0..1b81536ed8083 100644 --- a/make/data/cldr/common/main/gd_GB.xml +++ b/make/data/cldr/common/main/gd_GB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gez.xml b/make/data/cldr/common/main/gez.xml index 30774449c2379..bb405dabb874e 100644 --- a/make/data/cldr/common/main/gez.xml +++ b/make/data/cldr/common/main/gez.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gez_ER.xml b/make/data/cldr/common/main/gez_ER.xml index c8df591a28ec8..f5b9ae7497e8c 100644 --- a/make/data/cldr/common/main/gez_ER.xml +++ b/make/data/cldr/common/main/gez_ER.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gez_ET.xml b/make/data/cldr/common/main/gez_ET.xml index 84c9083021c9d..c9250811ec812 100644 --- a/make/data/cldr/common/main/gez_ET.xml +++ b/make/data/cldr/common/main/gez_ET.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gl.xml b/make/data/cldr/common/main/gl.xml index 3666f14c54088..cd29e464b5072 100644 --- a/make/data/cldr/common/main/gl.xml +++ b/make/data/cldr/common/main/gl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -911,7 +911,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">orde de clasificación da guía telefónica</type> <type key="collation" type="phonetic">Orde de clasificación fonética</type> <type key="collation" type="pinyin">Orde de clasificación pinyin</type> - <type key="collation" type="reformed">Criterio de ordenación reformado</type> <type key="collation" type="search">busca de carácter xeral</type> <type key="collation" type="searchjl">Clasificar por consonante inicial hangul</type> <type key="collation" type="standard">criterio de ordenación estándar</type> @@ -2058,9 +2057,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>hora de: {0}</regionFormat> <regionFormat type="daylight">hora de verán de: {0}</regionFormat> <regionFormat type="standard">hora estándar de: {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>hora universal coordinada</standard> @@ -2102,9 +2098,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Adelaide"> <exemplarCity>Adelaida</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity>Sidney</exemplarCity> </zone> @@ -2480,18 +2473,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Port_of_Spain"> <exemplarCity>Porto España</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzghorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kíiv</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Simferópol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporizhia</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulú</exemplarCity> </zone> @@ -3075,11 +3062,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>hora de verán de Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>hora da Illa Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>hora de Magadan</generic> @@ -3119,13 +3101,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>hora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>hora do noroeste de México</generic> - <standard>hora estándar do noroeste de México</standard> - <daylight>hora de verán do noroeste de México</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>hora do Pacífico mexicano</generic> diff --git a/make/data/cldr/common/main/gl_ES.xml b/make/data/cldr/common/main/gl_ES.xml index d90519bd14d80..18cb43c3cec9e 100644 --- a/make/data/cldr/common/main/gl_ES.xml +++ b/make/data/cldr/common/main/gl_ES.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gn.xml b/make/data/cldr/common/main/gn.xml index 9b385539ee73a..a1a3df585dbf4 100644 --- a/make/data/cldr/common/main/gn.xml +++ b/make/data/cldr/common/main/gn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gn_PY.xml b/make/data/cldr/common/main/gn_PY.xml index 03fbf31e5f81f..87af65ad1c6b2 100644 --- a/make/data/cldr/common/main/gn_PY.xml +++ b/make/data/cldr/common/main/gn_PY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gsw.xml b/make/data/cldr/common/main/gsw.xml index ade9ff1fd0595..0047e0320281b 100644 --- a/make/data/cldr/common/main/gsw.xml +++ b/make/data/cldr/common/main/gsw.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1701,15 +1701,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Daressalam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uschgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiew</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Saporischja</exemplarCity> - </zone> <zone type="America/Indiana/Knox"> <exemplarCity>Knox</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/gsw_CH.xml b/make/data/cldr/common/main/gsw_CH.xml index 8546541225708..8740af7b759b9 100644 --- a/make/data/cldr/common/main/gsw_CH.xml +++ b/make/data/cldr/common/main/gsw_CH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gsw_FR.xml b/make/data/cldr/common/main/gsw_FR.xml index a1c1009ee47da..d90c3ea2e51b1 100644 --- a/make/data/cldr/common/main/gsw_FR.xml +++ b/make/data/cldr/common/main/gsw_FR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gsw_LI.xml b/make/data/cldr/common/main/gsw_LI.xml index b827f1bd2381d..e7eba946b7191 100644 --- a/make/data/cldr/common/main/gsw_LI.xml +++ b/make/data/cldr/common/main/gsw_LI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gu.xml b/make/data/cldr/common/main/gu.xml index 0c4eaad1ccea4..4f33a197050cb 100644 --- a/make/data/cldr/common/main/gu.xml +++ b/make/data/cldr/common/main/gu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1111,7 +1111,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">ફોનબુક અનુક્મ</type> <type key="collation" type="phonetic">ધ્વન્યાત્મક સૉર્ટ ક્રમ</type> <type key="collation" type="pinyin">પિનયિન અનુક્મ</type> - <type key="collation" type="reformed">પૂનર્સ્વરૂપિત અનુક્મ</type> <type key="collation" type="search">સામાન્ય-ઉદ્દેશ શોધ</type> <type key="collation" type="searchjl">હંગુલ પ્રારંભિક વ્યંજન દ્વારા શોધો</type> <type key="collation" type="standard">માનક સૉર્ટ ક્રમ</type> @@ -2191,9 +2190,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} સમય</regionFormat> <regionFormat type="daylight">{0} દિવસ સમય</regionFormat> <regionFormat type="standard">{0} માનક સમય</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>સાંતા ઇસાબેલ</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>સંકલિત યુનિવર્સલ સમય</standard> @@ -2316,9 +2312,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>મેલબોર્ન</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ક્યુરી</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>હોબાર્ટ</exemplarCity> </zone> @@ -2472,9 +2465,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ક્રેસ્ટન</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>યેલોનાઇફ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>એડમેન્ટન</exemplarCity> </zone> @@ -2493,30 +2483,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>રેઝોલૂટ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>રેઇની નદી</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>રેંકિન ઇન્લેટ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>એટિકોકેન</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>થંડર બે</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>નિપિગોન</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ટોરન્ટો</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ઇકાલુઇત</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>પેંગનિરતુંગ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>મોન્કટન</exemplarCity> </zone> @@ -3330,18 +3308,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>દાર એસ સલામ</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ઉઝ્ગોરોદ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>કૈવ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>સિમ્ફેરોપોલ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>જેપોરોઝિયે</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>કમ્પાલા</exemplarCity> </zone> @@ -3360,9 +3332,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>હોનોલુલુ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>જોહ્નસ્ટોન</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>એન્કોરેજ</exemplarCity> </zone> @@ -4060,11 +4029,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>મકાઉ ગ્રીષ્મ સમય</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>મેક્વાયર આઇલેન્ડ સમય</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>મગાડન સમય</generic> @@ -4104,13 +4068,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>મોસન સમય</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>ઉત્તરપશ્ચિમ મેક્સિકો સમય</generic> - <standard>ઉત્તરપશ્ચિમ મેક્સિકો માનક સમય</standard> - <daylight>ઉત્તરપશ્ચિમ મેક્સિકો દિવસ સમય</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>મેક્સિકન પેસિફિક સમય</generic> diff --git a/make/data/cldr/common/main/gu_IN.xml b/make/data/cldr/common/main/gu_IN.xml index f79d6827fa51d..d2f77872e1105 100644 --- a/make/data/cldr/common/main/gu_IN.xml +++ b/make/data/cldr/common/main/gu_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/guz.xml b/make/data/cldr/common/main/guz.xml index 81031de1e734e..6e2b253a5d359 100644 --- a/make/data/cldr/common/main/guz.xml +++ b/make/data/cldr/common/main/guz.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/guz_KE.xml b/make/data/cldr/common/main/guz_KE.xml index f18f51b51adbb..f7c8d95d03dad 100644 --- a/make/data/cldr/common/main/guz_KE.xml +++ b/make/data/cldr/common/main/guz_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gv.xml b/make/data/cldr/common/main/gv.xml index 7644a2aec3067..344a82417c2be 100644 --- a/make/data/cldr/common/main/gv.xml +++ b/make/data/cldr/common/main/gv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/gv_IM.xml b/make/data/cldr/common/main/gv_IM.xml index f684c49d148a8..6a8d0ac45cc35 100644 --- a/make/data/cldr/common/main/gv_IM.xml +++ b/make/data/cldr/common/main/gv_IM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ha.xml b/make/data/cldr/common/main/ha.xml index edb9c6d4fa16e..554c18da4279a 100644 --- a/make/data/cldr/common/main/ha.xml +++ b/make/data/cldr/common/main/ha.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2097,11 +2097,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Lokacin Rana na Vote Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Lokacin Macquarie Island</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Lokacin Magadan</generic> @@ -2141,13 +2136,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Lokacin Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Lokacin Arewa Maso Yammacin Mekziko</generic> - <standard>Tsayayyen Lokacin Arewa Maso Yammacin Mekziko</standard> - <daylight>Lokacin Rana na Arewa Maso Yammacin Mekziko</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Lokacin Mekziko Pacific</generic> diff --git a/make/data/cldr/common/main/ha_Arab.xml b/make/data/cldr/common/main/ha_Arab.xml index 99c65685221d8..06b6eafd72f14 100644 --- a/make/data/cldr/common/main/ha_Arab.xml +++ b/make/data/cldr/common/main/ha_Arab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ha_Arab_NG.xml b/make/data/cldr/common/main/ha_Arab_NG.xml index d46dbd178e41a..de44776f65711 100644 --- a/make/data/cldr/common/main/ha_Arab_NG.xml +++ b/make/data/cldr/common/main/ha_Arab_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ha_Arab_SD.xml b/make/data/cldr/common/main/ha_Arab_SD.xml index 6c1c8acb3482b..d36a89d5e5f0a 100644 --- a/make/data/cldr/common/main/ha_Arab_SD.xml +++ b/make/data/cldr/common/main/ha_Arab_SD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ha_GH.xml b/make/data/cldr/common/main/ha_GH.xml index 2d08c6b404540..f93141c71b434 100644 --- a/make/data/cldr/common/main/ha_GH.xml +++ b/make/data/cldr/common/main/ha_GH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ha_NE.xml b/make/data/cldr/common/main/ha_NE.xml index 53191fe47969b..68391655af955 100644 --- a/make/data/cldr/common/main/ha_NE.xml +++ b/make/data/cldr/common/main/ha_NE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ha_NG.xml b/make/data/cldr/common/main/ha_NG.xml index eac780a4c92c5..1a42e43793a71 100644 --- a/make/data/cldr/common/main/ha_NG.xml +++ b/make/data/cldr/common/main/ha_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/haw.xml b/make/data/cldr/common/main/haw.xml index 87a71e5c1461d..dadea2060717b 100644 --- a/make/data/cldr/common/main/haw.xml +++ b/make/data/cldr/common/main/haw.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/haw_US.xml b/make/data/cldr/common/main/haw_US.xml index fc32a964cddcc..5a37f908c1c47 100644 --- a/make/data/cldr/common/main/haw_US.xml +++ b/make/data/cldr/common/main/haw_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/he.xml b/make/data/cldr/common/main/he.xml index fc7396f4f8004..d64c80493ef94 100644 --- a/make/data/cldr/common/main/he.xml +++ b/make/data/cldr/common/main/he.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1253,7 +1253,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">מיון ספר טלפונים</type> <type key="collation" type="phonetic">סדר מיון פונטי</type> <type key="collation" type="pinyin">מיון פיניין</type> - <type key="collation" type="reformed">סדר מיון מתוקן</type> <type key="collation" type="search">חיפוש למטרה כללית</type> <type key="collation" type="searchjl" draft="contributed">חפש לפי העיצור הראשון באותיות הנגול</type> <type key="collation" type="standard">סדר מיון רגיל</type> @@ -2875,9 +2874,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>שעון {0}</regionFormat> <regionFormat type="daylight">שעון {0} (קיץ)</regionFormat> <regionFormat type="standard">שעון {0} (חורף)</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>סנטה איזבל</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>זמן אוניברסלי מתואם</standard> @@ -3000,9 +2996,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>מלבורן</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>קרי</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>הוברט</exemplarCity> </zone> @@ -3156,9 +3149,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>קרסטון</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ילונייף</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>אדמונטון</exemplarCity> </zone> @@ -3177,30 +3167,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>רזולוט</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>רייני ריבר</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>רנקין אינלט</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>אטיקוקן</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ת׳אנדר ביי</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ניפיגון</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>טורונטו</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>איקלואיט</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>פנגנירטונג</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>מונקטון</exemplarCity> </zone> @@ -4014,18 +3992,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>דאר א-סלאם</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>אוז׳הורוד</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>קייב</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>סימפרופול</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>זפורוז׳יה</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>קמפאלה</exemplarCity> </zone> @@ -4044,9 +4016,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>הונולולו</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ג׳ונסטון</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>אנקורג׳</exemplarCity> </zone> @@ -4729,11 +4698,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">שעון קיץ מקאו</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>שעון מקווארי</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>שעון מגדן</generic> @@ -4773,13 +4737,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>שעון מאוסון</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>שעון צפון-מערב מקסיקו</generic> - <standard>שעון צפון-מערב מקסיקו (חורף)</standard> - <daylight>שעון צפון-מערב מקסיקו (קיץ)</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>שעון מערב מקסיקו</generic> diff --git a/make/data/cldr/common/main/he_IL.xml b/make/data/cldr/common/main/he_IL.xml index 0040819d8eb57..41be0ec5ddb25 100644 --- a/make/data/cldr/common/main/he_IL.xml +++ b/make/data/cldr/common/main/he_IL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hi.xml b/make/data/cldr/common/main/hi.xml index 533d1fd4fb39e..33facd56c3b86 100644 --- a/make/data/cldr/common/main/hi.xml +++ b/make/data/cldr/common/main/hi.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1116,7 +1116,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">फ़ोनबुक वर्गीकरण क्रम</type> <type key="collation" type="phonetic">ध्वन्यात्मक वर्गीकरण क्रम</type> <type key="collation" type="pinyin">पिनयिन वर्गीकरण क्रम</type> - <type key="collation" type="reformed">संशोधित वर्गीकरण क्रम</type> <type key="collation" type="search">सामान्य-उद्देश्य खोज</type> <type key="collation" type="searchjl" draft="contributed">हांगुल आरंभिक व्‍यंजन द्वारा खोजें</type> <type key="collation" type="standard">मानक वर्गीकरण क्रम</type> @@ -2534,9 +2533,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} समय</regionFormat> <regionFormat type="daylight">{0} डेलाइट समय</regionFormat> <regionFormat type="standard">{0} मानक समय</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>सांता इसाबेल</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>समन्वित वैश्विक समय</standard> @@ -2659,9 +2655,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>मेलबोर्न</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>क्यूरी</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>होबार्ट</exemplarCity> </zone> @@ -2815,9 +2808,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>क्रेस्टन</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>येलोनाइफ़</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>एडमंटन</exemplarCity> </zone> @@ -2836,30 +2826,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>रिसोल्यूट</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>रेनी नदी</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>रेंकिन इनलेट</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>अटिकोकान</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>थंडर खाड़ी</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>निपिगन</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>टोरंटो</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>इकालुईट</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>पांगनिर्टंग</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>मोंकटन</exemplarCity> </zone> @@ -3673,18 +3651,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>दार अस सलाम</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>अज़्गोरोद</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>कीव</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>सिम्फ़ेरोपोल</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ज़ैपोरोज़ाई</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>कंपाला</exemplarCity> </zone> @@ -3708,9 +3680,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </short> <exemplarCity>होनोलुलु</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>जॉनस्टन</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>एंकरेज</exemplarCity> </zone> @@ -4363,11 +4332,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>लॉर्ड होवे डेलाइट समय</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>मक्वारी द्वीप समय</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>मागादान समय</generic> @@ -4407,13 +4371,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>माव्सन समय</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>उत्तर पश्चिमी मेक्सिको समय</generic> - <standard>उत्तर पश्चिमी मेक्सिको मानक समय</standard> - <daylight>उत्तर पश्चिमी मेक्सिको डेलाइट समय</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>मेक्सिकन प्रशांत समय</generic> diff --git a/make/data/cldr/common/main/hi_IN.xml b/make/data/cldr/common/main/hi_IN.xml index f950c7dc57383..20ee8e9fef710 100644 --- a/make/data/cldr/common/main/hi_IN.xml +++ b/make/data/cldr/common/main/hi_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hi_Latn.xml b/make/data/cldr/common/main/hi_Latn.xml index d2fd01e2e3ead..935ec8e26b211 100644 --- a/make/data/cldr/common/main/hi_Latn.xml +++ b/make/data/cldr/common/main/hi_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) the U.S. and other countries. CLDR data files are interpreted according to @@ -48,6 +48,7 @@ annotations. <territory type="BL">St. Barthelemy</territory> <territory type="CI">Cote d’Ivoire</territory> <territory type="CW">Curacao</territory> + <territory type="IN">Bharat</territory> <territory type="KN">St. Kitts & Nevis</territory> <territory type="LC">St. Lucia</territory> <territory type="MF">St. Martin</territory> @@ -88,7 +89,6 @@ annotations. <type key="colCaseLevel" type="yes">Case sensitive sorting karein</type> <type key="collation" type="compat">Compatibility ke liye, picchla sort order</type> <type key="collation" type="dictionary">Dictionary kaa sort order</type> - <type key="collation" type="reformed">Reform kiya gaya Sort Order</type> <type key="collation" type="searchjl">Hangul initial consonant se search karein</type> <type key="colNormalization" type="no">Bina normalization ke sort karein</type> <type key="colNormalization" type="yes">Sort Unicode Normalized</type> @@ -489,14 +489,14 @@ annotations. <intervalFormatItem id="GyMMMd"> <greatestDifference id="d">G y MMM d–d</greatestDifference> <greatestDifference id="G">G y MMM d – G y MMM d</greatestDifference> - <greatestDifference id="M">G y MMM d  – MMM d</greatestDifference> - <greatestDifference id="y">G y MMM d –  y d MMM</greatestDifference> + <greatestDifference id="M">G y MMM d – MMM d</greatestDifference> + <greatestDifference id="y">G y MMM d – y d MMM</greatestDifference> </intervalFormatItem> <intervalFormatItem id="GyMMMEd"> <greatestDifference id="d">G y MMM d, E – MMM d, E</greatestDifference> - <greatestDifference id="G">G y MMM d, E –  G y MMM d, E</greatestDifference> - <greatestDifference id="M">G y MMM d, E –  MMM d, E</greatestDifference> - <greatestDifference id="y">G y MMM d, E –  y MMM d, E</greatestDifference> + <greatestDifference id="G">G y MMM d, E – G y MMM d, E</greatestDifference> + <greatestDifference id="M">G y MMM d, E – MMM d, E</greatestDifference> + <greatestDifference id="y">G y MMM d, E – y MMM d, E</greatestDifference> </intervalFormatItem> <intervalFormatItem id="H"> <greatestDifference id="H">HH – HH</greatestDifference> @@ -1234,9 +1234,6 @@ annotations. <zone type="Africa/Sao_Tome"> <exemplarCity>Sao Tome</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzhgorod</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <short> <generic>HST</generic> diff --git a/make/data/cldr/common/main/hi_Latn_IN.xml b/make/data/cldr/common/main/hi_Latn_IN.xml index 56c104ce304c8..c3ab4c4cf5682 100644 --- a/make/data/cldr/common/main/hi_Latn_IN.xml +++ b/make/data/cldr/common/main/hi_Latn_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hnj.xml b/make/data/cldr/common/main/hnj.xml index 671bf4da2a6da..6492ca8dc355a 100644 --- a/make/data/cldr/common/main/hnj.xml +++ b/make/data/cldr/common/main/hnj.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hnj_Hmnp.xml b/make/data/cldr/common/main/hnj_Hmnp.xml index 0572f3ad943ad..edf19bb8cdcc4 100644 --- a/make/data/cldr/common/main/hnj_Hmnp.xml +++ b/make/data/cldr/common/main/hnj_Hmnp.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hnj_Hmnp_US.xml b/make/data/cldr/common/main/hnj_Hmnp_US.xml index f49ef827699ce..34ff522c1fe3a 100644 --- a/make/data/cldr/common/main/hnj_Hmnp_US.xml +++ b/make/data/cldr/common/main/hnj_Hmnp_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hr.xml b/make/data/cldr/common/main/hr.xml index 3fe00831421ef..f028c3424bf0d 100644 --- a/make/data/cldr/common/main/hr.xml +++ b/make/data/cldr/common/main/hr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1180,7 +1180,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">razvrstavanje po abecedi</type> <type key="collation" type="phonetic">fonetsko razvrstavanje</type> <type key="collation" type="pinyin">pinyin razvrstavanje</type> - <type key="collation" type="reformed">reformirano razvrstavanje</type> <type key="collation" type="search">općenito pretraživanje</type> <type key="collation" type="searchjl" draft="contributed">Pretraživanje po početnom suglasniku hangula</type> <type key="collation" type="standard">standardno razvrstavanje</type> @@ -2859,9 +2858,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <hourFormat>+HH:mm; -HH:mm</hourFormat> <regionFormat type="daylight">{0}, ljetno vrijeme</regionFormat> <regionFormat type="standard">{0}, standardno vrijeme</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>koordinirano svjetsko vrijeme</standard> @@ -2885,9 +2881,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Beč</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Brussels"> <exemplarCity>Bruxelles</exemplarCity> </zone> @@ -3162,18 +3155,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Ashgabat"> <exemplarCity>Ašgabat</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kijev</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Simferopolj</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporožje</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3783,11 +3770,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">ljetno makaosko vrijeme</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>vrijeme otoka Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>magadansko vrijeme</generic> @@ -3827,13 +3809,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>mawsonsko vrijeme</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>sjeverozapadno meksičko vrijeme</generic> - <standard>sjeverozapadno meksičko standardno vrijeme</standard> - <daylight>sjeverozapadno meksičko ljetno vrijeme</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>meksičko pacifičko vrijeme</generic> diff --git a/make/data/cldr/common/main/hr_BA.xml b/make/data/cldr/common/main/hr_BA.xml index 05d821d685f7e..93895ec431fbf 100644 --- a/make/data/cldr/common/main/hr_BA.xml +++ b/make/data/cldr/common/main/hr_BA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hr_HR.xml b/make/data/cldr/common/main/hr_HR.xml index b0239a0cc51bc..34f898cb40d2d 100644 --- a/make/data/cldr/common/main/hr_HR.xml +++ b/make/data/cldr/common/main/hr_HR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hsb.xml b/make/data/cldr/common/main/hsb.xml index dbb0a470f2fe3..25fa9ffc62b54 100644 --- a/make/data/cldr/common/main/hsb.xml +++ b/make/data/cldr/common/main/hsb.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2598,15 +2598,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Daressalam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiew</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporižžja</exemplarCity> - </zone> <zone type="America/North_Dakota/Beulah"> <exemplarCity>Beulah, Sewjerna Dakota</exemplarCity> </zone> @@ -3146,11 +3140,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>lětni čas kupy Lord-Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>čas kupy Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadanski čas</generic> @@ -3190,13 +3179,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mawsonski čas</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>mexiski sewjerozapadny čas</generic> - <standard>mexiski sewjerozapadny standardny čas</standard> - <daylight>mexiski sewjerozapadny lětni čas</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>mexiski pacifiski čas</generic> diff --git a/make/data/cldr/common/main/hsb_DE.xml b/make/data/cldr/common/main/hsb_DE.xml index e09bb1ca4d92d..76e15d557b540 100644 --- a/make/data/cldr/common/main/hsb_DE.xml +++ b/make/data/cldr/common/main/hsb_DE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hu.xml b/make/data/cldr/common/main/hu.xml index 440cb73512e18..878aeb9a43901 100644 --- a/make/data/cldr/common/main/hu.xml +++ b/make/data/cldr/common/main/hu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1179,7 +1179,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Telefonkönyv sorrend</type> <type key="collation" type="phonetic">Fonetikus rendezési sorrend</type> <type key="collation" type="pinyin">Pinyin sorrend</type> - <type key="collation" type="reformed">Átalakított rendezési elv</type> <type key="collation" type="search">Általános célú keresés</type> <type key="collation" type="searchjl" draft="contributed">Keresés hangul kezdő mássalhangzó szerint</type> <type key="collation" type="standard">Normál rendezési sorrend</type> @@ -2356,9 +2355,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} idő</regionFormat> <regionFormat type="daylight">{0} nyári idő</regionFormat> <regionFormat type="standard">{0} zónaidő</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>koordinált világidő</standard> @@ -2391,9 +2387,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Bécs</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Sarajevo"> <exemplarCity>Szarajevó</exemplarCity> </zone> @@ -2839,18 +2832,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar es-Salaam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ungvár</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kijev</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Szimferopol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporizzsja</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity>Midway-szigetek</exemplarCity> </zone> @@ -3472,11 +3459,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Macaui nyári idő</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>macquarie-szigeti téli idő</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>magadáni idő</generic> @@ -3516,13 +3498,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>mawsoni idő</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>északnyugat-mexikói idő</generic> - <standard>északnyugat-mexikói zónaidő</standard> - <daylight>északnyugat-mexikói nyári idő</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>mexikói csendes-óceáni idő</generic> diff --git a/make/data/cldr/common/main/hu_HU.xml b/make/data/cldr/common/main/hu_HU.xml index e710cd4262d72..30feb772c9a12 100644 --- a/make/data/cldr/common/main/hu_HU.xml +++ b/make/data/cldr/common/main/hu_HU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/hy.xml b/make/data/cldr/common/main/hy.xml index b3da8cbdd0903..91ecf144eaf59 100644 --- a/make/data/cldr/common/main/hy.xml +++ b/make/data/cldr/common/main/hy.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2000,9 +2000,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </field> </fields> <timeZoneNames> - <zone type="America/Santa_Isabel"> - <exemplarCity>Սանտա Իզաբել</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Համաշխարհային կոորդինացված ժամանակ</standard> @@ -2125,9 +2122,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Մելբուրն</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Քերի</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Հոբարտ</exemplarCity> </zone> @@ -2281,9 +2275,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Քրեսթոն</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Յելոունայֆ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Էդմոնտոն</exemplarCity> </zone> @@ -2302,30 +2293,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Ռեզոլյուտ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Ռեյնի Ռիվեր</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ռանկին Ինլեթ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Ատիկոկան</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Թանդեր Բեյ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Նիպիգոն</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Տորոնտո</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Իկալուիտ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Պանգնիրտանգ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Մոնկտոն</exemplarCity> </zone> @@ -3139,18 +3118,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Դար-Էս-Սալամ</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ուժգորոդ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Կիև</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Սիմֆերոպոլ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Զապոռոժյե</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Կամպալա</exemplarCity> </zone> @@ -3169,9 +3142,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Հոնոլուլու</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Ջոնսթոն</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Անքորիջ</exemplarCity> </zone> @@ -3807,11 +3777,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Լորդ Հաուի ամառային ժամանակ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Մակկուորի կղզու ժամանակ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Մագադանի ժամանակ</generic> @@ -3851,13 +3816,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Մոուսոնի ժամանակ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Հյուսիսարևմտյան Մեքսիկայի ժամանակ</generic> - <standard>Հյուսիսարևմտյան Մեքսիկայի ստանդարտ ժամանակ</standard> - <daylight>Հյուսիսարևմտյան Մեքսիկայի ամառային ժամանակ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Մեքսիկայի խաղաղօվկիանոսյան ժամանակ</generic> diff --git a/make/data/cldr/common/main/hy_AM.xml b/make/data/cldr/common/main/hy_AM.xml index f17f5cb004ee5..57234fe8ecebf 100644 --- a/make/data/cldr/common/main/hy_AM.xml +++ b/make/data/cldr/common/main/hy_AM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ia.xml b/make/data/cldr/common/main/ia.xml index 8cb66c6c1027e..ce130ba71f21b 100644 --- a/make/data/cldr/common/main/ia.xml +++ b/make/data/cldr/common/main/ia.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2607,11 +2607,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>hora estive de Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>hora del Insula Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>hora de Magadan</generic> @@ -2651,13 +2646,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>hora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>hora del nordwest de Mexico</generic> - <standard>hora normal del nordwest de Mexico</standard> - <daylight>hora estive del nordwest de Mexico</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>hora del Pacifico mexican</generic> diff --git a/make/data/cldr/common/main/ia_001.xml b/make/data/cldr/common/main/ia_001.xml index f38e98dad8d2e..54b31c5a82e49 100644 --- a/make/data/cldr/common/main/ia_001.xml +++ b/make/data/cldr/common/main/ia_001.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/id.xml b/make/data/cldr/common/main/id.xml index 3221f9e10d002..db130766d0f17 100644 --- a/make/data/cldr/common/main/id.xml +++ b/make/data/cldr/common/main/id.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1242,7 +1242,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Aturan Pengurutan Buku Telepon</type> <type key="collation" type="phonetic">Aturan Pengurutan Fonetik</type> <type key="collation" type="pinyin">Aturan Pengurutan Pinyin</type> - <type key="collation" type="reformed">Aturan Pengurutan yang Diubah Bentuknya</type> <type key="collation" type="search">Pencarian Tujuan Umum</type> <type key="collation" type="searchjl">Pencarian Menurut Konsonan Awal Hangul</type> <type key="collation" type="standard">Aturan Pengurutan Standar</type> @@ -2820,9 +2819,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Waktu {0}</regionFormat> <regionFormat type="daylight">Waktu Musim Panas {0}</regionFormat> <regionFormat type="standard">Waktu Standar {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Waktu Universal Terkoordinasi</standard> @@ -2837,9 +2833,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Wina</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="America/Costa_Rica"> <exemplarCity>Kosta Rika</exemplarCity> </zone> @@ -2964,15 +2957,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Damascus"> <exemplarCity>Damaskus</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzhhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporizhia</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3612,11 +3599,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Waktu Musim Panas Makau</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Waktu Kepulauan Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Waktu Magadan</generic> @@ -3656,13 +3638,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Waktu Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Waktu Meksiko Barat Laut</generic> - <standard>Waktu Standar Meksiko Barat Laut</standard> - <daylight>Waktu Musim Panas Meksiko Barat Laut</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Waktu Pasifik Meksiko</generic> diff --git a/make/data/cldr/common/main/id_ID.xml b/make/data/cldr/common/main/id_ID.xml index 6f1b0c04f59cd..83e9f6051a7ca 100644 --- a/make/data/cldr/common/main/id_ID.xml +++ b/make/data/cldr/common/main/id_ID.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ie.xml b/make/data/cldr/common/main/ie.xml index a2171c229a1fa..e40e8fad0c72d 100644 --- a/make/data/cldr/common/main/ie.xml +++ b/make/data/cldr/common/main/ie.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1869,15 +1869,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Cambridge_Bay"> <exemplarCity draft="unconfirmed">Cambridge-Bay</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity draft="unconfirmed">Rainy-River</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity draft="unconfirmed">Rankin-Inlet</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity draft="unconfirmed">Thunder-Bay</exemplarCity> - </zone> <zone type="America/Goose_Bay"> <exemplarCity draft="unconfirmed">Goose-Bay</exemplarCity> </zone> @@ -2245,11 +2239,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">témpor estival del Insul Lord-Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">témpor del Insul Macquarie</standard> - </long> - </metazone> <metazone type="Marquesas"> <long> <standard draft="unconfirmed">témpor del Marquesas</standard> @@ -2260,13 +2249,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard draft="unconfirmed">témpor del Insules Marshall</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">mexican nordwest témpor</generic> - <standard draft="unconfirmed">mexican nordwest standard témpor</standard> - <daylight draft="unconfirmed">mexican nordwest estival témpor</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">mexican pacific témpor</generic> diff --git a/make/data/cldr/common/main/ie_EE.xml b/make/data/cldr/common/main/ie_EE.xml index 8e986db8d87ac..5faf8528d1c8f 100644 --- a/make/data/cldr/common/main/ie_EE.xml +++ b/make/data/cldr/common/main/ie_EE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ig.xml b/make/data/cldr/common/main/ig.xml index 64a39d8000395..4727e79a5fb1f 100644 --- a/make/data/cldr/common/main/ig.xml +++ b/make/data/cldr/common/main/ig.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1965,11 +1965,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Oge Ihe Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Oge Macquarie Island</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Oge Magadan</generic> @@ -2009,13 +2004,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Oge Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Oge Northwest Mexico</generic> - <standard>Oge Izugbe Northwest Mexico</standard> - <daylight>Oge Ihe Northwest Mexico</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Oge Mexican Pacific</generic> diff --git a/make/data/cldr/common/main/ig_NG.xml b/make/data/cldr/common/main/ig_NG.xml index 981d0776e0159..7704ec263eb3e 100644 --- a/make/data/cldr/common/main/ig_NG.xml +++ b/make/data/cldr/common/main/ig_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ii.xml b/make/data/cldr/common/main/ii.xml index 667876e03b061..36a24a5f767a1 100644 --- a/make/data/cldr/common/main/ii.xml +++ b/make/data/cldr/common/main/ii.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ii_CN.xml b/make/data/cldr/common/main/ii_CN.xml index d2e5e59adec8b..478dc23f82f8f 100644 --- a/make/data/cldr/common/main/ii_CN.xml +++ b/make/data/cldr/common/main/ii_CN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/io.xml b/make/data/cldr/common/main/io.xml index 7315536f0166a..f960e028b8140 100644 --- a/make/data/cldr/common/main/io.xml +++ b/make/data/cldr/common/main/io.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/io_001.xml b/make/data/cldr/common/main/io_001.xml index 4057f84f647b2..b7b5f851ab29d 100644 --- a/make/data/cldr/common/main/io_001.xml +++ b/make/data/cldr/common/main/io_001.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/is.xml b/make/data/cldr/common/main/is.xml index f491c68bf8f74..ef7d71d4f7fdf 100644 --- a/make/data/cldr/common/main/is.xml +++ b/make/data/cldr/common/main/is.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1062,7 +1062,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Símaskráarröðun</type> <type key="collation" type="phonetic">Hljóðfræðileg röð</type> <type key="collation" type="pinyin">Pinyin-röðun</type> - <type key="collation" type="reformed">Endurbætt röð</type> <type key="collation" type="search">Almenn leit</type> <type key="collation" type="searchjl">Leita eftir upphafssamhljóða í Hangul</type> <type key="collation" type="standard">Stöðluð röðun</type> @@ -2445,9 +2444,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <timeZoneNames> <regionFormat type="daylight">{0} (sumartími)</regionFormat> <regionFormat type="standard">{0} (staðaltími)</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Samræmdur alþjóðlegur tími</standard> @@ -2471,9 +2467,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Vín</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="America/Aruba"> <exemplarCity>Arúba</exemplarCity> </zone> @@ -3332,11 +3325,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Sumartími á Lord Howe-eyju</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie-eyjartími</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Tími í Magadan</generic> @@ -3376,13 +3364,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawson-tími</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Tími í Norðvestur-Mexíkó</generic> - <standard>Staðaltími í Norðvestur-Mexíkó</standard> - <daylight>Sumartími í Norðvestur-Mexíkó</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Kyrrahafstími í Mexíkó</generic> diff --git a/make/data/cldr/common/main/is_IS.xml b/make/data/cldr/common/main/is_IS.xml index 463c2a0b8e043..0cec87ac20cda 100644 --- a/make/data/cldr/common/main/is_IS.xml +++ b/make/data/cldr/common/main/is_IS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/it.xml b/make/data/cldr/common/main/it.xml index 3056b4a77f054..0dce0245bf485 100644 --- a/make/data/cldr/common/main/it.xml +++ b/make/data/cldr/common/main/it.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1262,7 +1262,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Ordinamento Elenco telefonico</type> <type key="collation" type="phonetic">Ordinamento fonetico</type> <type key="collation" type="pinyin">Ordinamento pinyin</type> - <type key="collation" type="reformed">Ordinamento riformato</type> <type key="collation" type="search">Ricerca generica</type> <type key="collation" type="searchjl">Cerca per consonante hangul iniziale</type> <type key="collation" type="standard">Ordinamento standard</type> @@ -2466,9 +2465,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Ora {0}</regionFormat> <regionFormat type="daylight">Ora legale: {0}</regionFormat> <regionFormat type="standard">Ora standard: {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Tempo coordinato universale</standard> @@ -2483,9 +2479,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Argentina/Tucuman"> <exemplarCity>Tucumán</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Dhaka"> <exemplarCity>Dacca</exemplarCity> </zone> @@ -2750,9 +2743,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Tunis"> <exemplarCity>Tunisi</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> @@ -3325,11 +3315,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Ora legale di Macao</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Ora dell’Isola Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Ora di Magadan</generic> @@ -3369,13 +3354,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Ora di Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Ora del Messico nord-occidentale</generic> - <standard>Ora standard del Messico nord-occidentale</standard> - <daylight>Ora legale del Messico nord-occidentale</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Ora del Pacifico (Messico)</generic> @@ -3756,12 +3734,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <pattern type="10000" count="other">0</pattern> <pattern type="100000" count="one">0</pattern> <pattern type="100000" count="other">0</pattern> - <pattern type="1000000" count="one">0 Mio</pattern> - <pattern type="1000000" count="other">0 Mio</pattern> - <pattern type="10000000" count="one">00 Mio</pattern> - <pattern type="10000000" count="other">00 Mio</pattern> - <pattern type="100000000" count="one">000 Mio</pattern> - <pattern type="100000000" count="other">000 Mio</pattern> + <pattern type="1000000" count="one">0 Mln</pattern> + <pattern type="1000000" count="other">0 Mln</pattern> + <pattern type="10000000" count="one">00 Mln</pattern> + <pattern type="10000000" count="other">00 Mln</pattern> + <pattern type="100000000" count="one">000 Mln</pattern> + <pattern type="100000000" count="other">000 Mln</pattern> <pattern type="1000000000" count="one">0 Mrd</pattern> <pattern type="1000000000" count="other">0 Mrd</pattern> <pattern type="10000000000" count="one">00 Mrd</pattern> @@ -3791,12 +3769,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <pattern type="10000" count="other">0</pattern> <pattern type="100000" count="one">0</pattern> <pattern type="100000" count="other">0</pattern> - <pattern type="1000000" count="one">0 Mio ¤</pattern> - <pattern type="1000000" count="other">0 Mio ¤</pattern> - <pattern type="10000000" count="one">00 Mio ¤</pattern> - <pattern type="10000000" count="other">00 Mio ¤</pattern> - <pattern type="100000000" count="one">000 Mio ¤</pattern> - <pattern type="100000000" count="other">000 Mio ¤</pattern> + <pattern type="1000000" count="one">0 Mln ¤</pattern> + <pattern type="1000000" count="other">0 Mln ¤</pattern> + <pattern type="10000000" count="one">00 Mln ¤</pattern> + <pattern type="10000000" count="other">00 Mln ¤</pattern> + <pattern type="100000000" count="one">000 Mln ¤</pattern> + <pattern type="100000000" count="other">000 Mln ¤</pattern> <pattern type="1000000000" count="one">0 Mrd ¤</pattern> <pattern type="1000000000" count="other">0 Mrd ¤</pattern> <pattern type="10000000000" count="one">00 Mrd ¤</pattern> diff --git a/make/data/cldr/common/main/it_CH.xml b/make/data/cldr/common/main/it_CH.xml index de05a4d22f613..1843cd3991211 100644 --- a/make/data/cldr/common/main/it_CH.xml +++ b/make/data/cldr/common/main/it_CH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/it_IT.xml b/make/data/cldr/common/main/it_IT.xml index 8afb7169c20df..5f3342415d8ee 100644 --- a/make/data/cldr/common/main/it_IT.xml +++ b/make/data/cldr/common/main/it_IT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/it_SM.xml b/make/data/cldr/common/main/it_SM.xml index 447d74116b7dd..b30f7e0df5171 100644 --- a/make/data/cldr/common/main/it_SM.xml +++ b/make/data/cldr/common/main/it_SM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/it_VA.xml b/make/data/cldr/common/main/it_VA.xml index 716bc0e0fc80d..4ceb6fc0bff2a 100644 --- a/make/data/cldr/common/main/it_VA.xml +++ b/make/data/cldr/common/main/it_VA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/iu.xml b/make/data/cldr/common/main/iu.xml index 8878d2aef85c0..dbd87621f8cca 100644 --- a/make/data/cldr/common/main/iu.xml +++ b/make/data/cldr/common/main/iu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/iu_CA.xml b/make/data/cldr/common/main/iu_CA.xml index e7fa1a5adb665..4e4a6931d384a 100644 --- a/make/data/cldr/common/main/iu_CA.xml +++ b/make/data/cldr/common/main/iu_CA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/iu_Latn.xml b/make/data/cldr/common/main/iu_Latn.xml index c206d73023838..51be22c08a1bf 100644 --- a/make/data/cldr/common/main/iu_Latn.xml +++ b/make/data/cldr/common/main/iu_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/iu_Latn_CA.xml b/make/data/cldr/common/main/iu_Latn_CA.xml index 5a51d0264eb6b..2ea5fc82a1c1c 100644 --- a/make/data/cldr/common/main/iu_Latn_CA.xml +++ b/make/data/cldr/common/main/iu_Latn_CA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ja.xml b/make/data/cldr/common/main/ja.xml index 711868e73560b..7a43fd77aba95 100644 --- a/make/data/cldr/common/main/ja.xml +++ b/make/data/cldr/common/main/ja.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1287,7 +1287,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">電話帳順</type> <type key="collation" type="phonetic">音声順による並べ替え</type> <type key="collation" type="pinyin">ピンイン順</type> - <type key="collation" type="reformed">リフォーム</type> <type key="collation" type="search">汎用検索</type> <type key="collation" type="searchjl">ハングル語頭子音による並べ替え</type> <type key="collation" type="standard">標準並べ替え順序</type> @@ -3625,9 +3624,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat type="daylight">{0}夏時間</regionFormat> <regionFormat type="standard">{0}標準時</regionFormat> <fallbackFormat>{1}({0})</fallbackFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>サンタイサベル</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>協定世界時</standard> @@ -3750,9 +3746,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>メルボルン</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>カリー</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ホバート</exemplarCity> </zone> @@ -3906,9 +3899,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>クレストン</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>イエローナイフ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>エドモントン</exemplarCity> </zone> @@ -3927,30 +3917,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>レゾリュート</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>レイニーリバー</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ランキンインレット</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>アティコカン</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>サンダーベイ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ニピゴン</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>トロント</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>イカルイット</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>パンナータング</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>モンクトン</exemplarCity> </zone> @@ -4764,18 +4742,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ダルエスサラーム</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ウージュホロド</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>キーウ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>シンフェロポリ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ザポリージャ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>カンパラ</exemplarCity> </zone> @@ -4794,9 +4766,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ホノルル</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ジョンストン島</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>アンカレッジ</exemplarCity> </zone> @@ -5501,11 +5470,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>マカオ夏時間</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>マッコーリー島時間</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>マガダン時間</generic> @@ -5545,13 +5509,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>モーソン基地時間</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>メキシコ北西部時間</generic> - <standard>メキシコ北西部標準時</standard> - <daylight>メキシコ北西部夏時間</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>メキシコ太平洋時間</generic> diff --git a/make/data/cldr/common/main/ja_JP.xml b/make/data/cldr/common/main/ja_JP.xml index fa5dd2e071562..d6254b095dbb4 100644 --- a/make/data/cldr/common/main/ja_JP.xml +++ b/make/data/cldr/common/main/ja_JP.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/jbo.xml b/make/data/cldr/common/main/jbo.xml index c3a346d762cfd..6f1a7601a5c53 100644 --- a/make/data/cldr/common/main/jbo.xml +++ b/make/data/cldr/common/main/jbo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/jbo_001.xml b/make/data/cldr/common/main/jbo_001.xml index 53bfbc897c397..ad6bd6ce3f91e 100644 --- a/make/data/cldr/common/main/jbo_001.xml +++ b/make/data/cldr/common/main/jbo_001.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/jgo.xml b/make/data/cldr/common/main/jgo.xml index f59811848c62a..8fb4a32143601 100644 --- a/make/data/cldr/common/main/jgo.xml +++ b/make/data/cldr/common/main/jgo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/jgo_CM.xml b/make/data/cldr/common/main/jgo_CM.xml index c52e5776daa27..28bcebccf522e 100644 --- a/make/data/cldr/common/main/jgo_CM.xml +++ b/make/data/cldr/common/main/jgo_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/jmc.xml b/make/data/cldr/common/main/jmc.xml index 3fa938326e583..d6f948f0e396e 100644 --- a/make/data/cldr/common/main/jmc.xml +++ b/make/data/cldr/common/main/jmc.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/jmc_TZ.xml b/make/data/cldr/common/main/jmc_TZ.xml index ca2a45bd09fdf..b07488102760c 100644 --- a/make/data/cldr/common/main/jmc_TZ.xml +++ b/make/data/cldr/common/main/jmc_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/jv.xml b/make/data/cldr/common/main/jv.xml index b88d100392ca9..23fc8fdb8bef6 100644 --- a/make/data/cldr/common/main/jv.xml +++ b/make/data/cldr/common/main/jv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1827,9 +1827,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Cordoba"> <exemplarCity>Kordoba</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="America/St_Barthelemy"> <exemplarCity>Santa Barthelemy</exemplarCity> </zone> @@ -1851,12 +1848,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Cambridge_Bay"> <exemplarCity>Teluk Cambridge</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Kali Rainy</exemplarCity> - </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Teluk Gludhug</exemplarCity> - </zone> <zone type="America/Halifax"> <exemplarCity>Halifak</exemplarCity> </zone> @@ -2562,11 +2553,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Wektu Ketigo Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Wektu Pulo Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Wektu Magadan</generic> @@ -2606,13 +2592,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Wektu Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Wektu Meksiko Lor-Kulon</generic> - <standard>Wektu Standar Meksiko Lor-Kulon</standard> - <daylight>Wektu Ketigo Meksiko Lor-Kulon</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Wektu Pasifik Meksiko</generic> diff --git a/make/data/cldr/common/main/jv_ID.xml b/make/data/cldr/common/main/jv_ID.xml index 7888dba6d9d99..95d195ca0fed7 100644 --- a/make/data/cldr/common/main/jv_ID.xml +++ b/make/data/cldr/common/main/jv_ID.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ka.xml b/make/data/cldr/common/main/ka.xml index 0b03ecb252997..1d6f9f3d17dea 100644 --- a/make/data/cldr/common/main/ka.xml +++ b/make/data/cldr/common/main/ka.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2109,9 +2109,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>დრო: {0}</regionFormat> <regionFormat type="daylight">{0} ზაფხულის დრო</regionFormat> <regionFormat type="standard">{0} სტანდარტული დრო</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>სანტა ისაბელი</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>მსოფლიო კოორდინირებული დრო</standard> @@ -2234,9 +2231,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>მელბურნი</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ქური</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ჰობარტი</exemplarCity> </zone> @@ -2390,9 +2384,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>კრესტონი</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>იელოუნაიფი</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ედმონტონი</exemplarCity> </zone> @@ -2411,30 +2402,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>რეზოლუტე</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>რეინი რივერი</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>რენკინ ინლეტი</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ატიკოკანი</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>თანდერ ბეი</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ნიპიგონი</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ტორონტო</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>იქალუიტი</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>პანგნირტუნგი</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>მონქტონი</exemplarCity> </zone> @@ -3248,18 +3227,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>დარ-ეს-სალამი</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>უჟგოროდი</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>კიევი</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>სიმფეროპოლი</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ზაპოროჟიე</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>კამპალა</exemplarCity> </zone> @@ -3278,9 +3251,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ჰონოლულუ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ჯონსტონი</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ენქორაჯი</exemplarCity> </zone> @@ -3916,11 +3886,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>ლორდ-ჰაუს ზაფხულის დრო</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>მაქკუორის კუნძულის დრო</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>მაგადანის დრო</generic> @@ -3960,13 +3925,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>მოუსონის დრო</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>ჩრდილო-აღმოსავლეთ მექსიკის დრო</generic> - <standard>ჩრდილო-დასავლეთ მექსიკის დრო</standard> - <daylight>ჩრდილო-დასავლეთ მექსიკის ზაფხულის დრო</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>მექსიკის წყნარი ოკეანის დრო</generic> diff --git a/make/data/cldr/common/main/ka_GE.xml b/make/data/cldr/common/main/ka_GE.xml index a6ce75a1049d1..513b88d0fece2 100644 --- a/make/data/cldr/common/main/ka_GE.xml +++ b/make/data/cldr/common/main/ka_GE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kab.xml b/make/data/cldr/common/main/kab.xml index afb43b18870db..3ea9ec2647cdb 100644 --- a/make/data/cldr/common/main/kab.xml +++ b/make/data/cldr/common/main/kab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2013,9 +2013,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity draft="unconfirmed">Malburn</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity draft="unconfirmed">Currie</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity draft="unconfirmed">Sidni</exemplarCity> </zone> @@ -3101,11 +3098,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">Akud n Unebdu n Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">Akud n Markari</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="unconfirmed">Akud n Magadan</generic> @@ -3145,13 +3137,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard draft="unconfirmed">Akud n Mawsun</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">Akud n ugafa amalu n Miksik</generic> - <standard draft="unconfirmed">Akud amezday n ugafa amalu n Miksik</standard> - <daylight draft="unconfirmed">Akud n unebdu n ugafa amalu n Miksik</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">Akud amelwi n Miksik</generic> diff --git a/make/data/cldr/common/main/kab_DZ.xml b/make/data/cldr/common/main/kab_DZ.xml index 5e66bcc2d06b9..9c5e9f6f9c1f6 100644 --- a/make/data/cldr/common/main/kab_DZ.xml +++ b/make/data/cldr/common/main/kab_DZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kaj.xml b/make/data/cldr/common/main/kaj.xml index 188cc0683c23d..dd2f2d48a3b5e 100644 --- a/make/data/cldr/common/main/kaj.xml +++ b/make/data/cldr/common/main/kaj.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kaj_NG.xml b/make/data/cldr/common/main/kaj_NG.xml index 7c0b4540f6e05..446af581cde2c 100644 --- a/make/data/cldr/common/main/kaj_NG.xml +++ b/make/data/cldr/common/main/kaj_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kam.xml b/make/data/cldr/common/main/kam.xml index 9c3a2a56b000e..655615f74d04d 100644 --- a/make/data/cldr/common/main/kam.xml +++ b/make/data/cldr/common/main/kam.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kam_KE.xml b/make/data/cldr/common/main/kam_KE.xml index aefe5a4576b4f..f77693e6a7dce 100644 --- a/make/data/cldr/common/main/kam_KE.xml +++ b/make/data/cldr/common/main/kam_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kcg.xml b/make/data/cldr/common/main/kcg.xml index 77dd7ef0930a1..c5ac5715b48fc 100644 --- a/make/data/cldr/common/main/kcg.xml +++ b/make/data/cldr/common/main/kcg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kcg_NG.xml b/make/data/cldr/common/main/kcg_NG.xml index a9fe0f9c2b8a2..354b2ab3b37f9 100644 --- a/make/data/cldr/common/main/kcg_NG.xml +++ b/make/data/cldr/common/main/kcg_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kde.xml b/make/data/cldr/common/main/kde.xml index af759fb88c730..fb03f22a83dcd 100644 --- a/make/data/cldr/common/main/kde.xml +++ b/make/data/cldr/common/main/kde.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kde_TZ.xml b/make/data/cldr/common/main/kde_TZ.xml index 5c9ef9697a015..ae70dc440438e 100644 --- a/make/data/cldr/common/main/kde_TZ.xml +++ b/make/data/cldr/common/main/kde_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kea.xml b/make/data/cldr/common/main/kea.xml index 048b61a318f8f..04bcbe2209f7b 100644 --- a/make/data/cldr/common/main/kea.xml +++ b/make/data/cldr/common/main/kea.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1872,13 +1872,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Ora di Veron di Avaí i Aleutas</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Ora di Noroesti di Méxiku</generic> - <standard>Ora Padron di Noroesti di Méxiku</standard> - <daylight>Ora di Veron di Noroesti di Méxiku</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Ora di Pasífiku Mexikanu</generic> diff --git a/make/data/cldr/common/main/kea_CV.xml b/make/data/cldr/common/main/kea_CV.xml index d089484b892a8..59bcc9a2ad248 100644 --- a/make/data/cldr/common/main/kea_CV.xml +++ b/make/data/cldr/common/main/kea_CV.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ken.xml b/make/data/cldr/common/main/ken.xml index 422b5d48a527a..580019ec00e67 100644 --- a/make/data/cldr/common/main/ken.xml +++ b/make/data/cldr/common/main/ken.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ken_CM.xml b/make/data/cldr/common/main/ken_CM.xml index e44002dbe2e3b..1e19cade92143 100644 --- a/make/data/cldr/common/main/ken_CM.xml +++ b/make/data/cldr/common/main/ken_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kgp.xml b/make/data/cldr/common/main/kgp.xml index 8a53e582637f8..324afedcf68f1 100644 --- a/make/data/cldr/common/main/kgp.xml +++ b/make/data/cldr/common/main/kgp.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1098,7 +1098,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Terefonĩ Risita to ke</type> <type key="collation" type="phonetic" draft="contributed">Fonẽtika to ke kuprãg</type> <type key="collation" type="pinyin">Pin-yin to nỹtĩ</type> - <type key="collation" type="reformed">Hár tãg nỹtĩ</type> <type key="collation" type="search">Jẽnfĩn to ke Kar</type> <type key="collation" type="searchjl" draft="contributed">Hangul kãsonỹte ve jãnfĩn</type> <type key="collation" type="standard">to ke pẽ</type> @@ -2262,9 +2261,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Óra kar {0}</regionFormat> <regionFormat type="daylight">Prỹg kã óra kar {0}</regionFormat> <regionFormat type="standard">Óra pẽ {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Sỹta Isamé</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Ga-kar Óra Vẽnh-krén-ja</standard> @@ -2381,9 +2377,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Mẽrmurnĩ</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kurije</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Homarti</exemplarCity> </zone> @@ -2537,9 +2530,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Krésitãn</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Rógro Mỹrér</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Enimãntã</exemplarCity> </zone> @@ -2558,30 +2548,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Rijorute</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Tamumã Goj</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Rỹgkĩg Ĩrén</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Atikokỹn</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Tũnner Mej</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Nĩpigãn</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Torãto</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikarujin</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pỹgnĩrtũg</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Mãgtãn</exemplarCity> </zone> @@ -3365,18 +3343,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Nar Enh Sarỹm</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ungoron</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kijévi</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Sĩgfiripor</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Japorisija</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Kãmpara</exemplarCity> </zone> @@ -3395,9 +3367,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Honãruru</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Nhionhtãn</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Ỹkoragi</exemplarCity> </zone> @@ -4104,11 +4073,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Rỹ kã óra Mỹkav tá</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Óra Mỹkikuari Goj-vẽso tá</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Óra Mỹganan tá</generic> @@ -4148,13 +4112,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Óra Mỹusãn tá</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Óra Mẽsiku Nãrti-Rãpur tá</generic> - <standard>Óra Pã Mẽsiku Nãrti-Rãpur tá</standard> - <daylight>Rỹ Kã óra Mẽsiku Nãrti-Rãpur tá</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Óra Mẽsiku Pasifiku tá</generic> diff --git a/make/data/cldr/common/main/kgp_BR.xml b/make/data/cldr/common/main/kgp_BR.xml index ee47599240536..af653d29fa7e8 100644 --- a/make/data/cldr/common/main/kgp_BR.xml +++ b/make/data/cldr/common/main/kgp_BR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/khq.xml b/make/data/cldr/common/main/khq.xml index d75167023cfe0..b06fba711b409 100644 --- a/make/data/cldr/common/main/khq.xml +++ b/make/data/cldr/common/main/khq.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/khq_ML.xml b/make/data/cldr/common/main/khq_ML.xml index 0eff523241686..5087d6d1fddd4 100644 --- a/make/data/cldr/common/main/khq_ML.xml +++ b/make/data/cldr/common/main/khq_ML.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ki.xml b/make/data/cldr/common/main/ki.xml index 6585f0fe8115d..f129f2e46d947 100644 --- a/make/data/cldr/common/main/ki.xml +++ b/make/data/cldr/common/main/ki.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ki_KE.xml b/make/data/cldr/common/main/ki_KE.xml index 7cf6f1d1695e6..c764864fc4587 100644 --- a/make/data/cldr/common/main/ki_KE.xml +++ b/make/data/cldr/common/main/ki_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kk.xml b/make/data/cldr/common/main/kk.xml index 5150fb0acccca..ae489aaef5a0d 100644 --- a/make/data/cldr/common/main/kk.xml +++ b/make/data/cldr/common/main/kk.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2389,9 +2389,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} уақыты</regionFormat> <regionFormat type="daylight">{0} жазғы уақыты</regionFormat> <regionFormat type="standard">{0} стандартты уақыты</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Санта-Исабель</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Дүниежүзілік үйлестірілген уақыт</standard> @@ -2514,9 +2511,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Мельбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Керри</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -2670,9 +2664,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Йеллоунайф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Эдмонтон</exemplarCity> </zone> @@ -2691,30 +2682,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Резольют</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рейни-Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ранкин-Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Атикокан</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тандер-Бей</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Икалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангниртанг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -3528,18 +3507,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар-эс-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферополь</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожье</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -3558,9 +3531,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Гонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Джонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Анкоридж</exemplarCity> </zone> @@ -4201,11 +4171,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Лорд-Хау жазғы уақыты</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Маккуори аралы уақыты</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магадан уақыты</generic> @@ -4245,13 +4210,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Моусон уақыты</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Солтүстік-батыс Мексика уақыты</generic> - <standard>Солтүстік-батыс Мексика стандартты уақыты</standard> - <daylight>Солтүстік-батыс Мексика жазғы уақыты</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Мексика Тынық мұхит уақыты</generic> diff --git a/make/data/cldr/common/main/kk_KZ.xml b/make/data/cldr/common/main/kk_KZ.xml index 5bab54115dfe5..414c04cfce2d1 100644 --- a/make/data/cldr/common/main/kk_KZ.xml +++ b/make/data/cldr/common/main/kk_KZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kkj.xml b/make/data/cldr/common/main/kkj.xml index 793b56e869dbd..a99945b5c0be5 100644 --- a/make/data/cldr/common/main/kkj.xml +++ b/make/data/cldr/common/main/kkj.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kkj_CM.xml b/make/data/cldr/common/main/kkj_CM.xml index 7b5c801a4e614..19bd6fd1d9480 100644 --- a/make/data/cldr/common/main/kkj_CM.xml +++ b/make/data/cldr/common/main/kkj_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kl.xml b/make/data/cldr/common/main/kl.xml index c8778848f026d..187beece7db43 100644 --- a/make/data/cldr/common/main/kl.xml +++ b/make/data/cldr/common/main/kl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kl_GL.xml b/make/data/cldr/common/main/kl_GL.xml index f4e119ea34cf1..26a85b6f95c81 100644 --- a/make/data/cldr/common/main/kl_GL.xml +++ b/make/data/cldr/common/main/kl_GL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kln.xml b/make/data/cldr/common/main/kln.xml index 13ddba1c16242..d882d25f75e62 100644 --- a/make/data/cldr/common/main/kln.xml +++ b/make/data/cldr/common/main/kln.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kln_KE.xml b/make/data/cldr/common/main/kln_KE.xml index 22f9e2b5ef844..1b9cc26e50449 100644 --- a/make/data/cldr/common/main/kln_KE.xml +++ b/make/data/cldr/common/main/kln_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/km.xml b/make/data/cldr/common/main/km.xml index 7e3266de618e6..5d34b42894826 100644 --- a/make/data/cldr/common/main/km.xml +++ b/make/data/cldr/common/main/km.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1779,9 +1779,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>ម៉ោង​នៅ​ {0}</regionFormat> <regionFormat type="daylight">ម៉ោង​ពេល​ថ្ងៃ​នៅ​ {0}</regionFormat> <regionFormat type="standard">ម៉ោង​ស្តង់ដារ​នៅ ​{0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>សាន់តាអ៊ីសាប៊ែល</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>ម៉ោងសកលដែលមានការសម្រួល</standard> @@ -1904,9 +1901,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>ម៉េលប៊ន</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ខូរៀ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ហូបាត</exemplarCity> </zone> @@ -2060,9 +2054,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ក្រេស្តុន</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>យេឡូណៃ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>អែតម៉ុងតុង</exemplarCity> </zone> @@ -2081,30 +2072,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>រ៉េ​ស៊ូឡូត</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>រ៉េនីរីវើ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>រ៉ាន់ឃីន​អ៊ីនឡិត</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>អាទីកូកាន</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>សាន់ដឺ​បេ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>នីពីកុន</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>តូរ៉ុនតូ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>អ៊ីកាឡូអ៊ីត</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ប៉ាងនីទុង</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ម៉ុងតុន</exemplarCity> </zone> @@ -2918,18 +2897,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ដាអ៊ីសាឡាំ</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>អ៊ុយហ្គោរ៉ូដ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>កៀវ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ស៊ីមហ្វើរ៉ុប៉ូល</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ហ្សាប៉ូរ៉ូហ្ស៊ីយ៉េ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>កំប៉ាឡា</exemplarCity> </zone> @@ -2948,9 +2921,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ហូណូលូលូ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ចនស្តុន</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>អង់ចូរ៉ាក</exemplarCity> </zone> @@ -3586,11 +3556,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>ម៉ោង​ពេល​ថ្ងៃ​នៅ​ឡតហៅ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>ម៉ោង​នៅ​កោះ​ម៉ាកគែរី</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>ម៉ោង​នៅ​ម៉ាហ្កាដាន</generic> @@ -3630,13 +3595,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>ម៉ោង​នៅ​ម៉ៅ​សាន់</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>ម៉ោង​នៅ​ម៉ិកស៊ិកភាគពាយព្យ</generic> - <standard>ម៉ោង​ស្តង់ដារនៅ​ម៉ិកស៊ិកភាគពាយព្យ</standard> - <daylight>ម៉ោង​ពេល​ថ្ងៃ​នៅ​ម៉ិកស៊ិកភាគពាយព្យ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>ម៉ោង​នៅ​ប៉ាស៊ីហ្វិក​ម៉ិកស៊ិក</generic> diff --git a/make/data/cldr/common/main/km_KH.xml b/make/data/cldr/common/main/km_KH.xml index 13c1c74512c0e..6bcd32e45e79a 100644 --- a/make/data/cldr/common/main/km_KH.xml +++ b/make/data/cldr/common/main/km_KH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kn.xml b/make/data/cldr/common/main/kn.xml index 7271c4da0b713..70d0994060ecd 100644 --- a/make/data/cldr/common/main/kn.xml +++ b/make/data/cldr/common/main/kn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1101,7 +1101,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">ಫೋನ್‌ಬುಕ್ ವಿಂಗಡಣೆ ಕ್ರಮ</type> <type key="collation" type="phonetic">ಉಚ್ಛಾರಣಾನುರೂಪವಾಗಿ ವಿಂಗಡಣೆ ಕ್ರಮ</type> <type key="collation" type="pinyin">ಪಿನ್‌ಯಿನ್ ವಿಂಗಡಣೆ ಕ್ರಮ</type> - <type key="collation" type="reformed">ಪರಿಷ್ಕೃತ ಅನುಕ್ರಮ ವಿನ್ಯಾಸ</type> <type key="collation" type="search">ಸಾಮಾನ್ಯ- ಉದ್ದೇಶ ಹುಡುಕಾಟ</type> <type key="collation" type="searchjl">ಹಂಗುಲ್ ಆದ್ಯಕ್ಷರ ವ್ಯಂಜನದ ಮೂಲಕ ಹುಡುಕಿ</type> <type key="collation" type="standard">ಪ್ರಮಾಣೀಕೃತ ವಿಂಗಡಣೆ ಕ್ರಮ</type> @@ -2076,9 +2075,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} ಸಮಯ</regionFormat> <regionFormat type="daylight">{0} ದಿನದ ಸಮಯ</regionFormat> <regionFormat type="standard">{0} ಪ್ರಮಾಣಿತ ಸಮಯ</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>ಸಾಂತಾ ಇಸಾಬೆಲ್</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>ಸಂಘಟಿತ ಸಾರ್ವತ್ರಿಕ ಸಮಯ</standard> @@ -2201,9 +2197,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>ಮೆಲ್ಬರ್ನ್</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ಕರೀ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ಹೋಬಾರ್ಟ್‌</exemplarCity> </zone> @@ -2357,9 +2350,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ಕ್ರೆಸ್ಟನ್</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ಯೆಲ್ಲೋ‌ನೈಫ್</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ಎಡ್ಮಂಟನ್‌</exemplarCity> </zone> @@ -2378,30 +2368,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ರೆಸೊಲ್ಯೂಟ್</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ರೈನಿ ರಿವರ್</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ರಾಂಕಿನ್ ಇನ್‌ಲೆಟ್</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ಅಟಿಕೊಕಾನ್</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ಥಂಡರ್ ಬೇ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ನಿಪಿಗನ್</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ಟೊರೊಂಟೋ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ಈಕ್ವಾಲಿಟ್</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ಪಂಗ್ನೀರ್‌ಟಂಗ್</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ಮಾಂಕ್ಟನ್</exemplarCity> </zone> @@ -3215,18 +3193,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ಡಾರ್ ಎಸ್ ಸಲಾಮ್</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ಉಜ್‌ಗೊರೊದ್</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>ಕಿವ್</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ಸಿಮ್ಫೆರೋಪೋಲ್</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ಜಾಪರೀಝಿಯಾ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>ಕಂಪಾಲಾ</exemplarCity> </zone> @@ -3245,9 +3217,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ಹೊನಲುಲು</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ಜಾನ್‌ಸ್ಟನ್</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ಆಂಕರೋಜ್</exemplarCity> </zone> @@ -3945,11 +3914,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">ಮಕಾವ್ ಬೇಸಿಗೆ ಸಮಯ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>ಮ್ಯಾಕ್‌ಕ್ಯುರೈ ದ್ವೀಪ ಸಮಯ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>ಮಗಡಾನ್ ಸಮಯ</generic> @@ -3989,13 +3953,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>ಮಾವ್‌ಸನ್ ಸಮಯ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>ವಾಯವ್ಯ ಮೆಕ್ಸಿಕೊ ಸಮಯ</generic> - <standard>ವಾಯವ್ಯ ಮೆಕ್ಸಿಕೊ ಪ್ರಮಾಣಿತ ಸಮಯ</standard> - <daylight>ವಾಯವ್ಯ ಮೆಕ್ಸಿಕೊ ಹಗಲು ಸಮಯ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>ಮೆಕ್ಸಿಕನ್ ಪೆಸಿಫಿಕ್ ಸಮಯ</generic> diff --git a/make/data/cldr/common/main/kn_IN.xml b/make/data/cldr/common/main/kn_IN.xml index e43c47fb5aae4..a1c6190e5f5d1 100644 --- a/make/data/cldr/common/main/kn_IN.xml +++ b/make/data/cldr/common/main/kn_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ko.xml b/make/data/cldr/common/main/ko.xml index b9045c2d750de..a50bf67f3f819 100644 --- a/make/data/cldr/common/main/ko.xml +++ b/make/data/cldr/common/main/ko.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1194,7 +1194,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">전화번호부순</type> <type key="collation" type="phonetic">소리나는 대로 정렬 순서</type> <type key="collation" type="pinyin">병음순</type> - <type key="collation" type="reformed">개정 정렬순</type> <type key="collation" type="search">범용 검색</type> <type key="collation" type="searchjl" draft="contributed">한글 자음으로 검색</type> <type key="collation" type="standard">표준 정렬 순서</type> @@ -2932,9 +2931,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat type="daylight">{0} 하계 표준시</regionFormat> <regionFormat type="standard">{0} 표준시</regionFormat> <fallbackFormat>{1}({0})</fallbackFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>산타 이사벨</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>협정 세계시</standard> @@ -3057,9 +3053,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>멜버른</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>퀴리</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>호바트</exemplarCity> </zone> @@ -3213,9 +3206,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>크레스톤</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>옐로나이프</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>에드먼턴</exemplarCity> </zone> @@ -3234,30 +3224,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>리졸루트</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>레이니강</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>랭킹 인렛</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>코랄하버</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>선더베이</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>니피곤</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>토론토</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>이칼루이트</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>팡니르퉁</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>몽턴</exemplarCity> </zone> @@ -4071,18 +4049,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>다르에스살람</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>우주고로트</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>키예프</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>심페로폴</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>자포로지예</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>캄팔라</exemplarCity> </zone> @@ -4101,9 +4073,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>호놀룰루</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>존스톤</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>앵커리지</exemplarCity> </zone> @@ -4803,11 +4772,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>마카오 하계 표준시</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>매쿼리섬 시간</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>마가단 시간</generic> @@ -4847,13 +4811,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>모슨 시간</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>멕시코 북서부 시간</generic> - <standard>멕시코 북서부 표준시</standard> - <daylight>멕시코 북서부 하계 표준시</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>멕시코 태평양 시간</generic> diff --git a/make/data/cldr/common/main/ko_CN.xml b/make/data/cldr/common/main/ko_CN.xml index 293b6c82ba5b7..47217db91152b 100644 --- a/make/data/cldr/common/main/ko_CN.xml +++ b/make/data/cldr/common/main/ko_CN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ko_KP.xml b/make/data/cldr/common/main/ko_KP.xml index 3aa3e56b0439a..888b2928e53c0 100644 --- a/make/data/cldr/common/main/ko_KP.xml +++ b/make/data/cldr/common/main/ko_KP.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ko_KR.xml b/make/data/cldr/common/main/ko_KR.xml index 2b53ca45df13c..087699e3d873e 100644 --- a/make/data/cldr/common/main/ko_KR.xml +++ b/make/data/cldr/common/main/ko_KR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kok.xml b/make/data/cldr/common/main/kok.xml index 09a4979d0666d..f7dc54d0c5a3e 100644 --- a/make/data/cldr/common/main/kok.xml +++ b/make/data/cldr/common/main/kok.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1837,9 +1837,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>मेलबर्न</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>क्युरी</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>होबार्ट</exemplarCity> </zone> @@ -1993,9 +1990,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>क्रेस्टोन</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>यलोक्नायफ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ऍडमोंटन</exemplarCity> </zone> @@ -2014,30 +2008,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>रिसोल्युट</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>पावसाळी न्हंय</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>रँकिन इनलॅट</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>अतिकोकॉन</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>थंडर बे</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>निपिगोन</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>टॉरंटो</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>इकालुयीट</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>पंगनिर्टुंग</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>मोंक्टॉन</exemplarCity> </zone> @@ -2851,18 +2833,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>दार इ सलाम</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>उझगोरोड</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>कीव</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>सिमफरोपोल</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>झापोरोझे</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>काम्पाला</exemplarCity> </zone> @@ -2878,9 +2854,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Nome"> <exemplarCity>नोमे</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>जॉन्स्टन</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ऐंकरज</exemplarCity> </zone> @@ -3519,11 +3492,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>लॉर्ड होवे डेलायट वेळ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>मॅक्वेरी आयलँड वेळ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>मगादान वेळ</generic> @@ -3563,13 +3531,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>मॉसन वेळ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>वायव्य मेक्सिको वेळ</generic> - <standard>वायव्य मेक्सिको प्रमाणीत वेळ</standard> - <daylight>वायव्य मेक्सिको डेलायट वेळ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>मेक्सिकन प्रशांत वेळ</generic> diff --git a/make/data/cldr/common/main/kok_IN.xml b/make/data/cldr/common/main/kok_IN.xml index 82baeca7fffff..3703cee56b6c7 100644 --- a/make/data/cldr/common/main/kok_IN.xml +++ b/make/data/cldr/common/main/kok_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kpe.xml b/make/data/cldr/common/main/kpe.xml index 18f4623a1607c..8bceeab689370 100644 --- a/make/data/cldr/common/main/kpe.xml +++ b/make/data/cldr/common/main/kpe.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kpe_GN.xml b/make/data/cldr/common/main/kpe_GN.xml index 6bf6f082de0c2..520baa5999fb8 100644 --- a/make/data/cldr/common/main/kpe_GN.xml +++ b/make/data/cldr/common/main/kpe_GN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kpe_LR.xml b/make/data/cldr/common/main/kpe_LR.xml index c014fb185f484..cf2c35b04500e 100644 --- a/make/data/cldr/common/main/kpe_LR.xml +++ b/make/data/cldr/common/main/kpe_LR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ks.xml b/make/data/cldr/common/main/ks.xml index 479d8703aa45f..626e06c784de6 100644 --- a/make/data/cldr/common/main/ks.xml +++ b/make/data/cldr/common/main/ks.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -37,7 +37,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="arn">ایرو کونِیَن</language> <language type="arp">اَراپاہو</language> <language type="arw">اَراوَک</language> - <language type="as">اسٲمۍ</language> + <language type="as">اسٲمؠ</language> <language type="ast">ایسٹوٗریَن</language> <language type="av">اَوارِک</language> <language type="awa">اَوَدی</language> @@ -57,7 +57,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="bin">بِنی</language> <language type="bla">سِکسِکا</language> <language type="bm">بَمبارا</language> - <language type="bn">بَنگٲلۍ</language> + <language type="bn">بَنگٲلؠ</language> <language type="bo">تِبتی</language> <language type="br">بریٹَن</language> <language type="bra">برج</language> @@ -113,14 +113,14 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="eka">ایکاجُک</language> <language type="el">یوٗنٲنی</language> <language type="elx">ایلامایِٹ</language> - <language type="en">اَنگیٖزۍ</language> - <language type="en_AU">آسٹریلیَن اَنگریٖزۍ</language> - <language type="en_CA">کینَڈِیٲیی اَنگریٖزۍ</language> - <language type="en_GB">بَرطانوی اَنگریٖزۍ</language> - <language type="en_GB" alt="short">UK اَنٛگریٖزۍ</language> - <language type="en_US">امریٖکی اَنٛگریٖزۍ</language> - <language type="en_US" alt="short">US اَنٛگریٖزۍ</language> - <language type="enm">وَسطی اَنگریٖزۍ</language> + <language type="en">اَنگیٖزؠ</language> + <language type="en_AU">آسٹریلیَن اَنگریٖزؠ</language> + <language type="en_CA">کینَڈِیٲیی اَنگریٖزؠ</language> + <language type="en_GB">بَرطانوی اَنگریٖزؠ</language> + <language type="en_GB" alt="short">UK اَنٛگریٖزؠ</language> + <language type="en_US">امریٖکی اَنٛگریٖزؠ</language> + <language type="en_US" alt="short">US اَنٛگریٖزؠ</language> + <language type="enm">وَسطی اَنگریٖزؠ</language> <language type="eo">ایسپَرینٹو</language> <language type="es">ہسپانوی</language> <language type="es_419">لاطیٖنی امریٖکی ہسپانوی</language> @@ -170,7 +170,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="ha">ہاوسا</language> <language type="hai">ہَیدا</language> <language type="haw">ہوایِیَن</language> - <language type="he">عبرٲنۍ</language> + <language type="he">عبرٲنؠ</language> <language type="hi">ہِندی</language> <language type="hil">ہِلیٖگینَن</language> <language type="hit">ہِتایِت</language> @@ -196,7 +196,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="is">آیِسلینڈِک</language> <language type="it">اِطالوی</language> <language type="iu">اِنُکتِتوٗ</language> - <language type="ja">جاپٲنۍ</language> + <language type="ja">جاپٲنؠ</language> <language type="jbo">لوجبان</language> <language type="jpr">جوڈیو فارسی</language> <language type="jrb">جوڈیو عربی</language> @@ -278,7 +278,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="mni">مَنیپوٗری</language> <language type="moh">موہاک</language> <language type="mos">موسی</language> - <language type="mr">مَرٲٹھۍ</language> + <language type="mr">مَرٲٹھؠ</language> <language type="ms">مَلَے</language> <language type="mt">مَلتیٖس</language> <language type="mul">واریاہ زبان</language> @@ -292,7 +292,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="nb">ناروییَن بوکمال</language> <language type="nd">شُمال ڈَبیل</language> <language type="nds">بۆنِم جٔرمَن</language> - <language type="ne">نیپٲلۍ</language> + <language type="ne">نیپٲلؠ</language> <language type="new">نیواری</language> <language type="ng">ڈونگا</language> <language type="nia">نِیاس</language> @@ -320,7 +320,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="os">اۆسیٹِک</language> <language type="osa">اۆسیج</language> <language type="ota">اوٹومَن تُرکِش</language> - <language type="pa">پَنجٲبۍ</language> + <language type="pa">پَنجٲبؠ</language> <language type="pag">پَنگاسِنَن</language> <language type="pal">پَہلَوی</language> <language type="pam">پَمپَنگا</language> @@ -337,7 +337,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="pt_BR">برازیٖلی پُرتَگیٖز</language> <language type="pt_PT">یوٗرپی پُرتَگیٖز</language> <language type="qu">کُویشُوا</language> - <language type="raj">راجِستھٲنۍ</language> + <language type="raj">راجِستھٲنؠ</language> <language type="rap">رَپانوی</language> <language type="rar">رَروٹونگَن</language> <language type="rm">رومانش</language> @@ -423,7 +423,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <language type="uga">اُگارتِک</language> <language type="uk">یوٗکرینیٲیی</language> <language type="umb">یُمبُندوٗ</language> - <language type="und">اَنزٲنۍ یا نَہ لَگہٕہار زبان</language> + <language type="und">اَنزٲنؠ یا نَہ لَگہٕہار زبان</language> <language type="ur">اُردوٗ</language> <language type="uz">اُزبیک</language> <language type="vai">واے</language> @@ -463,7 +463,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <script type="Avst">اَویستَن</script> <script type="Bali">بالَنیٖز</script> <script type="Batk">باتَک</script> - <script type="Beng">بینگٲلۍ</script> + <script type="Beng">بینگٲلؠ</script> <script type="Blis">بِلِس سِمبلز</script> <script type="Bopo">بوپوموفو</script> <script type="Brah">براہمی</script> @@ -491,13 +491,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic <script type="Goth">گوتھِک</script> <script type="Grek">گرَنتھا</script> <script type="Gujr">گریٖک</script> - <script type="Guru">گُجرٲتۍ</script> + <script type="Guru">گُجرٲتؠ</script> <script type="Hang">ہانگُل</script> <script type="Hani">ہان</script> <script type="Hano">ہانُنوٗ</script> - <script type="Hans">سَہل ﴿ترجمع اِشارٕ: یِم ورژن رَسم الخط ہُک ناؤ چھُ چیٖنی باپتھ زَبانٕ ناؤ کِس مجموعَس سٕتۍ اِستعمال یِوان کرنٕہ۔﴾</script> + <script type="Hans">سَہل ﴿ترجمع اِشارٕ: یِم ورژن رَسم الخط ہُک ناؤ چھُ چیٖنی باپتھ زَبانٕ ناؤ کِس مجموعَس سٕتؠ اِستعمال یِوان کرنٕہ۔﴾</script> <script type="Hans" alt="stand-alone">سَہل ہان ﴿ترجمع اِشارٕ: یِم ورژن رَسم الخط ہُک ناؤ چھُ چیٖنی باپتھ زَبانٕ ناؤ کِس مجموعَس بغٲرٕ الگ اِستعمال یِوان کرنٕہ۔﴾</script> - <script type="Hant">رِوٲجی ﴿ترجمع اِشارٕ: یِم ورژن رَسم الخط ہُک ناؤ چھُ چیٖنی باپتھ زَبانٕ ناؤ کِس مجموعَس سٕتۍ اِستعمال یِوان کرنٕہ۔﴾</script> + <script type="Hant">رِوٲجی ﴿ترجمع اِشارٕ: یِم ورژن رَسم الخط ہُک ناؤ چھُ چیٖنی باپتھ زَبانٕ ناؤ کِس مجموعَس سٕتؠ اِستعمال یِوان کرنٕہ۔﴾</script> <script type="Hant" alt="stand-alone">رِوٲجی ہان ﴿ترجمع اِشارٕ: یِم ورژن رَسم الخط ہُک ناؤ چھُ چیٖنی باپتھ زَبانٕ ناؤ کِس مجموعَس بغٲرٕ الگ اِستعمال یِوان کرنٕہ۔﴾</script> <script type="Hebr">ہِبرِو</script> <script type="Hira">ہیٖراگانا</script> @@ -728,7 +728,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <territory type="IL">اسرا ییل</territory> <territory type="IM">آیِل آف مین</territory> <territory type="IN">ہِندوستان</territory> - <territory type="IO" draft="provisional">برطانوی بحرِ ہِندۍ علاقہٕ</territory> + <territory type="IO" draft="provisional">برطانوی بحرِ ہِندؠ علاقہٕ</territory> <territory type="IQ">ایٖراق</territory> <territory type="IR">ایٖران</territory> <territory type="IS">اَیِسلینڑ</territory> @@ -804,7 +804,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <territory type="PK">پاکِستان</territory> <territory type="PL">پولینڈ</territory> <territory type="PM">سینٹ پیٖری تہٕ موکیلِیَن</territory> - <territory type="PN">پِٹکیرٕنۍ جٔزیٖرٕ</territory> + <territory type="PN">پِٹکیرٕنؠ جٔزیٖرٕ</territory> <territory type="PR">پٔرٹو رِکو</territory> <territory type="PS">فلسطینی علاقٕہ</territory> <territory type="PS" alt="short">فلسطین</territory> @@ -890,22 +890,22 @@ CLDR data files are interpreted according to the LDML specification (http://unic <variant type="1606NICT">بعد وَقت وَسطی فرانس پؠٹھ ۱۶٠۶ تام</variant> <variant type="AREVELA">مَشرِقی اَمریٖکا</variant> <variant type="BAKU1926">جٔمع کٔرِتھ تُرکی لاطیٖنی اَچھر</variant> - <variant type="BISKE">سین جارجِیو/بِلا بوٗلۍ</variant> + <variant type="BISKE">سین جارجِیو/بِلا بوٗلؠ</variant> <variant type="FONIPA">آوازیات</variant> <variant type="FONUPA">یوٗ پی اے آوازِیات</variant> - <variant type="LIPAW">روٗسی زَبانہِ ہِنز لِپوواز بوٗلۍ</variant> + <variant type="LIPAW">روٗسی زَبانہِ ہِنز لِپوواز بوٗلؠ</variant> <variant type="MONOTON">اَکٔے لہجہٕ واجؠن زَبان</variant> - <variant type="NEDIS">نؠٹِسون بوٗلۍ</variant> - <variant type="NJIVA">نیجِوا بوٗلۍ</variant> - <variant type="OSOJS">اُشیکو/اوسوجین بوٗلۍ</variant> + <variant type="NEDIS">نؠٹِسون بوٗلؠ</variant> + <variant type="NJIVA">نیجِوا بوٗلؠ</variant> + <variant type="OSOJS">اُشیکو/اوسوجین بوٗلؠ</variant> <variant type="POLYTON">واریاہ لہجہٕ واجؠن زَبان</variant> <variant type="POSIX">کَمپیوٗٹَر</variant> <variant type="REVISED">دُبارٕ دۄہراونہٕ آمُت عِلمہِ ہِجا</variant> <variant type="ROZAJ">روٗسی</variant> <variant type="SAAHO">سوہو</variant> - <variant type="SCOTLAND">سُکاٹِش مَیعٲری اَنگریٖزۍ</variant> + <variant type="SCOTLAND">سُکاٹِش مَیعٲری اَنگریٖزؠ</variant> <variant type="SCOUSE">سِکوس</variant> - <variant type="SOLBA">ثٹولوِزا/سولبِکا بوٗلۍ</variant> + <variant type="SOLBA">ثٹولوِزا/سولبِکا بوٗلؠ</variant> <variant type="TARASK">تاراسکیٖوِکا علمہ ہِجاِ</variant> </variants> <keys> @@ -921,7 +921,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="calendar" type="islamic" draft="provisional">اِسلٲمی کیلنڑَر</type> <type key="calendar" type="islamic-civil" draft="provisional">اِسلٲمی اِجتمٲیی کیلنڑَر</type> <type key="calendar" type="iso8601">ISO-8601 کیلنڈر</type> - <type key="calendar" type="japanese">جاپٲنۍ کیلنڑَر</type> + <type key="calendar" type="japanese">جاپٲنؠ کیلنڑَر</type> <type key="calendar" type="roc">جموٗریٲتی چیٖنی کیلَنڑَر</type> <type key="collation" type="big5han">رؠوٲتی چیٖنی تِرتیٖب</type> <type key="collation" type="phonebook">فون بُک تَرتیٖب</type> @@ -951,7 +951,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic </orientation> </layout> <characters> - <exemplarCharacters>[ء آ أ ٲ ؤ ا ب پ ت ث ٹ ج چ ح خ د ذ ڈ ر ز ڑ ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ں ھ ہ و ۄ ۆ ی ۍ ؠ ے]</exemplarCharacters> + <exemplarCharacters>[ء آ أ ٲ ؤ ا ب پ ت ث ٹ ج چ ح خ د ذ ڈ ر ز ڑ ژ س ش ص ض ط ظ ع غ ف ق ک گ ل م ن ں ھ ہ و ۄ ۆ ی ؠ ے]</exemplarCharacters> <exemplarCharacters type="auxiliary">[\u200E\u200F َ ُ ِ ٔ ٕ ٟ ٖ ٗ ئ]</exemplarCharacters> <exemplarCharacters type="numbers">[\u200E \- ‑ , ٫ ٬ . % ‰ + 0۰ 1۱ 2۲ 3۳ 4۴ 5۵ 6۶ 7۷ 8۸ 9۹]</exemplarCharacters> <exemplarCharacters type="punctuation" draft="contributed">[\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″]</exemplarCharacters> @@ -989,7 +989,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <pattern>{1}, {0}</pattern> </dateTimeFormat> <dateTimeFormat type="atTime"> - <pattern>{0} پٮ۪ٹھۍ {1}</pattern> + <pattern>{0} پٮ۪ٹھؠ {1}</pattern> </dateTimeFormat> </dateTimeFormatLength> <dateTimeFormatLength type="long"> @@ -997,7 +997,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <pattern>{1}, {0}</pattern> </dateTimeFormat> <dateTimeFormat type="atTime"> - <pattern>{0} پٮ۪ٹھۍ {1}</pattern> + <pattern>{0} پٮ۪ٹھؠ {1}</pattern> </dateTimeFormat> </dateTimeFormatLength> <dateTimeFormatLength type="medium"> @@ -1338,7 +1338,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <pattern>{1}, {0}</pattern> </dateTimeFormat> <dateTimeFormat type="atTime"> - <pattern>{0} پٮ۪ٹھۍ {1}</pattern> + <pattern>{0} پٮ۪ٹھؠ {1}</pattern> </dateTimeFormat> </dateTimeFormatLength> <dateTimeFormatLength type="long"> @@ -1346,7 +1346,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <pattern>{1}, {0}</pattern> </dateTimeFormat> <dateTimeFormat type="atTime"> - <pattern>{0} پٮ۪ٹھۍ {1}</pattern> + <pattern>{0} پٮ۪ٹھؠ {1}</pattern> </dateTimeFormat> </dateTimeFormatLength> <dateTimeFormatLength type="medium"> @@ -1523,9 +1523,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic </field> <field type="month"> <displayName>رؠتھ</displayName> - <relative type="-1">پٔتِم ریتھۍ</relative> - <relative type="0">یٕہ ریتھۍ</relative> - <relative type="1">نو ریتھۍ</relative> + <relative type="-1">پٔتِم ریتھؠ</relative> + <relative type="0">یٕہ ریتھؠ</relative> + <relative type="1">نو ریتھؠ</relative> </field> <field type="week"> <displayName>ہفتہٕ</displayName> @@ -1683,9 +1683,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>مؠلبعارن</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>کیوٗری</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>حۄبٲٹ</exemplarCity> </zone> @@ -1836,9 +1833,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>کریسٹن</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>یؠلو نایِف</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>اؠڈمَنٹَن</exemplarCity> </zone> @@ -1857,30 +1851,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>رِسولیوٗٹ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>رینی رِوَر</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>رینکِن اِنلؠٹ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>اٹی کوکنٍ</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>تھَنڈر خلیٖج</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>نِپِگَن</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ٹورونٹو</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>اِقالیوٗیِت</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>پَنگنِرٹَنگ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>مونکٹٕن</exemplarCity> </zone> @@ -2685,18 +2667,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>دارالسلام</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>اُزگورود</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>کیٖو</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>سِمفیروپول</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>زَپوروزَے</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>کَمپالا</exemplarCity> </zone> @@ -2715,9 +2691,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>ہونولو لو</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>جانسٹَن</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>اَنکوراج</exemplarCity> </zone> @@ -3289,7 +3262,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic </metazone> <metazone type="Indian_Ocean"> <long> - <standard>ہِندوستٲنۍ اوشَن ٹائم</standard> + <standard>ہِندوستٲنؠ اوشَن ٹائم</standard> </long> </metazone> <metazone type="Indochina"> @@ -3314,8 +3287,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic </metazone> <metazone type="Iran"> <long> - <generic>اِیٖرٲنۍ ٹایِم</generic> - <standard>اِیٖرٲنۍ سٹینڑاڑ ٹایِم</standard> + <generic>اِیٖرٲنؠ ٹایِم</generic> + <standard>اِیٖرٲنؠ سٹینڑاڑ ٹایِم</standard> <daylight>اِیٖرٲنی سَمَر ٹایِم</daylight> </long> </metazone> @@ -3335,9 +3308,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic </metazone> <metazone type="Japan"> <long> - <generic>جاپٲنۍ ٹایِم</generic> - <standard>جاپٲنۍ سٹینڈرڈ ٹایِم</standard> - <daylight>جاپٲنۍ ڑےلایِٔٹ ٹایِم</daylight> + <generic>جاپٲنؠ ٹایِم</generic> + <standard>جاپٲنؠ سٹینڈرڈ ٹایِم</standard> + <daylight>جاپٲنؠ ڑےلایِٔٹ ٹایِم</daylight> </long> </metazone> <metazone type="Kamchatka"> @@ -3444,13 +3417,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>ماسَن ٹایِم</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>شُمال مغربی میکسیکو ٹائم</generic> - <standard>شُمال مغربی میکسیکو سٹینڈرڈ ٹائم</standard> - <daylight>شُمال مغربی میکسیکو ڈے لائٹ ٹائم</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>میکسیکن پیسیفک ٹائم</generic> @@ -3484,7 +3450,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic </metazone> <metazone type="Nepal"> <long> - <standard>نؠپٲلۍ ٹایِم</standard> + <standard>نؠپٲلؠ ٹایِم</standard> </long> </metazone> <metazone type="New_Caledonia"> @@ -4114,10 +4080,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic <displayName>اِزرٲیِلی پاونڑ</displayName> </currency> <currency type="ILS"> - <displayName>اِزرٲیِلی نٔوۍ شؠقٕل</displayName> + <displayName>اِزرٲیِلی نٔوؠ شؠقٕل</displayName> </currency> <currency type="INR"> - <displayName>ہِندُستٲنۍ رۄپَے</displayName> + <displayName>ہِندُستٲنؠ رۄپَے</displayName> </currency> <currency type="IQD"> <displayName>ایٖراقُک دیٖنار</displayName> @@ -4324,7 +4290,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <displayName>پھِلِپایِٔن پؠسو</displayName> </currency> <currency type="PKR"> - <displayName>پاکِستٲنۍ رۄپَے</displayName> + <displayName>پاکِستٲنؠ رۄپَے</displayName> </currency> <currency type="PLN"> <displayName>پولِش زلوٹی</displayName> diff --git a/make/data/cldr/common/main/ks_Arab.xml b/make/data/cldr/common/main/ks_Arab.xml index 4b51c1b607512..2a340e770c1a3 100644 --- a/make/data/cldr/common/main/ks_Arab.xml +++ b/make/data/cldr/common/main/ks_Arab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ks_Arab_IN.xml b/make/data/cldr/common/main/ks_Arab_IN.xml index 383884fe755b8..6edd11a8d2824 100644 --- a/make/data/cldr/common/main/ks_Arab_IN.xml +++ b/make/data/cldr/common/main/ks_Arab_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ks_Deva.xml b/make/data/cldr/common/main/ks_Deva.xml index a505f877ff1f8..9c7a38042074c 100644 --- a/make/data/cldr/common/main/ks_Deva.xml +++ b/make/data/cldr/common/main/ks_Deva.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ks_Deva_IN.xml b/make/data/cldr/common/main/ks_Deva_IN.xml index 6c84915c0e7b4..4227f7302fc07 100644 --- a/make/data/cldr/common/main/ks_Deva_IN.xml +++ b/make/data/cldr/common/main/ks_Deva_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ksb.xml b/make/data/cldr/common/main/ksb.xml index db35fd872d9d3..f2df1369f130b 100644 --- a/make/data/cldr/common/main/ksb.xml +++ b/make/data/cldr/common/main/ksb.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ksb_TZ.xml b/make/data/cldr/common/main/ksb_TZ.xml index 9f90a8eba6315..da76ac63cf176 100644 --- a/make/data/cldr/common/main/ksb_TZ.xml +++ b/make/data/cldr/common/main/ksb_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ksf.xml b/make/data/cldr/common/main/ksf.xml index e864e5aa9c253..4b0c73375ebec 100644 --- a/make/data/cldr/common/main/ksf.xml +++ b/make/data/cldr/common/main/ksf.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ksf_CM.xml b/make/data/cldr/common/main/ksf_CM.xml index 095c2470c3be2..08ed3a551ae1f 100644 --- a/make/data/cldr/common/main/ksf_CM.xml +++ b/make/data/cldr/common/main/ksf_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ksh.xml b/make/data/cldr/common/main/ksh.xml index a1928457fce8b..91c2227d0b46a 100644 --- a/make/data/cldr/common/main/ksh.xml +++ b/make/data/cldr/common/main/ksh.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1558,12 +1558,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Europe/Istanbul"> <exemplarCity draft="contributed">Istambul</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="contributed">Uschjorod</exemplarCity> - </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="contributed">Saporischschja</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity draft="contributed">Honululu</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/ksh_DE.xml b/make/data/cldr/common/main/ksh_DE.xml index fbbfae22929bb..b18a18bfc4758 100644 --- a/make/data/cldr/common/main/ksh_DE.xml +++ b/make/data/cldr/common/main/ksh_DE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ku.xml b/make/data/cldr/common/main/ku.xml index eae730476bacb..25b83ac71d234 100644 --- a/make/data/cldr/common/main/ku.xml +++ b/make/data/cldr/common/main/ku.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1033,9 +1033,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <greatestDifference id="y">G d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an'</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMEd"> - <greatestDifference id="d">G d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E</greatestDifference> - <greatestDifference id="M">G d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E</greatestDifference> - <greatestDifference id="y">G d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E</greatestDifference> + <greatestDifference id="d">G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E</greatestDifference> + <greatestDifference id="M">G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E</greatestDifference> + <greatestDifference id="y">G d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMM"> <greatestDifference id="M">G MMMM – MMMM y</greatestDifference> @@ -1393,9 +1393,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <greatestDifference id="y">d'ê' MMM'a' y'an' – d'ê' MMM'a' y'an'</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMEd"> - <greatestDifference id="d">d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E</greatestDifference> - <greatestDifference id="M">d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E</greatestDifference> - <greatestDifference id="y">d'ê' MMM'a' y'an' E  – d'ê' MMM'a' y'an' E</greatestDifference> + <greatestDifference id="d">d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E</greatestDifference> + <greatestDifference id="M">d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E</greatestDifference> + <greatestDifference id="y">d'ê' MMM'a' y'an' E – d'ê' MMM'a' y'an' E</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMM"> <greatestDifference id="M">MMMM – MMMM y</greatestDifference> @@ -1991,15 +1991,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Daruselam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ujgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kîev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporojye</exemplarCity> - </zone> <zone type="America/North_Dakota/Beulah"> <exemplarCity>Beûlah, Dakotaya Bakur</exemplarCity> </zone> @@ -2577,11 +2571,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Saeta Havînê ya Lord Howeyê</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Saeta Girava Macquarieyê</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Saeta Magadanê</generic> @@ -2621,29 +2610,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Saeta Mawsonê</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Saeta Meksîkoya Bakurrojava</generic> - <standard>Saeta Standard a Meksîkoya Bakurrojava</standard> - <daylight>Saeta Havînê ya Meksîkoya Bakurrojava</daylight> - </long> - <short> - <generic draft="contributed">SMBR</generic> - <standard draft="contributed">SSMBR</standard> - <daylight draft="contributed">SHMBR</daylight> - </short> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Saeta Pasîfîka Meksîkayê</generic> <standard>Saeta Standard a Pasîfîka Meksîkayê</standard> <daylight>Saeta Havînê ya Pasîfîka Meksîkayê</daylight> </long> - <short> - <generic draft="contributed">SPM</generic> - <standard draft="contributed">SSPM</standard> - <daylight draft="contributed">SHPM</daylight> - </short> </metazone> <metazone type="Mongolia"> <long> @@ -2782,11 +2754,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Saeta Standard a Saint Pierre û Miquelonê</standard> <daylight>Saeta Havînê ya Saint Pierre û Miquelonê</daylight> </long> - <short> - <generic draft="contributed">SSPM</generic> - <standard draft="contributed">SSSPM</standard> - <daylight draft="contributed">SHSPM</daylight> - </short> </metazone> <metazone type="Pitcairn"> <long> diff --git a/make/data/cldr/common/main/ku_TR.xml b/make/data/cldr/common/main/ku_TR.xml index 73d2460200c79..852a953e7a412 100644 --- a/make/data/cldr/common/main/ku_TR.xml +++ b/make/data/cldr/common/main/ku_TR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kw.xml b/make/data/cldr/common/main/kw.xml index 86d19c29d2415..08ea8631d5806 100644 --- a/make/data/cldr/common/main/kw.xml +++ b/make/data/cldr/common/main/kw.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kw_GB.xml b/make/data/cldr/common/main/kw_GB.xml index 03eb5bb3666d6..271dc8fbdfdfb 100644 --- a/make/data/cldr/common/main/kw_GB.xml +++ b/make/data/cldr/common/main/kw_GB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kxv.xml b/make/data/cldr/common/main/kxv.xml index 8682339f2dd91..94057d326aa5a 100644 --- a/make/data/cldr/common/main/kxv.xml +++ b/make/data/cldr/common/main/kxv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1135,9 +1135,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>kresṭon</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>yellonaip</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>eḍmonṭon</exemplarCity> </zone> @@ -1156,30 +1153,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>rejalyuṭ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>reni rivr</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>rankin inledṭ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>eṭikoken</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>tanḍr be</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>nipigen</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ṭoronṭo</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ikaluiṭ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>pangnirtung</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>monkṭon</exemplarCity> </zone> @@ -1987,18 +1972,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>dar es salaam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ujhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>kiyv</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>simperopol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>japorjye</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>kmpala</exemplarCity> </zone> @@ -2014,9 +1993,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Nome"> <exemplarCity>nom</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>johnsṭon</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ankoraj</exemplarCity> </zone> @@ -2652,11 +2628,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>laṛ hawe ḍelāiṭ belā</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>makwārī dīp belā</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>māgādan belā</generic> @@ -2696,13 +2667,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>māwosn belā</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>utar weḍā kūṇpū meksik belā</generic> - <standard>utar weḍā kūṇpū meksik mānānka belā</standard> - <daylight>utar weḍā kūṇpū meksik ḍelāiṭ belā</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>meksikān pesipic belā</generic> diff --git a/make/data/cldr/common/main/kxv_Deva.xml b/make/data/cldr/common/main/kxv_Deva.xml index ce4fd9a04628d..70a746e6a4584 100644 --- a/make/data/cldr/common/main/kxv_Deva.xml +++ b/make/data/cldr/common/main/kxv_Deva.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kxv_Deva_IN.xml b/make/data/cldr/common/main/kxv_Deva_IN.xml index c48747ae4f34d..06f9b2a11eca6 100644 --- a/make/data/cldr/common/main/kxv_Deva_IN.xml +++ b/make/data/cldr/common/main/kxv_Deva_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kxv_Latn.xml b/make/data/cldr/common/main/kxv_Latn.xml index 80edfd74b7b59..d96d9162905a6 100644 --- a/make/data/cldr/common/main/kxv_Latn.xml +++ b/make/data/cldr/common/main/kxv_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kxv_Latn_IN.xml b/make/data/cldr/common/main/kxv_Latn_IN.xml index d76e6982ae7ba..fb1044bcca83f 100644 --- a/make/data/cldr/common/main/kxv_Latn_IN.xml +++ b/make/data/cldr/common/main/kxv_Latn_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kxv_Orya.xml b/make/data/cldr/common/main/kxv_Orya.xml index 2e80de7ee33da..948e43892dd0c 100644 --- a/make/data/cldr/common/main/kxv_Orya.xml +++ b/make/data/cldr/common/main/kxv_Orya.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kxv_Orya_IN.xml b/make/data/cldr/common/main/kxv_Orya_IN.xml index 590073986f7a6..cedd119b862d7 100644 --- a/make/data/cldr/common/main/kxv_Orya_IN.xml +++ b/make/data/cldr/common/main/kxv_Orya_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kxv_Telu.xml b/make/data/cldr/common/main/kxv_Telu.xml index c7b3dd3fabe8c..349281b4273ad 100644 --- a/make/data/cldr/common/main/kxv_Telu.xml +++ b/make/data/cldr/common/main/kxv_Telu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/kxv_Telu_IN.xml b/make/data/cldr/common/main/kxv_Telu_IN.xml index 31c2167ca3fa2..efd968cf3d155 100644 --- a/make/data/cldr/common/main/kxv_Telu_IN.xml +++ b/make/data/cldr/common/main/kxv_Telu_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ky.xml b/make/data/cldr/common/main/ky.xml index 8c5abd4c2c2e3..60781875fb6ff 100644 --- a/make/data/cldr/common/main/ky.xml +++ b/make/data/cldr/common/main/ky.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1954,9 +1954,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </fields> <timeZoneNames> <regionFormat>{0} убактысы</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Санта Изабел</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Бирдиктүү дүйнөлүк убакыт</standard> @@ -2079,9 +2076,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Мельбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Керри</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -2235,9 +2229,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Йеллоунайф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Эдмонтон</exemplarCity> </zone> @@ -2256,30 +2247,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Резолут</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рейни Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Рэнкин Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Атикокан</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Сандер Бей</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Икалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангиртуң</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -3093,18 +3072,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар эс Салаам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферополь</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожье</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -3123,9 +3096,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Гонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Жонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Анкориж</exemplarCity> </zone> @@ -3761,11 +3731,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Лорд Хау жайкы убактысы</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Макуари убактысы</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магадан убактысы</generic> @@ -3805,13 +3770,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Моусон убактысы</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Түндүк-чыгыш Мексика убактысы</generic> - <standard>Түндүк-чыгыш Мексика кышкы убактысы</standard> - <daylight>Түндүк-чыгыш Мексика жайкы убактысы</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Мексика, Тынч океан убактысы</generic> diff --git a/make/data/cldr/common/main/ky_KG.xml b/make/data/cldr/common/main/ky_KG.xml index 7f70962d0f8d9..ec1b189c38295 100644 --- a/make/data/cldr/common/main/ky_KG.xml +++ b/make/data/cldr/common/main/ky_KG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/la.xml b/make/data/cldr/common/main/la.xml index 186fdabaf64df..ac6303dcfee8f 100644 --- a/make/data/cldr/common/main/la.xml +++ b/make/data/cldr/common/main/la.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/la_VA.xml b/make/data/cldr/common/main/la_VA.xml index c14b6ed224ed6..882936a2d1146 100644 --- a/make/data/cldr/common/main/la_VA.xml +++ b/make/data/cldr/common/main/la_VA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lag.xml b/make/data/cldr/common/main/lag.xml index 2da4f1f861a12..c24bb2857fe5f 100644 --- a/make/data/cldr/common/main/lag.xml +++ b/make/data/cldr/common/main/lag.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lag_TZ.xml b/make/data/cldr/common/main/lag_TZ.xml index 0f06bad908e49..bbada3821dab9 100644 --- a/make/data/cldr/common/main/lag_TZ.xml +++ b/make/data/cldr/common/main/lag_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lb.xml b/make/data/cldr/common/main/lb.xml index a681ff1b7410f..3088a99f343a3 100644 --- a/make/data/cldr/common/main/lb.xml +++ b/make/data/cldr/common/main/lb.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1128,7 +1128,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="gb2312han">Vereinfacht Chinesesch - GB2312</type> <type key="collation" type="phonebook">Telefonsbuch-Zortéierung</type> <type key="collation" type="pinyin">Pinyin-Zortéierregelen</type> - <type key="collation" type="reformed">Reforméiert Zortéierreiefolleg</type> <type key="collation" type="search">Allgemeng Sich</type> <type key="collation" type="searchjl">Sich no Ufanksbuschtawen aus dem koreaneschen Alphabet</type> <type key="collation" type="standard">Standard Zortéierreiefolleg</type> @@ -2342,15 +2341,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Asia/Taipei"> <exemplarCity>Taipeh</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uschgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiew</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Saporischschja</exemplarCity> - </zone> <zone type="Asia/Tashkent"> <exemplarCity>Taschkent</exemplarCity> </zone> @@ -2887,11 +2880,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Lord-Howe-Summerzäit</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarieinsel-Zäit</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan-Zäit</generic> @@ -2931,13 +2919,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mawson-Zäit</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Nordwest-Mexiko-Zäit</generic> - <standard>Nordwest-Mexiko-Normalzäit</standard> - <daylight>Nordwest-Mexiko-Summerzäit</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexikanesch Pazifikzäit</generic> diff --git a/make/data/cldr/common/main/lb_LU.xml b/make/data/cldr/common/main/lb_LU.xml index ea9fafdce7ed9..80db736f3914f 100644 --- a/make/data/cldr/common/main/lb_LU.xml +++ b/make/data/cldr/common/main/lb_LU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lg.xml b/make/data/cldr/common/main/lg.xml index e59e727aaf6ac..968e74f542d3d 100644 --- a/make/data/cldr/common/main/lg.xml +++ b/make/data/cldr/common/main/lg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lg_UG.xml b/make/data/cldr/common/main/lg_UG.xml index 9f794c81e5dd6..cb4923685ddea 100644 --- a/make/data/cldr/common/main/lg_UG.xml +++ b/make/data/cldr/common/main/lg_UG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lij.xml b/make/data/cldr/common/main/lij.xml index d69c2e99c27ad..5ab1baa01740e 100644 --- a/make/data/cldr/common/main/lij.xml +++ b/make/data/cldr/common/main/lij.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Proper interpretation of these files requires synthesis of missing items, as per @@ -2713,11 +2713,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="unconfirmed">oa de stæ de Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">oa de l’isoa Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="unconfirmed">oa de Magadan</generic> @@ -2757,13 +2752,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard draft="unconfirmed">oa de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">oa do Mescico do nòrd-ponente</generic> - <standard draft="unconfirmed">oa standard do Mescico do nòrd-ponente</standard> - <daylight draft="unconfirmed">oa de stæ do Mescico do nòrd-ponente</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">oa do Paçifico mescicaña</generic> diff --git a/make/data/cldr/common/main/lij_IT.xml b/make/data/cldr/common/main/lij_IT.xml index 0c7b1575aa9ab..4481b5e5d411a 100644 --- a/make/data/cldr/common/main/lij_IT.xml +++ b/make/data/cldr/common/main/lij_IT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Proper interpretation of these files requires synthesis of missing items, as per diff --git a/make/data/cldr/common/main/lkt.xml b/make/data/cldr/common/main/lkt.xml index 2f5b31006de4c..7dbe08b1c0d5a 100644 --- a/make/data/cldr/common/main/lkt.xml +++ b/make/data/cldr/common/main/lkt.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lkt_US.xml b/make/data/cldr/common/main/lkt_US.xml index 415769eea87d9..4351b161d3f77 100644 --- a/make/data/cldr/common/main/lkt_US.xml +++ b/make/data/cldr/common/main/lkt_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lmo.xml b/make/data/cldr/common/main/lmo.xml index 3ca0e5c6e1da0..b50fb89c66bf4 100644 --- a/make/data/cldr/common/main/lmo.xml +++ b/make/data/cldr/common/main/lmo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lmo_IT.xml b/make/data/cldr/common/main/lmo_IT.xml index ecc417479a4e3..6f3d11658bc91 100644 --- a/make/data/cldr/common/main/lmo_IT.xml +++ b/make/data/cldr/common/main/lmo_IT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ln.xml b/make/data/cldr/common/main/ln.xml index 35d08f6c23be2..6f6222fad2a97 100644 --- a/make/data/cldr/common/main/ln.xml +++ b/make/data/cldr/common/main/ln.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ln_AO.xml b/make/data/cldr/common/main/ln_AO.xml index 6b2faf65b5c66..09b1c3d2ea4e9 100644 --- a/make/data/cldr/common/main/ln_AO.xml +++ b/make/data/cldr/common/main/ln_AO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ln_CD.xml b/make/data/cldr/common/main/ln_CD.xml index 38c201d1ef3da..7d2f2b7ed9330 100644 --- a/make/data/cldr/common/main/ln_CD.xml +++ b/make/data/cldr/common/main/ln_CD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ln_CF.xml b/make/data/cldr/common/main/ln_CF.xml index ebe27cdaf377f..694908121f5d0 100644 --- a/make/data/cldr/common/main/ln_CF.xml +++ b/make/data/cldr/common/main/ln_CF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ln_CG.xml b/make/data/cldr/common/main/ln_CG.xml index de4c31b22e951..51c8a9a07f8d3 100644 --- a/make/data/cldr/common/main/ln_CG.xml +++ b/make/data/cldr/common/main/ln_CG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lo.xml b/make/data/cldr/common/main/lo.xml index a7dd2f4db091a..4bad8dcdf54aa 100644 --- a/make/data/cldr/common/main/lo.xml +++ b/make/data/cldr/common/main/lo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1157,7 +1157,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="gb2312han">ລຽງຕາມອັກສອນຈີນປະຍຸກ</type> <type key="collation" type="phonebook">ລຽງຕາມສະໝຸດໂທລະສັບ</type> <type key="collation" type="pinyin">ລຽງຕາມການອອກສຽງພາສາຈີນ</type> - <type key="collation" type="reformed">ລຽງຕາມລຳດັບສຸດທ້າຍ</type> <type key="collation" type="search">ການຊອກຫາທົ່ວໄປ</type> <type key="collation" type="searchjl">ຄົ້ນຫາຕາມພະຍັນຊະນະຂຶ້ນຕົ້ນທີ່ເປັນຮັງກີຣ</type> <type key="collation" type="standard">ຮຽງຕາມມາດຕະຖານ</type> @@ -2754,9 +2753,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>ເວລາ {0}</regionFormat> <regionFormat type="daylight">ເວລາກາງເວັນ {0}</regionFormat> <regionFormat type="standard">ເວລາມາດຕະຖານ {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>ຊານຕາ ອິດຊາເບວ</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>ເວລາສາກົນເຊີງພິກັດ</standard> @@ -2879,9 +2875,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>ເມວເບິນ</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ກູຣີ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ໂຮບາດ</exemplarCity> </zone> @@ -3035,9 +3028,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ເຄຣສຕັນ</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ເຢໂລໄນຟ໌</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ເອດມອນຕອນ</exemplarCity> </zone> @@ -3056,30 +3046,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ເຣໂຊລຸດ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ເຣນນີ ຣິເວີ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ແຣນກິນ ອິນເລັດ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ອາທິໂຄຄານ</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ທັນເດີເບ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ນີປີກອນ</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ໂທຣອນໂຕ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ອີກົວລິດ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ແພງເນີດທັງ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ມອນຕັນ</exemplarCity> </zone> @@ -3893,18 +3871,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ດາເອສສະລາມ</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ອັສຊ໌ກໍໂຣດ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>ຂຽບ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ຊີມເຟໂລໂປ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ຊາໂປໂຣຊີ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>ຄຳປາລາ</exemplarCity> </zone> @@ -3923,9 +3895,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ໂຮໂນລູລູ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ຈອນສະໂຕນ</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ແອນເຄີເຣກ</exemplarCity> </zone> @@ -4611,11 +4580,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>ເວລາລະດູຮ້ອນມາເກົາ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>ເວ​ລາ​ເກາະ​ແມັກ​ຄົວ​ຣີ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>ເວລາເມັກກາເດນ</generic> @@ -4655,13 +4619,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>ເວລາມໍສັນ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>​ເວ​ລາ​ນອດ​ເວ​ສ​ເມັກ​ຊິ​ໂກ</generic> - <standard>​ເວ​ລາ​ມາດ​ຕະ​ຖານນອດ​ເວ​ສ​ເມັກ​ຊິ​ໂກ</standard> - <daylight>ເວລາກາງເວັນເມັກຊິກັນນອດເວສ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>ເວລາແປຊິຟິກເມັກຊິກັນ</generic> diff --git a/make/data/cldr/common/main/lo_LA.xml b/make/data/cldr/common/main/lo_LA.xml index ee744a3d3ff90..3bb8132ccca03 100644 --- a/make/data/cldr/common/main/lo_LA.xml +++ b/make/data/cldr/common/main/lo_LA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lrc.xml b/make/data/cldr/common/main/lrc.xml index c4799a2e68fd3..fc5ef7c2fe809 100644 --- a/make/data/cldr/common/main/lrc.xml +++ b/make/data/cldr/common/main/lrc.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lrc_IQ.xml b/make/data/cldr/common/main/lrc_IQ.xml index 522e4775657d4..28c931d4b5bf9 100644 --- a/make/data/cldr/common/main/lrc_IQ.xml +++ b/make/data/cldr/common/main/lrc_IQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lrc_IR.xml b/make/data/cldr/common/main/lrc_IR.xml index b081c2bba427a..ba23a13e760e5 100644 --- a/make/data/cldr/common/main/lrc_IR.xml +++ b/make/data/cldr/common/main/lrc_IR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lt.xml b/make/data/cldr/common/main/lt.xml index 46cc9da0f6942..3e2e2951e0a74 100644 --- a/make/data/cldr/common/main/lt.xml +++ b/make/data/cldr/common/main/lt.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1251,7 +1251,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">telefonų knygos rūšiavimo tvarka</type> <type key="collation" type="phonetic">Fonetinė rikiavimo tvarka</type> <type key="collation" type="pinyin">supaprastinta kiniškų hieroglifų rūšiavimo tvarka</type> - <type key="collation" type="reformed">reformuota rūšiavimo tvarka</type> <type key="collation" type="search">bendroji paieška</type> <type key="collation" type="searchjl" draft="provisional">ieškoti pagal hangul pirmines priebalses</type> <type key="collation" type="standard">standartinis rikiavimas</type> @@ -2896,9 +2895,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Laikas: {0}</regionFormat> <regionFormat type="daylight">Vasaros laikas: {0}</regionFormat> <regionFormat type="standard">Žiemos laikas: {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Izabelė</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>pasaulio suderintasis laikas</standard> @@ -3018,9 +3014,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Melburnas</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Karis</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Hobartas</exemplarCity> </zone> @@ -3162,9 +3155,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Krestonas</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Jelounaifas</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Edmontonas</exemplarCity> </zone> @@ -3183,30 +3173,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Resolutas</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Reini Riveris</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Rankin Inletas</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Atikokanas</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Tander Bėjus</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Nipigonas</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Torontas</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikaluitas</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pangnirtungas</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Monktonas</exemplarCity> </zone> @@ -3954,18 +3932,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar es Salamas</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užhorodas</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kijevas</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Simferopolis</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporožė</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity>Midvėjus</exemplarCity> </zone> @@ -3981,9 +3953,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Džonstonas</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Ankoridžas</exemplarCity> </zone> @@ -4668,11 +4637,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Makau vasaros laikas</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Makvorio Salos laikas</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadano laikas</generic> @@ -4712,13 +4676,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mosono laikas</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Šiaurės Vakarų Meksikos laikas</generic> - <standard>Šiaurės Vakarų Meksikos žiemos laikas</standard> - <daylight>Šiaurės Vakarų Meksikos vasaros laikas</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksikos Ramiojo vandenyno laikas</generic> diff --git a/make/data/cldr/common/main/lt_LT.xml b/make/data/cldr/common/main/lt_LT.xml index a102ddf6dbc69..0d971009e4c4b 100644 --- a/make/data/cldr/common/main/lt_LT.xml +++ b/make/data/cldr/common/main/lt_LT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lu.xml b/make/data/cldr/common/main/lu.xml index dc6a9e6a39448..94e964dd36fe3 100644 --- a/make/data/cldr/common/main/lu.xml +++ b/make/data/cldr/common/main/lu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lu_CD.xml b/make/data/cldr/common/main/lu_CD.xml index 7ba972ca5a55f..826ad6749cd1c 100644 --- a/make/data/cldr/common/main/lu_CD.xml +++ b/make/data/cldr/common/main/lu_CD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/luo.xml b/make/data/cldr/common/main/luo.xml index 8b6f5d669c5a0..b60480e457ae0 100644 --- a/make/data/cldr/common/main/luo.xml +++ b/make/data/cldr/common/main/luo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/luo_KE.xml b/make/data/cldr/common/main/luo_KE.xml index 32ea5aee9dadd..053db7388d787 100644 --- a/make/data/cldr/common/main/luo_KE.xml +++ b/make/data/cldr/common/main/luo_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/luy.xml b/make/data/cldr/common/main/luy.xml index df6bd7d76eced..a3ec56ed28fab 100644 --- a/make/data/cldr/common/main/luy.xml +++ b/make/data/cldr/common/main/luy.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/luy_KE.xml b/make/data/cldr/common/main/luy_KE.xml index 3721de263f041..e5b25757a5906 100644 --- a/make/data/cldr/common/main/luy_KE.xml +++ b/make/data/cldr/common/main/luy_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/lv.xml b/make/data/cldr/common/main/lv.xml index 1c175ffc3a972..c8009e5b1ddcd 100644 --- a/make/data/cldr/common/main/lv.xml +++ b/make/data/cldr/common/main/lv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1058,7 +1058,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">tālruņu grāmatas kārtošanas secība</type> <type key="collation" type="phonetic">Fonētiskā kārtošanas secība</type> <type key="collation" type="pinyin">piņjiņa kārtošanas secība</type> - <type key="collation" type="reformed">Reformētā kārtošanas secība</type> <type key="collation" type="search">vispārīga meklēšana</type> <type key="collation" type="searchjl">Meklēt pēc Hangul sākuma līdzskaņa</type> <type key="collation" type="standard">standarta kārtošanas secība</type> @@ -1146,9 +1145,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </codePatterns> </localeDisplayNames> <characters> - <exemplarCharacters>[aā b c č d eē f g ģ h iī j k ķ l ļ m n ņ o p r s š t uū v z ž]</exemplarCharacters> + <exemplarCharacters>[a ā b c č d e ē f g ģ h i ī j k ķ l ļ m n ņ o p r s š t u ū v z ž]</exemplarCharacters> <exemplarCharacters type="auxiliary">[y ō q ŗ w x]</exemplarCharacters> - <exemplarCharacters type="index">[AĀ B C Č D EĒ F G Ģ H IĪY J K Ķ L Ļ M N Ņ O P Q R S Š T UŪ V W X Z Ž]</exemplarCharacters> + <exemplarCharacters type="index">[A Ā B C Č D E Ē F G Ģ H I Y Ī J K Ķ L Ļ M N Ņ O P Q R S Š T U Ū V W X Z Ž]</exemplarCharacters> <exemplarCharacters type="numbers">[  \- ‑ , % ‰ + 0 1 2 3 4 5 6 7 8 9]</exemplarCharacters> <exemplarCharacters type="punctuation">[\- ‐‑ – — , ; \: ! ? . … '‘’‚ "“”„ ( ) \[ \] § @ * / \& # † ‡ ′ ″]</exemplarCharacters> <ellipsis type="word-final">{0}…</ellipsis> @@ -2462,9 +2461,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat type="daylight">{0}: vasaras laiks</regionFormat> <regionFormat type="standard">{0}: standarta laiks</regionFormat> <fallbackFormat>{0} ({1})</fallbackFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santaisabela</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Universālais koordinētais laiks</standard> @@ -2581,9 +2577,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Melburna</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kari</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Hobārta</exemplarCity> </zone> @@ -2716,9 +2709,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Krestona</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Jelounaifa</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Edmontona</exemplarCity> </zone> @@ -2737,27 +2727,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Rezolūta</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Reinirivera</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Rankininleta</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Atikokana</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Tanderbeja</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Nipigona</exemplarCity> - </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikaluita</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pannirtuna</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Monktona</exemplarCity> </zone> @@ -3472,18 +3450,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dāresalāma</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užhoroda</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kijeva</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Simferopole</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporožje</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity>Midvejs</exemplarCity> </zone> @@ -3499,9 +3471,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Džonstona atols</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Ankurāža</exemplarCity> </zone> @@ -4145,11 +4114,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Lorda Hava salas vasaras laiks</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Makvorija salas laiks</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadanas laiks</generic> @@ -4189,13 +4153,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mosonas laiks</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Ziemeļrietumu Meksikas laiks</generic> - <standard>Ziemeļrietumu Meksikas ziemas laiks</standard> - <daylight>Ziemeļrietumu Meksikas vasaras laiks</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksikas Klusā okeāna piekrastes laiks</generic> diff --git a/make/data/cldr/common/main/lv_LV.xml b/make/data/cldr/common/main/lv_LV.xml index 74921875c2d3b..722169e2367ce 100644 --- a/make/data/cldr/common/main/lv_LV.xml +++ b/make/data/cldr/common/main/lv_LV.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mai.xml b/make/data/cldr/common/main/mai.xml index 88234fe368c8b..2920468139f7a 100644 --- a/make/data/cldr/common/main/mai.xml +++ b/make/data/cldr/common/main/mai.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1733,9 +1733,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>क्रेस्टन</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>येलोनाइफ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>एडमोंटोन</exemplarCity> </zone> @@ -1754,30 +1751,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>रेसालूत</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>रेनी रिवर</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>रेंकिन इनलेट</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>अटिकोकन</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>थंडर बे</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>निपिगान</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>टोरंटो</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>इकालविट</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>पैंगनिरटंग</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>मान्कटान</exemplarCity> </zone> @@ -2501,18 +2486,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>डारे सलाम</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>उझोरोद</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>कीव</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>सिम्फेरोपोल</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>जपोरोजाए</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>कमपाला</exemplarCity> </zone> @@ -3092,11 +3071,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>लार्ड होबे डेलाइट टाइम</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>मेक्वैरी द्वीप टाइम</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>मगादान टाइम</generic> @@ -3121,13 +3095,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>मारीशस समर टाइम</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>उत्तर-पश्चिमी मैक्सिको टाइम</generic> - <standard>उत्तर-पश्चिमी मैक्सिको मानक टाइम</standard> - <daylight>उत्तर-पश्चिमी मैक्सिको डेलाइट टाइम</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>मैक्सिकन पेसिफिक टाइम</generic> diff --git a/make/data/cldr/common/main/mai_IN.xml b/make/data/cldr/common/main/mai_IN.xml index 0a7af5039e4b0..5723c4896b9d1 100644 --- a/make/data/cldr/common/main/mai_IN.xml +++ b/make/data/cldr/common/main/mai_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mas.xml b/make/data/cldr/common/main/mas.xml index 23cb44b716de7..3c9a16ba879ff 100644 --- a/make/data/cldr/common/main/mas.xml +++ b/make/data/cldr/common/main/mas.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mas_KE.xml b/make/data/cldr/common/main/mas_KE.xml index 5e2b2829a32fe..8fd05e37ceb45 100644 --- a/make/data/cldr/common/main/mas_KE.xml +++ b/make/data/cldr/common/main/mas_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mas_TZ.xml b/make/data/cldr/common/main/mas_TZ.xml index 521840ff22f1e..9614975030fdb 100644 --- a/make/data/cldr/common/main/mas_TZ.xml +++ b/make/data/cldr/common/main/mas_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mdf.xml b/make/data/cldr/common/main/mdf.xml index e7b7651901fb9..23a1e567eabd2 100644 --- a/make/data/cldr/common/main/mdf.xml +++ b/make/data/cldr/common/main/mdf.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mdf_RU.xml b/make/data/cldr/common/main/mdf_RU.xml index e48359e322f3d..63f14c8e2645a 100644 --- a/make/data/cldr/common/main/mdf_RU.xml +++ b/make/data/cldr/common/main/mdf_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mer.xml b/make/data/cldr/common/main/mer.xml index 105b8d97b2a7f..d4bcbd8c1ebaf 100644 --- a/make/data/cldr/common/main/mer.xml +++ b/make/data/cldr/common/main/mer.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mer_KE.xml b/make/data/cldr/common/main/mer_KE.xml index 403ce5bca9b6f..6a9bf6854dfd4 100644 --- a/make/data/cldr/common/main/mer_KE.xml +++ b/make/data/cldr/common/main/mer_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mfe.xml b/make/data/cldr/common/main/mfe.xml index 8a2f3072522f0..a7c8df749a771 100644 --- a/make/data/cldr/common/main/mfe.xml +++ b/make/data/cldr/common/main/mfe.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mfe_MU.xml b/make/data/cldr/common/main/mfe_MU.xml index c9cbc6f68e6b0..bc6821ba0858f 100644 --- a/make/data/cldr/common/main/mfe_MU.xml +++ b/make/data/cldr/common/main/mfe_MU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mg.xml b/make/data/cldr/common/main/mg.xml index 68cb2113a4028..0174d0ea16a02 100644 --- a/make/data/cldr/common/main/mg.xml +++ b/make/data/cldr/common/main/mg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mg_MG.xml b/make/data/cldr/common/main/mg_MG.xml index 21a1a7681c178..fc8aa9874fd0a 100644 --- a/make/data/cldr/common/main/mg_MG.xml +++ b/make/data/cldr/common/main/mg_MG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mgh.xml b/make/data/cldr/common/main/mgh.xml index ad70d89e373bf..5799a350ee554 100644 --- a/make/data/cldr/common/main/mgh.xml +++ b/make/data/cldr/common/main/mgh.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mgh_MZ.xml b/make/data/cldr/common/main/mgh_MZ.xml index e59981df5324b..c220df1088f83 100644 --- a/make/data/cldr/common/main/mgh_MZ.xml +++ b/make/data/cldr/common/main/mgh_MZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mgo.xml b/make/data/cldr/common/main/mgo.xml index 9ab489ad71d52..66ac062562020 100644 --- a/make/data/cldr/common/main/mgo.xml +++ b/make/data/cldr/common/main/mgo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mgo_CM.xml b/make/data/cldr/common/main/mgo_CM.xml index c39835e66f661..493705ed80667 100644 --- a/make/data/cldr/common/main/mgo_CM.xml +++ b/make/data/cldr/common/main/mgo_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mi.xml b/make/data/cldr/common/main/mi.xml index 75c01090e757d..f06a7132a6324 100644 --- a/make/data/cldr/common/main/mi.xml +++ b/make/data/cldr/common/main/mi.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1829,9 +1829,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Cambridge_Bay"> <exemplarCity>Kemureti Pei</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Whaitiri Pei</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Tāroto</exemplarCity> </zone> @@ -2602,11 +2599,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Wā Lord Howe Awatea</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Wā o Te Moutere Makoare</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Wā Magadan</generic> @@ -2646,13 +2638,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Wā Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Wā Mēhiko ki te uru-mā-raki</generic> - <standard>Wā Arowhānui o Mēhiko ki te uru-mā-raki</standard> - <daylight>Wā Awatea o Mēhiko ki te uru-mā-raki</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Wā Mēhiko Kiwa</generic> diff --git a/make/data/cldr/common/main/mi_NZ.xml b/make/data/cldr/common/main/mi_NZ.xml index bd33d3b7adaea..93e252d87269f 100644 --- a/make/data/cldr/common/main/mi_NZ.xml +++ b/make/data/cldr/common/main/mi_NZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mic.xml b/make/data/cldr/common/main/mic.xml index 5f65b3dd38c50..55f82bd7442fe 100644 --- a/make/data/cldr/common/main/mic.xml +++ b/make/data/cldr/common/main/mic.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mic_CA.xml b/make/data/cldr/common/main/mic_CA.xml index 5b8852c7943d8..cbe2e9e703baa 100644 --- a/make/data/cldr/common/main/mic_CA.xml +++ b/make/data/cldr/common/main/mic_CA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mk.xml b/make/data/cldr/common/main/mk.xml index f40588a7fecee..638e9972a4b44 100644 --- a/make/data/cldr/common/main/mk.xml +++ b/make/data/cldr/common/main/mk.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2884,9 +2884,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </fields> <timeZoneNames> <regionFormat>Време во {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Света Изабела</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Координирано универзално време</standard> @@ -3009,9 +3006,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Мелбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Курие</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -3165,9 +3159,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Јелоунајф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Едмонтон</exemplarCity> </zone> @@ -3186,30 +3177,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Резолут</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рејни Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ренкин Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Корал Харбор</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тандр Беј</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Икалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангниртунг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -4023,18 +4002,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар ес Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферопол</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожје</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -4053,9 +4026,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Хонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Џонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Енкориџ</exemplarCity> </zone> @@ -4720,11 +4690,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Летно сметање на времето во Лорд Хау</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Време на Островот Макуари</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Време во Магадан</generic> @@ -4764,13 +4729,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Време во Мосон</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Време во северозападно Мексико</generic> - <standard>Стандардно време во северозападно Мексико</standard> - <daylight>Летно сметање на времето во северозападно Мексико</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Пацифичко време во Мексико</generic> diff --git a/make/data/cldr/common/main/mk_MK.xml b/make/data/cldr/common/main/mk_MK.xml index dc7c3e7fd8c0b..2921dd641b5cd 100644 --- a/make/data/cldr/common/main/mk_MK.xml +++ b/make/data/cldr/common/main/mk_MK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ml.xml b/make/data/cldr/common/main/ml.xml index 63a5082b08026..f71f5745bf806 100644 --- a/make/data/cldr/common/main/ml.xml +++ b/make/data/cldr/common/main/ml.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2291,9 +2291,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} സമയം</regionFormat> <regionFormat type="daylight">{0} ഡേലൈറ്റ് സമയം</regionFormat> <regionFormat type="standard">{0} സ്റ്റാൻഡേർഡ് സമയം</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>സാന്ത ഇസബേൽ</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>കോർഡിനേറ്റഡ് യൂണിവേഴ്‌സൽ സമയം</standard> @@ -2416,9 +2413,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>മെൽബൺ</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ക്യൂറി</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ഹൊബാർട്ട്</exemplarCity> </zone> @@ -2572,9 +2566,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ക്രെസ്റ്റൺ</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>യെല്ലോനൈഫ്</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>എഡ്മോൺടൺ</exemplarCity> </zone> @@ -2593,30 +2584,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>റെസല്യൂട്ട്</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>റെയ്നി റിവർ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>റാങ്കിൻ ഇൻലെറ്റ്</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ഏറ്റികോക്കൺ</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>തണ്ടർ ബേ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>നിപ്പിഗോൺ</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ടൊറന്റോ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ഇഖാലിത്</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>പാൻഗ്‌നിറ്റംഗ്</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>മോംഗ്‌ടൻ</exemplarCity> </zone> @@ -3430,18 +3409,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ദാർ എസ് സലാം</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ഉസ്ഗൊറോഡ്</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>കീവ്</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>സിംഫെറോപോൾ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>സാപ്പറോസൈ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>കമ്പാല</exemplarCity> </zone> @@ -3460,9 +3433,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ഹോണലൂലു</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ജോൺസ്റ്റൺ</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ആങ്കറേജ്</exemplarCity> </zone> @@ -4160,11 +4130,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>മകൌ വേനൽക്കാല സമയം</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>മക്വാറി ദ്വീപ് സമയം</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>മഗാദൻ സമയം</generic> @@ -4204,13 +4169,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>മാസൺ സമയം</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>വടക്കുപടിഞ്ഞാറൻ മെക്സിക്കൻ സമയം</generic> - <standard>വടക്കുപടിഞ്ഞാറൻ മെക്‌സിക്കൻ സ്റ്റാൻഡേർഡ് സമയം</standard> - <daylight>വടക്കുപടിഞ്ഞാറൻ മെക്സിക്കൻ ഡേലൈറ്റ് സമയം</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>മെക്സിക്കൻ പസഫിക് സമയം</generic> diff --git a/make/data/cldr/common/main/ml_IN.xml b/make/data/cldr/common/main/ml_IN.xml index 057d97c357a70..1cfb17d6fbb3e 100644 --- a/make/data/cldr/common/main/ml_IN.xml +++ b/make/data/cldr/common/main/ml_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mn.xml b/make/data/cldr/common/main/mn.xml index b5085945472a6..23d8dc9c83c36 100644 --- a/make/data/cldr/common/main/mn.xml +++ b/make/data/cldr/common/main/mn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1004,7 +1004,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="gb2312han">Хялбаршуулсан хятад Эрэмбэлэх дараалал - GB2312</type> <type key="collation" type="phonebook">Утасны дэвтрийн эрэмбэлэх дараалал</type> <type key="collation" type="pinyin">Пиньян эрэмбэлэх дараалал</type> - <type key="collation" type="reformed">Шинэчилсэн эрэмбэлэх дараалал</type> <type key="collation" type="search">ерөнхий хайлт</type> <type key="collation" type="searchjl">Хангүлээр эхний гийгүүлэгчээр хайх</type> <type key="collation" type="standard">стандарт эрэмбэлэх дараалал</type> @@ -2061,9 +2060,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0}-н цаг</regionFormat> <regionFormat type="daylight">{0}-н зуны цаг</regionFormat> <regionFormat type="standard">{0}-н стандарт цаг</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Санта Изабель</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Олон улсын зохицуулалттай цаг</standard> @@ -2186,9 +2182,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Мельбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Кюрри</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -2342,9 +2335,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Йелоунайф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Эдмонтон</exemplarCity> </zone> @@ -2363,30 +2353,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Резолют</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рейни Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Рэнкин Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Атикокан</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Сандер Бэй</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Икалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангниртунг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -3200,18 +3178,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар-эс-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферополь</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожье</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -3230,9 +3202,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Хонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Жонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Анкораж</exemplarCity> </zone> @@ -3868,11 +3837,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Лорд Хоугийн зуны цаг</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Маккуори Арлын цаг</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магаданы цаг</generic> @@ -3912,13 +3876,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Моусоны цаг</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Баруун хойд Мексикийн цаг</generic> - <standard>Баруун хойд Мексикийн стандарт цаг</standard> - <daylight>Баруун хойд Мексикийн зуны цаг</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Мексик-Номхон далайн цаг</generic> diff --git a/make/data/cldr/common/main/mn_MN.xml b/make/data/cldr/common/main/mn_MN.xml index 388fe9ad541e9..4a2f173ca5855 100644 --- a/make/data/cldr/common/main/mn_MN.xml +++ b/make/data/cldr/common/main/mn_MN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mn_Mong.xml b/make/data/cldr/common/main/mn_Mong.xml index 2fa8326078ac5..252ac0d5a1a9d 100644 --- a/make/data/cldr/common/main/mn_Mong.xml +++ b/make/data/cldr/common/main/mn_Mong.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mn_Mong_CN.xml b/make/data/cldr/common/main/mn_Mong_CN.xml index 9879d57fc7eaa..84aa98185f0bd 100644 --- a/make/data/cldr/common/main/mn_Mong_CN.xml +++ b/make/data/cldr/common/main/mn_Mong_CN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mn_Mong_MN.xml b/make/data/cldr/common/main/mn_Mong_MN.xml index f8b90fe6e115f..d512403c7e1bf 100644 --- a/make/data/cldr/common/main/mn_Mong_MN.xml +++ b/make/data/cldr/common/main/mn_Mong_MN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mni.xml b/make/data/cldr/common/main/mni.xml index 811c2753be306..345427427f618 100644 --- a/make/data/cldr/common/main/mni.xml +++ b/make/data/cldr/common/main/mni.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mni_Beng.xml b/make/data/cldr/common/main/mni_Beng.xml index 4f6e71f881061..9efb5c5a59ca2 100644 --- a/make/data/cldr/common/main/mni_Beng.xml +++ b/make/data/cldr/common/main/mni_Beng.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mni_Beng_IN.xml b/make/data/cldr/common/main/mni_Beng_IN.xml index 880999fbe3037..bf54e2ee0b532 100644 --- a/make/data/cldr/common/main/mni_Beng_IN.xml +++ b/make/data/cldr/common/main/mni_Beng_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mni_Mtei.xml b/make/data/cldr/common/main/mni_Mtei.xml index a92604804c78d..c3f491dffb6a3 100644 --- a/make/data/cldr/common/main/mni_Mtei.xml +++ b/make/data/cldr/common/main/mni_Mtei.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mni_Mtei_IN.xml b/make/data/cldr/common/main/mni_Mtei_IN.xml index 40c5a7b54c6ea..7691ca713f296 100644 --- a/make/data/cldr/common/main/mni_Mtei_IN.xml +++ b/make/data/cldr/common/main/mni_Mtei_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/moh.xml b/make/data/cldr/common/main/moh.xml index dce1422a3d7ef..13db5330ce96f 100644 --- a/make/data/cldr/common/main/moh.xml +++ b/make/data/cldr/common/main/moh.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/moh_CA.xml b/make/data/cldr/common/main/moh_CA.xml index ed26e0c99fe77..9f977507b81df 100644 --- a/make/data/cldr/common/main/moh_CA.xml +++ b/make/data/cldr/common/main/moh_CA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mr.xml b/make/data/cldr/common/main/mr.xml index 26fc360e1d752..d19b803f5ce57 100644 --- a/make/data/cldr/common/main/mr.xml +++ b/make/data/cldr/common/main/mr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1099,7 +1099,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">फोनबुक अनुक्रम</type> <type key="collation" type="phonetic">ध्वनीविचार क्रमवारी क्रम</type> <type key="collation" type="pinyin">पिनयिन अनुक्रम</type> - <type key="collation" type="reformed">पुनर्स्वरूपित अनुक्रम</type> <type key="collation" type="search">सामान्य हेतु शोध</type> <type key="collation" type="searchjl">हँगुल प्रारंभिक व्यंजनानुसार शोधा</type> <type key="collation" type="standard">प्रमाणित क्रमवारी क्रम</type> @@ -2425,9 +2424,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} वेळ</regionFormat> <regionFormat type="daylight">{0} सूर्यप्रकाश वेळ</regionFormat> <regionFormat type="standard">{0} प्रमाण वेळ</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>सांता इसाबेल</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>समन्वित वैश्विक वेळ</standard> @@ -2550,9 +2546,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>मेलबोर्न</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>कुह्री</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>होबार्ट</exemplarCity> </zone> @@ -2706,9 +2699,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>क्रेस्टन</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>यलोनाइफ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>एडमाँटन</exemplarCity> </zone> @@ -2727,30 +2717,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>रेजोल्यूट</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>रेनी नदी</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>रॅनकिन इनलेट</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>अॅटिकोकन</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>थंडर उपसागर</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>निपिगोन</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>टोरोंटो</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>इकालुइत</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>पँगनिरतुंग</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>माँकटन</exemplarCity> </zone> @@ -3564,18 +3542,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>दार ए सलाम</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>उझहोरोड</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>कीव</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>सिम्फरोपोल</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>झापोरोझे</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>कंपाला</exemplarCity> </zone> @@ -3594,9 +3566,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>होनोलुलू</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>जोहान्स्टन</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>अँकरेज</exemplarCity> </zone> @@ -4294,11 +4263,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>मकाऊ ग्रीष्मकालीन वेळ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>मॅक्वेरी बेट वेळ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>मॅगाडन वेळ</generic> @@ -4338,13 +4302,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>मॉसन वेळ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>वायव्य मेक्सिको वेळ</generic> - <standard>वायव्य मेक्सिको प्रमाण वेळ</standard> - <daylight>वायव्य मेक्सिको सूर्यप्रकाश वेळ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>मेक्सिको पॅसिफिक वेळ</generic> diff --git a/make/data/cldr/common/main/mr_IN.xml b/make/data/cldr/common/main/mr_IN.xml index d465b06c4042f..f21c66363d58c 100644 --- a/make/data/cldr/common/main/mr_IN.xml +++ b/make/data/cldr/common/main/mr_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ms.xml b/make/data/cldr/common/main/ms.xml index be6a9762eba43..c1382176e5165 100644 --- a/make/data/cldr/common/main/ms.xml +++ b/make/data/cldr/common/main/ms.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1112,7 +1112,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Aturan Isih Buku Telefon</type> <type key="collation" type="phonetic">Urutan Isih Fonetik</type> <type key="collation" type="pinyin">Aturan Isih Pinyin</type> - <type key="collation" type="reformed">Aturan Isih Pembaharuan</type> <type key="collation" type="search">Carian Tujuan Umum</type> <type key="collation" type="searchjl">Cari Mengikut Konsonan Awal Hangul</type> <type key="collation" type="standard">Tertib Isih Standard</type> @@ -2425,9 +2424,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Waktu {0}</regionFormat> <regionFormat type="daylight">Waktu Siang {0}</regionFormat> <regionFormat type="standard">Waktu Piawai {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Waktu Universal Selaras</standard> @@ -2436,18 +2432,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Etc/Unknown"> <exemplarCity>Bandar Tidak Diketahui</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="America/St_Barthelemy"> <exemplarCity>Saint Barthelemy</exemplarCity> </zone> <zone type="America/Cambridge_Bay"> <exemplarCity>Teluk Cambridge</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Sungai Rainy</exemplarCity> - </zone> <zone type="America/Goose_Bay"> <exemplarCity>Teluk Goose</exemplarCity> </zone> @@ -3058,11 +3048,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Waktu Musim Panas Macao</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Waktu Pulau Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Waktu Magadan</generic> @@ -3105,13 +3090,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Waktu Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Waktu Barat Laut Mexico</generic> - <standard>Waktu Piawai Barat Laut Mexico</standard> - <daylight>Waktu Siang Barat Laut Mexico</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Waktu Pasifik Mexico</generic> diff --git a/make/data/cldr/common/main/ms_Arab.xml b/make/data/cldr/common/main/ms_Arab.xml index f8cea01367643..0db76dd7e2abc 100644 --- a/make/data/cldr/common/main/ms_Arab.xml +++ b/make/data/cldr/common/main/ms_Arab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ms_Arab_BN.xml b/make/data/cldr/common/main/ms_Arab_BN.xml index cfac2af9bcdaf..03b60d8dc3aa6 100644 --- a/make/data/cldr/common/main/ms_Arab_BN.xml +++ b/make/data/cldr/common/main/ms_Arab_BN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ms_Arab_MY.xml b/make/data/cldr/common/main/ms_Arab_MY.xml index 31478d27c4ab0..bddd3315cb2b2 100644 --- a/make/data/cldr/common/main/ms_Arab_MY.xml +++ b/make/data/cldr/common/main/ms_Arab_MY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ms_BN.xml b/make/data/cldr/common/main/ms_BN.xml index d8561e0bc36ab..d156f483167da 100644 --- a/make/data/cldr/common/main/ms_BN.xml +++ b/make/data/cldr/common/main/ms_BN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ms_ID.xml b/make/data/cldr/common/main/ms_ID.xml index 197b758147ef8..0ca7f5756c9d0 100644 --- a/make/data/cldr/common/main/ms_ID.xml +++ b/make/data/cldr/common/main/ms_ID.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ms_MY.xml b/make/data/cldr/common/main/ms_MY.xml index 90b29f926c848..dda1253cdb55a 100644 --- a/make/data/cldr/common/main/ms_MY.xml +++ b/make/data/cldr/common/main/ms_MY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ms_SG.xml b/make/data/cldr/common/main/ms_SG.xml index 4182f9d6c8bf0..f799e1eef9e0b 100644 --- a/make/data/cldr/common/main/ms_SG.xml +++ b/make/data/cldr/common/main/ms_SG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mt.xml b/make/data/cldr/common/main/mt.xml index 90630a2de8d36..b9d33c5e0c73c 100644 --- a/make/data/cldr/common/main/mt.xml +++ b/make/data/cldr/common/main/mt.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1720,9 +1720,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Europe/Vienna"> <exemplarCity>Vjenna</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Brussels"> <exemplarCity>Brussell</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/mt_MT.xml b/make/data/cldr/common/main/mt_MT.xml index 1b7a403ebc201..b58fe9e55264b 100644 --- a/make/data/cldr/common/main/mt_MT.xml +++ b/make/data/cldr/common/main/mt_MT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mua.xml b/make/data/cldr/common/main/mua.xml index ba906c36deb92..da45b0d679bad 100644 --- a/make/data/cldr/common/main/mua.xml +++ b/make/data/cldr/common/main/mua.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mua_CM.xml b/make/data/cldr/common/main/mua_CM.xml index 8af56d08795a5..caad2d7cc7052 100644 --- a/make/data/cldr/common/main/mua_CM.xml +++ b/make/data/cldr/common/main/mua_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mus.xml b/make/data/cldr/common/main/mus.xml index 5aa33c03b94f5..c25ac4b0d9a6a 100644 --- a/make/data/cldr/common/main/mus.xml +++ b/make/data/cldr/common/main/mus.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -19,8 +19,8 @@ CLDR data files are interpreted according to the LDML specification (http://unic </territories> </localeDisplayNames> <characters> - <exemplarCharacters>[a c e f h i k l m n o p r s t u v w y ʼ]</exemplarCharacters> - <exemplarCharacters type="auxiliary">[b d ē g j q z]</exemplarCharacters> + <exemplarCharacters>[a c eē f h i k l m n o p r s t u v w y ʼ]</exemplarCharacters> + <exemplarCharacters type="auxiliary">[b d g j q z]</exemplarCharacters> <exemplarCharacters type="index">[A C E F H I K L M N O P R S T U V W Y]</exemplarCharacters> <exemplarCharacters type="punctuation">[\- ‐‑ – — , ; \: ! ? . … '‘’ "“” ( ) \[ \] § @ * / \& # † ‡ ′ ″]</exemplarCharacters> </characters> @@ -73,13 +73,13 @@ CLDR data files are interpreted according to the LDML specification (http://unic <days> <dayContext type="format"> <dayWidth type="wide"> - <day type="sun">Nettv Cako</day> + <day type="sun">Nettvʼcako</day> <day type="mon">Enhvteceskv</day> <day type="tue">Enhvteceskv Enhvyvtke</day> <day type="wed">Ennvrkvpv</day> <day type="thu">Ennvrkvpv Enhvyvtke</day> <day type="fri">Nak Okkoskv Nettv</day> - <day type="sat">Nettv Cakcuse</day> + <day type="sat">Nettv Cakʼcuse</day> </dayWidth> </dayContext> </days> @@ -142,7 +142,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <displayName>Hvse</displayName> </field> <field type="week"> - <displayName>Nettv Cako</displayName> + <displayName>Nettvcako</displayName> </field> <field type="day"> <displayName>Nettv</displayName> diff --git a/make/data/cldr/common/main/mus_US.xml b/make/data/cldr/common/main/mus_US.xml index 1f8591ec0724f..3c4734e80a6a7 100644 --- a/make/data/cldr/common/main/mus_US.xml +++ b/make/data/cldr/common/main/mus_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/my.xml b/make/data/cldr/common/main/my.xml index 84c3e543fd958..7fb0996ea9c94 100644 --- a/make/data/cldr/common/main/my.xml +++ b/make/data/cldr/common/main/my.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1710,9 +1710,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} အချိန်</regionFormat> <regionFormat type="daylight">{0} နွေရာသီ စံတော်ချိန်</regionFormat> <regionFormat type="standard">{0} စံတော်ချိန်</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>ဆန်တာ အစ္ဇဘဲလ်</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>ညှိထားသည့် ကမ္ဘာ့ စံတော်ချိန်</standard> @@ -1835,9 +1832,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>မဲလ်ဘုန်း</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ကာရီ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ဟိုးဘားတ်</exemplarCity> </zone> @@ -1991,9 +1985,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ကရစ်စတွန်</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ရဲလိုနိုက်ဖ်</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>အက်ဒ်မွန်တန်</exemplarCity> </zone> @@ -2012,30 +2003,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ရီဆိုလုပ်(တ်)</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ရိမ်းနီး ရီဗာ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ရန်ကင် အင်းလက်</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>အာတီကိုကန်</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>သန်းန်ဒါး ဘေး</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>နီပီဂွန်</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>တိုရန်တို</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>အီကာလူအီတ်</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ဖန်ဂ်နသ်တံ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>မွန်ခ်တွန်</exemplarCity> </zone> @@ -2849,18 +2828,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ဒါရက်စ်ဆာလမ်</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ဥဇ်ဂိုရို့တ်</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>ခီးအက်ဖ်</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>စင်ဖာရိုးဖို</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ဇာဖိုရိုးစ်ဂျာ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>ကမ်ပါလာ</exemplarCity> </zone> @@ -2879,9 +2852,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ဟိုနိုလူလူ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ဂျွန်စတန်</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>အန်ကာရေ့ဂျ်</exemplarCity> </zone> @@ -3529,11 +3499,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>မကာအို နွေရာသီ အချိန်</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>မက်ကွယ်ရီကျွန်း အချိန်</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>မာဂါဒန်း အချိန်</generic> @@ -3573,13 +3538,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>မော်စွန် အချိန်</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>အနောက်တောင် မက္ကဆီကို အချိန်</generic> - <standard>အနောက်တောင် မက္ကဆီကို စံတော်ချိန်</standard> - <daylight>အနောက်တောင် မက္ကစီကို နွေရာသီ စံတော်ချိန်</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>မက္ကဆီကန် ပစိဖိတ် အချိန်</generic> diff --git a/make/data/cldr/common/main/my_MM.xml b/make/data/cldr/common/main/my_MM.xml index 82b4ea2d629ce..e55a9021df14c 100644 --- a/make/data/cldr/common/main/my_MM.xml +++ b/make/data/cldr/common/main/my_MM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/myv.xml b/make/data/cldr/common/main/myv.xml index c02306f850329..58c41e016aea3 100644 --- a/make/data/cldr/common/main/myv.xml +++ b/make/data/cldr/common/main/myv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -508,18 +508,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Asia/Taipei"> <exemplarCity draft="unconfirmed">Тайпей</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="unconfirmed">Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity draft="unconfirmed">Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity draft="unconfirmed">Симферополь</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">Запорожье</exemplarCity> - </zone> <zone type="America/Boise"> <exemplarCity draft="unconfirmed">Бойси</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/myv_RU.xml b/make/data/cldr/common/main/myv_RU.xml index da3bfc9a168fd..d14f2711c1917 100644 --- a/make/data/cldr/common/main/myv_RU.xml +++ b/make/data/cldr/common/main/myv_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mzn.xml b/make/data/cldr/common/main/mzn.xml index 76e938f219630..599f5d52656b3 100644 --- a/make/data/cldr/common/main/mzn.xml +++ b/make/data/cldr/common/main/mzn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/mzn_IR.xml b/make/data/cldr/common/main/mzn_IR.xml index acda126e1686a..86f4ea580650f 100644 --- a/make/data/cldr/common/main/mzn_IR.xml +++ b/make/data/cldr/common/main/mzn_IR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/naq.xml b/make/data/cldr/common/main/naq.xml index c2d393e73557e..de8df9f5c9910 100644 --- a/make/data/cldr/common/main/naq.xml +++ b/make/data/cldr/common/main/naq.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/naq_NA.xml b/make/data/cldr/common/main/naq_NA.xml index 2e4c49f5d0cc9..cfc526d85fb91 100644 --- a/make/data/cldr/common/main/naq_NA.xml +++ b/make/data/cldr/common/main/naq_NA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nb.xml b/make/data/cldr/common/main/nb.xml index 5aa284e5240dc..e976bed763b16 100644 --- a/make/data/cldr/common/main/nb.xml +++ b/make/data/cldr/common/main/nb.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nb_NO.xml b/make/data/cldr/common/main/nb_NO.xml index d7d07ed560048..884d9ab3fec4f 100644 --- a/make/data/cldr/common/main/nb_NO.xml +++ b/make/data/cldr/common/main/nb_NO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nb_SJ.xml b/make/data/cldr/common/main/nb_SJ.xml index a6e024c7f95e2..c4a140911c48a 100644 --- a/make/data/cldr/common/main/nb_SJ.xml +++ b/make/data/cldr/common/main/nb_SJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nd.xml b/make/data/cldr/common/main/nd.xml index e2bd7af01bd95..090794fb3fa9e 100644 --- a/make/data/cldr/common/main/nd.xml +++ b/make/data/cldr/common/main/nd.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nd_ZW.xml b/make/data/cldr/common/main/nd_ZW.xml index d311aada9fb27..11463f23aa73f 100644 --- a/make/data/cldr/common/main/nd_ZW.xml +++ b/make/data/cldr/common/main/nd_ZW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nds.xml b/make/data/cldr/common/main/nds.xml index 3e0ae0bea9edd..9f827f0337d7b 100644 --- a/make/data/cldr/common/main/nds.xml +++ b/make/data/cldr/common/main/nds.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1554,12 +1554,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Asia/Kamchatka"> <exemplarCity draft="unconfirmed">Kamschatka</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="unconfirmed">Uschgorod</exemplarCity> - </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">Saporoschje</exemplarCity> - </zone> <zone type="America/North_Dakota/New_Salem"> <exemplarCity draft="unconfirmed">New Salem, Noord-Dakota</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/nds_DE.xml b/make/data/cldr/common/main/nds_DE.xml index 437a10b538734..b8080c1b38fe9 100644 --- a/make/data/cldr/common/main/nds_DE.xml +++ b/make/data/cldr/common/main/nds_DE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nds_NL.xml b/make/data/cldr/common/main/nds_NL.xml index 8f4ab54077a1b..c8b33f0cbb9d2 100644 --- a/make/data/cldr/common/main/nds_NL.xml +++ b/make/data/cldr/common/main/nds_NL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ne.xml b/make/data/cldr/common/main/ne.xml index f40f2e6bdc07b..d48508040b6ea 100644 --- a/make/data/cldr/common/main/ne.xml +++ b/make/data/cldr/common/main/ne.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1803,9 +1803,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} समय</regionFormat> <regionFormat type="daylight">{0} (+१)</regionFormat> <regionFormat type="standard">{0} (+०)</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>सान्टा ईसाबेल</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>समन्वित विश्व समय</standard> @@ -1928,9 +1925,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>मेल्बर्न</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>क्युरी</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>होभार्ट</exemplarCity> </zone> @@ -2084,9 +2078,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>क्रेस्टन</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>येल्लोनाइफ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>एड्मोन्टन</exemplarCity> </zone> @@ -2105,30 +2096,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>रिजोलुट</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>रेनिरिभर</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>रान्किन इन्लेट</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>एटिकोकान</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>थण्डर बे</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>निपिगन</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>टोरोन्टो</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>इक्वालुइट</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>पाङ्निरतुङ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>मोन्कटन</exemplarCity> </zone> @@ -2942,18 +2921,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>डार एस् सलाम</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>उझगोरद</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>किभ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>सिम्फेरोपोल</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>जापोरोझ्ये</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>काम्पाला</exemplarCity> </zone> @@ -2972,9 +2945,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>होनोलुलु</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>जोन्सटन</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>एङ्कोरेज</exemplarCity> </zone> @@ -3610,11 +3580,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>लर्ड हावे दिवा समय</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>माक्वेरी टापु समय</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>मागादान समय</generic> @@ -3654,13 +3619,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>म्वसन समय</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>उत्तर पश्चिम मेक्सिको समय</generic> - <standard>उत्तर पश्चिम मेक्सिकोको मानक समय</standard> - <daylight>उत्तर पश्चिम मेक्सिकोको दिवा समय</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>मेक्सिकन प्यासिफिक समय</generic> diff --git a/make/data/cldr/common/main/ne_IN.xml b/make/data/cldr/common/main/ne_IN.xml index 085ee6897bb89..3f6a9afd5b264 100644 --- a/make/data/cldr/common/main/ne_IN.xml +++ b/make/data/cldr/common/main/ne_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ne_NP.xml b/make/data/cldr/common/main/ne_NP.xml index 5bd9f42df74c2..47c6ac59d749f 100644 --- a/make/data/cldr/common/main/ne_NP.xml +++ b/make/data/cldr/common/main/ne_NP.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nl.xml b/make/data/cldr/common/main/nl.xml index faec9f164eb4d..8ff890e6dd5e2 100644 --- a/make/data/cldr/common/main/nl.xml +++ b/make/data/cldr/common/main/nl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1356,7 +1356,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Telefoonboeksorteervolgorde</type> <type key="collation" type="phonetic">Fonetische sorteervolgorde</type> <type key="collation" type="pinyin">Pinyinsorteervolgorde</type> - <type key="collation" type="reformed">Herziene sorteervolgorde</type> <type key="collation" type="search">algemeen zoeken</type> <type key="collation" type="searchjl" draft="contributed">Zoeken op eerste Hangul-medeklinker</type> <type key="collation" type="standard">standaard sorteervolgorde</type> @@ -3561,9 +3560,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>tijd in {0}</regionFormat> <regionFormat type="daylight">zomertijd in {0}</regionFormat> <regionFormat type="standard">standaardtijd in {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>gecoördineerde wereldtijd</standard> @@ -3590,9 +3586,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Wenen</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Baku"> <exemplarCity>Bakoe</exemplarCity> </zone> @@ -3844,15 +3837,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Istanbul"> <exemplarCity>Istanboel</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Oezjhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporizja</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <short> <generic draft="contributed">HST</generic> @@ -3921,9 +3908,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Alaska"> <long> - <generic>Alaska Time</generic> - <standard>Alaska Standard Time</standard> - <daylight>Alaska Daylight Time</daylight> + <generic>Alaska-tijd</generic> + <standard>Alaska-standaardtijd</standard> + <daylight>Alaska-zomertijd</daylight> </long> <short> <generic draft="contributed">AKT</generic> @@ -3940,16 +3927,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Amazon"> <long> - <generic>Amazon Time</generic> - <standard>Amazon Standard Time</standard> - <daylight>Amazon Summer Time</daylight> + <generic>Amazone-tijd</generic> + <standard>Amazone-standaardtijd</standard> + <daylight>Amazone-zomertijd</daylight> </long> </metazone> <metazone type="America_Central"> <long> - <generic>Central Time</generic> - <standard>Central Standard Time</standard> - <daylight>Central Daylight Time</daylight> + <generic>Central-tijd</generic> + <standard>Central-standaardtijd</standard> + <daylight>Central-zomertijd</daylight> </long> <short> <generic draft="contributed">CT</generic> @@ -3959,9 +3946,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="America_Eastern"> <long> - <generic>Eastern Time</generic> - <standard>Eastern Standard Time</standard> - <daylight>Eastern Daylight Time</daylight> + <generic>Eastern-tijd</generic> + <standard>Eastern-standaardtijd</standard> + <daylight>Eastern-zomertijd</daylight> </long> <short> <generic draft="contributed">ET</generic> @@ -3971,9 +3958,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="America_Mountain"> <long> - <generic>Mountain Time</generic> - <standard>Mountain Standard Time</standard> - <daylight>Mountain Daylight Time</daylight> + <generic>Mountain-tijd</generic> + <standard>Mountain-standaardtijd</standard> + <daylight>Mountain-zomertijd</daylight> </long> <short> <generic draft="contributed">MT</generic> @@ -3983,9 +3970,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="America_Pacific"> <long> - <generic>Pacific Time</generic> - <standard>Pacific Standard Time</standard> - <daylight>Pacific Daylight Time</daylight> + <generic>Pacific-tijd</generic> + <standard>Pacific-standaardtijd</standard> + <daylight>Pacific-zomertijd</daylight> </long> <short> <generic draft="contributed">PT</generic> @@ -4030,16 +4017,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Argentina"> <long> - <generic>Argentina Time</generic> - <standard>Argentina Standard Time</standard> - <daylight>Argentina Summer Time</daylight> + <generic>Argentijnse tijd</generic> + <standard>Argentijnse standaardtijd</standard> + <daylight>Argentijnse zomertijd</daylight> </long> </metazone> <metazone type="Argentina_Western"> <long> - <generic>Western Argentina Time</generic> - <standard>Western Argentina Standard Time</standard> - <daylight>Western Argentina Summer Time</daylight> + <generic>West-Argentijnse tijd</generic> + <standard>West-Argentijnse standaardtijd</standard> + <daylight>West-Argentijnse zomertijd</daylight> </long> </metazone> <metazone type="Armenia"> @@ -4051,9 +4038,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Atlantic"> <long> - <generic>Atlantic Time</generic> - <standard>Atlantic Standard Time</standard> - <daylight>Atlantic Daylight Time</daylight> + <generic>Atlantic-tijd</generic> + <standard>Atlantic-standaardtijd</standard> + <daylight>Atlantic-zomertijd</daylight> </long> <short> <generic draft="contributed">AT</generic> @@ -4117,14 +4104,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Bolivia"> <long> - <standard>Bolivia Time</standard> + <standard>Boliviaanse tijd</standard> </long> </metazone> <metazone type="Brasilia"> <long> - <generic>Brasilia Time</generic> - <standard>Brasilia Standard Time</standard> - <daylight>Brasilia Summer Time</daylight> + <generic>Braziliaanse tijd</generic> + <standard>Braziliaanse standaardtijd</standard> + <daylight>Braziliaanse zomertijd</daylight> </long> </metazone> <metazone type="Brunei"> @@ -4158,9 +4145,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Chile"> <long> - <generic>Chile Time</generic> - <standard>Chile Standard Time</standard> - <daylight>Chile Summer Time</daylight> + <generic>Chileense tijd</generic> + <standard>Chileense standaardtijd</standard> + <daylight>Chileense zomertijd</daylight> </long> </metazone> <metazone type="China"> @@ -4189,9 +4176,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Colombia"> <long> - <generic>Colombia Time</generic> - <standard>Colombia Standard Time</standard> - <daylight>Colombia Summer Time</daylight> + <generic>Colombiaanse tijd</generic> + <standard>Colombiaanse standaardtijd</standard> + <daylight>Colombiaanse zomertijd</daylight> </long> </metazone> <metazone type="Cook"> @@ -4203,9 +4190,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Cuba"> <long> - <generic>Cuba Time</generic> - <standard>Cuba Standard Time</standard> - <daylight>Cuba Daylight Time</daylight> + <generic>Cubaanse tijd</generic> + <standard>Cubaanse standaardtijd</standard> + <daylight>Cubaanse zomertijd</daylight> </long> </metazone> <metazone type="Davis"> @@ -4225,14 +4212,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Easter"> <long> - <generic>Easter Island Time</generic> - <standard>Easter Island Standard Time</standard> - <daylight>Easter Island Summer Time</daylight> + <generic>Paaseilandse tijd</generic> + <standard>Paaseilandse standaardtijd</standard> + <daylight>Paaseilandse zomertijd</daylight> </long> </metazone> <metazone type="Ecuador"> <long> - <standard>Ecuador Time</standard> + <standard>Ecuadoraanse tijd</standard> </long> </metazone> <metazone type="Europe_Central"> @@ -4278,9 +4265,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Falkland"> <long> - <generic>Falkland Islands Time</generic> - <standard>Falkland Islands Standard Time</standard> - <daylight>Falkland Islands Summer Time</daylight> + <generic>Falklandeilandse tijd</generic> + <standard>Falklandeilandse standaardtijd</standard> + <daylight>Falklandeilandse zomertijd</daylight> </long> </metazone> <metazone type="Fiji"> @@ -4292,7 +4279,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="French_Guiana"> <long> - <standard>French Guiana Time</standard> + <standard>Frans-Guyaanse tijd</standard> </long> </metazone> <metazone type="French_Southern"> @@ -4302,7 +4289,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Galapagos"> <long> - <standard>Galapagos Time</standard> + <standard>Galapagoseilandse tijd</standard> </long> </metazone> <metazone type="Gambier"> @@ -4332,16 +4319,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Greenland_Eastern"> <long> - <generic>East Greenland Time</generic> - <standard>East Greenland Standard Time</standard> - <daylight>East Greenland Summer Time</daylight> + <generic>Oost-Groenlandse tijd</generic> + <standard>Oost-Groenlandse standaardtijd</standard> + <daylight>Oost-Groenlandse zomertijd</daylight> </long> </metazone> <metazone type="Greenland_Western"> <long> - <generic>West Greenland Time</generic> - <standard>West Greenland Standard Time</standard> - <daylight>West Greenland Summer Time</daylight> + <generic>West-Groenlandse tijd</generic> + <standard>West-Groenlandse standaardtijd</standard> + <daylight>West-Groenlandse zomertijd</daylight> </long> </metazone> <metazone type="Guam"> @@ -4356,14 +4343,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Guyana"> <long> - <standard>Guyana Time</standard> + <standard>Guyaanse tijd</standard> </long> </metazone> <metazone type="Hawaii_Aleutian"> <long> - <generic>Hawaii-Aleutian Time</generic> - <standard>Hawaii-Aleutian Standard Time</standard> - <daylight>Hawaii-Aleutian Daylight Time</daylight> + <generic>Hawaii-Aleoetische tijd</generic> + <standard>Hawaii-Aleoetische standaardtijd</standard> + <daylight>Hawaii-Aleoetische zomertijd</daylight> </long> <short> <generic draft="contributed">HAT</generic> @@ -4508,11 +4495,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Macause zomertijd</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie-eilandse tijd</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan-tijd</generic> @@ -4552,18 +4534,11 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawson-tijd</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Northwest Mexico Time</generic> - <standard>Northwest Mexico Standard Time</standard> - <daylight>Northwest Mexico Daylight Time</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> - <generic>Mexican Pacific Time</generic> - <standard>Mexican Pacific Standard Time</standard> - <daylight>Mexican Pacific Daylight Time</daylight> + <generic>Mexicaanse Pacific-tijd</generic> + <standard>Mexicaanse Pacific-standaardtijd</standard> + <daylight>Mexicaanse Pacific-zomertijd</daylight> </long> </metazone> <metazone type="Mongolia"> @@ -4611,9 +4586,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Newfoundland"> <long> - <generic>Newfoundland Time</generic> - <standard>Newfoundland Standard Time</standard> - <daylight>Newfoundland Daylight Time</daylight> + <generic>Newfoundland-tijd</generic> + <standard>Newfoundland-standaardtijd</standard> + <daylight>Newfoundland-zomertijd</daylight> </long> </metazone> <metazone type="Niue"> @@ -4630,9 +4605,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Noronha"> <long> - <generic>Fernando de Noronha Time</generic> - <standard>Fernando de Noronha Standard Time</standard> - <daylight>Fernando de Noronha Summer Time</daylight> + <generic>Fernando de Noronha-tijd</generic> + <standard>Fernando de Noronha-standaardtijd</standard> + <daylight>Fernando de Noronha-zomertijd</daylight> </long> </metazone> <metazone type="North_Mariana"> @@ -4673,16 +4648,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Paraguay"> <long> - <generic>Paraguay Time</generic> - <standard>Paraguay Standard Time</standard> - <daylight>Paraguay Summer Time</daylight> + <generic>Paraguayaanse tijd</generic> + <standard>Paraguayaanse standaardtijd</standard> + <daylight>Paraguayaanse zomertijd</daylight> </long> </metazone> <metazone type="Peru"> <long> - <generic>Peru Time</generic> - <standard>Peru Standard Time</standard> - <daylight>Peru Summer Time</daylight> + <generic>Peruaanse tijd</generic> + <standard>Peruaanse standaardtijd</standard> + <daylight>Peruaanse zomertijd</daylight> </long> </metazone> <metazone type="Philippines"> @@ -4699,9 +4674,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Pierre_Miquelon"> <long> - <generic>St. Pierre & Miquelon Time</generic> - <standard>St. Pierre & Miquelon Standard Time</standard> - <daylight>St. Pierre & Miquelon Daylight Time</daylight> + <generic>Saint Pierre en Miquelon-tijd</generic> + <standard>Saint Pierre en Miquelon-standaardtijd</standard> + <daylight>Saint Pierre en Miquelon-zomertijd</daylight> </long> </metazone> <metazone type="Pitcairn"> @@ -4835,8 +4810,8 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Uruguay"> <long> - <generic>Uruguay Time</generic> - <standard>Uruguay Standard Time</standard> + <generic>Uruguayaanse tijd</generic> + <standard>Uruguayaanse standaardtijd</standard> <daylight>Uruguayaanse zomertijd</daylight> </long> </metazone> @@ -4904,7 +4879,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </metazone> <metazone type="Yukon"> <long> - <standard>Yukon Time</standard> + <standard>Yukon-tijd</standard> </long> </metazone> </timeZoneNames> @@ -6058,6 +6033,10 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <currency type="XCD"> <displayName>Oost-Caribische dollar</displayName> </currency> + <currency type="XCG"> + <displayName>Caribische gulden</displayName> + <symbol alt="narrow">Cg</symbol> + </currency> <currency type="XDR"> <displayName>Special Drawing Rights</displayName> </currency> diff --git a/make/data/cldr/common/main/nl_AW.xml b/make/data/cldr/common/main/nl_AW.xml index 8c50225ecaf14..e48888a943206 100644 --- a/make/data/cldr/common/main/nl_AW.xml +++ b/make/data/cldr/common/main/nl_AW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nl_BE.xml b/make/data/cldr/common/main/nl_BE.xml index 6aa80bb5ba689..36e44b41bc0f5 100644 --- a/make/data/cldr/common/main/nl_BE.xml +++ b/make/data/cldr/common/main/nl_BE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nl_BQ.xml b/make/data/cldr/common/main/nl_BQ.xml index f6a7ff1ed45ba..fb89bec8b1354 100644 --- a/make/data/cldr/common/main/nl_BQ.xml +++ b/make/data/cldr/common/main/nl_BQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nl_CW.xml b/make/data/cldr/common/main/nl_CW.xml index 356769980c298..11c3f1a2f6553 100644 --- a/make/data/cldr/common/main/nl_CW.xml +++ b/make/data/cldr/common/main/nl_CW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nl_NL.xml b/make/data/cldr/common/main/nl_NL.xml index c1029d8f90a3a..1a40318fdf1d8 100644 --- a/make/data/cldr/common/main/nl_NL.xml +++ b/make/data/cldr/common/main/nl_NL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nl_SR.xml b/make/data/cldr/common/main/nl_SR.xml index 4d87212fdbc32..c3ae94252dd52 100644 --- a/make/data/cldr/common/main/nl_SR.xml +++ b/make/data/cldr/common/main/nl_SR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nl_SX.xml b/make/data/cldr/common/main/nl_SX.xml index 362f8d5c9c118..e750bc8288613 100644 --- a/make/data/cldr/common/main/nl_SX.xml +++ b/make/data/cldr/common/main/nl_SX.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nmg.xml b/make/data/cldr/common/main/nmg.xml index 340245d3698d9..1b0e1530bd713 100644 --- a/make/data/cldr/common/main/nmg.xml +++ b/make/data/cldr/common/main/nmg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nmg_CM.xml b/make/data/cldr/common/main/nmg_CM.xml index c31e6dc2d55a2..7cdc4c81e89b0 100644 --- a/make/data/cldr/common/main/nmg_CM.xml +++ b/make/data/cldr/common/main/nmg_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nn.xml b/make/data/cldr/common/main/nn.xml index 5e395043c2997..3bdbc291fa527 100644 --- a/make/data/cldr/common/main/nn.xml +++ b/make/data/cldr/common/main/nn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1422,13 +1422,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>mauritisk sommartid</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>tidssone for nordvestlege Mexico</generic> - <standard>normaltid for nordvestlege Mexico</standard> - <daylight>sommartid for nordvestlege Mexico</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>tidssone for den meksikanske stillehavskysten</generic> diff --git a/make/data/cldr/common/main/nn_NO.xml b/make/data/cldr/common/main/nn_NO.xml index c84a0bb5c9069..8d15a18fed90a 100644 --- a/make/data/cldr/common/main/nn_NO.xml +++ b/make/data/cldr/common/main/nn_NO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nnh.xml b/make/data/cldr/common/main/nnh.xml index c4998898298c6..9d7b4ab82e1d1 100644 --- a/make/data/cldr/common/main/nnh.xml +++ b/make/data/cldr/common/main/nnh.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nnh_CM.xml b/make/data/cldr/common/main/nnh_CM.xml index f40f38c33633a..e4be7d0bed339 100644 --- a/make/data/cldr/common/main/nnh_CM.xml +++ b/make/data/cldr/common/main/nnh_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/no.xml b/make/data/cldr/common/main/no.xml index 3546bb19b628f..d92734444e5ec 100644 --- a/make/data/cldr/common/main/no.xml +++ b/make/data/cldr/common/main/no.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1284,7 +1284,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">telefonkatalogsortering</type> <type key="collation" type="phonetic">fonetisk sortering</type> <type key="collation" type="pinyin">pinyinsortering</type> - <type key="collation" type="reformed">reformert sortering</type> <type key="collation" type="search">generelt søk</type> <type key="collation" type="searchjl" draft="contributed">Søk etter første konsonant i hangul</type> <type key="collation" type="standard">standard sorteringsrekkefølge</type> @@ -3203,9 +3202,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>tidssone for {0}</regionFormat> <regionFormat type="daylight">sommertid – {0}</regionFormat> <regionFormat type="standard">normaltid – {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>koordinert universaltid</standard> @@ -3229,9 +3225,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Wien</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Brussels"> <exemplarCity>Brussel</exemplarCity> </zone> @@ -3479,12 +3472,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar-es-Salaam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzjhorod</exemplarCity> - </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporizjzja</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <short> <generic draft="contributed">HST</generic> @@ -4134,11 +4121,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Macau, sommertid</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>tidssone for Macquarieøya</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>tidssone for Magadan</generic> @@ -4178,13 +4160,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>tidssone for Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>tidssone for nordvestlige Mexico</generic> - <standard>normaltid for nordvestlige Mexico</standard> - <daylight>sommertid for nordvestlige Mexico</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>tidssone for den meksikanske Stillehavskysten</generic> diff --git a/make/data/cldr/common/main/nqo.xml b/make/data/cldr/common/main/nqo.xml index 858570d716382..b6b0d597d6968 100644 --- a/make/data/cldr/common/main/nqo.xml +++ b/make/data/cldr/common/main/nqo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nqo_GN.xml b/make/data/cldr/common/main/nqo_GN.xml index 3bde714a333b3..18820b62e579f 100644 --- a/make/data/cldr/common/main/nqo_GN.xml +++ b/make/data/cldr/common/main/nqo_GN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nr.xml b/make/data/cldr/common/main/nr.xml index b6a2e502f2c7f..12f2badb7a924 100644 --- a/make/data/cldr/common/main/nr.xml +++ b/make/data/cldr/common/main/nr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nr_ZA.xml b/make/data/cldr/common/main/nr_ZA.xml index b009779e64cd6..a3d30e250b9a2 100644 --- a/make/data/cldr/common/main/nr_ZA.xml +++ b/make/data/cldr/common/main/nr_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nso.xml b/make/data/cldr/common/main/nso.xml index b783dfa44aae3..2861eaab68590 100644 --- a/make/data/cldr/common/main/nso.xml +++ b/make/data/cldr/common/main/nso.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nso_ZA.xml b/make/data/cldr/common/main/nso_ZA.xml index ae90284ca6bb5..dcb283d3b2c78 100644 --- a/make/data/cldr/common/main/nso_ZA.xml +++ b/make/data/cldr/common/main/nso_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nus.xml b/make/data/cldr/common/main/nus.xml index e6244ed4d3f56..fef478634ee7e 100644 --- a/make/data/cldr/common/main/nus.xml +++ b/make/data/cldr/common/main/nus.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nus_SS.xml b/make/data/cldr/common/main/nus_SS.xml index 57dc90e0f6f16..8aa24a111037b 100644 --- a/make/data/cldr/common/main/nus_SS.xml +++ b/make/data/cldr/common/main/nus_SS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nv.xml b/make/data/cldr/common/main/nv.xml index af444dad97957..311f0fa810b15 100644 --- a/make/data/cldr/common/main/nv.xml +++ b/make/data/cldr/common/main/nv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nv_US.xml b/make/data/cldr/common/main/nv_US.xml index fb4fee382633e..09914927cd44d 100644 --- a/make/data/cldr/common/main/nv_US.xml +++ b/make/data/cldr/common/main/nv_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ny.xml b/make/data/cldr/common/main/ny.xml index 3493063fb5d1a..54f19ee0fd1c3 100644 --- a/make/data/cldr/common/main/ny.xml +++ b/make/data/cldr/common/main/ny.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ny_MW.xml b/make/data/cldr/common/main/ny_MW.xml index acd7b467f2e7d..e8ac1b7925abd 100644 --- a/make/data/cldr/common/main/ny_MW.xml +++ b/make/data/cldr/common/main/ny_MW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nyn.xml b/make/data/cldr/common/main/nyn.xml index f9f3867d0b552..cdb3cc3aa85ed 100644 --- a/make/data/cldr/common/main/nyn.xml +++ b/make/data/cldr/common/main/nyn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/nyn_UG.xml b/make/data/cldr/common/main/nyn_UG.xml index 5e90288970e7f..0594d79bfe979 100644 --- a/make/data/cldr/common/main/nyn_UG.xml +++ b/make/data/cldr/common/main/nyn_UG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/oc.xml b/make/data/cldr/common/main/oc.xml index 4f73324d5c50e..9112d362b1570 100644 --- a/make/data/cldr/common/main/oc.xml +++ b/make/data/cldr/common/main/oc.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1711,11 +1711,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">ora d’estiu de Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">ora de l’illa Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="unconfirmed">ora de Magadan</generic> @@ -1755,13 +1750,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard draft="unconfirmed">ora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">ora del nòrd-èst de Mexic</generic> - <standard draft="unconfirmed">ora estandarda del nòrd-èst de Mexic</standard> - <daylight draft="unconfirmed">ora d’estiu del nòrd-èst de Mexic</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">ora del Pacific Mexican</generic> diff --git a/make/data/cldr/common/main/oc_ES.xml b/make/data/cldr/common/main/oc_ES.xml index 7553860522f9e..98fc4cca45e80 100644 --- a/make/data/cldr/common/main/oc_ES.xml +++ b/make/data/cldr/common/main/oc_ES.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1230,9 +1230,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Europe/Simferopol"> <exemplarCity draft="unconfirmed">Simferòpol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">Zaporiyia</exemplarCity> - </zone> <zone type="America/North_Dakota/Beulah"> <exemplarCity draft="unconfirmed">Beulah, Dakota deth Nòrd</exemplarCity> </zone> @@ -1671,11 +1668,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard draft="unconfirmed">ora des Espòrades Equatorials</standard> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">ora dera Isla Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="unconfirmed">ora de Magadan</generic> @@ -1700,13 +1692,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">ora d’estiu de Maurici</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">ora deth nòrd-èst de Mexic</generic> - <standard draft="unconfirmed">ora estandard deth nòrd-èst de Mexic</standard> - <daylight draft="unconfirmed">ora d’estiu deth nòrd-èst de Mexic</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">ora deth Pacífic de Mexic</generic> diff --git a/make/data/cldr/common/main/oc_FR.xml b/make/data/cldr/common/main/oc_FR.xml index bd648173ca5e8..6018774650a74 100644 --- a/make/data/cldr/common/main/oc_FR.xml +++ b/make/data/cldr/common/main/oc_FR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/om.xml b/make/data/cldr/common/main/om.xml index 42cf179b2fa3b..673379b1e8a90 100644 --- a/make/data/cldr/common/main/om.xml +++ b/make/data/cldr/common/main/om.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/om_ET.xml b/make/data/cldr/common/main/om_ET.xml index a307367f36bd3..c4215878f67b8 100644 --- a/make/data/cldr/common/main/om_ET.xml +++ b/make/data/cldr/common/main/om_ET.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/om_KE.xml b/make/data/cldr/common/main/om_KE.xml index e9708ebea4c63..5a9d5b2019241 100644 --- a/make/data/cldr/common/main/om_KE.xml +++ b/make/data/cldr/common/main/om_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/or.xml b/make/data/cldr/common/main/or.xml index 24fb73de49b57..a5680dfbb8243 100644 --- a/make/data/cldr/common/main/or.xml +++ b/make/data/cldr/common/main/or.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2089,9 +2089,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>ମେଲବୋର୍ଣ୍ଣ</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>କ୍ୟୁରୀ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ହୋବାର୍ଟ୍‌</exemplarCity> </zone> @@ -2245,9 +2242,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>କ୍ରେଷ୍ଟୋନ୍</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ୟେଲ୍ଲୋନାଇଫ୍</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ଏଡମୋନଟୋନ୍</exemplarCity> </zone> @@ -2266,30 +2260,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ରିସୋଲୁଟେ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ରେଇନି ରିଭର୍</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ରାନକିନ୍ ଇନଲେଟ୍</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ଆଟିକୋକାନ୍</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ଥଣ୍ଡର୍ ବେ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ନିପିଗୋନ୍</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ଟୋରୋଣ୍ଟୋ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ଇକ୍ଵାଲୁଇଟ୍</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ପାଙ୍ଗନିର୍ଟୁଙ୍ଗ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ମାନକଟୋନ୍</exemplarCity> </zone> @@ -3103,18 +3085,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ଡର୍‌ ଇସ୍‌ ସାଲାମ</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ଉଜହୋରୋଦ୍</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>କିଏଭ୍</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ସିମଫେରୋପୋଲ୍</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ଜାପୋରୋଜହୟେ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>କାମ୍ପାଲା</exemplarCity> </zone> @@ -3133,9 +3109,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ହୋନୋଲୁଲୁ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ଜନଷ୍ଟନ୍</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ଆଙ୍କରେଜ୍</exemplarCity> </zone> @@ -3831,11 +3804,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>ମକାଓ ଗ୍ରୀଷ୍ମ ସମୟ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>ମାକ୍ୱେରୀ ଦ୍ୱୀପ ସମୟ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>ମାଗାଡାନ୍ ସମୟ</generic> @@ -3875,13 +3843,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>ମାୱସନ୍‌ ସମୟ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>ଉତ୍ତରପଶ୍ଚିମ ମେକ୍ସିକୋ ସମୟ</generic> - <standard>ଉତ୍ତରପଶ୍ଚିମ ମେକ୍ସିକୋ ମାନାଙ୍କ ସମୟ</standard> - <daylight>ଉତ୍ତରପଶ୍ଚିମ ମେକ୍ସିକୋ ଦିବାଲୋକ ସମୟ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>ମେକ୍ସିକାନ୍ ପାସିଫିକ୍ ସମୟ</generic> diff --git a/make/data/cldr/common/main/or_IN.xml b/make/data/cldr/common/main/or_IN.xml index 8aeab3ad919f5..509ddf974bc17 100644 --- a/make/data/cldr/common/main/or_IN.xml +++ b/make/data/cldr/common/main/or_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/os.xml b/make/data/cldr/common/main/os.xml index a6e7e64b641c5..347fec989fa98 100644 --- a/make/data/cldr/common/main/os.xml +++ b/make/data/cldr/common/main/os.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/os_GE.xml b/make/data/cldr/common/main/os_GE.xml index 20e78f85dba32..fd327c6700def 100644 --- a/make/data/cldr/common/main/os_GE.xml +++ b/make/data/cldr/common/main/os_GE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/os_RU.xml b/make/data/cldr/common/main/os_RU.xml index 94c09c446ce6f..3653ce1d58bb1 100644 --- a/make/data/cldr/common/main/os_RU.xml +++ b/make/data/cldr/common/main/os_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/osa.xml b/make/data/cldr/common/main/osa.xml index 5527aacfb9ea1..43fc58c23341c 100644 --- a/make/data/cldr/common/main/osa.xml +++ b/make/data/cldr/common/main/osa.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/osa_US.xml b/make/data/cldr/common/main/osa_US.xml index 9056a39064d45..961506955d00f 100644 --- a/make/data/cldr/common/main/osa_US.xml +++ b/make/data/cldr/common/main/osa_US.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pa.xml b/make/data/cldr/common/main/pa.xml index 4336c600b8dff..7e4c316934e1d 100644 --- a/make/data/cldr/common/main/pa.xml +++ b/make/data/cldr/common/main/pa.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1957,9 +1957,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} ਵੇਲਾ</regionFormat> <regionFormat type="daylight">{0} ਪ੍ਰਕਾਸ਼ ਵੇਲਾ</regionFormat> <regionFormat type="standard">{0} ਮਿਆਰੀ ਵੇਲਾ</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>ਸੈਂਟਾ ਇਸਾਬੇਲ</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>ਕੋਔਰਡੀਨੇਟੇਡ ਵਿਆਪਕ ਵੇਲਾ</standard> @@ -2082,9 +2079,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>ਮੈਲਬੋਰਨ</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ਕਰੀ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ਹੋਬਾਰਟ</exemplarCity> </zone> @@ -2238,9 +2232,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ਕ੍ਰੈਸਟਨ</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ਯੈਲੋਨਾਈਫ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ਐਡਮੋਂਟਨ</exemplarCity> </zone> @@ -2259,30 +2250,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ਰੈਜ਼ੋਲਿਊਟ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ਰੇਨੀ ਰਿਵਰ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ਰੈਂਕਿਨ ਇਨਲੈਟ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ਐਟੀਕੋਕਨ</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ਥੰਡਰ ਬੇ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ਨਿਪਿਗੌਨ</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ਟੋਰਾਂਟੋ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ਇਕਾਲੁਈਟ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ਪੈਂਗਨਿਰਟੰਗ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ਮੋਂਕਟਨ</exemplarCity> </zone> @@ -3096,18 +3075,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ਦਾਰ ਏਸ ਸਲਾਮ</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ਉਜ਼ਗੋਰੋਡ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>ਕੀਵ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ਸਿਮਫਰੋਪੋਲ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ਜਪੋਰੋਜ਼ਾਏ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>ਕੰਪਾਲਾ</exemplarCity> </zone> @@ -3126,9 +3099,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ਹੋਨੋਲੁਲੂ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ਜੋਨਸਟਨ</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ਐਂਕਰੇਜ</exemplarCity> </zone> @@ -3810,11 +3780,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>ਮਕਾਉ ਗਰਮੀ-ਰੁੱਤ ਸਮਾਂ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>ਮੈਕਕਵੇਰੀ ਆਈਲੈਂਡ ਵੇਲਾ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>ਮੈਗੇਡਨ ਵੇਲਾ</generic> @@ -3854,13 +3819,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>ਮੌਸਨ ਵੇਲਾ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>ਉੱਤਰ ਪੱਛਮੀ ਮੈਕਸੀਕੋ ਵੇਲਾ</generic> - <standard>ਉੱਤਰ ਪੱਛਮੀ ਮੈਕਸੀਕੋ ਮਿਆਰੀ ਵੇਲਾ</standard> - <daylight>ਉੱਤਰ ਪੱਛਮੀ ਮੈਕਸੀਕੋ ਪ੍ਰਕਾਸ਼ ਵੇਲਾ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>ਮੈਕਸੀਕਨ ਪੈਸਿਫਿਕ ਵੇਲਾ</generic> diff --git a/make/data/cldr/common/main/pa_Arab.xml b/make/data/cldr/common/main/pa_Arab.xml index 1eac0c10f15dc..711493803ea79 100644 --- a/make/data/cldr/common/main/pa_Arab.xml +++ b/make/data/cldr/common/main/pa_Arab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pa_Arab_PK.xml b/make/data/cldr/common/main/pa_Arab_PK.xml index 14d9e8cb4340a..b5fbaba6dd5c5 100644 --- a/make/data/cldr/common/main/pa_Arab_PK.xml +++ b/make/data/cldr/common/main/pa_Arab_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pa_Guru.xml b/make/data/cldr/common/main/pa_Guru.xml index 4481adce1bff9..7404e53d47eb9 100644 --- a/make/data/cldr/common/main/pa_Guru.xml +++ b/make/data/cldr/common/main/pa_Guru.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pa_Guru_IN.xml b/make/data/cldr/common/main/pa_Guru_IN.xml index 6feaf2123038c..0373b1e609425 100644 --- a/make/data/cldr/common/main/pa_Guru_IN.xml +++ b/make/data/cldr/common/main/pa_Guru_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pap.xml b/make/data/cldr/common/main/pap.xml index 25f47f8579543..c3fd361f47341 100644 --- a/make/data/cldr/common/main/pap.xml +++ b/make/data/cldr/common/main/pap.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -331,7 +331,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic </intervalFormatItem> <intervalFormatItem id="GyMMMEd"> <greatestDifference id="d" draft="unconfirmed">E, d MMM – d MMM y G</greatestDifference> - <greatestDifference id="G" draft="unconfirmed">E, d MMM y G  – E, d MMM y G</greatestDifference> + <greatestDifference id="G" draft="unconfirmed">E, d MMM y G – E, d MMM y G</greatestDifference> <greatestDifference id="M" draft="unconfirmed">E, d MMM – E, d MMM y G</greatestDifference> <greatestDifference id="y" draft="unconfirmed">E, d MMM y – E, d MMM y G</greatestDifference> </intervalFormatItem> @@ -616,7 +616,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic </intervalFormatItem> <intervalFormatItem id="MMMd"> <greatestDifference id="d" draft="unconfirmed">d–d MMM</greatestDifference> - <greatestDifference id="M" draft="unconfirmed">d MMM  – d MMM</greatestDifference> + <greatestDifference id="M" draft="unconfirmed">d MMM – d MMM</greatestDifference> </intervalFormatItem> <intervalFormatItem id="MMMEd"> <greatestDifference id="d" draft="unconfirmed">E, d MMM – E, d MMM</greatestDifference> diff --git a/make/data/cldr/common/main/pap_AW.xml b/make/data/cldr/common/main/pap_AW.xml index 0b4b9f459e85f..fe75adea33299 100644 --- a/make/data/cldr/common/main/pap_AW.xml +++ b/make/data/cldr/common/main/pap_AW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pap_CW.xml b/make/data/cldr/common/main/pap_CW.xml index d3e92b3856ded..30f9b0a6471d2 100644 --- a/make/data/cldr/common/main/pap_CW.xml +++ b/make/data/cldr/common/main/pap_CW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pcm.xml b/make/data/cldr/common/main/pcm.xml index f8db881162379..c35230097e030 100644 --- a/make/data/cldr/common/main/pcm.xml +++ b/make/data/cldr/common/main/pcm.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1779,9 +1779,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>Mẹ́lbọn</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kọ́ri</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Hóbat</exemplarCity> </zone> @@ -1926,9 +1923,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>Krẹ́stọn</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Yẹ́lónaif</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Ẹ́dmọ́ntọn</exemplarCity> </zone> @@ -1947,30 +1941,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>Rẹ́zólut</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Réní Ríva</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ránkín Ínlẹt</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Atíkókan</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Tọ́nda Bè</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Nípígọn</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Torónto</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikáluit</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pangnírtung</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Mọ́nktọn</exemplarCity> </zone> @@ -2748,18 +2730,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar ẹ́s Salam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ọ́zhọrọd</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiẹv</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Símfẹrópol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporózhia</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Kampála</exemplarCity> </zone> @@ -2775,9 +2751,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Nome"> <exemplarCity>Noom</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Jọ́nstun</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Ánkọ́rej</exemplarCity> </zone> @@ -3410,11 +3383,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Lọd Haú Délaít Taim</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Makwuéí Aíland Taim</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Mágádan Taim</generic> @@ -3454,13 +3422,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mọ́sọn Taim</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Nọ́twẹ́st Mẹ́ksíko Taim</generic> - <standard>Nọ́twẹ́st Mẹ́ksíko Fíksd Taim</standard> - <daylight>Nọ́twẹ́st Mẹ́ksíko Délaít Taim</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mẹ́ksíkó Pasífík Taim</generic> diff --git a/make/data/cldr/common/main/pcm_NG.xml b/make/data/cldr/common/main/pcm_NG.xml index 5d1bbae805ad2..83ecba1e4aae2 100644 --- a/make/data/cldr/common/main/pcm_NG.xml +++ b/make/data/cldr/common/main/pcm_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pis.xml b/make/data/cldr/common/main/pis.xml index af211ba9a3929..65d4c579ca4c0 100644 --- a/make/data/cldr/common/main/pis.xml +++ b/make/data/cldr/common/main/pis.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pis_SB.xml b/make/data/cldr/common/main/pis_SB.xml index 72e14ac357858..0463fa6cd0c7a 100644 --- a/make/data/cldr/common/main/pis_SB.xml +++ b/make/data/cldr/common/main/pis_SB.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pl.xml b/make/data/cldr/common/main/pl.xml index e77d953415ed6..81ae0f081becd 100644 --- a/make/data/cldr/common/main/pl.xml +++ b/make/data/cldr/common/main/pl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1255,7 +1255,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">porządek sortowania książki telefonicznej</type> <type key="collation" type="phonetic">sortowanie fonetyczne</type> <type key="collation" type="pinyin">porządek sortowania pinyin</type> - <type key="collation" type="reformed">sortowanie zreformowane</type> <type key="collation" type="search">wyszukiwanie ogólnego zastosowania</type> <type key="collation" type="searchjl" draft="contributed">Wyszukiwanie według początkowej spółgłoski hangul</type> <type key="collation" type="standard">standardowa kolejność sortowania</type> @@ -2662,9 +2661,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>czas: {0}</regionFormat> <regionFormat type="daylight">{0} (czas letni)</regionFormat> <regionFormat type="standard">{0} (czas standardowy)</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>uniwersalny czas koordynowany</standard> @@ -2694,9 +2690,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Wiedeń</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Mariehamn"> <exemplarCity>Maarianhamina</exemplarCity> </zone> @@ -3194,18 +3187,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Taipei"> <exemplarCity>Tajpej</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Użgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kijów</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Symferopol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporoże</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3798,11 +3785,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Lord Howe (czas letni)</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>czas Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>czas Magadan</generic> @@ -3842,13 +3824,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>czas Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>czas Meksyk Północno-Zachodni</generic> - <standard>Meksyk Północno-Zachodni (czas standardowy)</standard> - <daylight>Meksyk Północno-Zachodni (czas letni)</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksyk (czas pacyficzny)</generic> diff --git a/make/data/cldr/common/main/pl_PL.xml b/make/data/cldr/common/main/pl_PL.xml index 6d97184d98e1d..4ee13a842d8d7 100644 --- a/make/data/cldr/common/main/pl_PL.xml +++ b/make/data/cldr/common/main/pl_PL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/prg.xml b/make/data/cldr/common/main/prg.xml index 50fc4ff389382..2be8a674c6acf 100644 --- a/make/data/cldr/common/main/prg.xml +++ b/make/data/cldr/common/main/prg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/prg_PL.xml b/make/data/cldr/common/main/prg_PL.xml index 6ac9dba73df48..95506f645ed0a 100644 --- a/make/data/cldr/common/main/prg_PL.xml +++ b/make/data/cldr/common/main/prg_PL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ps.xml b/make/data/cldr/common/main/ps.xml index 4b6d562e0847d..6ab37082d4991 100644 --- a/make/data/cldr/common/main/ps.xml +++ b/make/data/cldr/common/main/ps.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1859,9 +1859,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>میلبورن</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>کرري</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>هوبارټ</exemplarCity> </zone> @@ -2015,9 +2012,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>کرسټون</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>يلونايف</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ایډمونټن</exemplarCity> </zone> @@ -2036,30 +2030,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>ريسالوټ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>د باران باران</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>رينکن انلټ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>اتیکوکن</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>تنډر بی</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>نیپګون</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ټورنټو</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>اقلیټ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>پينګنرچونګ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>مونکټون</exemplarCity> </zone> @@ -2870,18 +2852,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>دار السلام</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>یوژورډ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>کیف</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>سیمفروپول</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>زاپوروژی</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>کمپاله</exemplarCity> </zone> @@ -2900,9 +2876,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>هینولولو</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>جانسټن</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>اینکریج</exemplarCity> </zone> @@ -3538,11 +3511,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>لارډ هوي د ورځې روښانه وخت</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>مکواري ټاپو وخت</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>ميګډان وخت</generic> @@ -3582,13 +3550,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>ماوسن وخت</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>د شمال لویدیځ مکسیکو وخت</generic> - <standard>د شمال لویدیځ مکسیکو معیاري وخت</standard> - <daylight>د شمال لویدیځ مکسیکو رڼا ورځې وخت</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>مکسیکن پیسفک وخت</generic> diff --git a/make/data/cldr/common/main/ps_AF.xml b/make/data/cldr/common/main/ps_AF.xml index 03565b354cebd..ba7f778fdc999 100644 --- a/make/data/cldr/common/main/ps_AF.xml +++ b/make/data/cldr/common/main/ps_AF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ps_PK.xml b/make/data/cldr/common/main/ps_PK.xml index 38a7c4d0ef770..ef66321643b60 100644 --- a/make/data/cldr/common/main/ps_PK.xml +++ b/make/data/cldr/common/main/ps_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -202,11 +202,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>رب هاو د ورځے د رڼا وخت</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <daylight>د شمال لویدیځ مکسیکو رڼا ورځے وخت</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <daylight>مکسیکن پیسفک رڼا ورځے وخت</daylight> diff --git a/make/data/cldr/common/main/pt.xml b/make/data/cldr/common/main/pt.xml index 3386faf6bda70..83930b83c24d0 100644 --- a/make/data/cldr/common/main/pt.xml +++ b/make/data/cldr/common/main/pt.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1140,7 +1140,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Ordem de lista telefônica</type> <type key="collation" type="phonetic">Ordem de classificação fonética</type> <type key="collation" type="pinyin">Ordem Pin-yin</type> - <type key="collation" type="reformed">Ordem reformulada</type> <type key="collation" type="search">Pesquisa de uso geral</type> <type key="collation" type="searchjl" draft="contributed">Pesquisar por consonante inicial hangul</type> <type key="collation" type="standard">Ordem padrão</type> @@ -2344,9 +2343,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Horário {0}</regionFormat> <regionFormat type="daylight">Horário de Verão: {0}</regionFormat> <regionFormat type="standard">Horário Padrão: {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Horário Universal Coordenado</standard> @@ -2376,9 +2372,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Viena</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Dhaka"> <exemplarCity>Dacca</exemplarCity> </zone> @@ -2750,9 +2743,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporizhia</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3378,11 +3368,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Horário de Verão de Macau</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Horário da Ilha Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Horário de Magadan</generic> @@ -3422,13 +3407,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Horário de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Horário do Noroeste do México</generic> - <standard>Horário Padrão do Noroeste do México</standard> - <daylight>Horário de Verão do Noroeste do México</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Horário do Pacífico Mexicano</generic> diff --git a/make/data/cldr/common/main/pt_AO.xml b/make/data/cldr/common/main/pt_AO.xml index 1f88da03b8b47..9607bce238311 100644 --- a/make/data/cldr/common/main/pt_AO.xml +++ b/make/data/cldr/common/main/pt_AO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_BR.xml b/make/data/cldr/common/main/pt_BR.xml index 7b33b1da35482..d56d9554f775c 100644 --- a/make/data/cldr/common/main/pt_BR.xml +++ b/make/data/cldr/common/main/pt_BR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_CH.xml b/make/data/cldr/common/main/pt_CH.xml index a55d5c546b7bd..5b8ad6f51432f 100644 --- a/make/data/cldr/common/main/pt_CH.xml +++ b/make/data/cldr/common/main/pt_CH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_CV.xml b/make/data/cldr/common/main/pt_CV.xml index 27562ab33b0b2..1d9d5db0e2d8d 100644 --- a/make/data/cldr/common/main/pt_CV.xml +++ b/make/data/cldr/common/main/pt_CV.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_GQ.xml b/make/data/cldr/common/main/pt_GQ.xml index 859448ceb3b9e..b9d78e6a6f17b 100644 --- a/make/data/cldr/common/main/pt_GQ.xml +++ b/make/data/cldr/common/main/pt_GQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_GW.xml b/make/data/cldr/common/main/pt_GW.xml index 39a465e162cee..bb9b77b7d969b 100644 --- a/make/data/cldr/common/main/pt_GW.xml +++ b/make/data/cldr/common/main/pt_GW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_LU.xml b/make/data/cldr/common/main/pt_LU.xml index 60c6bb06fb6f2..c4ca53f2af2b3 100644 --- a/make/data/cldr/common/main/pt_LU.xml +++ b/make/data/cldr/common/main/pt_LU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_MO.xml b/make/data/cldr/common/main/pt_MO.xml index 5982c44b4329b..a5806b02ca44e 100644 --- a/make/data/cldr/common/main/pt_MO.xml +++ b/make/data/cldr/common/main/pt_MO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_MZ.xml b/make/data/cldr/common/main/pt_MZ.xml index 6c9a3b166906a..b056c0ac5d520 100644 --- a/make/data/cldr/common/main/pt_MZ.xml +++ b/make/data/cldr/common/main/pt_MZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_PT.xml b/make/data/cldr/common/main/pt_PT.xml index 32345e1c47e5e..54bbe87de2a05 100644 --- a/make/data/cldr/common/main/pt_PT.xml +++ b/make/data/cldr/common/main/pt_PT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -2036,11 +2036,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Hora de verão de Macau</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Hora da Ilha Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Hora de Magadan</generic> @@ -2080,13 +2075,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Hora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Hora do Noroeste do México</generic> - <standard>Hora padrão do Noroeste do México</standard> - <daylight>Hora de verão do Noroeste do México</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Hora do Pacífico Mexicano</generic> diff --git a/make/data/cldr/common/main/pt_ST.xml b/make/data/cldr/common/main/pt_ST.xml index 19a58862c5104..5328acab556eb 100644 --- a/make/data/cldr/common/main/pt_ST.xml +++ b/make/data/cldr/common/main/pt_ST.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/pt_TL.xml b/make/data/cldr/common/main/pt_TL.xml index 32f76a2743bcf..488246ffbde5a 100644 --- a/make/data/cldr/common/main/pt_TL.xml +++ b/make/data/cldr/common/main/pt_TL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/qu.xml b/make/data/cldr/common/main/qu.xml index c6b3e71d36b69..f6994d2832bf3 100644 --- a/make/data/cldr/common/main/qu.xml +++ b/make/data/cldr/common/main/qu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1505,9 +1505,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Adelaide"> <exemplarCity>Adelaida</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity>Sidney</exemplarCity> </zone> @@ -2271,11 +2268,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Hora de Verano de Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Hora de Isla Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Hora de Magadan</generic> @@ -2315,13 +2307,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Hora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Hora Estandar de Verano de México</generic> - <standard>Hora Estandar del Noroeste de México</standard> - <daylight>Hora de Verano del Noroeste de México</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Hora del Pacífico Mexicano</generic> diff --git a/make/data/cldr/common/main/qu_BO.xml b/make/data/cldr/common/main/qu_BO.xml index cdfcca856453c..7eba6f91da0ad 100644 --- a/make/data/cldr/common/main/qu_BO.xml +++ b/make/data/cldr/common/main/qu_BO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/qu_EC.xml b/make/data/cldr/common/main/qu_EC.xml index 754bb8c91e399..2cfdf0b5e0afe 100644 --- a/make/data/cldr/common/main/qu_EC.xml +++ b/make/data/cldr/common/main/qu_EC.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/qu_PE.xml b/make/data/cldr/common/main/qu_PE.xml index 534932b04b810..7018e5d4942ee 100644 --- a/make/data/cldr/common/main/qu_PE.xml +++ b/make/data/cldr/common/main/qu_PE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/quc.xml b/make/data/cldr/common/main/quc.xml index 9a33eca95db77..a30a30b9b7e50 100644 --- a/make/data/cldr/common/main/quc.xml +++ b/make/data/cldr/common/main/quc.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/quc_GT.xml b/make/data/cldr/common/main/quc_GT.xml index 2c64b467b7d50..1a1549c4b9b66 100644 --- a/make/data/cldr/common/main/quc_GT.xml +++ b/make/data/cldr/common/main/quc_GT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/raj.xml b/make/data/cldr/common/main/raj.xml index d3286df9f9be0..55569ec849c11 100644 --- a/make/data/cldr/common/main/raj.xml +++ b/make/data/cldr/common/main/raj.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/raj_IN.xml b/make/data/cldr/common/main/raj_IN.xml index 37d9b4cbc5d6c..a2e6c9c10c5d2 100644 --- a/make/data/cldr/common/main/raj_IN.xml +++ b/make/data/cldr/common/main/raj_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rhg.xml b/make/data/cldr/common/main/rhg.xml index 530c8f0be75ac..f100e9155f2f6 100644 --- a/make/data/cldr/common/main/rhg.xml +++ b/make/data/cldr/common/main/rhg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rhg_Rohg.xml b/make/data/cldr/common/main/rhg_Rohg.xml index 351938d4f6d83..f88501c90b1ca 100644 --- a/make/data/cldr/common/main/rhg_Rohg.xml +++ b/make/data/cldr/common/main/rhg_Rohg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rhg_Rohg_BD.xml b/make/data/cldr/common/main/rhg_Rohg_BD.xml index 9cd4f6428bad3..97fcdfdc9fdfc 100644 --- a/make/data/cldr/common/main/rhg_Rohg_BD.xml +++ b/make/data/cldr/common/main/rhg_Rohg_BD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rhg_Rohg_MM.xml b/make/data/cldr/common/main/rhg_Rohg_MM.xml index 1a5e3a3b9d8eb..516f26324665a 100644 --- a/make/data/cldr/common/main/rhg_Rohg_MM.xml +++ b/make/data/cldr/common/main/rhg_Rohg_MM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rif.xml b/make/data/cldr/common/main/rif.xml index 5fc7882b682ea..f76062cca82e5 100644 --- a/make/data/cldr/common/main/rif.xml +++ b/make/data/cldr/common/main/rif.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1288,13 +1288,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">akud n uzil n haway-alucyan</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">akud n sennej i lɣerb n miksiku</generic> - <standard draft="unconfirmed">akud anaway n sennej i lɣerb n miksiku</standard> - <daylight draft="unconfirmed">akud n uzil n sennej i lɣerb n miksiku</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">akud n pasifik amiksikan</generic> diff --git a/make/data/cldr/common/main/rif_MA.xml b/make/data/cldr/common/main/rif_MA.xml index b099abe9ca4d7..cb1758ce48680 100644 --- a/make/data/cldr/common/main/rif_MA.xml +++ b/make/data/cldr/common/main/rif_MA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rm.xml b/make/data/cldr/common/main/rm.xml index efabbdb3fd07c..0b7bc1170428d 100644 --- a/make/data/cldr/common/main/rm.xml +++ b/make/data/cldr/common/main/rm.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2002,12 +2002,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity draft="contributed">Daressalam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uschhorod</exemplarCity> - </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="contributed">Saporischja</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity draft="contributed">Alasca</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/rm_CH.xml b/make/data/cldr/common/main/rm_CH.xml index 3fa28bb6ffc68..89fa47c46fcf8 100644 --- a/make/data/cldr/common/main/rm_CH.xml +++ b/make/data/cldr/common/main/rm_CH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rn.xml b/make/data/cldr/common/main/rn.xml index 4e9893319d693..b9863f0374bc4 100644 --- a/make/data/cldr/common/main/rn.xml +++ b/make/data/cldr/common/main/rn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rn_BI.xml b/make/data/cldr/common/main/rn_BI.xml index 2cc7c75231cbf..5d22cd47227b4 100644 --- a/make/data/cldr/common/main/rn_BI.xml +++ b/make/data/cldr/common/main/rn_BI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ro.xml b/make/data/cldr/common/main/ro.xml index 1de4dede84f8a..633dacc18c17b 100644 --- a/make/data/cldr/common/main/ro.xml +++ b/make/data/cldr/common/main/ro.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1263,7 +1263,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">ordine de sortare după cartea de telefon</type> <type key="collation" type="phonetic">ordine de sortare fonetică</type> <type key="collation" type="pinyin">ordine de sortare pinyin</type> - <type key="collation" type="reformed">ordine de sortare reformată</type> <type key="collation" type="search">căutare cu scop general</type> <type key="collation" type="searchjl" draft="contributed">Căutați în funcție de consoana inițială hangul</type> <type key="collation" type="standard">ordine de sortare standard</type> @@ -2876,9 +2875,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Ora din {0}</regionFormat> <regionFormat type="daylight">Ora de vară din {0}</regionFormat> <regionFormat type="standard">Ora standard din {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Timpul universal coordonat</standard> @@ -2899,9 +2895,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Viena</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Dhaka"> <exemplarCity>Dacca</exemplarCity> </zone> @@ -3138,15 +3131,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Ashgabat"> <exemplarCity>Așgabat</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ujhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporoje</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3731,11 +3718,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Ora de vară din Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Ora din Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Ora din Magadan</generic> @@ -3775,13 +3757,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Ora din Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Ora Mexicului de nord-vest</generic> - <standard>Ora standard a Mexicului de nord-vest</standard> - <daylight>Ora de vară a Mexicului de nord-vest</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Ora zonei Pacific mexicane</generic> diff --git a/make/data/cldr/common/main/ro_MD.xml b/make/data/cldr/common/main/ro_MD.xml index fce068968ee52..b48cb29250193 100644 --- a/make/data/cldr/common/main/ro_MD.xml +++ b/make/data/cldr/common/main/ro_MD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ro_RO.xml b/make/data/cldr/common/main/ro_RO.xml index afa4e5f54394b..ffa86ea3d2d9b 100644 --- a/make/data/cldr/common/main/ro_RO.xml +++ b/make/data/cldr/common/main/ro_RO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rof.xml b/make/data/cldr/common/main/rof.xml index c69cf20abd353..c174f7f1a010f 100644 --- a/make/data/cldr/common/main/rof.xml +++ b/make/data/cldr/common/main/rof.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rof_TZ.xml b/make/data/cldr/common/main/rof_TZ.xml index f5738ee3f349b..4edf5689c7ecb 100644 --- a/make/data/cldr/common/main/rof_TZ.xml +++ b/make/data/cldr/common/main/rof_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/root.xml b/make/data/cldr/common/main/root.xml index 56cf38d18d4cb..12c883da38f93 100644 --- a/make/data/cldr/common/main/root.xml +++ b/make/data/cldr/common/main/root.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) the U.S. and other countries. CLDR data files are interpreted according to @@ -2907,6 +2907,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/St_Johns"> <exemplarCity>St. John’s</exemplarCity> </zone> + <zone type="America/Curacao"> + <exemplarCity>Curaçao</exemplarCity> + </zone> <zone type="Africa/Asmera"> <exemplarCity>Asmara</exemplarCity> </zone> @@ -2955,9 +2958,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Katmandu"> <exemplarCity>Kathmandu</exemplarCity> </zone> + <zone type="America/Asuncion"> + <exemplarCity>Asunción</exemplarCity> + </zone> + <zone type="Indian/Reunion"> + <exemplarCity>Réunion</exemplarCity> + </zone> <zone type="Atlantic/St_Helena"> <exemplarCity>St. Helena</exemplarCity> </zone> + <zone type="Africa/Sao_Tome"> + <exemplarCity>São Tomé</exemplarCity> + </zone> <zone type="America/Lower_Princes"> <exemplarCity>Lower Prince’s Quarter</exemplarCity> </zone> @@ -3006,18 +3018,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Saigon"> <exemplarCity>Ho Chi Minh</exemplarCity> </zone> - <zone type="America/Curacao"> - <exemplarCity>Curaçao</exemplarCity> - </zone> - <zone type="America/Asuncion"> - <exemplarCity>Asunción</exemplarCity> - </zone> - <zone type="Indian/Reunion"> - <exemplarCity>Réunion</exemplarCity> - </zone> - <zone type="Africa/Sao_Tome"> - <exemplarCity>São Tomé</exemplarCity> - </zone> </timeZoneNames> </dates> <numbers> @@ -4516,6 +4516,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <symbol>EC$</symbol> <symbol alt="narrow">$</symbol> </currency> + <currency type="XCG"> + <symbol>Cg.</symbol> + </currency> <currency type="XOF"> <symbol>F CFA</symbol> </currency> diff --git a/make/data/cldr/common/main/ru.xml b/make/data/cldr/common/main/ru.xml index 33bfffbc007ca..5041858c92bb1 100644 --- a/make/data/cldr/common/main/ru.xml +++ b/make/data/cldr/common/main/ru.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1170,7 +1170,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">порядок телефонной книги</type> <type key="collation" type="phonetic">фонетический порядок сортировки</type> <type key="collation" type="pinyin">пиньинь</type> - <type key="collation" type="reformed">реформированный порядок сортировки</type> <type key="collation" type="search">поиск</type> <type key="collation" type="searchjl" draft="contributed">Поиск по первой согласной хангыль</type> <type key="collation" type="standard">стандартная сортировка</type> @@ -3325,9 +3324,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <timeZoneNames> <regionFormat type="daylight">{0}, летнее время</regionFormat> <regionFormat type="standard">{0}, стандартное время</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Санта-Изабел</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Всемирное координированное время</standard> @@ -3450,9 +3446,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Мельбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Керри</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -3606,9 +3599,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Йеллоунайф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Эдмонтон</exemplarCity> </zone> @@ -3627,30 +3617,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Резольют</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рейни-Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ранкин-Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Корал-Харбор</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тандер-Бей</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Икалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангниртанг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -4464,18 +4442,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар-эс-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Киев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферополь</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожье</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -4494,9 +4466,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Гонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Джонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Анкоридж</exemplarCity> </zone> @@ -5196,11 +5165,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Макао, летнее время</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Маккуори</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магадан</generic> @@ -5240,13 +5204,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Моусон</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Северо-западное мексиканское время</generic> - <standard>Северо-западное мексиканское стандартное время</standard> - <daylight>Северо-западное мексиканское летнее время</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Тихоокеанское мексиканское время</generic> diff --git a/make/data/cldr/common/main/ru_BY.xml b/make/data/cldr/common/main/ru_BY.xml index aa9e115642eeb..785bc7e81609e 100644 --- a/make/data/cldr/common/main/ru_BY.xml +++ b/make/data/cldr/common/main/ru_BY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ru_KG.xml b/make/data/cldr/common/main/ru_KG.xml index ada0ba6f8de94..52d7a7b199975 100644 --- a/make/data/cldr/common/main/ru_KG.xml +++ b/make/data/cldr/common/main/ru_KG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ru_KZ.xml b/make/data/cldr/common/main/ru_KZ.xml index 6bf4132802a03..af683f7fe060d 100644 --- a/make/data/cldr/common/main/ru_KZ.xml +++ b/make/data/cldr/common/main/ru_KZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ru_MD.xml b/make/data/cldr/common/main/ru_MD.xml index 9640c522c41f6..f4a39c6903bb3 100644 --- a/make/data/cldr/common/main/ru_MD.xml +++ b/make/data/cldr/common/main/ru_MD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ru_RU.xml b/make/data/cldr/common/main/ru_RU.xml index 1e78c6fc019b7..aa008c5f446bd 100644 --- a/make/data/cldr/common/main/ru_RU.xml +++ b/make/data/cldr/common/main/ru_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ru_UA.xml b/make/data/cldr/common/main/ru_UA.xml index ce9396a0f3887..2b45e4bf7fc7c 100644 --- a/make/data/cldr/common/main/ru_UA.xml +++ b/make/data/cldr/common/main/ru_UA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rw.xml b/make/data/cldr/common/main/rw.xml index c62908a7d7538..b2e103528acdb 100644 --- a/make/data/cldr/common/main/rw.xml +++ b/make/data/cldr/common/main/rw.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rw_RW.xml b/make/data/cldr/common/main/rw_RW.xml index 89525f3cf271e..3884fab8cf296 100644 --- a/make/data/cldr/common/main/rw_RW.xml +++ b/make/data/cldr/common/main/rw_RW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rwk.xml b/make/data/cldr/common/main/rwk.xml index 31977128ac302..9a32f8431e79d 100644 --- a/make/data/cldr/common/main/rwk.xml +++ b/make/data/cldr/common/main/rwk.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/rwk_TZ.xml b/make/data/cldr/common/main/rwk_TZ.xml index 12f3bbf8d0d54..93a91aee96509 100644 --- a/make/data/cldr/common/main/rwk_TZ.xml +++ b/make/data/cldr/common/main/rwk_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sa.xml b/make/data/cldr/common/main/sa.xml index dc6ed4ee206d0..d65097b3366fe 100644 --- a/make/data/cldr/common/main/sa.xml +++ b/make/data/cldr/common/main/sa.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sa_IN.xml b/make/data/cldr/common/main/sa_IN.xml index 628f1753f1982..dec966c92aff3 100644 --- a/make/data/cldr/common/main/sa_IN.xml +++ b/make/data/cldr/common/main/sa_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sah.xml b/make/data/cldr/common/main/sah.xml index 1b683a56db417..5d89d39f07b3c 100644 --- a/make/data/cldr/common/main/sah.xml +++ b/make/data/cldr/common/main/sah.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sah_RU.xml b/make/data/cldr/common/main/sah_RU.xml index 20a8d235330fc..6ea7810b7bfb0 100644 --- a/make/data/cldr/common/main/sah_RU.xml +++ b/make/data/cldr/common/main/sah_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/saq.xml b/make/data/cldr/common/main/saq.xml index 587b3e8c9adb0..8c975679f0f67 100644 --- a/make/data/cldr/common/main/saq.xml +++ b/make/data/cldr/common/main/saq.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/saq_KE.xml b/make/data/cldr/common/main/saq_KE.xml index a6de1faba63fb..f2781b159acf2 100644 --- a/make/data/cldr/common/main/saq_KE.xml +++ b/make/data/cldr/common/main/saq_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sat.xml b/make/data/cldr/common/main/sat.xml index 0319b7a4db673..49b72a15b4690 100644 --- a/make/data/cldr/common/main/sat.xml +++ b/make/data/cldr/common/main/sat.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1478,9 +1478,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity draft="unconfirmed">ᱠᱨᱮᱥᱴᱚᱱ</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity draft="unconfirmed">ᱭᱮᱞᱚᱱᱟᱭᱤᱯᱷ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity draft="unconfirmed">ᱮᱰᱢᱚᱱᱴᱚᱱ</exemplarCity> </zone> @@ -1499,30 +1496,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity draft="unconfirmed">ᱨᱤᱥᱚᱞᱭᱩᱴ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity draft="unconfirmed">ᱨᱚᱱᱤ ᱜᱟᱰᱟ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity draft="unconfirmed">ᱨᱟᱱᱠᱤᱱ ᱤᱱᱞᱮᱴ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity draft="unconfirmed">ᱟᱴᱤᱠᱚᱠᱟᱱ</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity draft="unconfirmed">ᱛᱷᱚᱱᱰᱚᱨ ᱵᱮ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity draft="unconfirmed">ᱱᱤᱯᱤᱜᱚᱱ</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity draft="unconfirmed">ᱴᱚᱨᱚᱱᱴᱚ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity draft="unconfirmed">ᱤᱠᱟᱞᱩᱣᱤᱛ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity draft="unconfirmed">ᱯᱟᱝᱱᱤᱨᱛᱩᱝ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity draft="unconfirmed">ᱢᱚᱱᱠᱴᱚᱱ</exemplarCity> </zone> @@ -1874,13 +1859,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">ᱦᱟᱣᱟᱭᱤᱼᱟᱞᱮᱣᱴᱤᱭᱟᱱ ᱥᱤᱧᱟᱜ ᱚᱠᱛᱚ</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">ᱮᱛᱚᱢᱯᱟᱪᱮ ᱢᱚᱠᱥᱤᱠᱚ ᱚᱠᱛᱚ</generic> - <standard draft="unconfirmed">ᱮᱛᱚᱢᱯᱟᱪᱮ ᱢᱚᱠᱥᱤᱠᱚ ᱢᱟᱱᱚᱠ ᱚᱠᱛᱚ</standard> - <daylight draft="unconfirmed">ᱮᱛᱚᱢᱯᱟᱪᱮ ᱢᱚᱠᱥᱤᱠᱚ ᱥᱤᱧᱟᱜ ᱚᱠᱛᱚ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">ᱢᱮᱠᱥᱤᱠᱟᱱ ᱯᱨᱚᱥᱟᱱᱛ ᱚᱠᱛᱚ</generic> diff --git a/make/data/cldr/common/main/sat_Deva.xml b/make/data/cldr/common/main/sat_Deva.xml index c8982731025e4..30961e3dfdc39 100644 --- a/make/data/cldr/common/main/sat_Deva.xml +++ b/make/data/cldr/common/main/sat_Deva.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sat_Deva_IN.xml b/make/data/cldr/common/main/sat_Deva_IN.xml index 9b343ae6dcf52..be00da78a9a80 100644 --- a/make/data/cldr/common/main/sat_Deva_IN.xml +++ b/make/data/cldr/common/main/sat_Deva_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sat_Olck.xml b/make/data/cldr/common/main/sat_Olck.xml index 9f3daa45f22bf..806495ec77ccb 100644 --- a/make/data/cldr/common/main/sat_Olck.xml +++ b/make/data/cldr/common/main/sat_Olck.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sat_Olck_IN.xml b/make/data/cldr/common/main/sat_Olck_IN.xml index 8d83f9eac0698..5f5bc27ec07d3 100644 --- a/make/data/cldr/common/main/sat_Olck_IN.xml +++ b/make/data/cldr/common/main/sat_Olck_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sbp.xml b/make/data/cldr/common/main/sbp.xml index f4f989c4bbb45..898598f848cf9 100644 --- a/make/data/cldr/common/main/sbp.xml +++ b/make/data/cldr/common/main/sbp.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sbp_TZ.xml b/make/data/cldr/common/main/sbp_TZ.xml index fb4716fd8081d..dcab5b8450abb 100644 --- a/make/data/cldr/common/main/sbp_TZ.xml +++ b/make/data/cldr/common/main/sbp_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sc.xml b/make/data/cldr/common/main/sc.xml index f3ef123869e32..90a1d00f3f559 100644 --- a/make/data/cldr/common/main/sc.xml +++ b/make/data/cldr/common/main/sc.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1106,7 +1106,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="gb2312han">ordinamentu de su tzinesu semplificadu - GB2312</type> <type key="collation" type="phonebook">ordinamentu de s’elencu telefònicu</type> <type key="collation" type="pinyin">ordinamentu pinyin</type> - <type key="collation" type="reformed">ordinamentu riformadu</type> <type key="collation" type="search">chirca genèrica</type> <type key="collation" type="searchjl">chirca pro consonante hangul initziale</type> <type key="collation" type="standard">ordinamentu istandard</type> @@ -2963,9 +2962,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Argentina/Tucuman"> <exemplarCity>Tucumán</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Dhaka"> <exemplarCity>Daca</exemplarCity> </zone> @@ -3834,11 +3830,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Ora legale de Macao</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Ora de s’Ìsula Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Ora de Magadan</generic> @@ -3878,13 +3869,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Ora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Ora de su Mèssicu nord-otzidentale</generic> - <standard>Ora istandard de su Mèssicu nord-otzidentale</standard> - <daylight>Ora legale de su Mèssicu nord-otzidentale</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Ora de su Patzìficu (Mèssicu)</generic> diff --git a/make/data/cldr/common/main/sc_IT.xml b/make/data/cldr/common/main/sc_IT.xml index 6612a65e5771f..376c0399cca2e 100644 --- a/make/data/cldr/common/main/sc_IT.xml +++ b/make/data/cldr/common/main/sc_IT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/scn.xml b/make/data/cldr/common/main/scn.xml index cc4c1655aa6e7..a9a1c3499b371 100644 --- a/make/data/cldr/common/main/scn.xml +++ b/make/data/cldr/common/main/scn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/scn_IT.xml b/make/data/cldr/common/main/scn_IT.xml index fac9de008ce3d..54c0c33495b9b 100644 --- a/make/data/cldr/common/main/scn_IT.xml +++ b/make/data/cldr/common/main/scn_IT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sd.xml b/make/data/cldr/common/main/sd.xml index acc7d27ae9a69..80e51753dc456 100644 --- a/make/data/cldr/common/main/sd.xml +++ b/make/data/cldr/common/main/sd.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1642,9 +1642,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>ميلبورن</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ڪري</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>هوبارٽ</exemplarCity> </zone> @@ -1798,9 +1795,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>ڪريسٽن</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ييلو نائيف</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ايڊمونٽن</exemplarCity> </zone> @@ -1819,30 +1813,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>ريزوليوٽ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ريني رور</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>رينڪن انليٽ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>اٽيڪوڪن</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ٿنڊر بي</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>نپيگان</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ٽورنٽو</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>اڪالوئٽ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>پینگنرٽنگ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>مانڪٽن</exemplarCity> </zone> @@ -2656,18 +2638,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>دارالسلام</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ازهارڊ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>ڪِيو</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>سمفروپول</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>زيپروزهايا</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>ڪمپالا</exemplarCity> </zone> @@ -2686,9 +2662,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>هونو لولو</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>جانسٹن</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>اينڪريج</exemplarCity> </zone> @@ -3324,11 +3297,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>لورڊ هووي جي ڏينهن جو وقت</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>مڪوائري آئي لينڊ جو وقت</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>مگادان جو وقت</generic> @@ -3368,13 +3336,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>مائوسن جو وقت</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>شمالي مغربي ميڪسيڪو جو وقت</generic> - <standard>شمالي مغربي ميڪسيڪو جو معياري وقت</standard> - <daylight>شمالي مغربي ميڪسيڪو جي ڏينهن جو وقت</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>ميڪسيڪن پيسيفڪ وقت</generic> diff --git a/make/data/cldr/common/main/sd_Arab.xml b/make/data/cldr/common/main/sd_Arab.xml index 52b15d2a2fe3a..1844976e26f1a 100644 --- a/make/data/cldr/common/main/sd_Arab.xml +++ b/make/data/cldr/common/main/sd_Arab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sd_Arab_PK.xml b/make/data/cldr/common/main/sd_Arab_PK.xml index d68902c97bac1..f123030ec5a4a 100644 --- a/make/data/cldr/common/main/sd_Arab_PK.xml +++ b/make/data/cldr/common/main/sd_Arab_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sd_Deva.xml b/make/data/cldr/common/main/sd_Deva.xml index 4c2a39458d94b..741db721386b6 100644 --- a/make/data/cldr/common/main/sd_Deva.xml +++ b/make/data/cldr/common/main/sd_Deva.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sd_Deva_IN.xml b/make/data/cldr/common/main/sd_Deva_IN.xml index ad3ad7e5f74c5..6406ca40a472a 100644 --- a/make/data/cldr/common/main/sd_Deva_IN.xml +++ b/make/data/cldr/common/main/sd_Deva_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sdh.xml b/make/data/cldr/common/main/sdh.xml index cd72fed82ef57..860747bd424c7 100644 --- a/make/data/cldr/common/main/sdh.xml +++ b/make/data/cldr/common/main/sdh.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sdh_IQ.xml b/make/data/cldr/common/main/sdh_IQ.xml index 3cc33628c03a8..73b71829b573b 100644 --- a/make/data/cldr/common/main/sdh_IQ.xml +++ b/make/data/cldr/common/main/sdh_IQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sdh_IR.xml b/make/data/cldr/common/main/sdh_IR.xml index bd375ccdb1993..7752d73ac19a8 100644 --- a/make/data/cldr/common/main/sdh_IR.xml +++ b/make/data/cldr/common/main/sdh_IR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/se.xml b/make/data/cldr/common/main/se.xml index 4eab45b582b49..343d2d6caa5da 100644 --- a/make/data/cldr/common/main/se.xml +++ b/make/data/cldr/common/main/se.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/se_FI.xml b/make/data/cldr/common/main/se_FI.xml index fa0ae69973772..2683caed23541 100644 --- a/make/data/cldr/common/main/se_FI.xml +++ b/make/data/cldr/common/main/se_FI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1674,11 +1674,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Lord Howe geasseáigi</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>MacQuarie sullo áigi</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadana áigi</generic> @@ -1718,13 +1713,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mawsona áigi</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Oarjedavvi-Meksiko áigi</generic> - <standard>Oarjedavvi-Meksiko dálveáigi</standard> - <daylight>Oarjedavvi-Meksiko geasseáigi</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksiko Jáskesábi áigi</generic> diff --git a/make/data/cldr/common/main/se_NO.xml b/make/data/cldr/common/main/se_NO.xml index ede5d5d5b182f..12bdb6a17b9ec 100644 --- a/make/data/cldr/common/main/se_NO.xml +++ b/make/data/cldr/common/main/se_NO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/se_SE.xml b/make/data/cldr/common/main/se_SE.xml index 47754ec19cfb3..99d52c3ab3e32 100644 --- a/make/data/cldr/common/main/se_SE.xml +++ b/make/data/cldr/common/main/se_SE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/seh.xml b/make/data/cldr/common/main/seh.xml index a25d21db6f961..2815843850ff7 100644 --- a/make/data/cldr/common/main/seh.xml +++ b/make/data/cldr/common/main/seh.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/seh_MZ.xml b/make/data/cldr/common/main/seh_MZ.xml index 789f9e0805fcc..857a4e4e0fa6b 100644 --- a/make/data/cldr/common/main/seh_MZ.xml +++ b/make/data/cldr/common/main/seh_MZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ses.xml b/make/data/cldr/common/main/ses.xml index 49dfccecc715e..9189d74e8f399 100644 --- a/make/data/cldr/common/main/ses.xml +++ b/make/data/cldr/common/main/ses.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ses_ML.xml b/make/data/cldr/common/main/ses_ML.xml index 63e4cbb986cfc..d0fe59700fd9a 100644 --- a/make/data/cldr/common/main/ses_ML.xml +++ b/make/data/cldr/common/main/ses_ML.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sg.xml b/make/data/cldr/common/main/sg.xml index 43f25cd19bc2d..c40349f2e995a 100644 --- a/make/data/cldr/common/main/sg.xml +++ b/make/data/cldr/common/main/sg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sg_CF.xml b/make/data/cldr/common/main/sg_CF.xml index 61b2edae564ff..6318b0fdf4cce 100644 --- a/make/data/cldr/common/main/sg_CF.xml +++ b/make/data/cldr/common/main/sg_CF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/shi.xml b/make/data/cldr/common/main/shi.xml index 3246a1bc83829..b7b64363ad0cd 100644 --- a/make/data/cldr/common/main/shi.xml +++ b/make/data/cldr/common/main/shi.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/shi_Latn.xml b/make/data/cldr/common/main/shi_Latn.xml index 175582f02e6bc..8d762fe15e776 100644 --- a/make/data/cldr/common/main/shi_Latn.xml +++ b/make/data/cldr/common/main/shi_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/shi_Latn_MA.xml b/make/data/cldr/common/main/shi_Latn_MA.xml index 4bb2f4006f405..e28483d26ea0d 100644 --- a/make/data/cldr/common/main/shi_Latn_MA.xml +++ b/make/data/cldr/common/main/shi_Latn_MA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/shi_Tfng.xml b/make/data/cldr/common/main/shi_Tfng.xml index a56ba98a82caa..fa97b50b8c1b1 100644 --- a/make/data/cldr/common/main/shi_Tfng.xml +++ b/make/data/cldr/common/main/shi_Tfng.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/shi_Tfng_MA.xml b/make/data/cldr/common/main/shi_Tfng_MA.xml index 7ad4ef236b757..63001b5c7fb95 100644 --- a/make/data/cldr/common/main/shi_Tfng_MA.xml +++ b/make/data/cldr/common/main/shi_Tfng_MA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/shn.xml b/make/data/cldr/common/main/shn.xml index e13c174e7f0b3..4235172f367c2 100644 --- a/make/data/cldr/common/main/shn.xml +++ b/make/data/cldr/common/main/shn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/shn_MM.xml b/make/data/cldr/common/main/shn_MM.xml index 3433e2689955d..ae944bf342011 100644 --- a/make/data/cldr/common/main/shn_MM.xml +++ b/make/data/cldr/common/main/shn_MM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/shn_TH.xml b/make/data/cldr/common/main/shn_TH.xml index 9a6819b954481..32a425c9b40e5 100644 --- a/make/data/cldr/common/main/shn_TH.xml +++ b/make/data/cldr/common/main/shn_TH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/si.xml b/make/data/cldr/common/main/si.xml index 3da1a79f82c84..86ef2737c6e29 100644 --- a/make/data/cldr/common/main/si.xml +++ b/make/data/cldr/common/main/si.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1791,9 +1791,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} වේලාව</regionFormat> <regionFormat type="daylight">{0} දිවාආලෝක වේලාව</regionFormat> <regionFormat type="standard">{0} සම්මත වේලාව</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>සැන්ටා ඉසබෙල්</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>සමකක්ෂ සාර්ව වේලාව</standard> @@ -1916,9 +1913,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>මෙල්බෝර්න්</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>කුරී</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>හෝබාර්ට්</exemplarCity> </zone> @@ -2072,9 +2066,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>ක්‍රෙස්ටන්</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>යෙලෝනයිෆ්</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>එඩ්මන්ටන්</exemplarCity> </zone> @@ -2093,30 +2084,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>රෙසොලුට්</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>රෙයිනි ගඟ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>රැන්කින් පිවිසුම</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ඇටිකොකන්</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>තන්ඩර් බොක්ක</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>නිපිගන්</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ටොරන්ටෝ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ඉකාලුයිට්</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>පැන්නීටන්</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>මොන්ක්ටන්</exemplarCity> </zone> @@ -2930,18 +2909,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>දාර් එස් සලාම්</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>උස්ගොරෝඩ්</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>කිව්</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>සිම්ෆෙරෝපොල්</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>සපොරෝසියේ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>කම්පාලා</exemplarCity> </zone> @@ -2960,9 +2933,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>හොනොලුලු</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ජොන්ස්ටන්</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ඇනකොරාජ්</exemplarCity> </zone> @@ -3603,11 +3573,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>ලෝර්ඩ් හෝව් දිවා වේලාව</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>මැක්කුඅරි දුපත් වේලාව</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>මෙගඩන් වේලාව</generic> @@ -3647,13 +3612,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>මොව්සන් වේලාව</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>වයඹ මෙක්සිකෝ වේලාව</generic> - <standard>වයඹ මෙක්සිකෝ සම්මත වේලාව</standard> - <daylight>වයඹ මෙක්සිකෝ දිවාආලෝක වේලාව</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>මෙක්සිකෝ පැසිෆික් වේලාව</generic> diff --git a/make/data/cldr/common/main/si_LK.xml b/make/data/cldr/common/main/si_LK.xml index a30a6b198c99d..e16af631667e1 100644 --- a/make/data/cldr/common/main/si_LK.xml +++ b/make/data/cldr/common/main/si_LK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sid.xml b/make/data/cldr/common/main/sid.xml index 3716786521bdd..a92e68a3459c4 100644 --- a/make/data/cldr/common/main/sid.xml +++ b/make/data/cldr/common/main/sid.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sid_ET.xml b/make/data/cldr/common/main/sid_ET.xml index f628f2fb25a4f..29b629c4df46c 100644 --- a/make/data/cldr/common/main/sid_ET.xml +++ b/make/data/cldr/common/main/sid_ET.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sk.xml b/make/data/cldr/common/main/sk.xml index be0ac9cb76d82..3fbeec27ddb8b 100644 --- a/make/data/cldr/common/main/sk.xml +++ b/make/data/cldr/common/main/sk.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1034,7 +1034,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">lexikografické zoradenie</type> <type key="collation" type="phonetic">fonetické zoradenie</type> <type key="collation" type="pinyin">zoradenie pinyin</type> - <type key="collation" type="reformed">reformované zoradenie</type> <type key="collation" type="search">všeobecné vyhľadávanie</type> <type key="collation" type="searchjl" draft="contributed">Hľadať podľa počiatočnej spoluhlásky písma Hangul</type> <type key="collation" type="standard">štandardné zoradenie</type> @@ -2630,9 +2629,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </fields> <timeZoneNames> <regionFormat>časové pásmo {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>koordinovaný svetový čas</standard> @@ -2662,9 +2658,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Viedeň</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Dhaka"> <exemplarCity>Dháka</exemplarCity> </zone> @@ -3066,15 +3059,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Taipei"> <exemplarCity>Tchaj-pej</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kyjev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Záporožie</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <short> <generic draft="contributed">HST</generic> @@ -3682,11 +3669,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">macajský letný čas</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>čas ostrova Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>magadanský čas</generic> @@ -3726,13 +3708,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>čas Mawsonovej stanice</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>severozápadný mexický čas</generic> - <standard>severozápadný mexický štandardný čas</standard> - <daylight>severozápadný mexický letný čas</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>mexický tichomorský čas</generic> diff --git a/make/data/cldr/common/main/sk_SK.xml b/make/data/cldr/common/main/sk_SK.xml index eb53d5d23f25e..9d5d7c6c36662 100644 --- a/make/data/cldr/common/main/sk_SK.xml +++ b/make/data/cldr/common/main/sk_SK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/skr.xml b/make/data/cldr/common/main/skr.xml index c8687dc47222f..88729169b8ef8 100644 --- a/make/data/cldr/common/main/skr.xml +++ b/make/data/cldr/common/main/skr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/skr_PK.xml b/make/data/cldr/common/main/skr_PK.xml index 2227710bbc4cc..b2614bad2be78 100644 --- a/make/data/cldr/common/main/skr_PK.xml +++ b/make/data/cldr/common/main/skr_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sl.xml b/make/data/cldr/common/main/sl.xml index 3aa91aca4bce9..b0fb8038a8b84 100644 --- a/make/data/cldr/common/main/sl.xml +++ b/make/data/cldr/common/main/sl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1116,7 +1116,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">razvrščanje po sistemu telefonskega imenika</type> <type key="collation" type="phonetic">fonetično razvrščanje</type> <type key="collation" type="pinyin">razvrščanje po sistemu pinjin</type> - <type key="collation" type="reformed">reformirano razvrščanje</type> <type key="collation" type="search">Splošno iskanje</type> <type key="collation" type="searchjl" draft="contributed">Iskanje po začetnem soglasniku hangul</type> <type key="collation" type="standard">Standardno razvrščanje</type> @@ -2542,9 +2541,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} čas</regionFormat> <regionFormat type="daylight">{0} poletni čas</regionFormat> <regionFormat type="standard">{0} standardni čas</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>univerzalni koordinirani čas</standard> @@ -2571,9 +2567,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Dunaj</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Asia/Dhaka"> <exemplarCity>Daka</exemplarCity> </zone> @@ -2929,15 +2922,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Taipei"> <exemplarCity>Tajpej</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kijev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporožje</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3485,11 +3472,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Poletni čas otoka Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarieski čas</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadanski čas</generic> @@ -3529,13 +3511,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawsonski čas</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Mehiški severozahodni čas</generic> - <standard>Mehiški severozahodni standardni čas</standard> - <daylight>Mehiški severozahodni poletni čas</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mehiški pacifiški čas</generic> diff --git a/make/data/cldr/common/main/sl_SI.xml b/make/data/cldr/common/main/sl_SI.xml index 3c7992d75805e..1368b6fb95a9f 100644 --- a/make/data/cldr/common/main/sl_SI.xml +++ b/make/data/cldr/common/main/sl_SI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sma.xml b/make/data/cldr/common/main/sma.xml index 5d902dd5eb87b..56337ccc8f4b8 100644 --- a/make/data/cldr/common/main/sma.xml +++ b/make/data/cldr/common/main/sma.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sma_NO.xml b/make/data/cldr/common/main/sma_NO.xml index 12559efffb32e..16ee062d37c87 100644 --- a/make/data/cldr/common/main/sma_NO.xml +++ b/make/data/cldr/common/main/sma_NO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sma_SE.xml b/make/data/cldr/common/main/sma_SE.xml index 183903b78aa23..600fb9fe6ac7d 100644 --- a/make/data/cldr/common/main/sma_SE.xml +++ b/make/data/cldr/common/main/sma_SE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/smj.xml b/make/data/cldr/common/main/smj.xml index e17b382a4e3b6..2f2d71927e9c3 100644 --- a/make/data/cldr/common/main/smj.xml +++ b/make/data/cldr/common/main/smj.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/smj_NO.xml b/make/data/cldr/common/main/smj_NO.xml index a2dc043987bee..c1bfae31c23b4 100644 --- a/make/data/cldr/common/main/smj_NO.xml +++ b/make/data/cldr/common/main/smj_NO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/smj_SE.xml b/make/data/cldr/common/main/smj_SE.xml index a4187d0be900a..2d14ac2865f4b 100644 --- a/make/data/cldr/common/main/smj_SE.xml +++ b/make/data/cldr/common/main/smj_SE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/smn.xml b/make/data/cldr/common/main/smn.xml index 58388534b73d9..d6e4b544b1aaa 100644 --- a/make/data/cldr/common/main/smn.xml +++ b/make/data/cldr/common/main/smn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/smn_FI.xml b/make/data/cldr/common/main/smn_FI.xml index 8c54143bb107c..04fc344983a12 100644 --- a/make/data/cldr/common/main/smn_FI.xml +++ b/make/data/cldr/common/main/smn_FI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sms.xml b/make/data/cldr/common/main/sms.xml index 7930636d8440d..8d57359d4c8dd 100644 --- a/make/data/cldr/common/main/sms.xml +++ b/make/data/cldr/common/main/sms.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sms_FI.xml b/make/data/cldr/common/main/sms_FI.xml index 91056a71a5ef9..07c7be6f7e8d0 100644 --- a/make/data/cldr/common/main/sms_FI.xml +++ b/make/data/cldr/common/main/sms_FI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sn.xml b/make/data/cldr/common/main/sn.xml index 50e8b24856fb1..006c7d0b14ba5 100644 --- a/make/data/cldr/common/main/sn.xml +++ b/make/data/cldr/common/main/sn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sn_ZW.xml b/make/data/cldr/common/main/sn_ZW.xml index 2883241e47065..4aa04059c5048 100644 --- a/make/data/cldr/common/main/sn_ZW.xml +++ b/make/data/cldr/common/main/sn_ZW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/so.xml b/make/data/cldr/common/main/so.xml index 724b401732b8c..f2d5323c230f7 100644 --- a/make/data/cldr/common/main/so.xml +++ b/make/data/cldr/common/main/so.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1027,7 +1027,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="gb2312han">Isku hagaajinta Farta shiineeska</type> <type key="collation" type="phonebook">Isku hagaajinta foonbuuga</type> <type key="collation" type="pinyin">Isku hagaajinta Pinyin</type> - <type key="collation" type="reformed">Isku hagaajinta Reformed</type> <type key="collation" type="search">Raadinta Guud</type> <type key="collation" type="searchjl">Raadinta Shibanaha Hangul</type> <type key="collation" type="standard">Amarka Kala Soocidda Caadiga ah</type> @@ -2758,9 +2757,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>Melboon</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kuriy</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Hubaart</exemplarCity> </zone> @@ -2890,9 +2886,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>Karestoon</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Yelowneyf</exemplarCity> - </zone> <zone type="America/Swift_Current"> <exemplarCity>Iswift Karent</exemplarCity> </zone> @@ -2908,27 +2901,15 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>Resoluut</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Reyni Rifer</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Raankin Inleet</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Atikokaan</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Tanda Baay</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Nibiigoon</exemplarCity> - </zone> <zone type="America/Iqaluit"> <exemplarCity>Iqaaluut</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Bangnirtuung</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Moonktoon</exemplarCity> </zone> @@ -3616,27 +3597,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Daresalaam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Usgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiyeef</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Simferobol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Saborosey</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Kambaala</exemplarCity> </zone> <zone type="America/Nome"> <exemplarCity>Noom</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Joonston</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Anjorage</exemplarCity> </zone> @@ -4316,11 +4288,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Waqtiga Dharaarta ee Lod How</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Waqtiga Makquwariy Aylaan</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Watiga Magedan</generic> @@ -4360,13 +4327,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Waqtiga Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Waqtiga Waqooyi-Galbeed Meksiko</generic> - <standard>Waqtiga Caadiga Ah ee Waqooyi-Galbeed Meksiko</standard> - <daylight>Waqtiga Dharaarta ee Waqooyi-Galbeed Meksiko</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Waqtiga Baasifikada Meksiko</generic> diff --git a/make/data/cldr/common/main/so_DJ.xml b/make/data/cldr/common/main/so_DJ.xml index 7b369738b2dca..fdcc7fea0e12d 100644 --- a/make/data/cldr/common/main/so_DJ.xml +++ b/make/data/cldr/common/main/so_DJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/so_ET.xml b/make/data/cldr/common/main/so_ET.xml index 2c5f270fd5364..8829571b92878 100644 --- a/make/data/cldr/common/main/so_ET.xml +++ b/make/data/cldr/common/main/so_ET.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/so_KE.xml b/make/data/cldr/common/main/so_KE.xml index 7c2b020044ccd..f117c32094043 100644 --- a/make/data/cldr/common/main/so_KE.xml +++ b/make/data/cldr/common/main/so_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/so_SO.xml b/make/data/cldr/common/main/so_SO.xml index 5bf9d753c0c24..a576aff8c652e 100644 --- a/make/data/cldr/common/main/so_SO.xml +++ b/make/data/cldr/common/main/so_SO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sq.xml b/make/data/cldr/common/main/sq.xml index 9c6871e4f9346..ccffdff0a0489 100644 --- a/make/data/cldr/common/main/sq.xml +++ b/make/data/cldr/common/main/sq.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1008,7 +1008,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="gb2312han">Radhitje e kinezishtes së thjeshtësuar - GB2312</type> <type key="collation" type="phonebook">Radhitje libri telefonik</type> <type key="collation" type="pinyin">Radhitje pinini</type> - <type key="collation" type="reformed">Radhitje e reformuar</type> <type key="collation" type="search">kërkim i përgjithshëm</type> <type key="collation" type="searchjl">kërkim sipas bashkëtingëllores fillestare hangul</type> <type key="collation" type="standard">radhitje standarde</type> @@ -2125,9 +2124,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Ora: {0}</regionFormat> <regionFormat type="daylight">Ora verore: {0}</regionFormat> <regionFormat type="standard">Ora standarde: {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa-Izabela</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Ora universale e koordinuar</standard> @@ -2226,9 +2222,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Melburn</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kuri</exemplarCity> - </zone> <zone type="Australia/Lindeman"> <exemplarCity>Lindëmen</exemplarCity> </zone> @@ -2331,9 +2324,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Kreston</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Jellounajf</exemplarCity> - </zone> <zone type="America/Swift_Current"> <exemplarCity>Rryma e Shpejtë</exemplarCity> </zone> @@ -2346,15 +2336,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Winnipeg"> <exemplarCity>Uinipeg</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Lumi i Shirave</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Gryka Inlet</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Gjiri i Bubullimës</exemplarCity> - </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikaluit</exemplarCity> </zone> @@ -2921,9 +2905,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporozhje</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity>Miduej</exemplarCity> </zone> @@ -2933,9 +2914,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Xhonston</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Ankorejxh</exemplarCity> </zone> @@ -3593,11 +3571,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Ora verore e Makaos</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Ora e Ishullit Makuari</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Ora e Magadanit</generic> @@ -3637,13 +3610,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Ora e Mausonit</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Ora e Meksikës Veriperëndimore</generic> - <standard>Ora standarde e Meksikës Veriperëndimore</standard> - <daylight>Ora verore e Meksikës Veriperëndimore</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Ora e Territoreve Meksikane të Bregut të Paqësorit</generic> diff --git a/make/data/cldr/common/main/sq_AL.xml b/make/data/cldr/common/main/sq_AL.xml index 7e733baceb52f..d358f48885965 100644 --- a/make/data/cldr/common/main/sq_AL.xml +++ b/make/data/cldr/common/main/sq_AL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sq_MK.xml b/make/data/cldr/common/main/sq_MK.xml index 9e98620ffee16..1b195b20744ca 100644 --- a/make/data/cldr/common/main/sq_MK.xml +++ b/make/data/cldr/common/main/sq_MK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sq_XK.xml b/make/data/cldr/common/main/sq_XK.xml index 96570d0403605..a876cedc6ae0d 100644 --- a/make/data/cldr/common/main/sq_XK.xml +++ b/make/data/cldr/common/main/sq_XK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sr.xml b/make/data/cldr/common/main/sr.xml index a92f8ddbffe9e..3b6e777f96bd3 100644 --- a/make/data/cldr/common/main/sr.xml +++ b/make/data/cldr/common/main/sr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1116,7 +1116,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">сортирање као телефонски именик</type> <type key="collation" type="phonetic">фонетски редослед сортирања</type> <type key="collation" type="pinyin">пинјин сортирање</type> - <type key="collation" type="reformed">реформисани редослед сортирања</type> <type key="collation" type="search">претрага опште намене</type> <type key="collation" type="searchjl" draft="contributed">Претрага према хангул почетном сугласнику</type> <type key="collation" type="standard">стандардни редослед сортирања</type> @@ -2673,9 +2672,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <timeZoneNames> <regionFormat type="daylight">{0}, летње време</regionFormat> <regionFormat type="standard">{0}, стандардно време</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Санта Изабел</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Координисано универзално време</standard> @@ -2798,9 +2794,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Мелбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Кари</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Хобарт</exemplarCity> </zone> @@ -2954,9 +2947,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Јелоунајф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Едмонтон</exemplarCity> </zone> @@ -2975,30 +2965,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Ресолут</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рејни Ривер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ранкин Инлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Корал Харбур</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тандер Беј</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Нипигон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Иквалуит</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Пангниртунг</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -3812,18 +3790,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар-ес-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Кијев</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Симферопољ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запорожје</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -3842,9 +3814,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Хонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Џонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Енкориџ</exemplarCity> </zone> @@ -4557,11 +4526,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Макао летње рачунање времена</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Острво Маквери време</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магадан време</generic> @@ -4601,13 +4565,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Мосон време</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Северозападни Мексико</generic> - <standard>Северозападни Мексико, стандардно време</standard> - <daylight>Северозападни Мексико, летње време</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Мексички Пацифик</generic> diff --git a/make/data/cldr/common/main/sr_Cyrl.xml b/make/data/cldr/common/main/sr_Cyrl.xml index 1bc5140e9941e..f6a9df7ab3b3b 100644 --- a/make/data/cldr/common/main/sr_Cyrl.xml +++ b/make/data/cldr/common/main/sr_Cyrl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sr_Cyrl_BA.xml b/make/data/cldr/common/main/sr_Cyrl_BA.xml index e29c66343429f..18516d2272dc9 100644 --- a/make/data/cldr/common/main/sr_Cyrl_BA.xml +++ b/make/data/cldr/common/main/sr_Cyrl_BA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -80,7 +80,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="dictionary">редослијед сортирања у рјечнику</type> <type key="collation" type="ducet">подразумијевани Unicode редослијед сортирања</type> <type key="collation" type="phonetic">фонетски редослијед сортирања</type> - <type key="collation" type="reformed">реформисани редослијед сортирања</type> <type key="collation" type="search">претрага опште намјене</type> <type key="collation" type="standard">стандардни редослијед сортирања</type> <type key="collation" type="unihan">редослијед сортирања радикалних потеза</type> @@ -1082,11 +1081,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Лорд Хов, љетње вријеме</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>острво Маквори вријеме</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магадан вријеме</generic> @@ -1126,13 +1120,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Мосон вријеме</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Сјеверозападни Мексико</generic> - <standard>Сјеверозападни Мексико, стандардно вријеме</standard> - <daylight>Сјеверозападни Мексико, летње вријеме</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Мексички Пацифик</generic> diff --git a/make/data/cldr/common/main/sr_Cyrl_ME.xml b/make/data/cldr/common/main/sr_Cyrl_ME.xml index b6888b6ea043b..038894034b8cc 100644 --- a/make/data/cldr/common/main/sr_Cyrl_ME.xml +++ b/make/data/cldr/common/main/sr_Cyrl_ME.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sr_Cyrl_RS.xml b/make/data/cldr/common/main/sr_Cyrl_RS.xml index 31863ae9d74e4..7006e9818015a 100644 --- a/make/data/cldr/common/main/sr_Cyrl_RS.xml +++ b/make/data/cldr/common/main/sr_Cyrl_RS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sr_Cyrl_XK.xml b/make/data/cldr/common/main/sr_Cyrl_XK.xml index 102831214b200..0d2afec02660e 100644 --- a/make/data/cldr/common/main/sr_Cyrl_XK.xml +++ b/make/data/cldr/common/main/sr_Cyrl_XK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sr_Latn.xml b/make/data/cldr/common/main/sr_Latn.xml index 87f6bbf49492e..277db9469f731 100644 --- a/make/data/cldr/common/main/sr_Latn.xml +++ b/make/data/cldr/common/main/sr_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1115,7 +1115,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="phonebook">sortiranje kao telefonski imenik</type> <type key="collation" type="phonetic">fonetski redosled sortiranja</type> <type key="collation" type="pinyin">pinjin sortiranje</type> - <type key="collation" type="reformed">reformisani redosled sortiranja</type> <type key="collation" type="search">pretraga opšte namene</type> <type key="collation" type="searchjl" draft="contributed">Pretraga prema hangul početnom suglasniku</type> <type key="collation" type="standard">standardni redosled sortiranja</type> @@ -2673,9 +2672,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <timeZoneNames> <regionFormat type="daylight">{0}, letnje vreme</regionFormat> <regionFormat type="standard">{0}, standardno vreme</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Izabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Koordinisano univerzalno vreme</standard> @@ -2798,9 +2794,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>Melburn</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kari</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Hobart</exemplarCity> </zone> @@ -2954,9 +2947,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>Kreston</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Jelounajf</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Edmonton</exemplarCity> </zone> @@ -2975,30 +2965,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>Resolut</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Rejni River</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Rankin Inlet</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Koral Harbur</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Tander Bej</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Nipigon</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Toronto</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikvaluit</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pangnirtung</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Monkton</exemplarCity> </zone> @@ -3812,18 +3790,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar-es-Salam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kijev</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Simferopolj</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporožje</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Kampala</exemplarCity> </zone> @@ -3842,9 +3814,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Džonston</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Enkoridž</exemplarCity> </zone> @@ -4557,11 +4526,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Makao letnje računanje vremena</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Ostrvo Makveri vreme</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan vreme</generic> @@ -4601,13 +4565,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Moson vreme</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Severozapadni Meksiko</generic> - <standard>Severozapadni Meksiko, standardno vreme</standard> - <daylight>Severozapadni Meksiko, letnje vreme</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksički Pacifik</generic> diff --git a/make/data/cldr/common/main/sr_Latn_BA.xml b/make/data/cldr/common/main/sr_Latn_BA.xml index 1bd4f55afe0c0..9dd83baddbb7b 100644 --- a/make/data/cldr/common/main/sr_Latn_BA.xml +++ b/make/data/cldr/common/main/sr_Latn_BA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -80,7 +80,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="dictionary">redoslijed sortiranja u rječniku</type> <type key="collation" type="ducet">podrazumijevani Unicode redoslijed sortiranja</type> <type key="collation" type="phonetic">fonetski redoslijed sortiranja</type> - <type key="collation" type="reformed">reformisani redoslijed sortiranja</type> <type key="collation" type="search">pretraga opšte namjene</type> <type key="collation" type="standard">standardni redoslijed sortiranja</type> <type key="collation" type="unihan">redoslijed sortiranja radikalnih poteza</type> @@ -1082,11 +1081,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Lord Hov, ljetnje vrijeme</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>ostrvo Makvori vrijeme</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan vrijeme</generic> @@ -1126,13 +1120,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Moson vrijeme</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Sjeverozapadni Meksiko</generic> - <standard>Sjeverozapadni Meksiko, standardno vrijeme</standard> - <daylight>Sjeverozapadni Meksiko, letnje vrijeme</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksički Pacifik</generic> diff --git a/make/data/cldr/common/main/sr_Latn_ME.xml b/make/data/cldr/common/main/sr_Latn_ME.xml index 5853439f3c6fd..be0b66fc070c5 100644 --- a/make/data/cldr/common/main/sr_Latn_ME.xml +++ b/make/data/cldr/common/main/sr_Latn_ME.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sr_Latn_RS.xml b/make/data/cldr/common/main/sr_Latn_RS.xml index aace7e587ab0e..04102a3a7d6da 100644 --- a/make/data/cldr/common/main/sr_Latn_RS.xml +++ b/make/data/cldr/common/main/sr_Latn_RS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sr_Latn_XK.xml b/make/data/cldr/common/main/sr_Latn_XK.xml index 4d342567f7664..f655d5dbe823e 100644 --- a/make/data/cldr/common/main/sr_Latn_XK.xml +++ b/make/data/cldr/common/main/sr_Latn_XK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ss.xml b/make/data/cldr/common/main/ss.xml index 37807457ad11d..c86a4a9c65307 100644 --- a/make/data/cldr/common/main/ss.xml +++ b/make/data/cldr/common/main/ss.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ss_SZ.xml b/make/data/cldr/common/main/ss_SZ.xml index fa930615ead27..440f7ef0f89ed 100644 --- a/make/data/cldr/common/main/ss_SZ.xml +++ b/make/data/cldr/common/main/ss_SZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ss_ZA.xml b/make/data/cldr/common/main/ss_ZA.xml index 9e512c4d8b1f4..f57011adf5110 100644 --- a/make/data/cldr/common/main/ss_ZA.xml +++ b/make/data/cldr/common/main/ss_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ssy.xml b/make/data/cldr/common/main/ssy.xml index 02e4380d81259..ec9d3508fe49e 100644 --- a/make/data/cldr/common/main/ssy.xml +++ b/make/data/cldr/common/main/ssy.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ssy_ER.xml b/make/data/cldr/common/main/ssy_ER.xml index 33924045617c2..0953fc3c8282c 100644 --- a/make/data/cldr/common/main/ssy_ER.xml +++ b/make/data/cldr/common/main/ssy_ER.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/st.xml b/make/data/cldr/common/main/st.xml index 95f066593d2bd..6ecdf2d3a01ca 100644 --- a/make/data/cldr/common/main/st.xml +++ b/make/data/cldr/common/main/st.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/st_LS.xml b/make/data/cldr/common/main/st_LS.xml index 5b5f213072ec1..508573ff653bf 100644 --- a/make/data/cldr/common/main/st_LS.xml +++ b/make/data/cldr/common/main/st_LS.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/st_ZA.xml b/make/data/cldr/common/main/st_ZA.xml index 8457779ae8972..c575262cfe589 100644 --- a/make/data/cldr/common/main/st_ZA.xml +++ b/make/data/cldr/common/main/st_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/su.xml b/make/data/cldr/common/main/su.xml index d3699a0431e2c..57eec539131bf 100644 --- a/make/data/cldr/common/main/su.xml +++ b/make/data/cldr/common/main/su.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/su_Latn.xml b/make/data/cldr/common/main/su_Latn.xml index 34ea37e137c38..65f70aab8cbbf 100644 --- a/make/data/cldr/common/main/su_Latn.xml +++ b/make/data/cldr/common/main/su_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/su_Latn_ID.xml b/make/data/cldr/common/main/su_Latn_ID.xml index 1f7b36a1c37fa..fdac0d2c9e3e6 100644 --- a/make/data/cldr/common/main/su_Latn_ID.xml +++ b/make/data/cldr/common/main/su_Latn_ID.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sv.xml b/make/data/cldr/common/main/sv.xml index ddaf56ef0e24b..72eabf6da6ac8 100644 --- a/make/data/cldr/common/main/sv.xml +++ b/make/data/cldr/common/main/sv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1350,7 +1350,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">telefonkatalogssorteringsordning</type> <type key="collation" type="phonetic">fonetisk sorteringsordning</type> <type key="collation" type="pinyin">pinyin-sorteringsordning</type> - <type key="collation" type="reformed">reformerad sorteringsordning</type> <type key="collation" type="search">allmän sökning</type> <type key="collation" type="searchjl" draft="contributed">söksorteringsordning för att söka på inledande Hangul-konsonant</type> <type key="collation" type="standard">normal sorteringsordning</type> @@ -3374,9 +3373,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0}tid</regionFormat> <regionFormat type="daylight">{0} (sommartid)</regionFormat> <regionFormat type="standard">{0} (normaltid)</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>koordinerad universell tid</standard> @@ -3406,9 +3402,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Wien</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/Brussels"> <exemplarCity>Bryssel</exemplarCity> </zone> @@ -3677,15 +3670,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar es-Salaam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzjhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporizjzja</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity>Midwayöarna</exemplarCity> </zone> @@ -3697,9 +3684,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </short> <exemplarCity>Honolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Johnstonatollen</exemplarCity> - </zone> <zone type="Asia/Tashkent"> <exemplarCity>Tasjkent</exemplarCity> </zone> @@ -4306,11 +4290,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Macaosommartid</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarietid</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadantid</generic> @@ -4350,13 +4329,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawsontid</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>nordvästmexikansk tid</generic> - <standard>nordvästmexikansk normaltid</standard> - <daylight>nordvästmexikansk sommartid</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>mexikansk stillahavstid</generic> diff --git a/make/data/cldr/common/main/sv_AX.xml b/make/data/cldr/common/main/sv_AX.xml index 585fe75acbc59..f4e5c2916fc27 100644 --- a/make/data/cldr/common/main/sv_AX.xml +++ b/make/data/cldr/common/main/sv_AX.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sv_FI.xml b/make/data/cldr/common/main/sv_FI.xml index b218456e0622b..5d651579c599f 100644 --- a/make/data/cldr/common/main/sv_FI.xml +++ b/make/data/cldr/common/main/sv_FI.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sv_SE.xml b/make/data/cldr/common/main/sv_SE.xml index c72518baabce0..de404ba5273d7 100644 --- a/make/data/cldr/common/main/sv_SE.xml +++ b/make/data/cldr/common/main/sv_SE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sw.xml b/make/data/cldr/common/main/sw.xml index 01f309baa3d0d..163277ea1d70d 100644 --- a/make/data/cldr/common/main/sw.xml +++ b/make/data/cldr/common/main/sw.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -927,7 +927,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Mpangilio wa Orodha za Nambari za Simu</type> <type key="collation" type="phonetic">Utaratibu wa Kupanga Fonetiki</type> <type key="collation" type="pinyin">Mpangilio wa Kipinyin</type> - <type key="collation" type="reformed">Mpangilio Uliorekebishwa</type> <type key="collation" type="search">Utafutaji wa Kijumla</type> <type key="collation" type="searchjl">Tafuta kwa Konsonanti Halisi ya Hangul</type> <type key="collation" type="standard">Mpangilio wa Kawaida</type> @@ -1883,9 +1882,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Saa za {0}</regionFormat> <regionFormat type="daylight">Saa za Mchana za {0}</regionFormat> <regionFormat type="standard">Saa za wastani za {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Mfumo wa kuratibu saa ulimwenguni</standard> @@ -1894,9 +1890,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Etc/Unknown"> <exemplarCity>Jiji Lisilojulikana</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Europe/London"> <long> <daylight>Saa za Majira ya Joto za Uingereza</daylight> @@ -2463,11 +2456,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Saa za Mchana za Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Saa za kisiwa cha Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Saa za Magadan</generic> @@ -2507,13 +2495,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Saa za Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Saa za Meksiko Kaskazini Magharibi</generic> - <standard>Saa za Wastani za Meksiko Kaskazini Magharibi</standard> - <daylight>Saa za mchana za Meksiko Kaskazini Magharibi</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Saa za pasifiki za Meksiko</generic> diff --git a/make/data/cldr/common/main/sw_CD.xml b/make/data/cldr/common/main/sw_CD.xml index b21f022304019..47f916723bbcc 100644 --- a/make/data/cldr/common/main/sw_CD.xml +++ b/make/data/cldr/common/main/sw_CD.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sw_KE.xml b/make/data/cldr/common/main/sw_KE.xml index c37448e8370b7..cae0a900b0e07 100644 --- a/make/data/cldr/common/main/sw_KE.xml +++ b/make/data/cldr/common/main/sw_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -719,11 +719,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Saa za Majira ya Joto za Krasnoyarsk</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Saa za Makwuarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Saa za Magadan</generic> @@ -748,13 +743,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Saa za Majira ya Joto za Morisi</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Saa za Kaskazini Magharibi mwa Meksiko</generic> - <standard>Saa za Wastani za Kaskazini Magharibi mwa Meksiko</standard> - <daylight>Saa za Mchana za Kaskazini Magharibi mwa Meksiko</daylight> - </long> - </metazone> <metazone type="Mongolia"> <long> <generic>Saa za Ulaanbataar</generic> diff --git a/make/data/cldr/common/main/sw_TZ.xml b/make/data/cldr/common/main/sw_TZ.xml index 93bba6d40195a..0f77a90f4f252 100644 --- a/make/data/cldr/common/main/sw_TZ.xml +++ b/make/data/cldr/common/main/sw_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/sw_UG.xml b/make/data/cldr/common/main/sw_UG.xml index 9ccb845a124fc..97567fa256408 100644 --- a/make/data/cldr/common/main/sw_UG.xml +++ b/make/data/cldr/common/main/sw_UG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/syr.xml b/make/data/cldr/common/main/syr.xml index e73f1ba1517af..a3c6a63ea1174 100644 --- a/make/data/cldr/common/main/syr.xml +++ b/make/data/cldr/common/main/syr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -932,7 +932,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <dateFormatItem id="yw" count="other">ܫܒܘܥܐ w ܕܫܢܬܐ Y</dateFormatItem> </availableFormats> <intervalFormats> - <intervalFormatFallback>{0}  –  {1}</intervalFormatFallback> + <intervalFormatFallback>{0} – {1}</intervalFormatFallback> <intervalFormatItem id="Gy"> <greatestDifference id="G">y G – y G</greatestDifference> <greatestDifference id="y">y – y G</greatestDifference> @@ -1550,9 +1550,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>ܟܪܝܣܬܘܢ</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ܝܠܘܢܝܦ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ܐܕܡܘܢܬܘܢ</exemplarCity> </zone> @@ -1571,30 +1568,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>ܪܝܣܘܠܘܬ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ܢܗܪܐ ܕܪܥܢܝ</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ܪܐܢܟܢ ܐܢܠܝܬ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ܐܬܝܟܘܟܐܢ</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ܬܐܢܕܐܪ ܒܐܝ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ܢܝܦܝܓܘܢ</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ܬܘܪܘܢܬܘ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ܐܝܩܠܘܝܬ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ܦܐܢܓܢܝܪܬܘܢܓ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ܡܘܢܟܬܘܢ</exemplarCity> </zone> @@ -2405,18 +2390,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ܕܐܪ ܫܠܡܐ</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ܐܘܙܓܘܪܘܕ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>ܟܝܝܒ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ܣܡܦܪܘܦܠ</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ܙܐܦܘܪܝܓܝ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>ܟܐܡܦܐܠܐ</exemplarCity> </zone> @@ -2432,9 +2411,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Nome"> <exemplarCity>ܢܘܡ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ܓܘܢܣܬܘܢ</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ܐܢܟܘܪܓ</exemplarCity> </zone> @@ -3134,11 +3110,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܕܡܐܟܐܘ</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>ܥܕܢܐ ܕܓܙܪܬܐ ܡܐܟܐܘܪܝ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>ܥܕܢܐ ܕܡܐܓܐܕܐܢ</generic> @@ -3178,13 +3149,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>ܥܕܢܐ ܕܡܐܘܣܘܢ</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>ܥܕܢܐ ܓܪܒܝ ܡܥܪܒ ܡܟܣܝܩܘ</generic> - <standard>ܥܕܢܐ ܡܫܘܚܬܢܝܬܐ ܓܪܒܝ ܡܥܪܒ ܡܟܣܝܩܘ</standard> - <daylight>ܥܕܢܐ ܕܒܗܪ ܝܘܡܐ ܓܪܒܝ ܡܥܪܒ ܡܟܣܝܩܘ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>ܥܕܢܐ ܕܡܟܣܝܩܘ ܫܝܢܝܬܐ</generic> diff --git a/make/data/cldr/common/main/syr_IQ.xml b/make/data/cldr/common/main/syr_IQ.xml index 0174189483044..c70f4db66aba6 100644 --- a/make/data/cldr/common/main/syr_IQ.xml +++ b/make/data/cldr/common/main/syr_IQ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/syr_SY.xml b/make/data/cldr/common/main/syr_SY.xml index 7a342c7a41940..4260f44663095 100644 --- a/make/data/cldr/common/main/syr_SY.xml +++ b/make/data/cldr/common/main/syr_SY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/szl.xml b/make/data/cldr/common/main/szl.xml index 3b601e77a3b04..232e3f91bb5b9 100644 --- a/make/data/cldr/common/main/szl.xml +++ b/make/data/cldr/common/main/szl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1613,9 +1613,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Europe/Vienna"> <exemplarCity draft="unconfirmed">Wiedyń</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity draft="unconfirmed">Currie</exemplarCity> - </zone> <zone type="Europe/Mariehamn"> <exemplarCity draft="unconfirmed">Maarianhamina</exemplarCity> </zone> @@ -2134,18 +2131,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Asia/Taipei"> <exemplarCity draft="unconfirmed">Tajpej</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="unconfirmed">Użgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity draft="unconfirmed">Kijōw</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity draft="unconfirmed">Symferopol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">Zaporoże</exemplarCity> - </zone> <zone type="America/North_Dakota/Beulah"> <exemplarCity draft="unconfirmed">Beulah, Pōłnocno Dakota</exemplarCity> </zone> @@ -2713,13 +2704,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard draft="unconfirmed">Wyspy Marshalla</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">Meksyk Pōłnocno-Zachodni</generic> - <standard draft="unconfirmed">Meksyk Pōłnocno-Zachodni (sztandardowy czas)</standard> - <daylight draft="unconfirmed">Meksyk Pōłnocno-Zachodni (latowy czas)</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">Meksyk (czas pacyficzny)</generic> diff --git a/make/data/cldr/common/main/szl_PL.xml b/make/data/cldr/common/main/szl_PL.xml index bb8c99c383c12..f7d6bb206a8f8 100644 --- a/make/data/cldr/common/main/szl_PL.xml +++ b/make/data/cldr/common/main/szl_PL.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ta.xml b/make/data/cldr/common/main/ta.xml index 12d1a33cc8011..922853f2c1318 100644 --- a/make/data/cldr/common/main/ta.xml +++ b/make/data/cldr/common/main/ta.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1105,7 +1105,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">தொலைபேசி புத்தக வரிசை முறை</type> <type key="collation" type="phonetic">ஒலியியல் வரிசைப்படுத்தல் முறை</type> <type key="collation" type="pinyin">பின்யின் வரிசை முறை</type> - <type key="collation" type="reformed">சீர்திருத்தப்பட்ட வரிசை முறை</type> <type key="collation" type="search">பொதுப்படையான தேடல்</type> <type key="collation" type="searchjl">ஹங்குல் முதன்மை மெய்யெழுத்தின்படி தேடு</type> <type key="collation" type="standard">நிலையான வரிசை முறை</type> @@ -1421,16 +1420,16 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <dateFormatItem id="EBhm">E B h:mm</dateFormatItem> <dateFormatItem id="EBhms">E B h:mm:ss</dateFormatItem> <dateFormatItem id="Ed">d E</dateFormatItem> - <dateFormatItem id="Ehm">E a h:mm</dateFormatItem> - <dateFormatItem id="Ehms">E a h:mm:ss</dateFormatItem> + <dateFormatItem id="Ehm">E h:mm a</dateFormatItem> + <dateFormatItem id="Ehms">E h:mm:ss a</dateFormatItem> <dateFormatItem id="Gy">y G</dateFormatItem> <dateFormatItem id="GyMd">d/M/y GGGGG</dateFormatItem> <dateFormatItem id="GyMMM">MMM y G</dateFormatItem> <dateFormatItem id="GyMMMd">d MMM, y G</dateFormatItem> <dateFormatItem id="GyMMMEd">E, d MMM, y G</dateFormatItem> - <dateFormatItem id="h">a h</dateFormatItem> - <dateFormatItem id="hm">a h:mm</dateFormatItem> - <dateFormatItem id="hms">a h:mm:ss</dateFormatItem> + <dateFormatItem id="h">h a</dateFormatItem> + <dateFormatItem id="hm">h:mm a</dateFormatItem> + <dateFormatItem id="hms">h:mm:ss a</dateFormatItem> <dateFormatItem id="Md">d/M</dateFormatItem> <dateFormatItem id="MEd">E, d/M</dateFormatItem> <dateFormatItem id="MMdd">dd-MM</dateFormatItem> @@ -1456,22 +1455,22 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <greatestDifference id="d">d – d</greatestDifference> </intervalFormatItem> <intervalFormatItem id="h"> - <greatestDifference id="a">a h – a h</greatestDifference> - <greatestDifference id="h">a h–h</greatestDifference> + <greatestDifference id="a">h a – h a</greatestDifference> + <greatestDifference id="h">h–h a</greatestDifference> </intervalFormatItem> <intervalFormatItem id="hm"> - <greatestDifference id="a">a h:mm – a h:mm</greatestDifference> - <greatestDifference id="h">a h:mm–h:mm</greatestDifference> - <greatestDifference id="m">a h:mm–h:mm</greatestDifference> + <greatestDifference id="a">h:mm a – h:mm a</greatestDifference> + <greatestDifference id="h">h:mm–h:mm a</greatestDifference> + <greatestDifference id="m">h:mm–h:mm a</greatestDifference> </intervalFormatItem> <intervalFormatItem id="hmv"> - <greatestDifference id="a">a h:mm – a h:mm v</greatestDifference> - <greatestDifference id="h">a h:mm–h:mm v</greatestDifference> - <greatestDifference id="m">a h:mm–h:mm v</greatestDifference> + <greatestDifference id="a">h:mm – h:mm a v</greatestDifference> + <greatestDifference id="h">h:mm–h:mm a v</greatestDifference> + <greatestDifference id="m">h:mm–h:mm a v</greatestDifference> </intervalFormatItem> <intervalFormatItem id="hv"> - <greatestDifference id="a">a h – a h v</greatestDifference> - <greatestDifference id="h">a h–h v</greatestDifference> + <greatestDifference id="a">h a – h a v</greatestDifference> + <greatestDifference id="h">h–h a v</greatestDifference> </intervalFormatItem> <intervalFormatItem id="M"> <greatestDifference id="M">M – M</greatestDifference> @@ -1644,9 +1643,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <dayPeriodContext type="format"> <dayPeriodWidth type="abbreviated"> <dayPeriod type="midnight">நள்ளிரவு</dayPeriod> - <dayPeriod type="am">AM</dayPeriod> <dayPeriod type="noon">நண்பகல்</dayPeriod> - <dayPeriod type="pm">பிற்பகல்</dayPeriod> <dayPeriod type="morning1">அதிகாலை</dayPeriod> <dayPeriod type="morning2">காலை</dayPeriod> <dayPeriod type="afternoon1">மதியம்</dayPeriod> @@ -1657,9 +1654,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </dayPeriodWidth> <dayPeriodWidth type="narrow"> <dayPeriod type="midnight">நள்.</dayPeriod> - <dayPeriod type="am">மு.ப</dayPeriod> <dayPeriod type="noon">நண்.</dayPeriod> - <dayPeriod type="pm">பி.ப</dayPeriod> <dayPeriod type="morning1">அதி.</dayPeriod> <dayPeriod type="morning2">கா.</dayPeriod> <dayPeriod type="afternoon1">மதி.</dayPeriod> @@ -1670,15 +1665,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </dayPeriodWidth> </dayPeriodContext> <dayPeriodContext type="stand-alone"> - <dayPeriodWidth type="abbreviated"> - <dayPeriod type="am">முற்பகல்</dayPeriod> - <dayPeriod type="pm">பிற்பகல்</dayPeriod> - </dayPeriodWidth> <dayPeriodWidth type="narrow"> <dayPeriod type="midnight">நள்.</dayPeriod> - <dayPeriod type="am">மு.ப</dayPeriod> <dayPeriod type="noon">நண்.</dayPeriod> - <dayPeriod type="pm">பி.ப</dayPeriod> <dayPeriod type="morning1">அதி.</dayPeriod> <dayPeriod type="morning2">கா.</dayPeriod> <dayPeriod type="afternoon1">மதி.</dayPeriod> @@ -1687,10 +1676,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <dayPeriod type="evening2">அந்தி மா.</dayPeriod> <dayPeriod type="night1">இ.</dayPeriod> </dayPeriodWidth> - <dayPeriodWidth type="wide"> - <dayPeriod type="am">முற்பகல்</dayPeriod> - <dayPeriod type="pm">பிற்பகல்</dayPeriod> - </dayPeriodWidth> </dayPeriodContext> </dayPeriods> <eras> @@ -1731,25 +1716,25 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <timeFormats> <timeFormatLength type="full"> <timeFormat> - <pattern>a h:mm:ss zzzz</pattern> + <pattern>h:mm:ss a zzzz</pattern> <datetimeSkeleton>ahmmsszzzz</datetimeSkeleton> </timeFormat> </timeFormatLength> <timeFormatLength type="long"> <timeFormat> - <pattern>a h:mm:ss z</pattern> + <pattern>h:mm:ss a z</pattern> <datetimeSkeleton>ahmmssz</datetimeSkeleton> </timeFormat> </timeFormatLength> <timeFormatLength type="medium"> <timeFormat> - <pattern>a h:mm:ss</pattern> + <pattern>h:mm:ss a</pattern> <datetimeSkeleton>ahmmss</datetimeSkeleton> </timeFormat> </timeFormatLength> <timeFormatLength type="short"> <timeFormat> - <pattern>a h:mm</pattern> + <pattern>h:mm a</pattern> <datetimeSkeleton>ahmm</datetimeSkeleton> </timeFormat> </timeFormatLength> @@ -1788,14 +1773,14 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <dateFormatItem id="EBhm">E B h:mm</dateFormatItem> <dateFormatItem id="EBhms">E B h:mm:ss</dateFormatItem> <dateFormatItem id="Ed">d E</dateFormatItem> - <dateFormatItem id="Ehm">E a h:mm</dateFormatItem> - <dateFormatItem id="Ehms">E a h:mm:ss</dateFormatItem> + <dateFormatItem id="Ehm">E h:mm a</dateFormatItem> + <dateFormatItem id="Ehms">E h:mm:ss a</dateFormatItem> <dateFormatItem id="GyMd">d/M/y G</dateFormatItem> - <dateFormatItem id="h">a h</dateFormatItem> - <dateFormatItem id="hm">a h:mm</dateFormatItem> - <dateFormatItem id="hms">a h:mm:ss</dateFormatItem> - <dateFormatItem id="hmsv">a h:mm:ss v</dateFormatItem> - <dateFormatItem id="hmv">a h:mm v</dateFormatItem> + <dateFormatItem id="h">h a</dateFormatItem> + <dateFormatItem id="hm">h:mm a</dateFormatItem> + <dateFormatItem id="hms">h:mm:ss a</dateFormatItem> + <dateFormatItem id="hmsv">h:mm:ss a v</dateFormatItem> + <dateFormatItem id="hmv">h:mm a v</dateFormatItem> <dateFormatItem id="Md">d/M</dateFormatItem> <dateFormatItem id="MEd">dd-MM, E</dateFormatItem> <dateFormatItem id="MMdd">dd-MM</dateFormatItem> @@ -1818,33 +1803,33 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <intervalFormats> <intervalFormatFallback>{0} – {1}</intervalFormatFallback> <intervalFormatItem id="h"> - <greatestDifference id="a">a h – a h</greatestDifference> - <greatestDifference id="h">a h–h</greatestDifference> + <greatestDifference id="a">h a – h a</greatestDifference> + <greatestDifference id="h">h–h a</greatestDifference> </intervalFormatItem> <intervalFormatItem id="H"> <greatestDifference id="H">HH – HH</greatestDifference> </intervalFormatItem> <intervalFormatItem id="hm"> - <greatestDifference id="a">a h:mm – a h:mm</greatestDifference> - <greatestDifference id="h">a h:mm–h:mm</greatestDifference> - <greatestDifference id="m">a h:mm–h:mm</greatestDifference> + <greatestDifference id="a">h:mm a – h:mm a</greatestDifference> + <greatestDifference id="h">h:mm–h:mm a</greatestDifference> + <greatestDifference id="m">h:mm–h:mm a</greatestDifference> </intervalFormatItem> <intervalFormatItem id="Hm"> <greatestDifference id="H">HH:mm – HH:mm</greatestDifference> <greatestDifference id="m">HH:mm – HH:mm</greatestDifference> </intervalFormatItem> <intervalFormatItem id="hmv"> - <greatestDifference id="a">a h:mm – a h:mm v</greatestDifference> - <greatestDifference id="h">a h:mm – h:mm v</greatestDifference> - <greatestDifference id="m">a h:mm – h:mm v</greatestDifference> + <greatestDifference id="a">h:mm a – h:mm a v</greatestDifference> + <greatestDifference id="h">h:mm – h:mm a v</greatestDifference> + <greatestDifference id="m">h:mm – h:mm a v</greatestDifference> </intervalFormatItem> <intervalFormatItem id="Hmv"> <greatestDifference id="H">HH:mm – HH:mm v</greatestDifference> <greatestDifference id="m">HH:mm – HH:mm v</greatestDifference> </intervalFormatItem> <intervalFormatItem id="hv"> - <greatestDifference id="a">a h – a h v</greatestDifference> - <greatestDifference id="h">a h – h v</greatestDifference> + <greatestDifference id="a">h a – h a v</greatestDifference> + <greatestDifference id="h">h – h a v</greatestDifference> </intervalFormatItem> <intervalFormatItem id="Hv"> <greatestDifference id="H">HH – HH v</greatestDifference> @@ -2582,9 +2567,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} நேரம்</regionFormat> <regionFormat type="daylight">{0} பகலொளி நேரம்</regionFormat> <regionFormat type="standard">{0} நிலையான நேரம்</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>சான்டா இசபெல்</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>ஒருங்கிணைந்த சர்வதேச நேரம்</standard> @@ -2707,9 +2689,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>மெல்போர்ன்</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>கியூரி</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ஹோபர்ட்</exemplarCity> </zone> @@ -2863,9 +2842,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>க்ரெஸ்டான்</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>யெல்லோநைஃப்</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>எட்மான்டான்</exemplarCity> </zone> @@ -2884,30 +2860,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ரெசலூட்</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ரெய்னி ரிவர்</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ரான்கின் இன்லெட்</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>அடிகோகன்</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>தண்டர் பே</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>நிபிகான்</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>டொரொன்டோ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>இகாலூயித்</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>பாங்னிர்துங்</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>மாங்டான்</exemplarCity> </zone> @@ -3721,18 +3685,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>தார் எஸ் சலாம்</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>உஷோரோட்</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>கீவ்</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>சிம்ஃபெரோபோல்</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ஜபோரோஸியே</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>கம்பாலா</exemplarCity> </zone> @@ -3751,9 +3709,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ஹோனோலூலூ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ஜோன்ஸ்டன்</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>அங்கோரேஜ்</exemplarCity> </zone> @@ -4451,11 +4406,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>மக்காவ் கோடை நேரம்</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>மாக்கியூரி தீவு நேரம்</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>மகதன் நேரம்</generic> @@ -4495,13 +4445,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>மாசன் நேரம்</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>வடமேற்கு மெக்ஸிகோ நேரம்</generic> - <standard>வடமேற்கு மெக்ஸிகோ நிலையான நேரம்</standard> - <daylight>வடமேற்கு மெக்ஸிகோ பகலொளி நேரம்</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>மெக்ஸிகன் பசிபிக் நேரம்</generic> diff --git a/make/data/cldr/common/main/ta_IN.xml b/make/data/cldr/common/main/ta_IN.xml index d8b40bf573b9f..128edffb1447b 100644 --- a/make/data/cldr/common/main/ta_IN.xml +++ b/make/data/cldr/common/main/ta_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ta_LK.xml b/make/data/cldr/common/main/ta_LK.xml index fb4f6f1f29dcd..f6fac9f6b17cf 100644 --- a/make/data/cldr/common/main/ta_LK.xml +++ b/make/data/cldr/common/main/ta_LK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ta_MY.xml b/make/data/cldr/common/main/ta_MY.xml index 55a55c25d6d74..a893525396ac3 100644 --- a/make/data/cldr/common/main/ta_MY.xml +++ b/make/data/cldr/common/main/ta_MY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ta_SG.xml b/make/data/cldr/common/main/ta_SG.xml index e274aa6586647..9b3acf30d752b 100644 --- a/make/data/cldr/common/main/ta_SG.xml +++ b/make/data/cldr/common/main/ta_SG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/te.xml b/make/data/cldr/common/main/te.xml index 22469578916ae..91e75e220eeb0 100644 --- a/make/data/cldr/common/main/te.xml +++ b/make/data/cldr/common/main/te.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1110,7 +1110,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">ఫోన్‌బుక్ క్రమబద్ధీకరణ క్రమం</type> <type key="collation" type="phonetic">ధ్వని ఉచ్ఛారిత క్రమబద్ధీకరణ క్రమం</type> <type key="collation" type="pinyin">పిన్‌యిన్ క్రమబద్ధీకరణ క్రమం</type> - <type key="collation" type="reformed">మళ్ళీ ఆకృతీకరించబడిన క్రమబద్ధీకరణ క్రమం</type> <type key="collation" type="search">సాధారణ-ప్రయోజన శోధన</type> <type key="collation" type="searchjl">హాంగుల్ ప్రారంభ హల్లు ద్వారా శోధించు</type> <type key="collation" type="standard">ప్రామాణిక క్రమబద్ధీకరణ క్రమం</type> @@ -2298,9 +2297,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} సమయం</regionFormat> <regionFormat type="daylight">{0} పగటి వెలుతురు సమయం</regionFormat> <regionFormat type="standard">{0} ప్రామాణిక సమయం</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>శాంటా ఇసబెల్</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>సమన్వయ సార్వజనీన సమయం</standard> @@ -2423,9 +2419,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>మెల్బోర్న్</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>కర్రీ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>హోబర్ట్</exemplarCity> </zone> @@ -2579,9 +2572,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>క్రెస్టన్</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ఎల్లోనైఫ్</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ఎడ్మోంటన్</exemplarCity> </zone> @@ -2600,30 +2590,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>రిజల్యూట్</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>రెయినీ రివర్</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>రన్‌కిన్ ఇన్‌లెట్</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>అటికోకన్</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>థండర్ బే</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>నిపిగోన్</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>టొరంటో</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ఇక్వాలిట్</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>పాంగ్‌నీర్‌టుంగ్</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>మోన్‌క్టోన్</exemplarCity> </zone> @@ -3437,18 +3415,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>దార్ ఎస్ సలామ్</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ఉజ్‌హోరోడ్</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>కీవ్</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>సిమ్‌ఫెరోపోల్</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>జపరోజై</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>కంపాలా</exemplarCity> </zone> @@ -3467,9 +3439,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>హోనోలులు</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>జాన్సటన్</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>యాంకరేజ్</exemplarCity> </zone> @@ -4167,11 +4136,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>మకావ్ వేసవి సమయం</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>మాక్క్వారీ దీవి సమయం</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>మగడాన్ సమయం</generic> @@ -4211,13 +4175,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>మాసన్ సమయం</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>వాయువ్య మెక్సికో సమయం</generic> - <standard>వాయువ్య మెక్సికో ప్రామాణిక సమయం</standard> - <daylight>వాయువ్య మెక్సికో పగటి వెలుతురు సమయం</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>మెక్సికన్ పసిఫిక్ సమయం</generic> diff --git a/make/data/cldr/common/main/te_IN.xml b/make/data/cldr/common/main/te_IN.xml index 6abf11edabc4e..3394316324fc0 100644 --- a/make/data/cldr/common/main/te_IN.xml +++ b/make/data/cldr/common/main/te_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/teo.xml b/make/data/cldr/common/main/teo.xml index 7cc175b207d8c..d1a6b91144666 100644 --- a/make/data/cldr/common/main/teo.xml +++ b/make/data/cldr/common/main/teo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/teo_KE.xml b/make/data/cldr/common/main/teo_KE.xml index 460b0b12a7c67..40e34580b1f7b 100644 --- a/make/data/cldr/common/main/teo_KE.xml +++ b/make/data/cldr/common/main/teo_KE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/teo_UG.xml b/make/data/cldr/common/main/teo_UG.xml index 2f531c0a412f4..f2659738cfb48 100644 --- a/make/data/cldr/common/main/teo_UG.xml +++ b/make/data/cldr/common/main/teo_UG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tg.xml b/make/data/cldr/common/main/tg.xml index ada229a23d3de..b721ac4f440bc 100644 --- a/make/data/cldr/common/main/tg.xml +++ b/make/data/cldr/common/main/tg.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tg_TJ.xml b/make/data/cldr/common/main/tg_TJ.xml index 096cf9f2a1903..6b8d827b26968 100644 --- a/make/data/cldr/common/main/tg_TJ.xml +++ b/make/data/cldr/common/main/tg_TJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/th.xml b/make/data/cldr/common/main/th.xml index 99d8c8a696b66..21624f3245b20 100644 --- a/make/data/cldr/common/main/th.xml +++ b/make/data/cldr/common/main/th.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1289,7 +1289,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">ลำดับการจัดเรียงตามสมุดโทรศัพท์</type> <type key="collation" type="phonetic">ลำดับการจัดเรียงตามการออกเสียง</type> <type key="collation" type="pinyin">ลำดับการจัดเรียงตามการถอดเสียงภาษาจีน</type> - <type key="collation" type="reformed">ลำดับการจัดเรียงตามลำดับล่าสุด</type> <type key="collation" type="search">การค้นหาทั่วไป</type> <type key="collation" type="searchjl" draft="contributed">ค้นหาตามพยัญชนะขึ้นต้นที่เป็นฮันกึล</type> <type key="collation" type="standard">ลำดับการจัดเรียงแบบมาตรฐาน</type> @@ -3082,9 +3081,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>เวลา{0}</regionFormat> <regionFormat type="daylight">เวลาออมแสง{0}</regionFormat> <regionFormat type="standard">เวลามาตรฐาน{0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>ซานตาอิซาเบล</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>เวลาสากลเชิงพิกัด</standard> @@ -3207,9 +3203,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>เมลเบิร์น</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>คูร์รี</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>โฮบาร์ต</exemplarCity> </zone> @@ -3363,9 +3356,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>เครสตัน</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>เยลโลว์ไนฟ์</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>เอดมันตัน</exemplarCity> </zone> @@ -3384,30 +3374,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>เรโซลูท</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>เรนนี่ริเวอร์</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>แรงกินอินเล็ต</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>คอรัลฮาร์เบอร์</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ทันเดอร์เบย์</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>นิปิกอน</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>โทรอนโต</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>อีกวาลิต</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>พางนีทัง</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>มองตัน</exemplarCity> </zone> @@ -4221,18 +4199,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ดาร์เอสซาลาม</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>อัซโกร็อด</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>เคียฟ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ซิมเฟอโรโปล</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ซาโปโรซี</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>คัมพาลา</exemplarCity> </zone> @@ -4251,9 +4223,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>โฮโนลูลู</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>จอห์นสตัน</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>แองเคอเรจ</exemplarCity> </zone> @@ -4953,11 +4922,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">เวลาฤดูร้อนมาเก๊า</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>เวลาเกาะแมกควอรี</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>เวลามากาดาน</generic> @@ -4997,13 +4961,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>เวลามอว์สัน</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>เวลาเม็กซิโกตะวันตกเฉียงเหนือ</generic> - <standard>เวลามาตรฐานเม็กซิโกตะวันตกเฉียงเหนือ</standard> - <daylight>เวลาออมแสงเม็กซิโกตะวันตกเฉียงเหนือ</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>เวลาแปซิฟิกเม็กซิโก</generic> diff --git a/make/data/cldr/common/main/th_TH.xml b/make/data/cldr/common/main/th_TH.xml index 94df0771fd60c..7feac5e265a62 100644 --- a/make/data/cldr/common/main/th_TH.xml +++ b/make/data/cldr/common/main/th_TH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ti.xml b/make/data/cldr/common/main/ti.xml index 287ad6ac7dd7e..cec0852764d21 100644 --- a/make/data/cldr/common/main/ti.xml +++ b/make/data/cldr/common/main/ti.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1615,9 +1615,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>መልበርን</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>ኩሪ</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ሆባርት</exemplarCity> </zone> @@ -1771,9 +1768,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>ክረስተን</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>የለውናይፍ</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ኤድመንተን</exemplarCity> </zone> @@ -1792,30 +1786,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>ረዞሉት</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ረይኒ ሪቨር</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ራንኪን ኢንለት</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ኣቲኮካን</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ዛንደር በይ</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ኒፒጎን</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ቶሮንቶ</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ኢቃልዊት</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ፓንግኒርተንግ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ሞንክተን</exemplarCity> </zone> @@ -2629,18 +2611,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>ዳር ኤስ ሳላም</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ኡዝጎሮድ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>ክየቭ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>ሲምፈሮፖል</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>ዛፖሪዥያ</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>ካምፓላ</exemplarCity> </zone> @@ -2659,9 +2635,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>ሆኖሉሉ</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>ጆንስተን</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>ኣንኮረጅ</exemplarCity> </zone> diff --git a/make/data/cldr/common/main/ti_ER.xml b/make/data/cldr/common/main/ti_ER.xml index 44e206c824983..4ee2721cf46f5 100644 --- a/make/data/cldr/common/main/ti_ER.xml +++ b/make/data/cldr/common/main/ti_ER.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ti_ET.xml b/make/data/cldr/common/main/ti_ET.xml index 8aa6cc47d1183..ec8c7604eb890 100644 --- a/make/data/cldr/common/main/ti_ET.xml +++ b/make/data/cldr/common/main/ti_ET.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tig.xml b/make/data/cldr/common/main/tig.xml index 2eecec4538238..d59e6eb4a68aa 100644 --- a/make/data/cldr/common/main/tig.xml +++ b/make/data/cldr/common/main/tig.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tig_ER.xml b/make/data/cldr/common/main/tig_ER.xml index 4a946eb9da7da..66096312894be 100644 --- a/make/data/cldr/common/main/tig_ER.xml +++ b/make/data/cldr/common/main/tig_ER.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tk.xml b/make/data/cldr/common/main/tk.xml index df81503b8ee0c..f97a3d7b2d76e 100644 --- a/make/data/cldr/common/main/tk.xml +++ b/make/data/cldr/common/main/tk.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2154,9 +2154,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <regionFormat>{0} wagty</regionFormat> <regionFormat type="daylight">{0} tomusky wagty</regionFormat> <regionFormat type="standard">{0} standart wagty</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa-Izabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Utgaşdyrylýan ähliumumy wagt</standard> @@ -2258,9 +2255,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>Melburn</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kerri</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity>Sidneý</exemplarCity> </zone> @@ -2369,9 +2363,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>Kreston</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Ýellounaýf</exemplarCity> - </zone> <zone type="America/Swift_Current"> <exemplarCity>Swift-Karent</exemplarCity> </zone> @@ -2384,21 +2375,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>Rezolýut</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Reýni-Riwer</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Rankin-Inlet</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Tander-Beý</exemplarCity> - </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikaluit</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pangnirtang</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Monkton</exemplarCity> </zone> @@ -3006,15 +2988,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar-es-Salam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Užgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiýew</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporožýe</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity>Midueý</exemplarCity> </zone> @@ -3030,9 +3006,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>Gonolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Jonston</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Ankoridž</exemplarCity> </zone> @@ -3642,11 +3615,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Lord-Hau tomusky wagty</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Makkuori adasy wagty</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan wagty</generic> @@ -3686,13 +3654,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mouson wagty</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Demirgazyk-günbatar Meksika wagty</generic> - <standard>Demirgazyk-günbatar Meksika standart wagty</standard> - <daylight>Demirgazyk-günbatar Meksika tomusky wagty</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksikan Ýuwaş umman wagty</generic> diff --git a/make/data/cldr/common/main/tk_TM.xml b/make/data/cldr/common/main/tk_TM.xml index 84a74cc655ba4..4a14ee3ade162 100644 --- a/make/data/cldr/common/main/tk_TM.xml +++ b/make/data/cldr/common/main/tk_TM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tn.xml b/make/data/cldr/common/main/tn.xml index c6f1c4b44d3c8..7618674e35325 100644 --- a/make/data/cldr/common/main/tn.xml +++ b/make/data/cldr/common/main/tn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tn_BW.xml b/make/data/cldr/common/main/tn_BW.xml index 9a07e5f9c3ccc..ec774774ade08 100644 --- a/make/data/cldr/common/main/tn_BW.xml +++ b/make/data/cldr/common/main/tn_BW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tn_ZA.xml b/make/data/cldr/common/main/tn_ZA.xml index d0a698ebd7967..a4675dc9514d2 100644 --- a/make/data/cldr/common/main/tn_ZA.xml +++ b/make/data/cldr/common/main/tn_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/to.xml b/make/data/cldr/common/main/to.xml index da45f39b3e62f..841da2c8d959a 100644 --- a/make/data/cldr/common/main/to.xml +++ b/make/data/cldr/common/main/to.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -2688,9 +2688,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <regionFormat>Taimi {0}</regionFormat> <regionFormat type="daylight">{0} Taimi liliu</regionFormat> <regionFormat type="standard">{0} Taimi totonu</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>taimi fakaemāmani</standard> @@ -2711,9 +2708,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>Melipoane</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity>Senē</exemplarCity> </zone> @@ -2854,9 +2848,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Sao_Tome"> <exemplarCity>Sao Tomé</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzhhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> @@ -2874,9 +2865,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic </short> <exemplarCity>Honolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Sionesitoni</exemplarCity> - </zone> <zone type="America/New_York"> <exemplarCity>Niu ʻIoke</exemplarCity> </zone> @@ -3456,11 +3444,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>houa fakamakau taimi liliu</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>houa fakamotumakuali</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>houa fakalūsia-makatani</generic> @@ -3500,13 +3483,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>houa fakamausoni</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>houa fakamekisikou-tokelauhihifo</generic> - <standard>houa fakamekisikou-tokelauhihifo taimi totonu</standard> - <daylight>houa fakamekisikou-tokelauhihifo taimi liliu</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>houa fakamekisikou-pasifika</generic> diff --git a/make/data/cldr/common/main/to_TO.xml b/make/data/cldr/common/main/to_TO.xml index 901ddb9da9185..bc46c596dd26a 100644 --- a/make/data/cldr/common/main/to_TO.xml +++ b/make/data/cldr/common/main/to_TO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tok.xml b/make/data/cldr/common/main/tok.xml index 9b0f50216dbb6..65fee38557a99 100644 --- a/make/data/cldr/common/main/tok.xml +++ b/make/data/cldr/common/main/tok.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tok_001.xml b/make/data/cldr/common/main/tok_001.xml index 69d31266dd569..d70868f3cff16 100644 --- a/make/data/cldr/common/main/tok_001.xml +++ b/make/data/cldr/common/main/tok_001.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tpi.xml b/make/data/cldr/common/main/tpi.xml index 2b2d74642cda1..97e55f31e3178 100644 --- a/make/data/cldr/common/main/tpi.xml +++ b/make/data/cldr/common/main/tpi.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tpi_PG.xml b/make/data/cldr/common/main/tpi_PG.xml index 59c299a7362db..42a5bfe385173 100644 --- a/make/data/cldr/common/main/tpi_PG.xml +++ b/make/data/cldr/common/main/tpi_PG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tr.xml b/make/data/cldr/common/main/tr.xml index c26ea7a401a3e..e597dbb5cf656 100644 --- a/make/data/cldr/common/main/tr.xml +++ b/make/data/cldr/common/main/tr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1263,7 +1263,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Telefon Defteri Sıralama Düzeni</type> <type key="collation" type="phonetic">Fonetik Sıralama Düzeni</type> <type key="collation" type="pinyin">Pinyin Sıralama Düzeni</type> - <type key="collation" type="reformed">Yeni Sıralama Düzeni</type> <type key="collation" type="search">Genel Amaçlı Arama</type> <type key="collation" type="searchjl">Hangul İlk Sessiz Harfe Göre Arama</type> <type key="collation" type="standard">Standart Sıralama Düzeni</type> @@ -2505,9 +2504,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} Saati</regionFormat> <regionFormat type="daylight">{0} Yaz Saati</regionFormat> <regionFormat type="standard">{0} Standart Saati</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Eş Güdümlü Evrensel Zaman</standard> @@ -2531,9 +2527,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Europe/Vienna"> <exemplarCity>Viyana</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="Australia/Sydney"> <exemplarCity>Sidney</exemplarCity> </zone> @@ -2863,15 +2856,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Darüsselam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ujgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporojye</exemplarCity> - </zone> <zone type="Pacific/Honolulu"> <exemplarCity>Honolulu</exemplarCity> </zone> @@ -3466,11 +3453,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Makao Yaz Saati</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie Adası Saati</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan Saati</generic> @@ -3510,13 +3492,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mawson Saati</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Kuzeybatı Meksika Saati</generic> - <standard>Kuzeybatı Meksika Standart Saati</standard> - <daylight>Kuzeybatı Meksika Yaz Saati</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksika Pasifik Kıyısı Saati</generic> diff --git a/make/data/cldr/common/main/tr_CY.xml b/make/data/cldr/common/main/tr_CY.xml index 5204d43f9d3c9..51c2665e09d8d 100644 --- a/make/data/cldr/common/main/tr_CY.xml +++ b/make/data/cldr/common/main/tr_CY.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tr_TR.xml b/make/data/cldr/common/main/tr_TR.xml index 87c10bb8eecc7..b5f4f6b9907f0 100644 --- a/make/data/cldr/common/main/tr_TR.xml +++ b/make/data/cldr/common/main/tr_TR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/trv.xml b/make/data/cldr/common/main/trv.xml index 3675a5afceadf..648691d9274a7 100644 --- a/make/data/cldr/common/main/trv.xml +++ b/make/data/cldr/common/main/trv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/trv_TW.xml b/make/data/cldr/common/main/trv_TW.xml index f8194882dcf48..a29c48baf716e 100644 --- a/make/data/cldr/common/main/trv_TW.xml +++ b/make/data/cldr/common/main/trv_TW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/trw.xml b/make/data/cldr/common/main/trw.xml index 4a63b95563243..2226a7d3c3fc8 100644 --- a/make/data/cldr/common/main/trw.xml +++ b/make/data/cldr/common/main/trw.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1211,9 +1211,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity draft="unconfirmed">ملبورن</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity draft="unconfirmed">کیوری</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity draft="unconfirmed">ہوبارٹ</exemplarCity> </zone> @@ -1367,9 +1364,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity draft="unconfirmed">کریسٹون</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity draft="unconfirmed">ایلو نائف</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity draft="unconfirmed">ایڈمونٹن</exemplarCity> </zone> @@ -1388,30 +1382,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity draft="unconfirmed">ریزولیوٹ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity draft="unconfirmed">رینی ریور</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity draft="unconfirmed">رینکن انلیٹ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity draft="unconfirmed">اٹیکوکن</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity draft="unconfirmed">تھنڈر بے</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity draft="unconfirmed">نپیگون</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity draft="unconfirmed">ٹورنٹو</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity draft="unconfirmed">ایکالوئٹ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity draft="unconfirmed">پینگنِرٹنگ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity draft="unconfirmed">مونکٹن</exemplarCity> </zone> @@ -2219,18 +2201,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity draft="unconfirmed">دار السلام</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity draft="unconfirmed">ازہوراڈ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity draft="unconfirmed">کیو</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity draft="unconfirmed">سمفروپول</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity draft="unconfirmed">زیپوروزائی</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity draft="unconfirmed">کیمپالا</exemplarCity> </zone> @@ -2246,9 +2222,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Nome"> <exemplarCity draft="unconfirmed">نوم</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity draft="unconfirmed">جانسٹن</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity draft="unconfirmed">اینکریج</exemplarCity> </zone> @@ -2884,11 +2857,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight draft="unconfirmed">لارڈ ہووے ڈے لائٹ ٹائم</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="unconfirmed">مکوآری آئلینڈ سی وَخ</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="unconfirmed">میگیدن ٹائم</generic> @@ -2928,13 +2896,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard draft="unconfirmed">ماؤسن ٹائم</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="unconfirmed">شمال مغربی میکسیکو ٹائم</generic> - <standard draft="unconfirmed">شمال مغربی میکسیکو اسٹینڈرڈ ٹائم</standard> - <daylight draft="unconfirmed">شمال مغربی میکسیکو ڈے لائٹ ٹائم</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="unconfirmed">میکسیکن پیسفک ٹائم</generic> diff --git a/make/data/cldr/common/main/trw_PK.xml b/make/data/cldr/common/main/trw_PK.xml index c7ddcf835578b..ac6005214974b 100644 --- a/make/data/cldr/common/main/trw_PK.xml +++ b/make/data/cldr/common/main/trw_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ts.xml b/make/data/cldr/common/main/ts.xml index d7859e46b9c05..c9d2049c577c1 100644 --- a/make/data/cldr/common/main/ts.xml +++ b/make/data/cldr/common/main/ts.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ts_ZA.xml b/make/data/cldr/common/main/ts_ZA.xml index 4cb6219d8d87a..7b5b0040d33bf 100644 --- a/make/data/cldr/common/main/ts_ZA.xml +++ b/make/data/cldr/common/main/ts_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tt.xml b/make/data/cldr/common/main/tt.xml index 8b8f6056fd935..d616a87b68bf9 100644 --- a/make/data/cldr/common/main/tt.xml +++ b/make/data/cldr/common/main/tt.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tt_RU.xml b/make/data/cldr/common/main/tt_RU.xml index 512891763ae03..457e22723e5f9 100644 --- a/make/data/cldr/common/main/tt_RU.xml +++ b/make/data/cldr/common/main/tt_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/twq.xml b/make/data/cldr/common/main/twq.xml index 162b13241986a..879b928c21198 100644 --- a/make/data/cldr/common/main/twq.xml +++ b/make/data/cldr/common/main/twq.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/twq_NE.xml b/make/data/cldr/common/main/twq_NE.xml index f8d6bfcb8d88e..4cd326ae69f4b 100644 --- a/make/data/cldr/common/main/twq_NE.xml +++ b/make/data/cldr/common/main/twq_NE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tyv.xml b/make/data/cldr/common/main/tyv.xml index 466f67311d5d2..cb00198bf9742 100644 --- a/make/data/cldr/common/main/tyv.xml +++ b/make/data/cldr/common/main/tyv.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tyv_RU.xml b/make/data/cldr/common/main/tyv_RU.xml index 3458594509142..1968e81a13a57 100644 --- a/make/data/cldr/common/main/tyv_RU.xml +++ b/make/data/cldr/common/main/tyv_RU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tzm.xml b/make/data/cldr/common/main/tzm.xml index 49805934e90e4..00c6f99b2fde8 100644 --- a/make/data/cldr/common/main/tzm.xml +++ b/make/data/cldr/common/main/tzm.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/tzm_MA.xml b/make/data/cldr/common/main/tzm_MA.xml index f91625c497ec1..bf1595b3bde6f 100644 --- a/make/data/cldr/common/main/tzm_MA.xml +++ b/make/data/cldr/common/main/tzm_MA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ug.xml b/make/data/cldr/common/main/ug.xml index 487e699b1d484..3b5bab6565498 100644 --- a/make/data/cldr/common/main/ug.xml +++ b/make/data/cldr/common/main/ug.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Reviewed by Waris Abdukerim Janbaz <oyghan@gmail.com> of the Uyghur Computer Science Association http://ukij.org @@ -2496,11 +2496,6 @@ Reviewed by Waris Abdukerim Janbaz <oyghan@gmail.com> of the Uyghur Computer Sci <daylight draft="contributed">ئاۋمېن يازلىق ۋاقتى</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard draft="contributed">ماككۇۋارى ئاراللىرى ۋاقتى</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic draft="contributed">ماگادان ۋاقتى</generic> @@ -2540,13 +2535,6 @@ Reviewed by Waris Abdukerim Janbaz <oyghan@gmail.com> of the Uyghur Computer Sci <standard draft="contributed">ماۋسون ۋاقتى</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic draft="contributed">مېكسىكا غەربىي شىمالىي قىسىم ۋاقتى</generic> - <standard draft="contributed">مېكسىكا غەربىي شىمالىي قىسىم ئۆلچەملىك ۋاقتى</standard> - <daylight draft="contributed">مېكسىكا غەربىي شىمالىي قىسىم يازلىق ۋاقتى</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic draft="contributed">مېكسىكا تىنچ ئوكيان ۋاقتى</generic> diff --git a/make/data/cldr/common/main/ug_CN.xml b/make/data/cldr/common/main/ug_CN.xml index d78e1aae5584c..0ef634ba3393c 100644 --- a/make/data/cldr/common/main/ug_CN.xml +++ b/make/data/cldr/common/main/ug_CN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/uk.xml b/make/data/cldr/common/main/uk.xml index 223699ba04ec9..74b4fe9fd0b32 100644 --- a/make/data/cldr/common/main/uk.xml +++ b/make/data/cldr/common/main/uk.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1160,7 +1160,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">порядок сортування за телефонним довідником</type> <type key="collation" type="phonetic">фонетичний порядок сортування</type> <type key="collation" type="pinyin">порядок сортування піньїнь</type> - <type key="collation" type="reformed">реформований порядок сортування</type> <type key="collation" type="search">універсальний пошук</type> <type key="collation" type="searchjl" draft="contributed">пошук за початковою приголосною хангул</type> <type key="collation" type="standard">стандартний порядок сортування</type> @@ -1444,7 +1443,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <dateFormats> <dateFormatLength type="full"> <dateFormat> - <pattern>EEEE, d MMMM y 'р'. G</pattern> + <pattern>cccc, d MMMM y 'р'. G</pattern> </dateFormat> </dateFormatLength> <dateFormatLength type="long"> @@ -1822,7 +1821,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <dateFormats> <dateFormatLength type="full"> <dateFormat> - <pattern>EEEE, d MMMM y 'р'.</pattern> + <pattern>cccc, d MMMM y 'р'.</pattern> </dateFormat> </dateFormatLength> <dateFormatLength type="long"> @@ -3188,9 +3187,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>час: {0}</regionFormat> <regionFormat type="daylight">час: {0}, літній</regionFormat> <regionFormat type="standard">час: {0}, стандартний</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Санта-Ісабель</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>за всесвітнім координованим часом</standard> @@ -3313,9 +3309,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Мельбурн</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Каррі</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Гобарт</exemplarCity> </zone> @@ -3469,9 +3462,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Крестон</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Єллоунайф</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Едмонтон</exemplarCity> </zone> @@ -3490,30 +3480,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Резольют</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Рейні-Рівер</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Ренкін-Інлет</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Атікокан</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Тандер-Бей</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Ніпігон</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Торонто</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Ікалуїт</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Панґніртанґ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Монктон</exemplarCity> </zone> @@ -4327,18 +4305,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Дар-ес-Салам</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ужгород</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Київ</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Сімферополь</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Запоріжжя</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Кампала</exemplarCity> </zone> @@ -4357,9 +4329,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Гонолулу</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Джонстон</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Анкоридж</exemplarCity> </zone> @@ -5026,11 +4995,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>за літнім часом на острові Лорд-Хау</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>за часом на острові Маккуорі</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>за магаданським часом</generic> @@ -5070,13 +5034,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>за часом на станції Моусон</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>за північнозахідним часом у Мексиці</generic> - <standard>за стандартним північнозахідним часом у Мексиці</standard> - <daylight>за літнім північнозахідним часом у Мексиці</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>за тихоокеанським часом у Мексиці</generic> diff --git a/make/data/cldr/common/main/uk_UA.xml b/make/data/cldr/common/main/uk_UA.xml index bd0222c629e55..e8712e1ce53a7 100644 --- a/make/data/cldr/common/main/uk_UA.xml +++ b/make/data/cldr/common/main/uk_UA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ur.xml b/make/data/cldr/common/main/ur.xml index 9db822ec560eb..53f27ecf32dc4 100644 --- a/make/data/cldr/common/main/ur.xml +++ b/make/data/cldr/common/main/ur.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -914,7 +914,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">فون بک کی چھٹنی کی ترتیب</type> <type key="collation" type="phonetic">صوتی چھٹائی کی ترتیب</type> <type key="collation" type="pinyin">پن ین کی چھٹنی کی ترتیب</type> - <type key="collation" type="reformed">دوبارہ تشکیل شدہ چھٹنی کی ترتیب</type> <type key="collation" type="search">عمومی تلاش</type> <type key="collation" type="searchjl">Hangul Initial Consonant کے لحاظ سے تلاش کریں</type> <type key="collation" type="standard">معیاری چھانٹی کی ترتیب</type> @@ -2048,9 +2047,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>{0} وقت</regionFormat> <regionFormat type="daylight">{0} ڈے لائٹ ٹائم</regionFormat> <regionFormat type="standard">{0} معیاری وقت</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>سانتا ایزابیل</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>کوآرڈینیٹڈ یونیورسل ٹائم</standard> @@ -2173,9 +2169,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>ملبورن</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>کیوری</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>ہوبارٹ</exemplarCity> </zone> @@ -2329,9 +2322,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>کریسٹون</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ایلو نائف</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ایڈمونٹن</exemplarCity> </zone> @@ -2350,30 +2340,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>ریزولیوٹ</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>رینی ریور</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>رینکن انلیٹ</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>اٹیکوکن</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>تھنڈر بے</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>نپیگون</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ٹورنٹو</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ایکالوئٹ</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>پینگنِرٹنگ</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>مونکٹن</exemplarCity> </zone> @@ -3187,18 +3165,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>دار السلام</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>ازہوراڈ</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>کیو</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>سمفروپول</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>زیپوروزائی</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>کیمپالا</exemplarCity> </zone> @@ -3217,9 +3189,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>ہونولولو</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>جانسٹن</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>اینکریج</exemplarCity> </zone> @@ -3869,11 +3838,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>لارڈ ہووے ڈے لائٹ ٹائم</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>مکوآری آئلینڈ کا وقت</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>میگیدن ٹائم</generic> @@ -3913,13 +3877,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>ماؤسن ٹائم</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>شمال مغربی میکسیکو ٹائم</generic> - <standard>شمال مغربی میکسیکو اسٹینڈرڈ ٹائم</standard> - <daylight>شمال مغربی میکسیکو ڈے لائٹ ٹائم</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>میکسیکن پیسفک ٹائم</generic> diff --git a/make/data/cldr/common/main/ur_IN.xml b/make/data/cldr/common/main/ur_IN.xml index 6cd6b9bc96ab9..43bb9e844dfc0 100644 --- a/make/data/cldr/common/main/ur_IN.xml +++ b/make/data/cldr/common/main/ur_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -383,11 +383,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>کرغستان ٹائم</standard> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>مکوآری آئلینڈ ٹائم</standard> - </long> - </metazone> <metazone type="Maldives"> <long> <standard>مالدیپ ٹائم</standard> diff --git a/make/data/cldr/common/main/ur_PK.xml b/make/data/cldr/common/main/ur_PK.xml index eb15e80ecfabb..15a06e3643042 100644 --- a/make/data/cldr/common/main/ur_PK.xml +++ b/make/data/cldr/common/main/ur_PK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/uz.xml b/make/data/cldr/common/main/uz.xml index 2f759633d493a..647f507ab455e 100644 --- a/make/data/cldr/common/main/uz.xml +++ b/make/data/cldr/common/main/uz.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1888,9 +1888,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </field> </fields> <timeZoneNames> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa-Izabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Koordinatali universal vaqt</standard> @@ -1983,9 +1980,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Melburn</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kerri</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Xobart</exemplarCity> </zone> @@ -2091,9 +2085,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Kreston</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Yellounayf</exemplarCity> - </zone> <zone type="America/Swift_Current"> <exemplarCity>Svift-Karrent</exemplarCity> </zone> @@ -2109,24 +2100,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Rezolyut</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Reyni-River</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Rankin-Inlet</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Koral-Xarbor</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Tander-Bey</exemplarCity> - </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikaluit</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pangnirtang</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Monkton</exemplarCity> </zone> @@ -2674,15 +2656,9 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dor-us-Salom</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ujgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiyev</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporojye</exemplarCity> - </zone> <zone type="Pacific/Midway"> <exemplarCity>Midvey orollari</exemplarCity> </zone> @@ -2698,9 +2674,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Gonolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Jonston</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Ankorij</exemplarCity> </zone> @@ -3303,11 +3276,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Lord-Xau yozgi vaqti</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Makkuori oroli vaqti</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan vaqti</generic> @@ -3347,13 +3315,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mouson vaqti</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Shimoli-g‘arbiy Meksika vaqti</generic> - <standard>Shimoli-g‘arbiy Meksika standart vaqti</standard> - <daylight>Shimoli-g‘arbiy Meksika yozgi vaqti</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Meksika Tinch okeani vaqti</generic> diff --git a/make/data/cldr/common/main/uz_Arab.xml b/make/data/cldr/common/main/uz_Arab.xml index 37cd13fad2802..cfee01b542450 100644 --- a/make/data/cldr/common/main/uz_Arab.xml +++ b/make/data/cldr/common/main/uz_Arab.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/uz_Arab_AF.xml b/make/data/cldr/common/main/uz_Arab_AF.xml index e1d987d3f17cc..2811c51a34d9d 100644 --- a/make/data/cldr/common/main/uz_Arab_AF.xml +++ b/make/data/cldr/common/main/uz_Arab_AF.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/uz_Cyrl.xml b/make/data/cldr/common/main/uz_Cyrl.xml index 84f031b3ba56c..e40915dfde91c 100644 --- a/make/data/cldr/common/main/uz_Cyrl.xml +++ b/make/data/cldr/common/main/uz_Cyrl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1762,11 +1762,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Лорд Хове кундузги вақти</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Маквари ороли вақти</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Магадан вақти</generic> diff --git a/make/data/cldr/common/main/uz_Cyrl_UZ.xml b/make/data/cldr/common/main/uz_Cyrl_UZ.xml index 7275b67c2e369..661662e2a5412 100644 --- a/make/data/cldr/common/main/uz_Cyrl_UZ.xml +++ b/make/data/cldr/common/main/uz_Cyrl_UZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/uz_Latn.xml b/make/data/cldr/common/main/uz_Latn.xml index df98fe2f66ab1..751b7b9ad9d72 100644 --- a/make/data/cldr/common/main/uz_Latn.xml +++ b/make/data/cldr/common/main/uz_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/uz_Latn_UZ.xml b/make/data/cldr/common/main/uz_Latn_UZ.xml index f1601335ce8da..186352fa45c50 100644 --- a/make/data/cldr/common/main/uz_Latn_UZ.xml +++ b/make/data/cldr/common/main/uz_Latn_UZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vai.xml b/make/data/cldr/common/main/vai.xml index 95876167bed41..44e89b1a1dd3c 100644 --- a/make/data/cldr/common/main/vai.xml +++ b/make/data/cldr/common/main/vai.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vai_Latn.xml b/make/data/cldr/common/main/vai_Latn.xml index cfa87ac1fd0b5..5a3fe8b92d645 100644 --- a/make/data/cldr/common/main/vai_Latn.xml +++ b/make/data/cldr/common/main/vai_Latn.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vai_Latn_LR.xml b/make/data/cldr/common/main/vai_Latn_LR.xml index a346f6da82774..35c079808c811 100644 --- a/make/data/cldr/common/main/vai_Latn_LR.xml +++ b/make/data/cldr/common/main/vai_Latn_LR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vai_Vaii.xml b/make/data/cldr/common/main/vai_Vaii.xml index f3dab1614ffe2..ff8d2dddc3262 100644 --- a/make/data/cldr/common/main/vai_Vaii.xml +++ b/make/data/cldr/common/main/vai_Vaii.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vai_Vaii_LR.xml b/make/data/cldr/common/main/vai_Vaii_LR.xml index 1ef82ace8b7df..8d2a6a96a8336 100644 --- a/make/data/cldr/common/main/vai_Vaii_LR.xml +++ b/make/data/cldr/common/main/vai_Vaii_LR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ve.xml b/make/data/cldr/common/main/ve.xml index df005fed71e5f..bba30a59a3d5b 100644 --- a/make/data/cldr/common/main/ve.xml +++ b/make/data/cldr/common/main/ve.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/ve_ZA.xml b/make/data/cldr/common/main/ve_ZA.xml index d55f653225d44..4f4702d3e8723 100644 --- a/make/data/cldr/common/main/ve_ZA.xml +++ b/make/data/cldr/common/main/ve_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vec.xml b/make/data/cldr/common/main/vec.xml index 52d35c8a78727..73db662b48bec 100644 --- a/make/data/cldr/common/main/vec.xml +++ b/make/data/cldr/common/main/vec.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1763,9 +1763,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Asia/Thimphu"> <exemplarCity>Tinpu</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pang</exemplarCity> - </zone> <zone type="America/St_Johns"> <exemplarCity>S. Joani</exemplarCity> </zone> @@ -2215,18 +2212,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Dar es Salam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Ùzgorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Sinferòpoli</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Zaporija</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Kanpala</exemplarCity> </zone> @@ -2236,9 +2227,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Wake"> <exemplarCity>Atolo Wake</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Atolo Johnston</exemplarCity> - </zone> <zone type="America/Los_Angeles"> <exemplarCity>Los Àngeles</exemplarCity> </zone> @@ -2811,11 +2799,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Ora d’istà de l’Ìzola Lord Howe</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Ora de l’Ìzola Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Ora de Magadan</generic> @@ -2855,13 +2838,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Ora de Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Ora de’l Mèsego nord osidentale</generic> - <standard>Ora normale de’l Mèsego nord osidentale</standard> - <daylight>Ora d’istà de’l Mèsego nord osidentale</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Ora de’l Mèsego de’l Pasìfego</generic> diff --git a/make/data/cldr/common/main/vec_IT.xml b/make/data/cldr/common/main/vec_IT.xml index ee6861ddd28e7..7105959d47ad0 100644 --- a/make/data/cldr/common/main/vec_IT.xml +++ b/make/data/cldr/common/main/vec_IT.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vi.xml b/make/data/cldr/common/main/vi.xml index 2918de18bccea..29c6d094fb17a 100644 --- a/make/data/cldr/common/main/vi.xml +++ b/make/data/cldr/common/main/vi.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1202,7 +1202,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Thứ tự sắp xếp theo danh bạ điện thoại</type> <type key="collation" type="phonetic">Thứ tự sắp xếp theo ngữ âm</type> <type key="collation" type="pinyin">Thứ tự sắp xếp theo bính âm</type> - <type key="collation" type="reformed">Thứ tự sắp xếp đã sửa đổi</type> <type key="collation" type="search">Tìm kiếm mục đích chung</type> <type key="collation" type="searchjl" draft="contributed">Tìm kiếm theo Phụ âm Đầu Hangul</type> <type key="collation" type="standard">Thứ tự sắp xếp chuẩn</type> @@ -1895,15 +1894,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </intervalFormatItem> <intervalFormatItem id="GyMd"> <greatestDifference id="d">d/M/y – d/M/y GGGGG</greatestDifference> - <greatestDifference id="G">d/M/y GGGGG  –  d/M/y GGGGG</greatestDifference> + <greatestDifference id="G">d/M/y GGGGG – d/M/y GGGGG</greatestDifference> <greatestDifference id="M">d/M/y – d/M/y GGGGG</greatestDifference> <greatestDifference id="y">d/M/y – d/M/y GGGGG</greatestDifference> </intervalFormatItem> <intervalFormatItem id="GyMEd"> - <greatestDifference id="d">E, d/M/y  –  E, d/M/y GGGGG</greatestDifference> - <greatestDifference id="G">E, d/M/y GGGGG  –  E, d/M/y GGGGG</greatestDifference> - <greatestDifference id="M">E, d/M/y  –  E, d/M/y GGGGG</greatestDifference> - <greatestDifference id="y">E, d/M/y  –  E, d/M/y GGGGG</greatestDifference> + <greatestDifference id="d">E, d/M/y – E, d/M/y GGGGG</greatestDifference> + <greatestDifference id="G">E, d/M/y GGGGG – E, d/M/y GGGGG</greatestDifference> + <greatestDifference id="M">E, d/M/y – E, d/M/y GGGGG</greatestDifference> + <greatestDifference id="y">E, d/M/y – E, d/M/y GGGGG</greatestDifference> </intervalFormatItem> <intervalFormatItem id="GyMMM"> <greatestDifference id="G">MMM y G – MMM y G</greatestDifference> @@ -1954,19 +1953,19 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <greatestDifference id="M">d/M – d/M</greatestDifference> </intervalFormatItem> <intervalFormatItem id="MEd"> - <greatestDifference id="d">E, d/M  –  E, d/M</greatestDifference> - <greatestDifference id="M">E, d/M  –  E, d/M</greatestDifference> + <greatestDifference id="d">E, d/M – E, d/M</greatestDifference> + <greatestDifference id="M">E, d/M – E, d/M</greatestDifference> </intervalFormatItem> <intervalFormatItem id="MMM"> - <greatestDifference id="M">MMM  –  MMM</greatestDifference> + <greatestDifference id="M">MMM – MMM</greatestDifference> </intervalFormatItem> <intervalFormatItem id="MMMd"> <greatestDifference id="d">d – d MMM</greatestDifference> - <greatestDifference id="M">d MMM  –  d MMM</greatestDifference> + <greatestDifference id="M">d MMM – d MMM</greatestDifference> </intervalFormatItem> <intervalFormatItem id="MMMEd"> - <greatestDifference id="d">E, d MMM  –  E, d MMM</greatestDifference> - <greatestDifference id="M">E, d MMM  –  E, d MMM</greatestDifference> + <greatestDifference id="d">E, d MMM – E, d MMM</greatestDifference> + <greatestDifference id="M">E, d MMM – E, d MMM</greatestDifference> </intervalFormatItem> <intervalFormatItem id="y"> <greatestDifference id="y">y–y G</greatestDifference> @@ -1981,26 +1980,26 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <greatestDifference id="y">d/M/y – d/M/y GGGGG</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMEd"> - <greatestDifference id="d">E, d/M/y  –  E, d/M/y GGGGG</greatestDifference> - <greatestDifference id="M">E, d/M/y  –  E, d/M/y GGGGG</greatestDifference> - <greatestDifference id="y">E, d/M/y  –  E, d/M/y GGGGG</greatestDifference> + <greatestDifference id="d">E, d/M/y – E, d/M/y GGGGG</greatestDifference> + <greatestDifference id="M">E, d/M/y – E, d/M/y GGGGG</greatestDifference> + <greatestDifference id="y">E, d/M/y – E, d/M/y GGGGG</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMM"> - <greatestDifference id="M">MMM  –  MMM y G</greatestDifference> - <greatestDifference id="y">MMM y  –  MMM y G</greatestDifference> + <greatestDifference id="M">MMM – MMM y G</greatestDifference> + <greatestDifference id="y">MMM y – MMM y G</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMd"> <greatestDifference id="d">d – d MMM, y G</greatestDifference> - <greatestDifference id="M">d MMM  –  d MMM, y G</greatestDifference> - <greatestDifference id="y">d MMM, y  –  d MMM, y G</greatestDifference> + <greatestDifference id="M">d MMM – d MMM, y G</greatestDifference> + <greatestDifference id="y">d MMM, y – d MMM, y G</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMEd"> - <greatestDifference id="d">E, d MMM  –  E, d MMM, y G</greatestDifference> - <greatestDifference id="M">E, d MMM  –  E, d MMM, y G</greatestDifference> - <greatestDifference id="y">E, d MMM, y  –  E, d MMM, y G</greatestDifference> + <greatestDifference id="d">E, d MMM – E, d MMM, y G</greatestDifference> + <greatestDifference id="M">E, d MMM – E, d MMM, y G</greatestDifference> + <greatestDifference id="y">E, d MMM, y – E, d MMM, y G</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMM"> - <greatestDifference id="M">MMMM  –  MMMM y G</greatestDifference> + <greatestDifference id="M">MMMM – MMMM y G</greatestDifference> <greatestDifference id="y">MMMM y – MMMM y G</greatestDifference> </intervalFormatItem> </intervalFormats> @@ -2305,7 +2304,7 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ </availableFormats> <intervalFormats> <intervalFormatItem id="Bh"> - <greatestDifference id="B">h 'giờ' B  –  h 'giờ' B</greatestDifference> + <greatestDifference id="B">h 'giờ' B – h 'giờ' B</greatestDifference> <greatestDifference id="h">h – h 'giờ' B</greatestDifference> </intervalFormatItem> <intervalFormatItem id="Bhm"> @@ -2320,24 +2319,24 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <greatestDifference id="y">y – y G</greatestDifference> </intervalFormatItem> <intervalFormatItem id="GyM"> - <greatestDifference id="G">M/y G  –  M/y G</greatestDifference> + <greatestDifference id="G">M/y G – M/y G</greatestDifference> <greatestDifference id="M">M/y– M/y G</greatestDifference> <greatestDifference id="y">M/y – M/y G</greatestDifference> </intervalFormatItem> <intervalFormatItem id="GyMd"> <greatestDifference id="d">d/M/y – d/M/y G</greatestDifference> - <greatestDifference id="G">d/M/y G  –  d/M/y G</greatestDifference> + <greatestDifference id="G">d/M/y G – d/M/y G</greatestDifference> <greatestDifference id="M">d/M/y – d/M/y G</greatestDifference> <greatestDifference id="y">d/M/y – d/M/y G</greatestDifference> </intervalFormatItem> <intervalFormatItem id="GyMEd"> - <greatestDifference id="d">E, d/M/y  –  E, d/M/y G</greatestDifference> - <greatestDifference id="G">E, d/M/y G  –  E, d/M/y G</greatestDifference> - <greatestDifference id="M">E, d/M/y  –  E, d/M/y G</greatestDifference> - <greatestDifference id="y">E, d/M/y  –  E, d/M/y G</greatestDifference> + <greatestDifference id="d">E, d/M/y – E, d/M/y G</greatestDifference> + <greatestDifference id="G">E, d/M/y G – E, d/M/y G</greatestDifference> + <greatestDifference id="M">E, d/M/y – E, d/M/y G</greatestDifference> + <greatestDifference id="y">E, d/M/y – E, d/M/y G</greatestDifference> </intervalFormatItem> <intervalFormatItem id="GyMMM"> - <greatestDifference id="G">MMM y G  –  MMM y G</greatestDifference> + <greatestDifference id="G">MMM y G – MMM y G</greatestDifference> <greatestDifference id="M">MMM – MMM y G</greatestDifference> <greatestDifference id="y">MMM y – MMM y G</greatestDifference> </intervalFormatItem> @@ -2379,15 +2378,15 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <greatestDifference id="M">d/M – d/M</greatestDifference> </intervalFormatItem> <intervalFormatItem id="MEd"> - <greatestDifference id="d">E, d/M  –  E, d/M</greatestDifference> - <greatestDifference id="M">E, d/M  –  E, d/M</greatestDifference> + <greatestDifference id="d">E, d/M – E, d/M</greatestDifference> + <greatestDifference id="M">E, d/M – E, d/M</greatestDifference> </intervalFormatItem> <intervalFormatItem id="MMM"> <greatestDifference id="M">MMM – MMM</greatestDifference> </intervalFormatItem> <intervalFormatItem id="MMMd"> <greatestDifference id="d">d – d MMM</greatestDifference> - <greatestDifference id="M">d MMM  –  d MMM</greatestDifference> + <greatestDifference id="M">d MMM – d MMM</greatestDifference> </intervalFormatItem> <intervalFormatItem id="MMMEd"> <greatestDifference id="d">E, d MMM – E, d MMM</greatestDifference> @@ -2403,27 +2402,27 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <greatestDifference id="y">d/M/y – d/M/y</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMEd"> - <greatestDifference id="d">E, d/M/y  –  E, d/M/y</greatestDifference> - <greatestDifference id="M">E, d/M/y  –  E, d/M/y</greatestDifference> - <greatestDifference id="y">E, d/M/y  –  E, d/M/y</greatestDifference> + <greatestDifference id="d">E, d/M/y – E, d/M/y</greatestDifference> + <greatestDifference id="M">E, d/M/y – E, d/M/y</greatestDifference> + <greatestDifference id="y">E, d/M/y – E, d/M/y</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMM"> - <greatestDifference id="M">MMM  –  MMM y</greatestDifference> - <greatestDifference id="y">MMM y  –  MMM y</greatestDifference> + <greatestDifference id="M">MMM – MMM y</greatestDifference> + <greatestDifference id="y">MMM y – MMM y</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMd"> <greatestDifference id="d">d – d MMM, y</greatestDifference> - <greatestDifference id="M">d MMM  –  d MMM, y</greatestDifference> - <greatestDifference id="y">d MMM, y  –  d MMM, y</greatestDifference> + <greatestDifference id="M">d MMM – d MMM, y</greatestDifference> + <greatestDifference id="y">d MMM, y – d MMM, y</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMEd"> - <greatestDifference id="d">E, d MMM  –  E, d MMM, y</greatestDifference> - <greatestDifference id="M">E, d MMM  –  E, d MMM, y</greatestDifference> - <greatestDifference id="y">E, d MMM, y  –  E, d MMM, y</greatestDifference> + <greatestDifference id="d">E, d MMM – E, d MMM, y</greatestDifference> + <greatestDifference id="M">E, d MMM – E, d MMM, y</greatestDifference> + <greatestDifference id="y">E, d MMM, y – E, d MMM, y</greatestDifference> </intervalFormatItem> <intervalFormatItem id="yMMMM"> - <greatestDifference id="M">MMMM  –  MMMM 'năm' y</greatestDifference> - <greatestDifference id="y">MMMM 'năm' y  –  MMMM 'năm' y</greatestDifference> + <greatestDifference id="M">MMMM – MMMM 'năm' y</greatestDifference> + <greatestDifference id="y">MMMM 'năm' y – MMMM 'năm' y</greatestDifference> </intervalFormatItem> </intervalFormats> </dateTimeFormats> @@ -2806,9 +2805,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Giờ {0}</regionFormat> <regionFormat type="daylight">Giờ mùa hè {0}</regionFormat> <regionFormat type="standard">Giờ chuẩn {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Giờ Phối hợp Quốc tế</standard> @@ -2817,9 +2813,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Etc/Unknown"> <exemplarCity>Thành phố không xác định</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Currie</exemplarCity> - </zone> <zone type="America/St_Barthelemy"> <exemplarCity>St. Barthélemy</exemplarCity> </zone> @@ -2896,9 +2889,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Asia/Taipei"> <exemplarCity>Đài Bắc</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzhhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiev</exemplarCity> </zone> @@ -3527,11 +3517,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight draft="contributed">Giờ Mùa Hè Ma Cao</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Giờ đảo Macquarie</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Giờ Magadan</generic> @@ -3571,13 +3556,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Giờ Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Giờ Tây Bắc Mexico</generic> - <standard>Giờ Chuẩn Tây Bắc Mexico</standard> - <daylight>Giờ Mùa Hè Tây Bắc Mexico</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Giờ Thái Bình Dương Mexico</generic> diff --git a/make/data/cldr/common/main/vi_VN.xml b/make/data/cldr/common/main/vi_VN.xml index 75f783e9f5614..bddbba22d90ac 100644 --- a/make/data/cldr/common/main/vi_VN.xml +++ b/make/data/cldr/common/main/vi_VN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vmw.xml b/make/data/cldr/common/main/vmw.xml index 83f19e6428f76..659a9e4e4f407 100644 --- a/make/data/cldr/common/main/vmw.xml +++ b/make/data/cldr/common/main/vmw.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vmw_MZ.xml b/make/data/cldr/common/main/vmw_MZ.xml index 8bf4bc264f229..3c6f3b580be3a 100644 --- a/make/data/cldr/common/main/vmw_MZ.xml +++ b/make/data/cldr/common/main/vmw_MZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vo.xml b/make/data/cldr/common/main/vo.xml index 779ae87acf1b7..f3ab9dc93e182 100644 --- a/make/data/cldr/common/main/vo.xml +++ b/make/data/cldr/common/main/vo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vo_001.xml b/make/data/cldr/common/main/vo_001.xml index 93848d5accdd5..489080db29966 100644 --- a/make/data/cldr/common/main/vo_001.xml +++ b/make/data/cldr/common/main/vo_001.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vun.xml b/make/data/cldr/common/main/vun.xml index 65f77ebff442d..8f618cd9c67e8 100644 --- a/make/data/cldr/common/main/vun.xml +++ b/make/data/cldr/common/main/vun.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/vun_TZ.xml b/make/data/cldr/common/main/vun_TZ.xml index 7e4002959d906..e7380551a6a3a 100644 --- a/make/data/cldr/common/main/vun_TZ.xml +++ b/make/data/cldr/common/main/vun_TZ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wa.xml b/make/data/cldr/common/main/wa.xml index 09cc554c0d660..cf82dc51b861d 100644 --- a/make/data/cldr/common/main/wa.xml +++ b/make/data/cldr/common/main/wa.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wa_BE.xml b/make/data/cldr/common/main/wa_BE.xml index 1b6bab96e0cd9..b3851d6d65d08 100644 --- a/make/data/cldr/common/main/wa_BE.xml +++ b/make/data/cldr/common/main/wa_BE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wae.xml b/make/data/cldr/common/main/wae.xml index 801cb0e21a2c9..b4f505481b08a 100644 --- a/make/data/cldr/common/main/wae.xml +++ b/make/data/cldr/common/main/wae.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wae_CH.xml b/make/data/cldr/common/main/wae_CH.xml index 074f749dcd121..1476edb9eba0d 100644 --- a/make/data/cldr/common/main/wae_CH.xml +++ b/make/data/cldr/common/main/wae_CH.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wal.xml b/make/data/cldr/common/main/wal.xml index 38c85b68f910b..a01abdb2fdc94 100644 --- a/make/data/cldr/common/main/wal.xml +++ b/make/data/cldr/common/main/wal.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wal_ET.xml b/make/data/cldr/common/main/wal_ET.xml index 6c199c58faf8d..7b327c1163470 100644 --- a/make/data/cldr/common/main/wal_ET.xml +++ b/make/data/cldr/common/main/wal_ET.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wbp.xml b/make/data/cldr/common/main/wbp.xml index 6e1003e173fe1..567d70cc0583e 100644 --- a/make/data/cldr/common/main/wbp.xml +++ b/make/data/cldr/common/main/wbp.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wbp_AU.xml b/make/data/cldr/common/main/wbp_AU.xml index 04068cc1078f8..c4eb9cd398cc8 100644 --- a/make/data/cldr/common/main/wbp_AU.xml +++ b/make/data/cldr/common/main/wbp_AU.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wo.xml b/make/data/cldr/common/main/wo.xml index 1eb9bea5abb20..fec199e161580 100644 --- a/make/data/cldr/common/main/wo.xml +++ b/make/data/cldr/common/main/wo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/wo_SN.xml b/make/data/cldr/common/main/wo_SN.xml index 2ccabce5fde11..4404a070ba3e5 100644 --- a/make/data/cldr/common/main/wo_SN.xml +++ b/make/data/cldr/common/main/wo_SN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/xh.xml b/make/data/cldr/common/main/xh.xml index 9d3d8aca861c5..2f2b457805b53 100644 --- a/make/data/cldr/common/main/xh.xml +++ b/make/data/cldr/common/main/xh.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1180,9 +1180,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Sao_Tome"> <exemplarCity>São Tomé</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Uzhhorod</exemplarCity> - </zone> <zone type="Asia/Saigon"> <exemplarCity>Ho Chi Minh City</exemplarCity> </zone> @@ -1692,11 +1689,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Lord Howe Daylight Time</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie Island Time</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan Time</generic> @@ -1736,13 +1728,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mawson Time</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Northwest Mexico Time</generic> - <standard>Northwest Mexico Standard Time</standard> - <daylight>Northwest Mexico Daylight Time</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Mexican Pacific Time</generic> diff --git a/make/data/cldr/common/main/xh_ZA.xml b/make/data/cldr/common/main/xh_ZA.xml index 147e9f55bd6ae..9b9f1627eb84a 100644 --- a/make/data/cldr/common/main/xh_ZA.xml +++ b/make/data/cldr/common/main/xh_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/xnr.xml b/make/data/cldr/common/main/xnr.xml index d405023653260..1869a6f5f8c7f 100644 --- a/make/data/cldr/common/main/xnr.xml +++ b/make/data/cldr/common/main/xnr.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1829,11 +1829,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>लॉर्ड होवे दे ध्याड़े दे उजाले दा टैम</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>मक्वारी टापू दा टैम</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>मागादान दा टैम</generic> @@ -1873,13 +1868,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>माव्सन दा टैम</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>उत्तर पश्चिमी मेक्सिको दा टैम</generic> - <standard>उत्तर पश्चिमी मेक्सिको दा मानक टैम</standard> - <daylight>उत्तर पश्चिमी मेक्सिको दे ध्याड़े दे उजाले दा टैम</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>मेक्सिकन प्रशांत दा टैम</generic> diff --git a/make/data/cldr/common/main/xnr_IN.xml b/make/data/cldr/common/main/xnr_IN.xml index c9a676fb782ad..09931f3aa1ba8 100644 --- a/make/data/cldr/common/main/xnr_IN.xml +++ b/make/data/cldr/common/main/xnr_IN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/xog.xml b/make/data/cldr/common/main/xog.xml index e9373ae2cba0a..08454c0f076cc 100644 --- a/make/data/cldr/common/main/xog.xml +++ b/make/data/cldr/common/main/xog.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/xog_UG.xml b/make/data/cldr/common/main/xog_UG.xml index a1d12dd6af21a..0b882fe9ea5dd 100644 --- a/make/data/cldr/common/main/xog_UG.xml +++ b/make/data/cldr/common/main/xog_UG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/yav.xml b/make/data/cldr/common/main/yav.xml index bbd335e8f90f0..855051df41da0 100644 --- a/make/data/cldr/common/main/yav.xml +++ b/make/data/cldr/common/main/yav.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/yav_CM.xml b/make/data/cldr/common/main/yav_CM.xml index 65036387deec7..1539a1e7285db 100644 --- a/make/data/cldr/common/main/yav_CM.xml +++ b/make/data/cldr/common/main/yav_CM.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/yi.xml b/make/data/cldr/common/main/yi.xml index c839c8096ac34..412fd89a5157f 100644 --- a/make/data/cldr/common/main/yi.xml +++ b/make/data/cldr/common/main/yi.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/yi_UA.xml b/make/data/cldr/common/main/yi_UA.xml index 2641e12ee7120..bf85c1e0b17e8 100644 --- a/make/data/cldr/common/main/yi_UA.xml +++ b/make/data/cldr/common/main/yi_UA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/yo.xml b/make/data/cldr/common/main/yo.xml index a2a4e3cf45347..fc47ed7e25172 100644 --- a/make/data/cldr/common/main/yo.xml +++ b/make/data/cldr/common/main/yo.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1683,9 +1683,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>ìlú Kírẹstọ́ọ̀nù</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>ìlú Yelonáfù</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>ìlú Edmonton</exemplarCity> </zone> @@ -1704,30 +1701,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>ìlú Resolútì</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>ìlú Raini Rifà</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>ìlú Rankin Inlet</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>ìlú àtikọkàn</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>ìlú Omi Thunder</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>ìlú Nipigoni</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>ìlú Toronto</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>ìlú Iqaluit</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>ìlú Panituni</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>ìlú Montoni</exemplarCity> </zone> @@ -2475,11 +2460,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Lord Howe Daylight Time</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Macquarie Island Time</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadan Time</generic> @@ -2519,13 +2499,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>Mawson Time</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Àkókò Apá Ìwọ̀ Oorùn Mẹ́ṣíkò</generic> - <standard>Àkókò Àfẹnukò Apá Ìwọ̀ Oorùn Mẹ́ṣíkò</standard> - <daylight>Àkókò Ojúmọmọ Apá Ìwọ̀ Oorùn Mẹ́ṣíkò</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Àkókò Pásífíìkì Mẹ́ṣíkò</generic> diff --git a/make/data/cldr/common/main/yo_BJ.xml b/make/data/cldr/common/main/yo_BJ.xml index db83646cf1b50..df46c47d32b43 100644 --- a/make/data/cldr/common/main/yo_BJ.xml +++ b/make/data/cldr/common/main/yo_BJ.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -898,13 +898,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>Àkókò Ooru Máríshúshì</daylight> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Àkókò Apá Ìwɔ̀ Oorùn Mɛ́shíkò</generic> - <standard>Àkókò Àfɛnukò Apá Ìwɔ̀ Oorùn Mɛ́shíkò</standard> - <daylight>Àkókò Ojúmɔmɔ Apá Ìwɔ̀ Oorùn Mɛ́shíkò</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Àkókò Pásífíìkì Mɛ́shíkò</generic> diff --git a/make/data/cldr/common/main/yo_NG.xml b/make/data/cldr/common/main/yo_NG.xml index 4c27ff826f40b..43a18174b67b5 100644 --- a/make/data/cldr/common/main/yo_NG.xml +++ b/make/data/cldr/common/main/yo_NG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/yrl.xml b/make/data/cldr/common/main/yrl.xml index bf2340383d00c..2d876b6c3c88f 100644 --- a/make/data/cldr/common/main/yrl.xml +++ b/make/data/cldr/common/main/yrl.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1098,7 +1098,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Terefuni sesewara muakaresawa</type> <type key="collation" type="phonetic" draft="contributed">Yupurawakasawa terefuniara mukaresawa</type> <type key="collation" type="pinyin">Pin-yin mukaresawa</type> - <type key="collation" type="reformed">Muakaresawa amũrupisawaira</type> <type key="collation" type="search">Sikaisá purusawa panhérupí</type> <type key="collation" type="searchjl" draft="contributed">Resikai kũsuãti uyupiruwa hangul rupí</type> <type key="collation" type="standard">Mukaresawa retewa</type> @@ -2247,9 +2246,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Hurariyu {0}</regionFormat> <regionFormat type="daylight">Kurasí Ara Hurariyu: {0}</regionFormat> <regionFormat type="standard">Hurariyu Retewa: {0}</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>Sãta Isabeu</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>Hurariyu Mũdi turususawa Kurdenadu</standard> @@ -2363,9 +2359,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>Meubúni</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>Kurie</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>Hobati</exemplarCity> </zone> @@ -2510,9 +2503,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>Kerestũ</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>Kisé-tawá</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>Edimũtũ</exemplarCity> </zone> @@ -2531,30 +2521,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>Resoruti</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>Paranã Amanawera</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>Rãkĩ Uikesawa</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>Atikokã</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>Tupã Kuara</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>Nipigũ</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>Turũtu</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>Ikaruiti</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>Pãginitũgi</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>Mũkitũ</exemplarCity> </zone> @@ -3311,18 +3289,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>Katuawa ruka</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>Usigurudi</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>Kiyewe</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>Sĩwerupu</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>Saporisiya</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>Kãpara</exemplarCity> </zone> @@ -3338,9 +3310,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>Hunururu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>Jũsitũ</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>Ãkurage</exemplarCity> </zone> @@ -4035,11 +4004,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Makau Kurasí Ara Hurariyu</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Kapuãma Makikuari Hurariyu</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Magadã Hurariyu</generic> @@ -4079,13 +4043,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Mausũ Hurariyu</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Mẽsiku Nutiwesiti Hurariyu</generic> - <standard>Mẽsiku Nutiwesiti Hurariyu Retewa</standard> - <daylight>Mẽsiku Nutiwesiti Kurasí Ara Hurariyu</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Pasifiku Mexikanu Hurariyu</generic> diff --git a/make/data/cldr/common/main/yrl_BR.xml b/make/data/cldr/common/main/yrl_BR.xml index 9b90798de9f7e..aecac36a98084 100644 --- a/make/data/cldr/common/main/yrl_BR.xml +++ b/make/data/cldr/common/main/yrl_BR.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/yrl_CO.xml b/make/data/cldr/common/main/yrl_CO.xml index 827622c77cedc..a0b060a17ab0a 100644 --- a/make/data/cldr/common/main/yrl_CO.xml +++ b/make/data/cldr/common/main/yrl_CO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. diff --git a/make/data/cldr/common/main/yrl_VE.xml b/make/data/cldr/common/main/yrl_VE.xml index 302375e1ad1cd..8f084e29fa216 100644 --- a/make/data/cldr/common/main/yrl_VE.xml +++ b/make/data/cldr/common/main/yrl_VE.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. diff --git a/make/data/cldr/common/main/yue.xml b/make/data/cldr/common/main/yue.xml index eb83873feb6e6..8ebfe9a34d129 100644 --- a/make/data/cldr/common/main/yue.xml +++ b/make/data/cldr/common/main/yue.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1258,7 +1258,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="phonebook">電話簿排序</type> <type key="collation" type="phonetic">發音排序</type> <type key="collation" type="pinyin">拼音排序</type> - <type key="collation" type="reformed">改良排序</type> <type key="collation" type="search">一般用途搜尋</type> <type key="collation" type="searchjl" draft="contributed">韓文子音排序</type> <type key="collation" type="standard">標準排序</type> @@ -3250,9 +3249,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <regionFormat>{0}時間</regionFormat> <regionFormat type="daylight">{0}夏令時間</regionFormat> <regionFormat type="standard">{0}標準時間</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>聖伊薩貝爾</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>協調世界時間</standard> @@ -3375,9 +3371,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>墨爾本</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>克黎</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>荷巴特</exemplarCity> </zone> @@ -3531,9 +3524,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>克雷斯頓</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>耶洛奈夫</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>艾德蒙吞</exemplarCity> </zone> @@ -3552,30 +3542,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>羅斯魯特</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>雨河鎮</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>蘭今灣</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>阿蒂科肯</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>珊德灣</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>尼皮岡</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>多倫多</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>伊魁特</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>潘尼爾東</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>蒙克頓</exemplarCity> </zone> @@ -4389,18 +4367,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>沙蘭港</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>烏茲哥洛</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>基輔</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>辛非洛浦</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>札波羅結</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>坎帕拉</exemplarCity> </zone> @@ -4419,9 +4391,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>檀香山</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>強斯頓</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>安克拉治</exemplarCity> </zone> @@ -5121,11 +5090,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>澳門夏令時間</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>麥覺理時間</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>馬加丹時間</generic> @@ -5165,13 +5129,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>莫森時間</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>墨西哥西北部時間</generic> - <standard>墨西哥西北部標準時間</standard> - <daylight>墨西哥西北部夏令時間</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>墨西哥太平洋時間</generic> diff --git a/make/data/cldr/common/main/yue_Hans.xml b/make/data/cldr/common/main/yue_Hans.xml index 8c1bbf6181961..b730d5cbc845a 100644 --- a/make/data/cldr/common/main/yue_Hans.xml +++ b/make/data/cldr/common/main/yue_Hans.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -1259,7 +1259,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="phonebook">电话簿排序</type> <type key="collation" type="phonetic">发音排序</type> <type key="collation" type="pinyin">拼音排序</type> - <type key="collation" type="reformed">改良排序</type> <type key="collation" type="search">一般用途搜寻</type> <type key="collation" type="searchjl" draft="contributed">韩文子音排序</type> <type key="collation" type="standard">标准排序</type> @@ -3256,9 +3255,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic </fields> <timeZoneNames> <regionFormat>{0}时间</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>圣伊萨贝尔</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>协调世界时间</standard> @@ -3381,9 +3377,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Melbourne"> <exemplarCity>墨尔本</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>克黎</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>荷巴特</exemplarCity> </zone> @@ -3537,9 +3530,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Creston"> <exemplarCity>克雷斯顿</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>耶洛奈夫</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>艾德蒙吞</exemplarCity> </zone> @@ -3558,30 +3548,18 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Resolute"> <exemplarCity>罗斯鲁特</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>雨河镇</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>兰今湾</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>阿蒂科肯</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>珊德湾</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>尼皮冈</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>多伦多</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>伊魁特</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>潘尼尔东</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>蒙克顿</exemplarCity> </zone> @@ -4395,18 +4373,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>沙兰港</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>乌兹哥洛</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>基辅</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>辛非洛浦</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>札波罗结</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>坎帕拉</exemplarCity> </zone> @@ -4425,9 +4397,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Pacific/Honolulu"> <exemplarCity>檀香山</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>强斯顿</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>安克拉治</exemplarCity> </zone> @@ -5127,11 +5096,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <daylight>澳门夏令时间</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>麦觉理时间</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>马加丹时间</generic> @@ -5171,13 +5135,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>莫森时间</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>墨西哥西北部时间</generic> - <standard>墨西哥西北部标准时间</standard> - <daylight>墨西哥西北部夏令时间</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>墨西哥太平洋时间</generic> diff --git a/make/data/cldr/common/main/yue_Hans_CN.xml b/make/data/cldr/common/main/yue_Hans_CN.xml index 2be260a792746..5a0f87470d0b3 100644 --- a/make/data/cldr/common/main/yue_Hans_CN.xml +++ b/make/data/cldr/common/main/yue_Hans_CN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/yue_Hant.xml b/make/data/cldr/common/main/yue_Hant.xml index 4f24496922e3b..f34cd5b428776 100644 --- a/make/data/cldr/common/main/yue_Hant.xml +++ b/make/data/cldr/common/main/yue_Hant.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/yue_Hant_HK.xml b/make/data/cldr/common/main/yue_Hant_HK.xml index 56a6841fe5814..24920c69cd537 100644 --- a/make/data/cldr/common/main/yue_Hant_HK.xml +++ b/make/data/cldr/common/main/yue_Hant_HK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/za.xml b/make/data/cldr/common/main/za.xml index 7510c24301bb3..d6b56c0fedd85 100644 --- a/make/data/cldr/common/main/za.xml +++ b/make/data/cldr/common/main/za.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/za_CN.xml b/make/data/cldr/common/main/za_CN.xml index 2c53062950fdd..83256fd63a5d1 100644 --- a/make/data/cldr/common/main/za_CN.xml +++ b/make/data/cldr/common/main/za_CN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zgh.xml b/make/data/cldr/common/main/zgh.xml index 785ca3aea00ff..a2492602028cd 100644 --- a/make/data/cldr/common/main/zgh.xml +++ b/make/data/cldr/common/main/zgh.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zgh_MA.xml b/make/data/cldr/common/main/zgh_MA.xml index 239605f578d07..d068734cd5f7a 100644 --- a/make/data/cldr/common/main/zgh_MA.xml +++ b/make/data/cldr/common/main/zgh_MA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zh.xml b/make/data/cldr/common/main/zh.xml index 566c10d3d9818..1dcdedd1f6c56 100644 --- a/make/data/cldr/common/main/zh.xml +++ b/make/data/cldr/common/main/zh.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1294,7 +1294,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">电话簿排序</type> <type key="collation" type="phonetic">语音排序</type> <type key="collation" type="pinyin">拼音排序</type> - <type key="collation" type="reformed">改良排序</type> <type key="collation" type="search">常规搜索</type> <type key="collation" type="searchjl">按韩文字开首辅音来搜索</type> <type key="collation" type="standard">标准排序</type> @@ -3560,9 +3559,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat type="daylight">{0}夏令时间</regionFormat> <regionFormat type="standard">{0}标准时间</regionFormat> <fallbackFormat>{1}({0})</fallbackFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>圣伊萨贝尔</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>协调世界时</standard> @@ -3685,9 +3681,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>墨尔本</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>柯里</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>霍巴特</exemplarCity> </zone> @@ -3841,9 +3834,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>克雷斯顿</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>耶洛奈夫</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>埃德蒙顿</exemplarCity> </zone> @@ -3862,30 +3852,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>雷索卢特</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>雷尼河</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>兰今湾</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>阿蒂科肯</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>桑德贝</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>尼皮贡</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>多伦多</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>伊魁特</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>旁涅唐</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>蒙克顿</exemplarCity> </zone> @@ -4699,18 +4677,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>达累斯萨拉姆</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>乌日哥罗德</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>基辅</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>辛菲罗波尔</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>扎波罗热</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>坎帕拉</exemplarCity> </zone> @@ -4729,9 +4701,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>檀香山</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>约翰斯顿</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>安克雷奇</exemplarCity> </zone> @@ -5431,11 +5400,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>澳门夏令时间</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>麦夸里岛时间</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>马加丹时间</generic> @@ -5475,13 +5439,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>莫森时间</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>墨西哥西北部时间</generic> - <standard>墨西哥西北部标准时间</standard> - <daylight>墨西哥西北部夏令时间</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>墨西哥太平洋时间</generic> diff --git a/make/data/cldr/common/main/zh_Hans.xml b/make/data/cldr/common/main/zh_Hans.xml index e8a5aca387790..0c76ce0ebcb99 100644 --- a/make/data/cldr/common/main/zh_Hans.xml +++ b/make/data/cldr/common/main/zh_Hans.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zh_Hans_CN.xml b/make/data/cldr/common/main/zh_Hans_CN.xml index d0269d75cc32f..fcdea0e9e4272 100644 --- a/make/data/cldr/common/main/zh_Hans_CN.xml +++ b/make/data/cldr/common/main/zh_Hans_CN.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zh_Hans_HK.xml b/make/data/cldr/common/main/zh_Hans_HK.xml index 759b39273840c..f94dae7db8c7a 100644 --- a/make/data/cldr/common/main/zh_Hans_HK.xml +++ b/make/data/cldr/common/main/zh_Hans_HK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zh_Hans_MO.xml b/make/data/cldr/common/main/zh_Hans_MO.xml index 1fb246cac5e5e..16d25d5eeed3c 100644 --- a/make/data/cldr/common/main/zh_Hans_MO.xml +++ b/make/data/cldr/common/main/zh_Hans_MO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zh_Hans_SG.xml b/make/data/cldr/common/main/zh_Hans_SG.xml index 8f0eb4b99fe2b..5c85bf323f125 100644 --- a/make/data/cldr/common/main/zh_Hans_SG.xml +++ b/make/data/cldr/common/main/zh_Hans_SG.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zh_Hant.xml b/make/data/cldr/common/main/zh_Hant.xml index f266c62ea84eb..0d2228ccbe14b 100644 --- a/make/data/cldr/common/main/zh_Hant.xml +++ b/make/data/cldr/common/main/zh_Hant.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1294,7 +1294,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">電話簿排序</type> <type key="collation" type="phonetic">發音排序</type> <type key="collation" type="pinyin">拼音排序</type> - <type key="collation" type="reformed">改良排序</type> <type key="collation" type="search">一般用途搜尋</type> <type key="collation" type="searchjl" draft="contributed">韓文子音排序</type> <type key="collation" type="standard">標準排序</type> @@ -3637,9 +3636,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <timeZoneNames> <regionFormat>{0}時間</regionFormat> <fallbackFormat>{1}({0})</fallbackFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>聖伊薩貝爾</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>世界標準時間</standard> @@ -3762,9 +3758,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>墨爾本</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>克黎</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>荷巴特</exemplarCity> </zone> @@ -3918,9 +3911,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>克雷斯頓</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>耶洛奈夫</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>艾德蒙吞</exemplarCity> </zone> @@ -3939,30 +3929,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>羅斯魯特</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>雨河鎮</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>蘭今灣</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>阿蒂科肯</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>珊德灣</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>尼皮岡</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>多倫多</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>伊魁特</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>潘尼爾東</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>蒙克頓</exemplarCity> </zone> @@ -4776,18 +4754,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>沙蘭港</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>烏茲哥洛</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>基輔</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>辛非洛浦</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>札波羅結</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>坎帕拉</exemplarCity> </zone> @@ -4806,9 +4778,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>檀香山</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>強斯頓</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>安克拉治</exemplarCity> </zone> @@ -5546,11 +5515,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>澳門夏令時間</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>麥覺理時間</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>馬加丹時間</generic> @@ -5590,13 +5554,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>莫森時間</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>墨西哥西北部時間</generic> - <standard>墨西哥西北部標準時間</standard> - <daylight>墨西哥西北部夏令時間</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>墨西哥太平洋時間</generic> diff --git a/make/data/cldr/common/main/zh_Hant_HK.xml b/make/data/cldr/common/main/zh_Hant_HK.xml index 32e3aca67f4a6..4c93fedf4185c 100644 --- a/make/data/cldr/common/main/zh_Hant_HK.xml +++ b/make/data/cldr/common/main/zh_Hant_HK.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> @@ -209,7 +209,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <type key="collation" type="big5han">繁體中文排序 (Big5)</type> <type key="collation" type="dictionary">詞典排序</type> <type key="collation" type="gb2312han">簡體中文排序 (GB2312)</type> - <type key="collation" type="reformed">改革版排序</type> <type key="ms" type="uksystem">英制</type> <type key="ms" type="ussystem">美制</type> <type key="numbers" type="deva">天城體數字</type> @@ -1106,9 +1105,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Australia/Adelaide"> <exemplarCity>阿德萊德</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>卡里</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>荷伯特</exemplarCity> </zone> @@ -1181,18 +1177,9 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="America/Dawson_Creek"> <exemplarCity>道森灣</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>黃刀鎮</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>愛民頓</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>雷灣</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>尼皮貢</exemplarCity> - </zone> <zone type="America/Halifax"> <exemplarCity>哈利法克斯</exemplarCity> </zone> @@ -1481,18 +1468,12 @@ CLDR data files are interpreted according to the LDML specification (http://unic <zone type="Africa/Dar_es_Salaam"> <exemplarCity>達累斯薩拉姆</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>烏日哥羅德</exemplarCity> - </zone> <zone type="Pacific/Wake"> <exemplarCity>威克島</exemplarCity> </zone> <zone type="America/Adak"> <exemplarCity>埃達克</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>約翰斯頓環礁</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>安克雷奇</exemplarCity> </zone> @@ -1660,11 +1641,6 @@ CLDR data files are interpreted according to the LDML specification (http://unic <standard>科斯雷時間</standard> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>麥夸里群島時間</standard> - </long> - </metazone> <metazone type="Maldives"> <long> <standard>馬爾代夫時間</standard> diff --git a/make/data/cldr/common/main/zh_Hant_MO.xml b/make/data/cldr/common/main/zh_Hant_MO.xml index 156b27ece4d31..f941bdd6b458d 100644 --- a/make/data/cldr/common/main/zh_Hant_MO.xml +++ b/make/data/cldr/common/main/zh_Hant_MO.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zh_Hant_TW.xml b/make/data/cldr/common/main/zh_Hant_TW.xml index 03fb15fed076e..35382c2bf79ff 100644 --- a/make/data/cldr/common/main/zh_Hant_TW.xml +++ b/make/data/cldr/common/main/zh_Hant_TW.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/main/zu.xml b/make/data/cldr/common/main/zu.xml index 06ac46d877cf0..94f8e15c8ed62 100644 --- a/make/data/cldr/common/main/zu.xml +++ b/make/data/cldr/common/main/zu.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ for derived annotations. @@ -1128,7 +1128,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <type key="collation" type="phonebook">Ukuhlunga kwebhuku lefoni</type> <type key="collation" type="phonetic">Hlela Ngokwefonetiki</type> <type key="collation" type="pinyin">Ukuhlunga nge-Pinyin</type> - <type key="collation" type="reformed">Ukuhlunga okwenziwe kabusha</type> <type key="collation" type="search">Usesho olujwayelekile</type> <type key="collation" type="searchjl">Sesha nge-Hangul Ongwaqa Basekuqaleni</type> <type key="collation" type="standard">I-oda yokuhlunga ejwayelekile</type> @@ -2147,9 +2146,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <regionFormat>Isikhathi sase-{0}</regionFormat> <regionFormat type="daylight">{0} Isikhathi sasemini</regionFormat> <regionFormat type="standard">{0} isikhathi esivamile</regionFormat> - <zone type="America/Santa_Isabel"> - <exemplarCity>i-Santa Isabel</exemplarCity> - </zone> <zone type="Etc/UTC"> <long> <standard>isikhathi somhlaba esididiyelwe</standard> @@ -2272,9 +2268,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Australia/Melbourne"> <exemplarCity>i-Melbourne</exemplarCity> </zone> - <zone type="Australia/Currie"> - <exemplarCity>i-Currie</exemplarCity> - </zone> <zone type="Australia/Hobart"> <exemplarCity>i-Hobart</exemplarCity> </zone> @@ -2428,9 +2421,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Creston"> <exemplarCity>i-Creston</exemplarCity> </zone> - <zone type="America/Yellowknife"> - <exemplarCity>i-Yellowknife</exemplarCity> - </zone> <zone type="America/Edmonton"> <exemplarCity>i-Edmonton</exemplarCity> </zone> @@ -2449,30 +2439,18 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="America/Resolute"> <exemplarCity>i-Resolute</exemplarCity> </zone> - <zone type="America/Rainy_River"> - <exemplarCity>i-Rainy River</exemplarCity> - </zone> <zone type="America/Rankin_Inlet"> <exemplarCity>i-Rankin Inlet</exemplarCity> </zone> <zone type="America/Coral_Harbour"> <exemplarCity>i-Atikokan</exemplarCity> </zone> - <zone type="America/Thunder_Bay"> - <exemplarCity>i-Thunder Bay</exemplarCity> - </zone> - <zone type="America/Nipigon"> - <exemplarCity>i-Nipigon</exemplarCity> - </zone> <zone type="America/Toronto"> <exemplarCity>i-Toronto</exemplarCity> </zone> <zone type="America/Iqaluit"> <exemplarCity>i-Iqaluit</exemplarCity> </zone> - <zone type="America/Pangnirtung"> - <exemplarCity>i-Pangnirtung</exemplarCity> - </zone> <zone type="America/Moncton"> <exemplarCity>i-Moncton</exemplarCity> </zone> @@ -3274,18 +3252,12 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Africa/Dar_es_Salaam"> <exemplarCity>i-Dar es Salaam</exemplarCity> </zone> - <zone type="Europe/Uzhgorod"> - <exemplarCity>i-Uzhhorod</exemplarCity> - </zone> <zone type="Europe/Kiev"> <exemplarCity>i-Kiev</exemplarCity> </zone> <zone type="Europe/Simferopol"> <exemplarCity>i-Simferopol</exemplarCity> </zone> - <zone type="Europe/Zaporozhye"> - <exemplarCity>i-Zaporozhye</exemplarCity> - </zone> <zone type="Africa/Kampala"> <exemplarCity>i-Kampala</exemplarCity> </zone> @@ -3304,9 +3276,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <zone type="Pacific/Honolulu"> <exemplarCity>i-Honolulu</exemplarCity> </zone> - <zone type="Pacific/Johnston"> - <exemplarCity>i-Johnston</exemplarCity> - </zone> <zone type="America/Anchorage"> <exemplarCity>i-Anchorage</exemplarCity> </zone> @@ -3956,11 +3925,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <daylight>Isikhathi sase-Lord Howe sasemini</daylight> </long> </metazone> - <metazone type="Macquarie"> - <long> - <standard>Isikhathi sase-Macquarie Island</standard> - </long> - </metazone> <metazone type="Magadan"> <long> <generic>Isikhathi sase-Magadan</generic> @@ -4000,13 +3964,6 @@ Warnings: All cp values have U+FE0F characters removed. See /annotationsDerived/ <standard>Isikhathi sase-Mawson</standard> </long> </metazone> - <metazone type="Mexico_Northwest"> - <long> - <generic>Isikhathi sase-Northwest Mexico</generic> - <standard>Isikhathi sase-Northwest Mexico esijwayelekile</standard> - <daylight>Isikhathi sase-Northwest Mexico sasemini</daylight> - </long> - </metazone> <metazone type="Mexico_Pacific"> <long> <generic>Isikhathi sase-Mexican Pacific</generic> diff --git a/make/data/cldr/common/main/zu_ZA.xml b/make/data/cldr/common/main/zu_ZA.xml index 0f759039e7e59..758ca6e92b535 100644 --- a/make/data/cldr/common/main/zu_ZA.xml +++ b/make/data/cldr/common/main/zu_ZA.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ldml SYSTEM "../../common/dtd/ldml.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <ldml> diff --git a/make/data/cldr/common/properties/coverageLevels.txt b/make/data/cldr/common/properties/coverageLevels.txt index fc4a5d31df71b..3a2bb78c70330 100644 --- a/make/data/cldr/common/properties/coverageLevels.txt +++ b/make/data/cldr/common/properties/coverageLevels.txt @@ -144,7 +144,6 @@ th ; modern ; Thai ti ; basic ; Tigrinya tk ; modern ; Turkmen to ; basic ; Tongan -tok ; basic ; Toki Pona tr ; modern ; Turkish tt ; basic ; Tatar ug ; basic ; Uyghur diff --git a/make/data/cldr/common/supplemental/coverageLevels.xml b/make/data/cldr/common/supplemental/coverageLevels.xml index 81e3af8c00fd3..457cdc186604f 100644 --- a/make/data/cldr/common/supplemental/coverageLevels.xml +++ b/make/data/cldr/common/supplemental/coverageLevels.xml @@ -54,9 +54,9 @@ For terms of use, see http://www.unicode.org/copyright.html <coverageVariable key="%CJK_Languages" value="(ja|ko|zh)"/> <coverageVariable key="%chineseCalendarTerritories" value="(CN|CX|HK|MO|SG|TW)"/> <coverageVariable key="%collationType80" value="(ducet|search)"/> - <coverageVariable key="%collationType80ForTopLangs" value="(big5han|compat|dictionary|gb2312han|phonebook|phonetic|pinyin|reformed|stroke|traditional|unihan|zhuyin)"/> + <coverageVariable key="%collationType80ForTopLangs" value="(big5han|compat|dictionary|gb2312han|phonebook|phonetic|pinyin|stroke|traditional|unihan|zhuyin)"/> <coverageVariable key="%collationType80TopLangs" value="(ar|bg|ca|cs|da|de|el|en|es|fi|fr|he|hi|hr|hu|id|it|ja|ko|ms|nl|no|pl|pt|ro|ru|sk|sl|sr|sv|th|tr|uk|vi|zh)"/> - <coverageVariable key="%collationType100" value="(big5han|compat|dictionary|emoji|eor|gb2312han|phonebook|phonetic|pinyin|reformed|searchjl|stroke|traditional|unihan|zhuyin)"/> + <coverageVariable key="%collationType100" value="(big5han|compat|dictionary|emoji|eor|gb2312han|phonebook|phonetic|pinyin|searchjl|stroke|traditional|unihan|zhuyin)"/> <coverageVariable key="%collationAlternateValues" value="(non-ignorable|shifted)"/> <coverageVariable key="%collationCases" value="(upper|lower)"/> <coverageVariable key="%collationStrengths" value="(primary|secondary|tertiary|quaternary|identical)"/> @@ -115,7 +115,6 @@ For terms of use, see http://www.unicode.org/copyright.html <coverageVariable key="%medLong" value="(medium|long)"/> <coverageVariable key="%metazone30_AR" value="Argentina(_Western)?"/> <coverageVariable key="%metazone30_AU" value="(Australia_(Central(Western)?|(East|West)ern)|Lord_Howe)"/> - <coverageVariable key="%metazone30_AU_stdonly" value="Macquarie"/> <coverageVariable key="%metazone30_BR" value="(Amazon|Brasilia|Noronha)"/> <coverageVariable key="%metazone30_CA" value="(America_(Eastern|Central|Mountain|Pacific)|Newfoundland|Yukon)"/> <coverageVariable key="%metazone30_EU" value="Europe_(Central|(East|West)ern)"/> @@ -130,7 +129,7 @@ For terms of use, see http://www.unicode.org/copyright.html <coverageVariable key="%metazone60_stdonly" value="(Africa_(Central|(East|South)ern)|India|Indochina|Indonesia_(Central|(East|West)ern))"/> <coverageVariable key="%metazone60_AE_stdonly" value="Gulf"/> <coverageVariable key="%metazone80" value="(Alaska|Amazon|Apia|Argentina(_Western)?|Armenia|Azerbaijan|Azores|Bangladesh|Brasilia|Cape_Verde|Chatham|Chile|Choibalsan|Colombia|Cook|Cuba|Easter|Falkland|Fiji|Georgia|Greenland_(East|West)ern|Hawaii_Aleutian|Hong_Kong|Hovd|Iran|Irkutsk|Krasnoyarsk|Lord_Howe|Magadan|Mauritius|Mexico_(Northwest|Pacific)|Mongolia|New_(Caledonia|Zealand)|Newfoundland|Norfolk|Noronha|Novosibirsk|Omsk|Pakistan|Paraguay|Peru|Philippines|Pierre_Miquelon|Sakhalin|Samoa|Taipei|Tonga|Turkmenistan|Uruguay|Uzbekistan|Vanuatu|Vladivostok|Volgograd|Yakutsk|Yekaterinburg)"/> - <coverageVariable key="%metazone80_stdonly" value="(Afghanistan|Bhutan|Bolivia|Brunei|Chamorro|Christmas|Cocos|Davis|DumontDUrville|East_Timor|Ecuador|Europe_Further_Eastern|French_(Guiana|Southern)|Gambier|Galapagos|Gilbert_Islands|Gulf|Guyana|Indian_Ocean|Kazakhstan_(East|West)ern|Kosrae|Kyrgystan|Line_Islands|Macquarie|Malaysia|Maldives|Marquesas|Marshall_Islands|Mawson|Myanmar|Nauru|Nepal|Niue|Palau|Papua_New_Guinea|Phoenix_Islands|Pitcairn|Ponape|Pyongyang|Reunion|Rothera|Seychelles|Singapore|Solomon|South_Georgia|Suriname|Syowa|Tahiti|Tajikistan|Tokelau|Truk|Tuvalu|Venezuela|Vostok|Wake|Wallis|Yukon)"/> + <coverageVariable key="%metazone80_stdonly" value="(Afghanistan|Bhutan|Bolivia|Brunei|Chamorro|Christmas|Cocos|Davis|DumontDUrville|East_Timor|Ecuador|Europe_Further_Eastern|French_(Guiana|Southern)|Gambier|Galapagos|Gilbert_Islands|Gulf|Guyana|Indian_Ocean|Kazakhstan_(East|West)ern|Kosrae|Kyrgystan|Line_Islands|Malaysia|Maldives|Marquesas|Marshall_Islands|Mawson|Myanmar|Nauru|Nepal|Niue|Palau|Papua_New_Guinea|Phoenix_Islands|Pitcairn|Ponape|Pyongyang|Reunion|Rothera|Seychelles|Singapore|Solomon|South_Georgia|Suriname|Syowa|Tahiti|Tajikistan|Tokelau|Truk|Tuvalu|Venezuela|Vostok|Wake|Wallis|Yukon)"/> <coverageVariable key="%metazone100" value="(Acre|Almaty|Anadyr|Aqtau|Aqtobe|Kamchatka|Macau|Qyzylorda|Samara)"/> <coverageVariable key="%metazone100_stdonly" value="(Casey|Guam|Lanka|North_Mariana)"/> <coverageVariable key="%miscPatternTypes" value="(atLeast|range)"/> @@ -262,7 +261,6 @@ For terms of use, see http://www.unicode.org/copyright.html <coverageLevel value="moderate" inLanguage="zh" match="localeDisplayNames/types/type[@key='collation'][@type='(big5han|gb2312han|pinyin|stroke|zhuyin)']"/> <coverageLevel value="moderate" inLanguage="si" match="localeDisplayNames/types/type[@key='collation'][@type='dictionary']"/> <coverageLevel value="moderate" inLanguage="%phonebookCollationLanguages" match="localeDisplayNames/types/type[@key='collation'][@type='phonebook']"/> - <coverageLevel value="moderate" inLanguage="sv" match="localeDisplayNames/types/type[@key='collation'][@type='reformed']"/> <coverageLevel value="moderate" match="localeDisplayNames/types/type[@key='collation'][@type='standard']"/> <coverageLevel value="moderate" inLanguage="%traditionalCollationLanguages" match="localeDisplayNames/types/type[@key='collation'][@type='traditional']"/> <coverageLevel value="moderate" inLanguage="%CJK_Languages" match="localeDisplayNames/types/type[@key='collation'][@type='unihan']"/> diff --git a/make/data/cldr/common/supplemental/languageGroup.xml b/make/data/cldr/common/supplemental/languageGroup.xml index fcb764ccb6442..1b24bd291e4e5 100644 --- a/make/data/cldr/common/supplemental/languageGroup.xml +++ b/make/data/cldr/common/supplemental/languageGroup.xml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd"> -<!-- Copyright © 1991-2023 Unicode, Inc. +<!-- Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <supplementalData> @@ -11,7 +11,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <languageGroup parent="aav">bbh bfw bru brv hre irr kdt ktv kuf mkh mmj mun ncq ngt nyl oog pac phg ply sct sss tth tto zng</languageGroup> <languageGroup parent="afa">aal ber btf bvw bxe cdc ckq cop cus glo hdy hig hss hwo jaf kbz kul kvj mes mlw mmf omv sem tdk tsh ttr xdm</languageGroup> <languageGroup parent="alg">aaq abe alq arp atj ats bla chy ciw cr crj crk crl crm crr csw del dep etc kic mez mia mic mjy moe nnt nsk oj ojb ojc ojs ojw otw pim pot pqm psy qyp sac sjw unm wam xlb xlo xnt xpq</languageGroup> - <languageGroup parent="alv">aaa aab aba abi abm abn abo abr abu acd acp ada ade adj adq adu afn afu agb agc agq aha ahl ahp aik aiy ajg ak akd akf akp aku ala anf ann anv anw any aqd aqk asg asj ass ati ato aug avi avn awc ayb ayg ayi ayu azo bab bad bai bax bba bbk bbp bbs bcb bce bcg bci bcn bcs bcv bcz bda bdj bdt bec beh bes bfd bfl bfo bga bgf bgj bgu bif bim bin biv bjg bjt bju bkc bkm ble blo bly bme bmf bmq bnt bnz boe bok bom bov box bqa bqj brm brt bsc bse bsp bsx btc bud buy buz bvi bvj bwh bwj bwy byb byc byf byj bzv bzw bzz cae cbj cbo cbq ccg cch ccj cfd cib cko cli cll cou cpn cry cwt dag dai dam dbg dbi dbt dbu dbv dbw dds deg deq dga dgb dgd dgi dir djm dmb dmm doh doo dop doy dtk dtm dto dts dtu dur duz dya dyi dym dyo dza ebg ebr ee efa efi ega ego ehu eja eka eke eki ekp ekr elm ema emn enn env enw eot epi erh esm etb ets etu etx evh eza eze fah fak fal fam fap fer ff fir fll fni fod fon fub fue fuf fuh fuj fum fuq fuv gaa gba gbg gbh gbp gbq gbr gbs gbx gby gdi ged gej gel geq gix gjn gke gkn glc gmd gmm gmz gnh gnz gol gox goy grh gsl gso gur guw gux gvm gwa gwx gye gyg hag hhr hoe ibb ibe ibm ibn ibr ich idc ide idr ids idu ig igb igl ihi ijo iki ikk iko ikw ilv iqw ish isi iso isu itm its itw izr izz jab jer jid jmr jms jni juh juk juo juw kaj kbp kcc kcg kcj kdh kdm kdx kdz kef ken kes keu kez kfl kfn kgt khj kia kid kkm kku klc klk klo kma kmi kmy knf knp kou kov kow kph kpk kpl kpo kqg kqk kqm kqs krh kro krp krx ksa kss kub kvm kxb kye kza kzc kzr lan lar las ldg ldh ldm ldq lee lef lgq lia lip lma lmp lns lob lof lro luq mae mbv mcj mcs mcu mdd mea mfc mfd mff mfn mfq mfv mgj mgn mgo mhk mij mkl mko mlo moj mor mos mql mru msj msw mtk mua muc muo mxl myg myj myk mzk mzm mzv mzw naj nat naw nbm nbo nbp nbr nbv nbw ncr ncu ndd ndi ndr ndt ndv ndz ned nfr nfu nga ngb nge ngg nhu nie nin njr nko nkq nku nkz nlu nmj nmr nmz nnu nnw noy nqk nsc nti ntm nuh nup nuv nyb nza nzi nzz obu oda odu ofu ogb ogc ogg ogo ogu okb oke oku opa orx otr pbl pbo pbp pcn pil pmb png pnl pnq pny pnz pug pwb pym res ruy saf sav scv sde sev sfw sha shw shz sig sil snf snj snw soy spp sqm srr ssl swf sxw tbm tbz tcd tde tdl tem tfi tgw tgy thy tik tiq tiv tkq tnr toz tsp tsw ttb tug tui tuz tvd twn uda uiv ukw ula umm urh usk uta uth utr uya vag vit vor vut wbf wci wem wib wlx wo wof wom wrn wss wwa www xab xkb xoc xrb xsm xsn xwe xwl yam yay yaz yba ybj ybl yer yky yng ynq yo zna</languageGroup> + <languageGroup parent="alv">aaa aab aba abi abm abn abo abr abu acd acp ada ade adj adq adu afn afu agb agc agq aha ahl ahp aik aiy ajg ak akd akf akp aku ala anf ann anv anw any aqd aqk asg asj ass ati ato aug avi avn awc ayb ayg ayi ayu azo bab bad bai bax bba bbk bbp bbs bcb bce bcg bci bcn bcs bcv bcz bda bdj bdt bec beh bes bfd bfl bfo bga bgf bgj bgu bif bim bin biv bjg bjt bju bkc bkm ble blo bly bme bmf bmq bnt bnz boe bok bom bov box bqa bqj brm brt bsc bse bsp bsx btc bud buy buz bvi bvj bwh bwj bwy byb byc byf byj bzv bzw bzz cae cbj cbo cbq ccg cch ccj cfd cib cko cli cll cou cpn cry cwt dag dai dam dbg dbi dbt dbu dbv dbw dds deg deq dga dgb dgd dgi dir djm dmb dmm doh doo dop doy dtk dtm dto dts dtu dur duz dya dyi dym dyo dza ebg ebr ee efa efi ega ego ehu eja eka eke eki ekp ekr elm ema emn enn env enw eot epi erh esm etb ets etu etx evh eza eze fah fak fal fam fap fer ff fir fll fni fod fon fub fue fuf fuh fuj fum fuq fuv gaa gba gbg gbh gbp gbq gbr gbs gbx gby gdi ged gej gel geq gix gjn gke gkn glc gmd gmm gmz gnh gnz gol gox goy grh gsl gso gur guw gux gvm gwa gwx gye gyg hag hhr hoe ibb ibe ibm ibn ibr ich idc ide idr ids idu ig igb igl ihi ijo iki ikk iko ikw ilv iqw ish isi iso isu itm its itw izr izz jab jer jid jmr jms jni juh juk juo juw kaj kbp kcc kcg kcj kdh kdm kdx kdz kef ken kes keu kez kfl kfn kgt khj kia kid kkm kku klc klk klo kma kmi kmy knf knp kou kov kow kph kpk kpl kpo kqg kqk kqm kqs krh kro krp kss kub kvm kxb kye kza kzc kzr lan lar las ldg ldh ldm ldq lee lef lgq lia lip lma lmp lns lob lof lro luq mae mbv mcj mcs mcu mdd mea mfc mfd mff mfn mfq mfv mgj mgn mgo mhk mij mkl mko mlo moj mor mos mql mru msj msw mtk mua muc muo mxl myg myj myk mzk mzm mzv mzw naj nat naw nbm nbo nbp nbr nbv nbw ncr ncu ndd ndi ndr ndt ndv ndz ned nfr nfu nga ngb nge ngg nhu nie nin njr nko nkq nku nkz nlu nmj nmr nmz nnu nnw noy nqk nsc nti ntm nuh nup nuv nyb nza nzi nzz obu oda odu ofu ogb ogc ogg ogo ogu okb oke oku opa orx otr pbl pbo pbp pcn pil pmb png pnl pnq pny pnz pug pwb pym res rsw ruy saf sav scv sde sev sfw sha shw shz sig sil snf snj snw soy spp sqm srr ssl swf sxw tbm tbz tcd tde tdl tem tfi tgw tgy thy tik tiq tiv tkq tnr toz tsp tsw ttb tug tui tuz tvd twn uda uiv ukw ula umm urh usk uta uth utr uya vag vit vor vut wbf wci wem wib wlx wo wof wom wrn wss wwa www xab xkb xoc xrb xsm xsn xwe xwl yam yay yaz yba ybj ybl yer yky yng ynq yo zna</languageGroup> <languageGroup parent="apa">apj apk apl apm apw nv</languageGroup> <languageGroup parent="aqa">alc</languageGroup> <languageGroup parent="aql">alg wiy yur</languageGroup> @@ -19,7 +19,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <languageGroup parent="ath">aht apa bcr bea caf chp clc coq crx den dgr gce gwi haa hup ing kkz koy ktw kuu mvb qwt scs sek srs taa tau tcb tce tfn tgx tht tol ttm tuu txc wlk xup</languageGroup> <languageGroup parent="auf">aru cul dny jaa pad swx</languageGroup> <languageGroup parent="aus">adg adt aea aer aid alh aly amx amy amz ant ard are avm awg awk axe axl ayd bck bdy bia bjb bjy bpt bxi bxj bxn bym bzr dax dbl dda ddj dhg dhl dhr dhu dhx dif dja djb djd djf dji djr dmd dmw drl dth dwu dwy dyn dyy dze eaa fln gbb gbd gbu gbw gdc gdh gdj gdt ggd gia gih gjm gko gll gni gnl gnn gnr gtu gue guf gvn gvy gwm gwu gyf gyy hrp iin ikr jan jao jay jbi jig jui kbe kdd kgl kgs kjn kkp kky kld ktd ktg kux kuy lby lja ljw lku llj lnj lnw mem mep mpj mvl mwf mwp nam nay nbj ngk nha nhf nji nju nly nmv nnr nrk nrl ntg ntj nwg nwo nxn nys nyt nyx okg olk pit piu pjt pkn pnj pnv pnw pti rbp rit rkw rnr rrt rsm rxd rxw tbh tgz thd tju tjw typ ugb uky umd umg ump urf uwa vka vku vma vmb vml vmu wbp wbt wbv wdj wdk wdu wga wgg wgu wgy wie wig wih wij wik wim wkw wky wmb wmi wmt wnm wnn wrb wrg wrh wri wrl wrm wrw wth wua wyb wyi xbb xbe xbg xbp xby xda xdk xgd xgg xgi xgm xgw xjb xmh xmp xmy xni xnk xnu xny xpa xpj xpt xrd xrg xth xul xut xwd xwj xwk xwt xww xya xyj xyk xyt xyy yda yga yia yii yij yil ylr ynd yrm yry yty yub ywg yww yxg yxl zku zmc zmk zmu zmv</languageGroup> - <languageGroup parent="awd">aca ame aox apu arw avo bae brg bvv bwi cab cbb ccc cjo cni cot cox cpc crb cuj gae gqn guc ign inp kav kgm kpc mcb mht mmh mpd mpw mzx not pab pbg pib pio plu pnk rgr sar tae ter tnq trn unk wap wau xir yaw ycn yvt</languageGroup> + <languageGroup parent="awd">aca ame aox apu arw avo bae brg bvv bwi cab cbb ccc cjo cni cot cox cpc crb cuj gae gqn guc ign inp kav kpc mcb mht mmh mpd mpw mzx not pab pbg pib pio plu pnk rgr sar tae ter tnq trn unk wap wau xir yaw ycn yvt</languageGroup> <languageGroup parent="azc">chl cok com crn cup hch hop lui mfy mnr nah ncx nhi npl ntp ood opt pao par pia ser shh stp tac tar tbu tcu tep thh tla tub twr ute var xaw xgf xpo yaq</languageGroup> <languageGroup parent="bad">bjo kuw lna lnl mnh nue tor</languageGroup> <languageGroup parent="bai">bbj bko byv fmp jgo nla nnh nnz nwe xmg ybb</languageGroup> @@ -31,7 +31,7 @@ CLDR data files are interpreted according to the LDML specification (http://unic <languageGroup parent="cba">arh brn bzd cbg chb cjp cuk gut gym kog kvn mbp mot pay rma sab tbn tfr tnb tnd</languageGroup> <languageGroup parent="ccn">ab abq ady kbd uby</languageGroup> <languageGroup parent="ccs">jge ka lzz oge sva xmf</languageGroup> - <languageGroup parent="cdc">ajw anc ank bcw bcy bde bdm bdn bid bol bta bvf bvh bwr bwu bxq ckl cky cla daa dbb dbq dot dwa fie fkk fli gab gde gdk gdu gea gek gew gid gis giz glw gnd gqa grd gwn ha hed hia hna jeu jie jim jmb jmi juu kai kcs ker kil kna kof kot kpa kqx kso ksq kuh kvf kvi ldd lln lme maf mcn mcw mew mfl mif mkf mlj mmy moz mpg mpi mpk mqb mse msv mug muj muy mxf mxu nbh ndm ngi ngw ngx nja nnc nnn pbi pip piy plj pqa saa say scw sir sok sor sur swq swy tak tan tax tmc trj ubi udl xed xmj zah zaz zbu zim ziz zns zrn zua zuy</languageGroup> + <languageGroup parent="cdc">ajw anc ank bcw bcy bde bdm bdn bid bol bta bvf bvh bwr bwu bxq ckl cky cla daa dbb dbq dot dwa fie fkk fli gab gde gdk gdu gea gek gew gid gis giz glw gnd gqa grd gwn ha hed hia hna jeu jie jim jmb jmi juu kai kcs ker kil kna kof kot kpa kqx kso ksq kuh kvf kvi ldd lln lme maf mcn mcw mew mfl mif mkf mlj mmy moz mpg mpi mpk mqb mse msv mug muj muy mxf mxu nbh ndm ngi ngw ngx nja nnc nnn pbi pip piy pqa pze saa say scw sir sok sor sur swq swy tak tan tax tmc trj tvi ubi udl xed xmj zah zaz zbu zim ziz zns zrn zuy</languageGroup> <languageGroup parent="cdd">ari cad kii paw wic</languageGroup> <languageGroup parent="cel">br cnx cy ga gd gv kw mga nrc obt oco owl pgl sga sth wlm xbm xcb xce xga xlp xpi</languageGroup> <languageGroup parent="cmc">ace cja cje cjm hro huq ibh jra ocm rad rgs rog</languageGroup> @@ -90,10 +90,10 @@ CLDR data files are interpreted according to the LDML specification (http://unic <languageGroup parent="roa">an ast ca cbk co cpf cpp dlm drc egl es ext fax fr frc frm fro frp fur gl ist it itk lad lij lld lmo mwl mxi nap nrf oc osp pcd pld pln pml pms pro pt rgn rm ro ruo rup ruq sc scn sdc sdn sdt sro vec wa xno zrp</languageGroup> <languageGroup parent="sal">blc cea cjh clm col coo cow crd fla hur lil lut nok oka ptw qun sec shs ska slh sno spo squ str thp til twa</languageGroup> <languageGroup parent="sdv">ach adh alz anu atu bdi bfa bxb byg dau ddd dib din dip diw dks enb eyo jum kdj keo kln koe kpz liu lky loh lot lpx lth luo mas mfz mqu mur muz mym niq njl nnj nsg nub nus oki omt pko saq sgc shj shk soh suq tbi tcc tec teo teq tex toq tuv tuy ukv xel xwg zmo</languageGroup> - <languageGroup parent="sem">aao abh acm acq acy aeb aec agj aii ajp akk am amw apc apd ar arc arq ary auz ayl ayn ayp bhm bhn dlk egy fif gdq gez gru har hbo he hoh hrt inm ior jpa jrb jye kqd lhs mey mid mt mvz mys myz oar obm phn rzh sgw shu shv smp sqr sqt syc syr ti tig tru uga wle xaa xeb xha xhd xna xpu xqt xsa yhd zwa</languageGroup> + <languageGroup parent="sem">aao abh acm acq acy aeb aec agj aii akk am amw apc apd ar arc arq ary auz ayl ayn ayp bhm bhn dlk egy fif gdq gez gru har hbo he hoh hrt inm ior jpa jrb jye kqd lhs mey mid mt mvz mys myz oar obm phn rzh sgw shu shv smp sqr sqt syc syr ti tig tru uga wle xaa xeb xha xhd xna xpu xqt xsa yhd zwa</languageGroup> <languageGroup parent="sgn">ncs</languageGroup> <languageGroup parent="sio">asb bll chc cmm cro dak hid iow ksk lkt mhq ofo oma osa qua sto tta win xwc</languageGroup> - <languageGroup parent="sit">acn aeu ahk aim anm aot aph atb aub bap bfc bgg bgr bhj biu brd bxd byh byo byw bzi cdf cdm cfm ckh ckn clj clk cmr cnc cng cnh cnk csh csj ctd cth ctn cur cuw cvg dao der dhi dis drq dus emg enu ero ers gnb goe gqi grt hle hmr hni hpo ii jee jih jiu jiy jkr jnl jya kac kaf kar kdq kfw kgj kif kip kix kjl kjz kkt kle klr kmm ktp lax lbg lbr lep lgh lhi lhp lhu lif lis lkc llh lmh lov lpo lrr lsh lsi lus lwm mhu mjw mni mpz mrh mro muk mxj my nbe nbi nbu ncd new njb njh njm njn njo nkb nkd nkf nkh nki nma nme nmo nmy nng nnl nnp nos npb npg nph npo npu nre nri nru nsf nsm nty nwc nxq nzm obr pck phh pho phq pkh pmi pmj pmx pub pum pzn qvy qxs raa rab raf rah raq rau rav ria rji rki rmz rtc ruh sch sdp sgk sgp shl sjl slt smh smt ssk suv suz sxg taj tbq tcl tco tcz tdg tdh tge thf tij tji tjs tmk tpe tro trp tvn txg txo ugo usi vap vay weu wme wuh xac ybh ybi ych ycl ycp yig yim yiq yiv ykt ylo ymc ymd ymi ymq ymx ymz yna ypa yph ypn ypo ypp ypz ysd ysp ysy ytl ywl ywq ywt zal zhx zkd zkn zkr zom</languageGroup> + <languageGroup parent="sit">acn aeu ahk aim anm aot aph atb aub bap bfc bgg bgr bhj biu brd bxd byh byo byw bzi cdf cdm cfm ckh ckn clj clk cmr cnc cng cnh cnk csh csj ctd cth ctn cur cuw cvg dao der dhi dis drq dus emg enu ero ers gnb goe gqi grt hle hmr hni hpo ii jee jih jiu jiy jkr jnl jya kac kaf kar kdq kfw kgj kif kip kix kjl kjz kkt kle klr kmm ktp lax lbg lbr lep lgh lhi lhp lhu lif lis lkc llh lmh lov lpo lrr lsh lsi lus lwm mhu mjw mni mpz mrh mro muk mxj my nbe nbi nbu ncd new njb njh njm njn njo nkb nkd nkf nkh nki nma nme nmo nmy nng nnl nnp nos npb npg nph npo npu nre nri nru nsf nsm nty nwc nxq nzm obr pck phh pho phq pkh pmi pmj pmx pub pum pzn qvy qxs raa rab raf rah raq rau rav ria rji rki rmz rtc ruh sch sdp sgk sgp shl sjl slt smh smt ssk suv suz sxg taj tbq tcl tco tcz tdg tdh tge thf tij tji tjs tpe tro trp tvn txg txo ugo usi vap vay weu wme wuh xac ybh ybi ych ycl ycp yig yim yiq yiv ykt ylo ymc ymd ymi ymq ymx ymz yna ypa yph ypn ypo ypp ypz ysd ysp ysy ytl ywl ywq ywt zal zhx zkd zkn zkr zom</languageGroup> <languageGroup parent="sla">rsk zle zls zlw</languageGroup> <languageGroup parent="smi">se sia sjd sje sjk sjt sju sma smj smn sms</languageGroup> <languageGroup parent="son">ddn dje dsq hmb kcy khq ses tda tst twq</languageGroup> @@ -101,11 +101,11 @@ CLDR data files are interpreted according to the LDML specification (http://unic <languageGroup parent="syd">enf enh mtm nio sel xas yrk</languageGroup> <languageGroup parent="tai">aho aio blt eee kht ksu lo nod nrr nut pdi phk shn soa tdd th thi tnu tpo tsl tyj tyr tyz za zch zeh zln zlq</languageGroup> <languageGroup parent="tbq">adi adl adx apt bee bft bfu bo bqh bro brx cda cdn cgk chx dka drd dre duu dz dzl ghe ghh ght gro gvr gyo hut jda jna jul kbg kfk kgy khg kkf kte kzq lae lbf lbj lhm lkh loy mrg nbt neh njz nmm npa nun ola ole prx rgk rnp sbu scp scu sgt sip skj spt syw tgf tgj ths tpq tsj tsk ttz twm xct xkf xkz xns xsr xzh zau</languageGroup> - <languageGroup parent="trk">aib alt atv az azb ba bgx chg cjs clw crh cv dlg gag ili jct kaa kdr kim kjh kk klj kmz krc kum ky nog ota otk oui qwm qxq sah slq slr sty tk tr tt tyv ug uum uz uzs xbo xpc xqa ybe zkh zkz</languageGroup> + <languageGroup parent="trk">aib alt atv az azb ba bgx chg cjs clw crh cv dlg gag ili jct kaa kdr kim kjh kk klj kmz krc kum ky nog ota otk oui qwm qxq sah slr sty tk tr tt tyv ug uum uz uzs xbo xpc xqa ybe zkh zkz</languageGroup> <languageGroup parent="tup">aan ait ama api aqz arr arx asn asu aux avv awe awt cin cod eme gn gnw gub gui gun guq gvj gvo gyr jor jua jur kay kgk kpn ktn kuq kyr kyz mav mdz mnd mpu msp myu nhd omg oym paf pah pak pog psm pta pto skf srq sru taf tpj tpk tpn tpr tpw tqb twt urb uru urz wir wyr xaj xiy xmo yrl yuq</languageGroup> <languageGroup parent="tut">ain trk xgn xhc zkt</languageGroup> <languageGroup parent="tuw">eve evn gld juc mnc neg oaa oac orh sjo ude ulc</languageGroup> - <languageGroup parent="urj">fiu hu kca mns omk rts syd xcv ykg yux zkb</languageGroup> + <languageGroup parent="urj">fiu hu kca mns omk rts syd xcv ykg yux</languageGroup> <languageGroup parent="wak">dtd has hei kwk myh nuk</languageGroup> <languageGroup parent="wen">dsb hsb</languageGroup> <languageGroup parent="xgn">bua bxm bxu cmg dta kxs mhj mjg mn mvf peh sce xal xng xwo yuy</languageGroup> diff --git a/make/data/cldr/common/supplemental/languageInfo.xml b/make/data/cldr/common/supplemental/languageInfo.xml index 3c550dca0feb7..bca787901a01d 100644 --- a/make/data/cldr/common/supplemental/languageInfo.xml +++ b/make/data/cldr/common/supplemental/languageInfo.xml @@ -167,7 +167,6 @@ For terms of use, see http://www.unicode.org/copyright.html <languageMatch desired="aeb" supported="ar" distance="10" oneway="true"/> <!-- Tunisian Arabic --> <languageMatch desired="aec" supported="ar" distance="10" oneway="true"/> <!-- Saidi Arabic --> <languageMatch desired="afb" supported="ar" distance="10" oneway="true"/> <!-- Gulf Arabic --> - <languageMatch desired="ajp" supported="ar" distance="10" oneway="true"/> <!-- South Levantine Arabic --> <languageMatch desired="apc" supported="ar" distance="10" oneway="true"/> <!-- North Levantine Arabic --> <languageMatch desired="apd" supported="ar" distance="10" oneway="true"/> <!-- Sudanese Arabic --> <languageMatch desired="arq" supported="ar" distance="10" oneway="true"/> <!-- Algerian Arabic --> diff --git a/make/data/cldr/common/supplemental/likelySubtags.xml b/make/data/cldr/common/supplemental/likelySubtags.xml index 1a13b214fe2b6..0a60322deef52 100644 --- a/make/data/cldr/common/supplemental/likelySubtags.xml +++ b/make/data/cldr/common/supplemental/likelySubtags.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE supplementalData SYSTEM "../../common/dtd/ldmlSupplemental.dtd"> <!-- -Copyright © 1991-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <!-- @@ -1650,7 +1650,7 @@ not be patched by hand, as any changes made in that fashion may be lost. <!--{ Zulu; ?; ? } => { Zulu; Latin; South Africa }--> <likelySubtag from="zza" to="zza_Latn_TR"/> <!--{ Zaza; ?; ? } => { Zaza; Latin; Türkiye }--> - + <!-- Retain und and und+macroregions that are in CLDR locales, except those mapping to en anyway --> <likelySubtag from="und" to="en_Latn_US"/> <likelySubtag from="und_Latn" to="en_Latn_US"/> @@ -1658,9 +1658,9 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="und_Latn_419" to="es_Latn_419"/> <!--{ ?; ?; ? } => { English; Latin; United States }--> - + <!-- Added und_* so that all regions were handled --> - + <likelySubtag from="und_AC" to="en_Latn_AC"/> <likelySubtag from="und_AG" to="en_Latn_AG"/> <likelySubtag from="und_AI" to="en_Latn_AI"/> @@ -1724,9 +1724,9 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="und_VI" to="en_Latn_VI"/> <likelySubtag from="und_ZA" to="en_Latn_ZA"/> <likelySubtag from="und_ZM" to="bem_Latn_ZM"/> - + <!-- Add und_script_region where the fallback from und_script would fail --> - + <likelySubtag from="und_Arab_AF" to="fa_Arab_AF"/> <likelySubtag from="und_Arab_IR" to="fa_Arab_IR"/> <likelySubtag from="und_Cyrl_BG" to="bg_Cyrl_BG"/> @@ -1872,9 +1872,9 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="und_Latn_WS" to="sm_Latn_WS"/> <likelySubtag from="und_Latn_XK" to="sq_Latn_XK"/> <likelySubtag from="und_Latn_YT" to="fr_Latn_YT"/> - <likelySubtag from="und_Latn_ZW" to="sn_Latn_ZW"/> + <likelySubtag from="und_Latn_ZW" to="sn_Latn_ZW"/> <likelySubtag from="und_Tibt_BT" to="dz_Tibt_BT"/> - + <likelySubtag from="und_AD" to="ca_Latn_AD"/> <!--{ ?; ?; Andorra } => { Catalan; Latin; Andorra }--> <likelySubtag from="und_AE" to="ar_Arab_AE"/> @@ -2880,7 +2880,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="aja" to="aja_Latn_SS" origin="sil1"/> <!-- Aja [South Sudan] ➡︎ Aja [South Sudan] (Latin, South Sudan) --> <likelySubtag from="aji" to="aji_Latn_NC" origin="sil1"/> <!-- Ajië ➡︎ Ajië (Latin, New Caledonia) --> <likelySubtag from="ajn" to="ajn_Latn_AU" origin="sil1"/> <!-- Andajin ➡︎ Andajin (Latin, Australia) --> - <likelySubtag from="ajp" to="ajp_Arab_JO" origin="sil1"/> <!-- South Levantine Arabic ➡︎ South Levantine Arabic (Arabic, Jordan) --> <likelySubtag from="ajw" to="ajw_Latn_NG" origin="sil1"/> <!-- Ajawa ➡︎ Ajawa (Latin, Nigeria) --> <likelySubtag from="ajz" to="ajz_Latn_IN" origin="sil1"/> <!-- Amri Karbi ➡︎ Amri Karbi (Latin, India) --> <likelySubtag from="akb" to="akb_Latn_ID" origin="sil1"/> <!-- Batak Angkola ➡︎ Batak Angkola (Latin, Indonesia) --> @@ -5043,7 +5042,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="kgj" to="kgj_Deva_NP" origin="sil1"/> <!-- Gamale Kham ➡︎ Gamale Kham (Devanagari, Nepal) --> <likelySubtag from="kgk" to="kgk_Latn_BR" origin="sil1"/> <!-- Kaiwá ➡︎ Kaiwá (Latin, Brazil) --> <likelySubtag from="kgl" to="kgl_Latn_AU" origin="sil1"/> <!-- Kunggari ➡︎ Kunggari (Latin, Australia) --> - <likelySubtag from="kgm" to="kgm_Latn_BR" origin="sil1"/> <!-- Karipúna ➡︎ Karipúna (Latin, Brazil) --> <likelySubtag from="kgo" to="kgo_Latn_SD" origin="sil1"/> <!-- Krongo ➡︎ Krongo (Latin, Sudan) --> <likelySubtag from="kgq" to="kgq_Latn_ID" origin="sil1"/> <!-- Kamoro ➡︎ Kamoro (Latin, Indonesia) --> <likelySubtag from="kgr" to="kgr_Latn_ID" origin="sil1"/> <!-- Abun ➡︎ Abun (Latin, Indonesia) --> @@ -5267,7 +5265,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="krx" to="krx_Latn_SN" origin="sil1"/> <!-- Karon ➡︎ Karon (Latin, Senegal) --> <likelySubtag from="kry" to="kry_Latn_AZ" origin="sil1"/> <!-- Kryts ➡︎ Kryts (Latin, Azerbaijan) --> <likelySubtag from="krz" to="krz_Latn_ID" origin="sil1"/> <!-- Sota Kanum ➡︎ Sota Kanum (Latin, Indonesia) --> - <likelySubtag from="ksa" to="ksa_Latn_NG" origin="sil1"/> <!-- Shuwa-Zamani ➡︎ Shuwa-Zamani (Latin, Nigeria) --> <likelySubtag from="ksc" to="ksc_Latn_PH" origin="sil1"/> <!-- Southern Kalinga ➡︎ Southern Kalinga (Latin, Philippines) --> <likelySubtag from="kse" to="kse_Latn_PG" origin="sil1"/> <!-- Kuni ➡︎ Kuni (Latin, Papua New Guinea) --> <likelySubtag from="ksg" to="ksg_Latn_SB" origin="sil1"/> <!-- Kusaghe ➡︎ Kusaghe (Latin, Solomon Islands) --> @@ -6467,7 +6464,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="noi" to="noi_Deva_IN" origin="sil1"/> <!-- Noiri ➡︎ Noiri (Devanagari, India) --> <likelySubtag from="noj" to="noj_Latn_CO" origin="sil1"/> <!-- Nonuya ➡︎ Nonuya (Latin, Colombia) --> <likelySubtag from="nok" to="nok_Latn_US" origin="sil1"/> <!-- Nooksack ➡︎ Nooksack (Latin, United States) --> - <likelySubtag from="nom" to="nom_Latn_PE" origin="sil1"/> <!-- Nocamán ➡︎ Nocamán (Latin, Peru) --> <likelySubtag from="noq" to="noq_Latn_CD" origin="sil1"/> <!-- Ngongo ➡︎ Ngongo (Latin, Congo - Kinshasa) --> <likelySubtag from="nos" to="nos_Yiii_CN" origin="sil1"/> <!-- Eastern Nisu ➡︎ Eastern Nisu (Yi, China) --> <likelySubtag from="not" to="not_Latn_PE" origin="sil1"/> <!-- Nomatsiguenga ➡︎ Nomatsiguenga (Latin, Peru) --> @@ -6872,7 +6868,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="ple" to="ple_Latn_ID" origin="sil1"/> <!-- Palu'e ➡︎ Palu'e (Latin, Indonesia) --> <likelySubtag from="plg" to="plg_Latn_AR" origin="sil1"/> <!-- Pilagá ➡︎ Pilagá (Latin, Argentina) --> <likelySubtag from="plh" to="plh_Latn_ID" origin="sil1"/> <!-- Paulohi ➡︎ Paulohi (Latin, Indonesia) --> - <likelySubtag from="plj" to="plj_Latn_NG" origin="sil1"/> <!-- Polci ➡︎ Polci (Latin, Nigeria) --> <likelySubtag from="plk" to="plk_Arab_PK" origin="sil1"/> <!-- Kohistani Shina ➡︎ Kohistani Shina (Arabic, Pakistan) --> <likelySubtag from="pll" to="pll_Mymr_MM" origin="sil1"/> <!-- Shwe Palaung ➡︎ Shwe Palaung (Myanmar, Myanmar [Burma]) --> <likelySubtag from="pln" to="pln_Latn_CO" origin="sil1"/> <!-- Palenquero ➡︎ Palenquero (Latin, Colombia) --> @@ -6956,7 +6951,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="prk" to="prk_Latn_MM" origin="sil1"/> <!-- Parauk ➡︎ Parauk (Latin, Myanmar [Burma]) --> <likelySubtag from="prm" to="prm_Latn_PG" origin="sil1"/> <!-- Kibiri ➡︎ Kibiri (Latin, Papua New Guinea) --> <likelySubtag from="pro" to="pro_Latn_FR" origin="sil1"/> <!-- Old Provençal ➡︎ Old Provençal (Latin, France) --> - <likelySubtag from="prp" to="prp_Gujr_IN" origin="sil1"/> <!-- Parsi ➡︎ Parsi (Gujarati, India) --> <likelySubtag from="prq" to="prq_Latn_PE" origin="sil1"/> <!-- Ashéninka Perené ➡︎ Ashéninka Perené (Latin, Peru) --> <likelySubtag from="prr" to="prr_Latn_BR" origin="sil1"/> <!-- Puri ➡︎ Puri (Latin, Brazil) --> <likelySubtag from="prt" to="prt_Thai_TH" origin="sil1"/> <!-- Phai ➡︎ Phai (Thai, Thailand) --> @@ -7015,6 +7009,7 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="pyu_Hani" to="pyu_Hani_TW" origin="sil1"/> <!-- Puyuma (Han) ➡︎ Puyuma (Han, Taiwan) --> <likelySubtag from="pyx" to="pyx_Mymr_MM" origin="sil1"/> <!-- Pyu [Myanmar] ➡︎ Pyu [Myanmar] (Myanmar, Myanmar [Burma]) --> <likelySubtag from="pyy" to="pyy_Latn_MM" origin="sil1"/> <!-- Pyen ➡︎ Pyen (Latin, Myanmar [Burma]) --> + <likelySubtag from="pze" to="pze_Latn_NG" origin="sil1"/> <!-- Pesse ➡︎ Pesse (Latin, Nigeria) --> <likelySubtag from="pzh" to="pzh_Latn_TW" origin="sil1"/> <!-- Pazeh ➡︎ Pazeh (Latin, Taiwan) --> <likelySubtag from="pzn" to="pzn_Latn_MM" origin="sil1"/> <!-- Jejara Naga ➡︎ Jejara Naga (Latin, Myanmar [Burma]) --> <likelySubtag from="qua" to="qua_Latn_US" origin="sil1"/> <!-- Quapaw ➡︎ Quapaw (Latin, United States) --> @@ -7164,6 +7159,7 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="rri" to="rri_Latn_SB" origin="sil1"/> <!-- Ririo ➡︎ Ririo (Latin, Solomon Islands) --> <likelySubtag from="rrt" to="rrt_Latn_AU" origin="sil1"/> <!-- Arritinngithigh ➡︎ Arritinngithigh (Latin, Australia) --> <likelySubtag from="rsk" to="rsk_Cyrl_RS" origin="sil1"/> <!-- Ruthenian ➡︎ Ruthenian (Cyrillic, Serbia) --> + <likelySubtag from="rsw" to="rsw_Latn_NG" origin="sil1"/> <!-- Rishiwa ➡︎ Rishiwa (Latin, Nigeria) --> <likelySubtag from="rtc" to="rtc_Latn_MM" origin="sil1"/> <!-- Rungtu Chin ➡︎ Rungtu Chin (Latin, Myanmar [Burma]) --> <likelySubtag from="rth" to="rth_Latn_ID" origin="sil1"/> <!-- Ratahan ➡︎ Ratahan (Latin, Indonesia) --> <likelySubtag from="rtw" to="rtw_Deva_IN" origin="sil1"/> <!-- Rathawi ➡︎ Rathawi (Devanagari, India) --> @@ -7372,7 +7368,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="slm" to="slm_Latn_PH" origin="sil1"/> <!-- Pangutaran Sama ➡︎ Pangutaran Sama (Latin, Philippines) --> <likelySubtag from="sln" to="sln_Latn_US" origin="sil1"/> <!-- Salinan ➡︎ Salinan (Latin, United States) --> <likelySubtag from="slp" to="slp_Latn_ID" origin="sil1"/> <!-- Lamaholot ➡︎ Lamaholot (Latin, Indonesia) --> - <likelySubtag from="slq" to="slq_Arab_IR" origin="sil1"/> <!-- Salchuq ➡︎ Salchuq (Arabic, Iran) --> <likelySubtag from="slr" to="slr_Latn_CN" origin="sil1"/> <!-- Salar ➡︎ Salar (Latin, China) --> <likelySubtag from="slu" to="slu_Latn_ID" origin="sil1"/> <!-- Selaru ➡︎ Selaru (Latin, Indonesia) --> <likelySubtag from="slw" to="slw_Latn_PG" origin="sil1"/> <!-- Sialum ➡︎ Sialum (Latin, Papua New Guinea) --> @@ -7562,7 +7557,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="sza" to="sza_Latn_MY" origin="sil1"/> <!-- Semelai ➡︎ Semelai (Latin, Malaysia) --> <likelySubtag from="szb" to="szb_Latn_ID" origin="sil1"/> <!-- Ngalum ➡︎ Ngalum (Latin, Indonesia) --> <likelySubtag from="szc" to="szc_Latn_MY" origin="sil1"/> <!-- Semaq Beri ➡︎ Semaq Beri (Latin, Malaysia) --> - <likelySubtag from="szd" to="szd_Latn_MY" origin="sil1"/> <!-- Seru ➡︎ Seru (Latin, Malaysia) --> <likelySubtag from="szg" to="szg_Latn_CD" origin="sil1"/> <!-- Sengele ➡︎ Sengele (Latin, Congo - Kinshasa) --> <likelySubtag from="szn" to="szn_Latn_ID" origin="sil1"/> <!-- Sula ➡︎ Sula (Latin, Indonesia) --> <likelySubtag from="szp" to="szp_Latn_ID" origin="sil1"/> <!-- Suabo ➡︎ Suabo (Latin, Indonesia) --> @@ -7775,7 +7769,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="tmg" to="tmg_Latn_ID" origin="sil1"/> <!-- Ternateño ➡︎ Ternateño (Latin, Indonesia) --> <likelySubtag from="tmi" to="tmi_Latn_VU" origin="sil1"/> <!-- Tutuba ➡︎ Tutuba (Latin, Vanuatu) --> <likelySubtag from="tmj" to="tmj_Latn_ID" origin="sil1"/> <!-- Samarokena ➡︎ Samarokena (Latin, Indonesia) --> - <likelySubtag from="tmk" to="tmk_Deva_NP" origin="sil1"/> <!-- Northwestern Tamang ➡︎ Northwestern Tamang (Devanagari, Nepal) --> <likelySubtag from="tml" to="tml_Latn_ID" origin="sil1"/> <!-- Tamnim Citak ➡︎ Tamnim Citak (Latin, Indonesia) --> <likelySubtag from="tmm" to="tmm_Latn_VN" origin="sil1"/> <!-- Tai Thanh ➡︎ Tai Thanh (Latin, Vietnam) --> <likelySubtag from="tmn" to="tmn_Latn_ID" origin="sil1"/> <!-- Taman [Indonesia] ➡︎ Taman [Indonesia] (Latin, Indonesia) --> @@ -7919,6 +7912,7 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="tuz" to="tuz_Latn_BF" origin="sil1"/> <!-- Turka ➡︎ Turka (Latin, Burkina Faso) --> <likelySubtag from="tva" to="tva_Latn_SB" origin="sil1"/> <!-- Vaghua ➡︎ Vaghua (Latin, Solomon Islands) --> <likelySubtag from="tve" to="tve_Latn_ID" origin="sil1"/> <!-- Te'un ➡︎ Te'un (Latin, Indonesia) --> + <likelySubtag from="tvi" to="tvi_Latn_NG" origin="sil1"/> <!-- Tulai ➡︎ Tulai (Latin, Nigeria) --> <likelySubtag from="tvk" to="tvk_Latn_VU" origin="sil1"/> <!-- Southeast Ambrym ➡︎ Southeast Ambrym (Latin, Vanuatu) --> <likelySubtag from="tvm" to="tvm_Latn_ID" origin="sil1"/> <!-- Tela-Masbuar ➡︎ Tela-Masbuar (Latin, Indonesia) --> <likelySubtag from="tvn" to="tvn_Mymr_MM" origin="sil1"/> <!-- Tavoyan ➡︎ Tavoyan (Myanmar, Myanmar [Burma]) --> @@ -8483,7 +8477,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="xsn" to="xsn_Latn_NG" origin="sil1"/> <!-- Sanga [Nigeria] ➡︎ Sanga [Nigeria] (Latin, Nigeria) --> <likelySubtag from="xsp" to="xsp_Latn_PG" origin="sil1"/> <!-- Silopi ➡︎ Silopi (Latin, Papua New Guinea) --> <likelySubtag from="xsq" to="xsq_Latn_MZ" origin="sil1"/> <!-- Makhuwa-Saka ➡︎ Makhuwa-Saka (Latin, Mozambique) --> - <likelySubtag from="xss" to="xss_Cyrl_RU" origin="sil1"/> <!-- Assan ➡︎ Assan (Cyrillic, Russia) --> <likelySubtag from="xsu" to="xsu_Latn_VE" origin="sil1"/> <!-- Sanumá ➡︎ Sanumá (Latin, Venezuela) --> <likelySubtag from="xsy" to="xsy_Latn_TW" origin="sil1"/> <!-- Saisiyat ➡︎ Saisiyat (Latin, Taiwan) --> <likelySubtag from="xta" to="xta_Latn_MX" origin="sil1"/> <!-- Alcozauca Mixtec ➡︎ Alcozauca Mixtec (Latin, Mexico) --> @@ -8747,7 +8740,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="ziw" to="ziw_Latn_TZ" origin="sil1"/> <!-- Zigula ➡︎ Zigula (Latin, Tanzania) --> <likelySubtag from="ziz" to="ziz_Latn_NG" origin="sil1"/> <!-- Zizilivakan ➡︎ Zizilivakan (Latin, Nigeria) --> <likelySubtag from="zka" to="zka_Latn_ID" origin="sil1"/> <!-- Kaimbulawa ➡︎ Kaimbulawa (Latin, Indonesia) --> - <likelySubtag from="zkb" to="zkb_Cyrl_RU" origin="sil1"/> <!-- Koibal ➡︎ Koibal (Cyrillic, Russia) --> <likelySubtag from="zkd" to="zkd_Latn_MM" origin="sil1"/> <!-- Kadu ➡︎ Kadu (Latin, Myanmar [Burma]) --> <likelySubtag from="zko" to="zko_Cyrl_RU" origin="sil1"/> <!-- Kott ➡︎ Kott (Cyrillic, Russia) --> <likelySubtag from="zkp" to="zkp_Latn_BR" origin="sil1"/> <!-- São Paulo Kaingáng ➡︎ São Paulo Kaingáng (Latin, Brazil) --> @@ -8841,7 +8833,6 @@ not be patched by hand, as any changes made in that fashion may be lost. <likelySubtag from="ztu" to="ztu_Latn_MX" origin="sil1"/> <!-- Güilá Zapotec ➡︎ Güilá Zapotec (Latin, Mexico) --> <likelySubtag from="ztx" to="ztx_Latn_MX" origin="sil1"/> <!-- Zaachila Zapotec ➡︎ Zaachila Zapotec (Latin, Mexico) --> <likelySubtag from="zty" to="zty_Latn_MX" origin="sil1"/> <!-- Yatee Zapotec ➡︎ Yatee Zapotec (Latin, Mexico) --> - <likelySubtag from="zua" to="zua_Latn_NG" origin="sil1"/> <!-- Zeem ➡︎ Zeem (Latin, Nigeria) --> <likelySubtag from="zuh" to="zuh_Latn_PG" origin="sil1"/> <!-- Tokano ➡︎ Tokano (Latin, Papua New Guinea) --> <likelySubtag from="zum" to="zum_Arab_OM" origin="sil1"/> <!-- Kumzari ➡︎ Kumzari (Arabic, Oman) --> <likelySubtag from="zun" to="zun_Latn_US" origin="sil1"/> <!-- Zuni ➡︎ Zuni (Latin, United States) --> diff --git a/make/data/cldr/common/supplemental/metaZones.xml b/make/data/cldr/common/supplemental/metaZones.xml index 0beb757cacb4d..e8098c9c0c84c 100644 --- a/make/data/cldr/common/supplemental/metaZones.xml +++ b/make/data/cldr/common/supplemental/metaZones.xml @@ -402,7 +402,8 @@ For terms of use, see http://www.unicode.org/copyright.html <usesMetazone mzone="Atlantic"/> </timezone> <timezone type="America/Godthab"> - <usesMetazone mzone="Greenland_Western"/> + <usesMetazone to="2024-03-26 01:00" mzone="Greenland_Western"/> + <usesMetazone from="2024-03-26 01:00" mzone="Greenland"/> </timezone> <timezone type="America/Goose_Bay"> <usesMetazone to="1988-04-03 04:01" mzone="Atlantic"/> @@ -596,9 +597,6 @@ For terms of use, see http://www.unicode.org/copyright.html <timezone type="America/New_York"> <usesMetazone mzone="America_Eastern"/> </timezone> - <timezone type="America/Nipigon"> - <usesMetazone mzone="America_Eastern"/> - </timezone> <timezone type="America/Nome"> <usesMetazone to="1983-10-30 12:00" mzone="Bering"/> <usesMetazone from="1983-11-30 09:00" mzone="Alaska"/> @@ -626,11 +624,6 @@ For terms of use, see http://www.unicode.org/copyright.html <timezone type="America/Panama"> <usesMetazone mzone="America_Eastern"/> </timezone> - <timezone type="America/Pangnirtung"> - <usesMetazone to="1999-10-31 06:00" mzone="America_Eastern"/> - <usesMetazone to="2000-10-29 07:00" from="1999-10-31 06:00" mzone="America_Central"/> - <usesMetazone from="2000-10-29 07:00" mzone="America_Eastern"/> - </timezone> <timezone type="America/Paramaribo"> <usesMetazone to="1975-11-20 03:30" mzone="Dutch_Guiana"/> <usesMetazone from="1975-11-20 03:30" mzone="Suriname"/> @@ -653,9 +646,6 @@ For terms of use, see http://www.unicode.org/copyright.html <timezone type="America/Punta_Arenas"> <usesMetazone to="2016-12-03 23:00" mzone="Chile"/> </timezone> - <timezone type="America/Rainy_River"> - <usesMetazone mzone="America_Central"/> - </timezone> <timezone type="America/Rankin_Inlet"> <usesMetazone to="2000-10-29 07:00" mzone="America_Central"/> <usesMetazone to="2001-04-01 08:00" from="2000-10-29 07:00" mzone="America_Eastern"/> @@ -679,9 +669,6 @@ For terms of use, see http://www.unicode.org/copyright.html <usesMetazone to="2013-11-10 04:00" from="2008-06-24 05:00" mzone="Amazon"/> <usesMetazone from="2013-11-10 04:00" mzone="Acre"/> </timezone> - <timezone type="America/Santa_Isabel"> - <usesMetazone mzone="Mexico_Northwest"/> - </timezone> <timezone type="America/Santarem"> <usesMetazone to="2008-06-24 04:00" mzone="Amazon"/> <usesMetazone from="2008-06-24 04:00" mzone="Brasilia"/> @@ -700,7 +687,8 @@ For terms of use, see http://www.unicode.org/copyright.html </timezone> <timezone type="America/Scoresbysund"> <usesMetazone to="1981-03-29 02:00" mzone="Greenland_Central"/> - <usesMetazone from="1981-03-29 02:00" mzone="Greenland_Eastern"/> + <usesMetazone to="2024-03-31 01:00" from="1981-03-29 02:00" mzone="Greenland_Eastern"/> + <usesMetazone from="2024-03-31 01:00" mzone="Greenland"/> </timezone> <timezone type="America/Sitka"> <usesMetazone to="1983-10-30 09:00" mzone="America_Pacific"/> @@ -734,9 +722,6 @@ For terms of use, see http://www.unicode.org/copyright.html <timezone type="America/Thule"> <usesMetazone mzone="Atlantic"/> </timezone> - <timezone type="America/Thunder_Bay"> - <usesMetazone mzone="America_Eastern"/> - </timezone> <timezone type="America/Tijuana"> <usesMetazone mzone="America_Pacific"/> </timezone> @@ -759,9 +744,6 @@ For terms of use, see http://www.unicode.org/copyright.html <timezone type="America/Yakutat"> <usesMetazone from="1983-11-30 09:00" mzone="Alaska"/> </timezone> - <timezone type="America/Yellowknife"> - <usesMetazone mzone="America_Mountain"/> - </timezone> <timezone type="Antarctica/Casey"> <usesMetazone to="2009-10-17 18:00" mzone="Australia_Western"/> <usesMetazone to="2010-03-04 15:00" from="2009-10-17 18:00" mzone="Casey"/> @@ -774,7 +756,12 @@ For terms of use, see http://www.unicode.org/copyright.html <usesMetazone to="2019-10-03 19:00" from="2019-03-16 16:00" mzone="Australia_Western"/> <usesMetazone to="2020-03-07 16:00" from="2019-10-03 19:00" mzone="Casey"/> <usesMetazone to="2020-10-03 16:01" from="2020-03-07 16:00" mzone="Australia_Western"/> - <usesMetazone from="2020-10-03 16:01" mzone="Casey"/> + <usesMetazone to="2021-03-13 13:00" from="2020-10-03 16:01" mzone="Casey"/> + <usesMetazone to="2021-10-02 16:01" from="2021-03-13 13:00" mzone="Australia_Western"/> + <usesMetazone to="2022-03-12 13:00" from="2021-10-02 16:01" mzone="Casey"/> + <usesMetazone to="2022-10-01 16:01" from="2022-03-12 13:00" mzone="Australia_Western"/> + <usesMetazone to="2023-03-08 16:00" from="2022-10-01 16:01" mzone="Casey"/> + <usesMetazone from="2023-03-08 16:00" mzone="Australia_Western"/> </timezone> <timezone type="Antarctica/Davis"> <usesMetazone mzone="Davis"/> @@ -815,7 +802,8 @@ For terms of use, see http://www.unicode.org/copyright.html </timezone> <timezone type="Asia/Almaty"> <usesMetazone to="2004-10-30 20:00" mzone="Almaty"/> - <usesMetazone from="2004-10-30 20:00" mzone="Kazakhstan_Eastern"/> + <usesMetazone to="2024-02-29 18:00" from="2004-10-30 20:00" mzone="Kazakhstan_Eastern"/> + <usesMetazone from="2024-02-29 18:00" mzone="Kazakhstan_Western"/> </timezone> <timezone type="Asia/Amman"> <usesMetazone to="2022-10-27 22:00" mzone="Europe_Eastern"/> @@ -1024,7 +1012,8 @@ For terms of use, see http://www.unicode.org/copyright.html <usesMetazone from="1972-05-31 20:00" mzone="Arabian"/> </timezone> <timezone type="Asia/Qostanay"> - <usesMetazone from="2004-10-30 21:00" mzone="Kazakhstan_Eastern"/> + <usesMetazone to="2024-02-29 18:00" from="2004-10-30 21:00" mzone="Kazakhstan_Eastern"/> + <usesMetazone from="2024-02-29 18:00" mzone="Kazakhstan_Western"/> </timezone> <timezone type="Asia/Qyzylorda"> <usesMetazone to="1991-12-15 19:00" mzone="Kizilorda"/> @@ -1156,9 +1145,6 @@ For terms of use, see http://www.unicode.org/copyright.html <timezone type="Australia/Broken_Hill"> <usesMetazone mzone="Australia_Central"/> </timezone> - <timezone type="Australia/Currie"> - <usesMetazone mzone="Australia_Eastern"/> - </timezone> <timezone type="Australia/Darwin"> <usesMetazone mzone="Australia_Central"/> </timezone> @@ -1370,10 +1356,6 @@ For terms of use, see http://www.unicode.org/copyright.html <timezone type="Europe/Ulyanovsk"> <usesMetazone to="2016-03-26 23:00" from="1992-01-19 00:00" mzone="Moscow"/> </timezone> - <timezone type="Europe/Uzhgorod"> - <usesMetazone to="1990-06-30 22:00" mzone="Moscow"/> - <usesMetazone from="1990-06-30 22:00" mzone="Europe_Eastern"/> - </timezone> <timezone type="Europe/Vaduz"> <usesMetazone mzone="Europe_Central"/> </timezone> @@ -1398,10 +1380,6 @@ For terms of use, see http://www.unicode.org/copyright.html <timezone type="Europe/Zagreb"> <usesMetazone mzone="Europe_Central"/> </timezone> - <timezone type="Europe/Zaporozhye"> - <usesMetazone to="1990-06-30 22:00" mzone="Moscow"/> - <usesMetazone from="1990-06-30 22:00" mzone="Europe_Eastern"/> - </timezone> <timezone type="Europe/Zurich"> <usesMetazone mzone="Europe_Central"/> </timezone> @@ -1489,10 +1467,6 @@ For terms of use, see http://www.unicode.org/copyright.html <usesMetazone to="1983-10-30 11:00" mzone="Alaska_Hawaii"/> <usesMetazone from="1983-10-30 11:00" mzone="Hawaii_Aleutian"/> </timezone> - <timezone type="Pacific/Johnston"> - <usesMetazone to="1983-10-30 11:00" mzone="Alaska_Hawaii"/> - <usesMetazone from="1983-10-30 11:00" mzone="Hawaii_Aleutian"/> - </timezone> <timezone type="Pacific/Kiritimati"> <usesMetazone mzone="Line_Islands"/> </timezone> @@ -1629,7 +1603,6 @@ For terms of use, see http://www.unicode.org/copyright.html <mapZone other="America_Eastern" territory="PA" type="America/Panama"/> <mapZone other="America_Mountain" territory="001" type="America/Denver"/> <mapZone other="America_Mountain" territory="CA" type="America/Edmonton"/> - <mapZone other="America_Mountain" territory="MX" type="America/Hermosillo"/> <mapZone other="America_Pacific" territory="001" type="America/Los_Angeles"/> <mapZone other="America_Pacific" territory="CA" type="America/Vancouver"/> <mapZone other="America_Pacific" territory="MX" type="America/Tijuana"/> @@ -1776,6 +1749,7 @@ For terms of use, see http://www.unicode.org/copyright.html <mapZone other="GMT" territory="SN" type="Africa/Dakar"/> <mapZone other="GMT" territory="TG" type="Africa/Lome"/> <mapZone other="Goose_Bay" territory="001" type="America/Goose_Bay"/> + <mapZone other="Greenland" territory="001" type="America/Godthab"/> <mapZone other="Greenland_Central" territory="001" type="America/Scoresbysund"/> <mapZone other="Greenland_Eastern" territory="001" type="America/Scoresbysund"/> <mapZone other="Greenland_Western" territory="001" type="America/Godthab"/> @@ -1816,7 +1790,6 @@ For terms of use, see http://www.unicode.org/copyright.html <mapZone other="Line_Islands" territory="001" type="Pacific/Kiritimati"/> <mapZone other="Lord_Howe" territory="001" type="Australia/Lord_Howe"/> <mapZone other="Macau" territory="001" type="Asia/Macau"/> - <mapZone other="Macquarie" territory="001" type="Antarctica/Macquarie"/> <mapZone other="Magadan" territory="001" type="Asia/Magadan"/> <mapZone other="Malaya" territory="001" type="Asia/Kuala_Lumpur"/> <mapZone other="Malaysia" territory="001" type="Asia/Kuching"/> @@ -1825,7 +1798,6 @@ For terms of use, see http://www.unicode.org/copyright.html <mapZone other="Marshall_Islands" territory="001" type="Pacific/Majuro"/> <mapZone other="Mauritius" territory="001" type="Indian/Mauritius"/> <mapZone other="Mawson" territory="001" type="Antarctica/Mawson"/> - <mapZone other="Mexico_Northwest" territory="001" type="America/Santa_Isabel"/> <mapZone other="Mexico_Pacific" territory="001" type="America/Mazatlan"/> <mapZone other="Mongolia" territory="001" type="Asia/Ulaanbaatar"/> <mapZone other="Moscow" territory="001" type="Europe/Moscow"/> @@ -1962,6 +1934,7 @@ For terms of use, see http://www.unicode.org/copyright.html <metazoneId shortId="giis" longId="Gilbert_Islands" /> <metazoneId shortId="mgmt" longId="GMT" /> <metazoneId shortId="grea" longId="Greenland_Eastern" /> + <metazoneId shortId="gree" longId="Greenland" /> <metazoneId shortId="grwe" longId="Greenland_Western" /> <metazoneId shortId="guam" longId="Guam" /> <metazoneId shortId="gulf" longId="Gulf" /> @@ -1990,7 +1963,6 @@ For terms of use, see http://www.unicode.org/copyright.html <metazoneId shortId="liis" longId="Line_Islands" /> <metazoneId shortId="loho" longId="Lord_Howe" /> <metazoneId shortId="maca" longId="Macau" /> - <metazoneId shortId="macq" longId="Macquarie" /> <metazoneId shortId="maga" longId="Magadan" /> <metazoneId shortId="mala" longId="Malaysia" /> <metazoneId shortId="mald" longId="Maldives" /> @@ -1998,7 +1970,6 @@ For terms of use, see http://www.unicode.org/copyright.html <metazoneId shortId="mais" longId="Marshall_Islands" /> <metazoneId shortId="maur" longId="Mauritius" /> <metazoneId shortId="maws" longId="Mawson" /> - <metazoneId shortId="meno" longId="Mexico_Northwest" /> <metazoneId shortId="mepa" longId="Mexico_Pacific" /> <metazoneId shortId="mong" longId="Mongolia" /> <metazoneId shortId="mosc" longId="Moscow" /> diff --git a/make/data/cldr/common/supplemental/ordinals.xml b/make/data/cldr/common/supplemental/ordinals.xml index fd210e6fa682d..58f7b016340f7 100644 --- a/make/data/cldr/common/supplemental/ordinals.xml +++ b/make/data/cldr/common/supplemental/ordinals.xml @@ -3,7 +3,7 @@ <!-- Copyright © 1991-2022 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <supplementalData> diff --git a/make/data/cldr/common/supplemental/pluralRanges.xml b/make/data/cldr/common/supplemental/pluralRanges.xml index 02161f9cf3031..25621072bcd73 100644 --- a/make/data/cldr/common/supplemental/pluralRanges.xml +++ b/make/data/cldr/common/supplemental/pluralRanges.xml @@ -3,7 +3,7 @@ <!-- Copyright © 1991-2022 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html - SPDX-License-Identifier: Unicode-DFS-2016 + SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) GENERATED DATA — do not manually update! Generated by tool: GeneratePluralRanges diff --git a/make/data/cldr/common/supplemental/plurals.xml b/make/data/cldr/common/supplemental/plurals.xml index ab8e0e8ea10ec..27f30b7b4ebe1 100644 --- a/make/data/cldr/common/supplemental/plurals.xml +++ b/make/data/cldr/common/supplemental/plurals.xml @@ -3,7 +3,7 @@ <!-- Copyright © 1991-2022 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html -SPDX-License-Identifier: Unicode-DFS-2016 +SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) --> <supplementalData> diff --git a/make/data/cldr/common/supplemental/subdivisions.xml b/make/data/cldr/common/supplemental/subdivisions.xml index 1a2fe3da176cb..fbcfb8e2e25ce 100644 --- a/make/data/cldr/common/supplemental/subdivisions.xml +++ b/make/data/cldr/common/supplemental/subdivisions.xml @@ -3,7 +3,7 @@ <!-- Copyright © 1991-2022 Unicode, Inc. For terms of use, see http://www.unicode.org/copyright.html - SPDX-License-Identifier: Unicode-DFS-2016 + SPDX-License-Identifier: Unicode-3.0 CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/) GENERATED DATA — do not manually update! Generated by tool: SubDivisionExtractor diff --git a/make/data/cldr/common/supplemental/supplementalData.xml b/make/data/cldr/common/supplemental/supplementalData.xml index 8663276073451..c40748f3017c0 100644 --- a/make/data/cldr/common/supplemental/supplementalData.xml +++ b/make/data/cldr/common/supplemental/supplementalData.xml @@ -363,7 +363,8 @@ The printed version of ISO-4217:2001 <currency iso4217="PTE" from="1911-05-22" to="1975-07-05"/> </region> <region iso3166="CW"> - <currency iso4217="ANG" from="2010-10-10"/> + <currency iso4217="XCG" from="2025-03-31" tz="America/Curacao"/> + <currency iso4217="ANG" from="2010-10-10" to="2025-06-30" to-tz="America/Curacao"/> </region> <region iso3166="CX"> <currency iso4217="AUD" from="1966-02-14"/> @@ -545,8 +546,8 @@ The printed version of ISO-4217:2001 <currency iso4217="HNL" from="1926-04-03"/> </region> <region iso3166="HR"> - <currency iso4217="EUR" from="2023-01-01" /> - <currency iso4217="HRK" from="1994-05-30" to="2023-01-14"/> + <currency iso4217="EUR" from="2023-01-01" tz="Europe/Zagreb"/> + <currency iso4217="HRK" from="1994-05-30" to="2023-01-14" to-tz="Europe/Zagreb"/> <currency iso4217="HRD" from="1991-12-23" to="1995-01-01"/> <currency iso4217="YUN" from="1990-01-01" to="1991-12-23"/> <currency iso4217="YUD" from="1966-01-01" to="1990-01-01"/> @@ -957,8 +958,8 @@ The printed version of ISO-4217:2001 <currency iso4217="CSK" from="1953-06-01" to="1992-12-31"/> </region> <region iso3166="SL"> - <currency iso4217="SLE" from="2022-07-01"/> - <currency iso4217="SLL" from="1964-08-04" to="2023-12-31"/> + <currency iso4217="SLE" from="2022-07-01" tz="Africa/Freetown"/> + <currency iso4217="SLL" from="1964-08-04" to="2023-12-31" to-tz="Africa/Freetown"/> <currency iso4217="GBP" from="1808-11-30" to="1966-02-04"/> </region> <region iso3166="SM"> @@ -995,7 +996,8 @@ The printed version of ISO-4217:2001 <currency iso4217="SVC" from="1919-11-11" to="2001-01-01"/> </region> <region iso3166="SX"> - <currency iso4217="ANG" from="2010-10-10"/> + <currency iso4217="XCG" from="2025-03-31" tz="America/Lower_Princes"/> + <currency iso4217="ANG" from="2010-10-10" to="2025-06-30" to-tz="America/Lower_Princes"/> </region> <region iso3166="SY"> <currency iso4217="SYP" from="1948-01-01"/> @@ -2693,7 +2695,6 @@ XXX Code for transations where no currency is involved <languagePopulation type="crl" populationPercent="0.001" references="R1329"/> <!--Northern East Cree--> <languagePopulation type="kwk" populationPercent="0.001" references="R1329"/> <!--Kwakʼwala--> <languagePopulation type="gwi" populationPercent="0.0008" officialStatus="official_regional" references="R1329"/> <!--Gwichʼin--> - <languagePopulation type="tok" populationPercent="0.00000001"/> <!--Tok Pona--> </territory> <territory type="CC" gdp="29210000" literacyPercent="99" population="596"> <!--Cocos (Keeling) Islands--> <languagePopulation type="ms_Arab" populationPercent="83"/> <!--Malay (Arabic)--> @@ -2874,7 +2875,6 @@ XXX Code for transations where no currency is involved <languagePopulation type="frs" populationPercent="0.0025" references="R1300"/> <!--Eastern Frisian--> <languagePopulation type="stq" populationPercent="0.0012"/> <!--Saterland Frisian--> <languagePopulation type="pfl" populationPercent="0" references="R1150"/> <!--Palatine German--> - <languagePopulation type="vo" populationPercent="0"/> <!--Volapük--> </territory> <territory type="DG" gdp="22240000" literacyPercent="99" population="500"> <!--Diego Garcia--> <languagePopulation type="en" populationPercent="99" officialStatus="de_facto_official" references="R1065"/> <!--English--> @@ -3192,7 +3192,7 @@ XXX Code for transations where no currency is involved <languagePopulation type="ban" literacyPercent="10" populationPercent="1.8" references="R1144"/> <!--Balinese--> <languagePopulation type="bug" literacyPercent="10" populationPercent="1.6" references="R1145"/> <!--Buginese--> <languagePopulation type="bjn" literacyPercent="10" populationPercent="1.5"/> <!--Banjar--> - <languagePopulation type="ace" populationPercent="1.4"/> <!--Achinese--> + <languagePopulation type="ace" populationPercent="1.4"/> <!--Acehnese--> <languagePopulation type="ms_Arab" populationPercent="1.2"/> <!--Malay (Arabic)--> <languagePopulation type="sas" populationPercent="0.97"/> <!--Sasak--> <languagePopulation type="bbc" populationPercent="0.92"/> <!--Batak Toba--> @@ -5423,7 +5423,7 @@ XXX Code for transations where no currency is involved </codeMappings> <parentLocales> - <parentLocale parent="root" locales="az_Arab az_Cyrl bal_Latn blt_Latn bm_Nkoo bs_Cyrl byn_Latn cu_Glag dje_Arab dyo_Arab en_Dsrt en_Shaw ff_Adlm ff_Arab ha_Arab iu_Latn kk_Arab ks_Deva ku_Arab kxv_Deva kxv_Orya kxv_Telu ky_Arab ky_Latn ml_Arab mn_Mong mni_Mtei ms_Arab pa_Arab sat_Deva sd_Deva sd_Khoj sd_Sind shi_Latn so_Arab sr_Latn sw_Arab tg_Arab ug_Cyrl uz_Arab uz_Cyrl vai_Latn wo_Arab yo_Arab yue_Hans zh_Hant"/> + <parentLocale parent="root" localeRules="nonlikelyScript" locales="az_Arab az_Cyrl bal_Latn blt_Latn bm_Nkoo bs_Cyrl byn_Latn cu_Glag dje_Arab dyo_Arab en_Dsrt en_Shaw ff_Adlm ff_Arab ha_Arab iu_Latn kk_Arab ks_Deva ku_Arab kxv_Deva kxv_Orya kxv_Telu ky_Arab ky_Latn ml_Arab mn_Mong mni_Mtei ms_Arab pa_Arab sat_Deva sd_Deva sd_Khoj sd_Sind shi_Latn so_Arab sr_Latn sw_Arab tg_Arab ug_Cyrl uz_Arab uz_Cyrl vai_Latn wo_Arab yo_Arab yue_Hans zh_Hant"/> <parentLocale parent="en_001" locales="en_150 en_AG en_AI en_AU en_BB en_BM en_BS en_BW en_BZ en_CC en_CK en_CM en_CX en_CY en_DG en_DM en_ER en_FJ en_FK en_FM en_GB en_GD en_GG en_GH en_GI en_GM en_GY en_HK en_ID en_IE en_IL en_IM en_IN en_IO en_JE en_JM en_KE en_KI en_KN en_KY en_LC en_LR en_LS en_MG en_MO en_MS en_MT en_MU en_MV en_MW en_MY en_NA en_NF en_NG en_NR en_NU en_NZ en_PG en_PK en_PN en_PW en_RW en_SB en_SC en_SD en_SG en_SH en_SL en_SS en_SX en_SZ en_TC en_TK en_TO en_TT en_TV en_TZ en_UG en_VC en_VG en_VU en_WS en_ZA en_ZM en_ZW"/> <parentLocale parent="en_150" locales="en_AT en_BE en_CH en_DE en_DK en_FI en_NL en_SE en_SI"/> <parentLocale parent="en_IN" locales="hi_Latn"/> @@ -5434,15 +5434,11 @@ XXX Code for transations where no currency is involved <parentLocale parent="zh_Hant_HK" locales="zh_Hant_MO"/> </parentLocales> - <parentLocales component="segmentations"> - <parentLocale parent="zh" locales="zh_Hant"/> + <parentLocales component="segmentations grammaticalFeatures plurals"> </parentLocales> <parentLocales component="collations"> - <parentLocale parent="bs" locales="bs_Cyrl"/> - <parentLocale parent="sr" locales="sr_Latn"/> <parentLocale parent="sr_ME" locales="sr_Cyrl_ME"/> - <parentLocale parent="zh" locales="zh_Hant"/> <parentLocale parent="zh_Hant" locales="yue yue_Hant"/> <parentLocale parent="zh_Hans" locales="yue_CN yue_Hans yue_Hans_CN"/> </parentLocales> diff --git a/make/data/cldr/common/supplemental/supplementalMetadata.xml b/make/data/cldr/common/supplemental/supplementalMetadata.xml index d80cdfa3ab9da..971acfaa27bca 100644 --- a/make/data/cldr/common/supplemental/supplementalMetadata.xml +++ b/make/data/cldr/common/supplemental/supplementalMetadata.xml @@ -537,6 +537,18 @@ For terms of use, see http://www.unicode.org/copyright.html <languageAlias type="und_xiang" replacement="und" reason="deprecated"/> <languageAlias type="und_hepburn_heploc" replacement="und_alalc97" reason="deprecated"/> + <!-- more deprecated 2024-03-19 --> + <languageAlias type="ajp" replacement="apc" reason="deprecated"/> <!-- South Levantine Arabic ⇒ Levantine Arabic --> + <languageAlias type="kgm" replacement="plu" reason="deprecated"/> <!-- Karipúna ⇒ Palikúr --> + <languageAlias type="nom" replacement="cbr" reason="deprecated"/> <!-- Nocamán ⇒ Cashibo-Cacataibo --> + <languageAlias type="pmk" replacement="crr" reason="deprecated"/> <!-- Pamlico ⇒ Carolina Algonquian --> + <languageAlias type="prp" replacement="gu" reason="deprecated"/> <!-- Parsi ⇒ Gujarati --> + <languageAlias type="szd" replacement="umi" reason="deprecated"/> <!-- Seru ⇒ Ukit --> + <languageAlias type="tmk" replacement="tdg" reason="deprecated"/> <!-- Northwestern Tamang ⇒ Western Tamang --> + <languageAlias type="tpw" replacement="tpn" reason="deprecated"/> <!-- Tupí ⇒ Tupinambá --> + <languageAlias type="xss" replacement="zko" reason="deprecated"/> <!-- Assan ⇒ Kott --> + <languageAlias type="zkb" replacement="kjh" reason="deprecated"/> <!-- Koibal ⇒ Khakas --> + <!-- scripts --> <scriptAlias type="Qaai" replacement="Zinh" reason="deprecated"/> <!-- deprecated ISO territories in 3066 + CLDR ones (older deprecated ISO codes --> @@ -1797,6 +1809,16 @@ For terms of use, see http://www.unicode.org/copyright.html <zoneAlias type="Asia/Chongqing" replacement="Asia/Shanghai" reason="deprecated"/> <zoneAlias type="Asia/Harbin" replacement="Asia/Shanghai" reason="deprecated"/> <zoneAlias type="Asia/Kashgar" replacement="Asia/Urumqi" reason="deprecated"/> + <zoneAlias type="America/Nipigon" replacement="America/Toronto" reason="deprecated"/> + <zoneAlias type="America/Pangnirtung" replacement="America/Iqaluit" reason="deprecated"/> + <zoneAlias type="America/Rainy_River" replacement="America/Winnipeg" reason="deprecated"/> + <zoneAlias type="America/Santa_Isabel" replacement="America/Tijuana" reason="deprecated"/> + <zoneAlias type="America/Thunder_Bay" replacement="America/Toronto" reason="deprecated"/> + <zoneAlias type="America/Yellowknife" replacement="America/Edmonton" reason="deprecated"/> + <zoneAlias type="Australia/Currie" replacement="Australia/Hobart" reason="deprecated"/> + <zoneAlias type="Europe/Uzhgorod" replacement="Europe/Kiev" reason="deprecated"/> + <zoneAlias type="Europe/Zaporozhye" replacement="Europe/Kiev" reason="deprecated"/> + <zoneAlias type="Pacific/Johnston" replacement="Pacific/Honolulu" reason="deprecated"/> </alias> <defaultContent locales=" aa_ET ab_GE af_ZA agq_CM ak_GH am_ET an_ES ann_NG apc_SY ar_001 arn_CL as_IN diff --git a/make/data/cldr/common/supplemental/units.xml b/make/data/cldr/common/supplemental/units.xml index 27a66a86164a2..33d6d68d46660 100644 --- a/make/data/cldr/common/supplemental/units.xml +++ b/make/data/cldr/common/supplemental/units.xml @@ -15,6 +15,40 @@ For terms of use, see http://www.unicode.org/copyright.html <unitIdComponent type="and" values="and"/> <unitIdComponent type="per" values="per"/> </unitIdComponents> + <unitPrefixes> + <unitPrefix type='quecto' symbol='q' power10='-30'/> + <unitPrefix type='ronto' symbol='r' power10='-27'/> + <unitPrefix type='yocto' symbol='y' power10='-24'/> + <unitPrefix type='zepto' symbol='z' power10='-21'/> + <unitPrefix type='atto' symbol='a' power10='-18'/> + <unitPrefix type='femto' symbol='f' power10='-15'/> + <unitPrefix type='pico' symbol='p' power10='-12'/> + <unitPrefix type='nano' symbol='n' power10='-9'/> + <unitPrefix type='micro' symbol='μ' power10='-6'/> + <unitPrefix type='milli' symbol='m' power10='-3'/> + <unitPrefix type='centi' symbol='c' power10='-2'/> + <unitPrefix type='deci' symbol='d' power10='-1'/> + <unitPrefix type='deka' symbol='da' power10='1'/> + <unitPrefix type='hecto' symbol='h' power10='2'/> + <unitPrefix type='kilo' symbol='k' power10='3'/> + <unitPrefix type='mega' symbol='M' power10='6'/> + <unitPrefix type='giga' symbol='G' power10='9'/> + <unitPrefix type='tera' symbol='T' power10='12'/> + <unitPrefix type='peta' symbol='P' power10='15'/> + <unitPrefix type='exa' symbol='E' power10='18'/> + <unitPrefix type='zetta' symbol='Z' power10='21'/> + <unitPrefix type='yotta' symbol='Y' power10='24'/> + <unitPrefix type='ronna' symbol='R' power10='27'/> + <unitPrefix type='quetta' symbol='Q' power10='30'/> + <unitPrefix type='kibi' symbol='Ki' power2='10'/> + <unitPrefix type='mebi' symbol='Mi' power2='20'/> + <unitPrefix type='gibi' symbol='Gi' power2='30'/> + <unitPrefix type='tebi' symbol='Ti' power2='40'/> + <unitPrefix type='pebi' symbol='Pi' power2='50'/> + <unitPrefix type='exbi' symbol='Ei' power2='60'/> + <unitPrefix type='zebi' symbol='Zi' power2='70'/> + <unitPrefix type='yobi' symbol='Yi' power2='80'/> + </unitPrefixes> <unitConstants> <unitConstant constant="lb_to_kg" value="0.45359237"/> <unitConstant constant="ft_to_m" value="0.3048"/> @@ -308,6 +342,8 @@ For terms of use, see http://www.unicode.org/copyright.html <!-- speed --> <convertUnit source='knot' baseUnit='meter-per-second' factor='1852/3600' systems="ussystem uksystem si_acceptable"/> + <convertUnit source='beaufort' baseUnit='meter-per-second' special='beaufort' systems="metric_adjacent"/> + <!-- magnetic-induction --> <convertUnit source='tesla' baseUnit='kilogram-per-square-second-ampere' systems='si metric prefixable'/> diff --git a/make/data/cldr/common/supplemental/windowsZones.xml b/make/data/cldr/common/supplemental/windowsZones.xml index b49266ef9e3ab..a81d0beb83cda 100644 --- a/make/data/cldr/common/supplemental/windowsZones.xml +++ b/make/data/cldr/common/supplemental/windowsZones.xml @@ -30,7 +30,6 @@ For terms of use, see http://www.unicode.org/copyright.html <mapZone other="Hawaiian Standard Time" territory="001" type="Pacific/Honolulu"/> <mapZone other="Hawaiian Standard Time" territory="CK" type="Pacific/Rarotonga"/> <mapZone other="Hawaiian Standard Time" territory="PF" type="Pacific/Tahiti"/> - <mapZone other="Hawaiian Standard Time" territory="UM" type="Pacific/Johnston"/> <mapZone other="Hawaiian Standard Time" territory="US" type="Pacific/Honolulu"/> <mapZone other="Hawaiian Standard Time" territory="ZZ" type="Etc/GMT+10"/> @@ -49,7 +48,7 @@ For terms of use, see http://www.unicode.org/copyright.html <!-- (UTC-08:00) Baja California --> <mapZone other="Pacific Standard Time (Mexico)" territory="001" type="America/Tijuana"/> - <mapZone other="Pacific Standard Time (Mexico)" territory="MX" type="America/Tijuana America/Santa_Isabel"/> + <mapZone other="Pacific Standard Time (Mexico)" territory="MX" type="America/Tijuana"/> <!-- (UTC-08:00) Coordinated Universal Time-08 --> <mapZone other="UTC-08" territory="001" type="Etc/GMT+8"/> @@ -75,7 +74,7 @@ For terms of use, see http://www.unicode.org/copyright.html <!-- (UTC-07:00) Mountain Time (US & Canada) --> <mapZone other="Mountain Standard Time" territory="001" type="America/Denver"/> - <mapZone other="Mountain Standard Time" territory="CA" type="America/Edmonton America/Cambridge_Bay America/Inuvik America/Yellowknife"/> + <mapZone other="Mountain Standard Time" territory="CA" type="America/Edmonton America/Cambridge_Bay America/Inuvik"/> <mapZone other="Mountain Standard Time" territory="MX" type="America/Ciudad_Juarez"/> <mapZone other="Mountain Standard Time" territory="US" type="America/Denver America/Boise"/> <mapZone other="Mountain Standard Time" territory="ZZ" type="MST7MDT"/> @@ -97,7 +96,7 @@ For terms of use, see http://www.unicode.org/copyright.html <!-- (UTC-06:00) Central Time (US & Canada) --> <mapZone other="Central Standard Time" territory="001" type="America/Chicago"/> - <mapZone other="Central Standard Time" territory="CA" type="America/Winnipeg America/Rainy_River America/Rankin_Inlet America/Resolute"/> + <mapZone other="Central Standard Time" territory="CA" type="America/Winnipeg America/Rankin_Inlet America/Resolute"/> <mapZone other="Central Standard Time" territory="MX" type="America/Matamoros America/Ojinaga"/> <mapZone other="Central Standard Time" territory="US" type="America/Chicago America/Indiana/Knox America/Indiana/Tell_City America/Menominee America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem"/> <mapZone other="Central Standard Time" territory="ZZ" type="CST6CDT"/> @@ -133,7 +132,7 @@ For terms of use, see http://www.unicode.org/copyright.html <!-- (UTC-05:00) Eastern Time (US & Canada) --> <mapZone other="Eastern Standard Time" territory="001" type="America/New_York"/> <mapZone other="Eastern Standard Time" territory="BS" type="America/Nassau"/> - <mapZone other="Eastern Standard Time" territory="CA" type="America/Toronto America/Iqaluit America/Montreal America/Nipigon America/Pangnirtung America/Thunder_Bay"/> + <mapZone other="Eastern Standard Time" territory="CA" type="America/Toronto America/Iqaluit"/> <mapZone other="Eastern Standard Time" territory="US" type="America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville"/> <mapZone other="Eastern Standard Time" territory="ZZ" type="EST5EDT"/> @@ -421,7 +420,7 @@ For terms of use, see http://www.unicode.org/copyright.html <mapZone other="FLE Standard Time" territory="FI" type="Europe/Helsinki"/> <mapZone other="FLE Standard Time" territory="LT" type="Europe/Vilnius"/> <mapZone other="FLE Standard Time" territory="LV" type="Europe/Riga"/> - <mapZone other="FLE Standard Time" territory="UA" type="Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye"/> + <mapZone other="FLE Standard Time" territory="UA" type="Europe/Kiev"/> <!-- (UTC+02:00) Jerusalem --> <mapZone other="Israel Standard Time" territory="001" type="Asia/Jerusalem"/> @@ -538,7 +537,8 @@ For terms of use, see http://www.unicode.org/copyright.html <!-- (UTC+05:00) Ashgabat, Tashkent --> <mapZone other="West Asia Standard Time" territory="001" type="Asia/Tashkent"/> <mapZone other="West Asia Standard Time" territory="AQ" type="Antarctica/Mawson"/> - <mapZone other="West Asia Standard Time" territory="KZ" type="Asia/Oral Asia/Aqtau Asia/Aqtobe Asia/Atyrau"/> + <!-- Microsoft may create a new zone dedicated for Almaty and Qostanay. --> + <mapZone other="West Asia Standard Time" territory="KZ" type="Asia/Oral Asia/Almaty Asia/Aqtau Asia/Aqtobe Asia/Atyrau Asia/Qostanay"/> <mapZone other="West Asia Standard Time" territory="MV" type="Indian/Maldives"/> <mapZone other="West Asia Standard Time" territory="TF" type="Indian/Kerguelen"/> <mapZone other="West Asia Standard Time" territory="TJ" type="Asia/Dushanbe"/> @@ -570,13 +570,12 @@ For terms of use, see http://www.unicode.org/copyright.html <mapZone other="Nepal Standard Time" territory="001" type="Asia/Katmandu"/> <mapZone other="Nepal Standard Time" territory="NP" type="Asia/Katmandu"/> - <!-- (UTC+06:00) Astana --> - <mapZone other="Central Asia Standard Time" territory="001" type="Asia/Almaty"/> + <!-- (UTC+06:00) Astana --> <!-- Microsoft probably keeps Central Asia Standard Time, but change Astana to something else. --> + <mapZone other="Central Asia Standard Time" territory="001" type="Asia/Bishkek"/> <mapZone other="Central Asia Standard Time" territory="AQ" type="Antarctica/Vostok"/> <mapZone other="Central Asia Standard Time" territory="CN" type="Asia/Urumqi"/> <mapZone other="Central Asia Standard Time" territory="IO" type="Indian/Chagos"/> <mapZone other="Central Asia Standard Time" territory="KG" type="Asia/Bishkek"/> - <mapZone other="Central Asia Standard Time" territory="KZ" type="Asia/Almaty Asia/Qostanay"/> <mapZone other="Central Asia Standard Time" territory="ZZ" type="Etc/GMT-6"/> <!-- (UTC+06:00) Dhaka --> @@ -710,7 +709,7 @@ For terms of use, see http://www.unicode.org/copyright.html <!-- (UTC+10:00) Hobart --> <mapZone other="Tasmania Standard Time" territory="001" type="Australia/Hobart"/> - <mapZone other="Tasmania Standard Time" territory="AU" type="Australia/Hobart Australia/Currie Antarctica/Macquarie"/> + <mapZone other="Tasmania Standard Time" territory="AU" type="Australia/Hobart Antarctica/Macquarie"/> <!-- (UTC+10:00) Vladivostok --> <mapZone other="Vladivostok Standard Time" territory="001" type="Asia/Vladivostok"/> diff --git a/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java b/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java index 86aa580b619ed..2bf0c711cfece 100644 --- a/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java +++ b/src/java.base/share/classes/java/util/spi/LocaleServiceProvider.java @@ -159,6 +159,8 @@ * <th scope="col">CLDR version</th></tr> * </thead> * <tbody> + * <tr><th scope="row" style="text-align:left">JDK 23</th> + * <td>CLDR 45</td></tr> * <tr><th scope="row" style="text-align:left">JDK 22</th> * <td>CLDR 44</td></tr> * <tr><th scope="row" style="text-align:left">JDK 21</th> diff --git a/src/java.base/share/legal/cldr.md b/src/java.base/share/legal/cldr.md index e0d8102fb7fa4..97331fcba9f3b 100644 --- a/src/java.base/share/legal/cldr.md +++ b/src/java.base/share/legal/cldr.md @@ -1,14 +1,15 @@ -## Unicode Common Local Data Repository (CLDR) v44 +## Unicode Common Local Data Repository (CLDR) v45 ### CLDR License ``` + UNICODE LICENSE V3 COPYRIGHT AND PERMISSION NOTICE -Copyright © 2019-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR @@ -44,4 +45,56 @@ not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. +SPDX-License-Identifier: Unicode-3.0 + +———————————— + +Unicode® Copyright and Terms of Use +For the general privacy policy governing access to this site, see the Unicode Privacy Policy. + +Unicode Copyright +Copyright © 1991-2024 Unicode, Inc. All rights reserved. +Definitions +Unicode Data Files ("DATA FILES") include all data files under the directories: +https://www.unicode.org/Public/ +https://www.unicode.org/reports/ +https://www.unicode.org/ivd/data/ + +Unicode Data Files do not include PDF online code charts under the directory: +https://www.unicode.org/Public/ + +Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard +or any source code or compiled code under the directories: +https://www.unicode.org/Public/PROGRAMS/ +https://www.unicode.org/Public/cldr/ +http://site.icu-project.org/download/ +Terms of Use +Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. +Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files, subject to the Terms and Conditions herein. +Further specifications of rights and restrictions pertaining to the use of the Unicode DATA FILES and SOFTWARE can be found in the Unicode Data Files and Software License. +Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. +The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the first page of each PDF code chart. +All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. +No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. +Modification is not permitted with respect to this document. All copies of this document must be verbatim. +Restricted Rights Legend +Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. +Warranties and Disclaimers +This publication and/or website may include technical or typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. +If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. +EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. +Waiver of Damages +In no event shall Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. +Trademarks & Logos +The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. +The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. +All third party trademarks referenced herein are the property of their respective owners. +Miscellaneous +Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this website from other locations, you are responsible for compliance with local laws. This Agreement, all use of this website and any claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. +Modification by Unicode, Inc. Unicode, Inc. shall have the right to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without Unicode, Inc.’s prior written consent. +Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. +Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. +Entire Agreement. This Agreement constitutes the entire agreement between the parties. + + ``` diff --git a/src/jdk.localedata/share/legal/cldr.md b/src/jdk.localedata/share/legal/cldr.md index e0d8102fb7fa4..97331fcba9f3b 100644 --- a/src/jdk.localedata/share/legal/cldr.md +++ b/src/jdk.localedata/share/legal/cldr.md @@ -1,14 +1,15 @@ -## Unicode Common Local Data Repository (CLDR) v44 +## Unicode Common Local Data Repository (CLDR) v45 ### CLDR License ``` + UNICODE LICENSE V3 COPYRIGHT AND PERMISSION NOTICE -Copyright © 2019-2023 Unicode, Inc. +Copyright © 1991-2024 Unicode, Inc. NOTICE TO USER: Carefully read the following legal agreement. BY DOWNLOADING, INSTALLING, COPYING OR OTHERWISE USING DATA FILES, AND/OR @@ -44,4 +45,56 @@ not be used in advertising or otherwise to promote the sale, use or other dealings in these Data Files or Software without prior written authorization of the copyright holder. +SPDX-License-Identifier: Unicode-3.0 + +———————————— + +Unicode® Copyright and Terms of Use +For the general privacy policy governing access to this site, see the Unicode Privacy Policy. + +Unicode Copyright +Copyright © 1991-2024 Unicode, Inc. All rights reserved. +Definitions +Unicode Data Files ("DATA FILES") include all data files under the directories: +https://www.unicode.org/Public/ +https://www.unicode.org/reports/ +https://www.unicode.org/ivd/data/ + +Unicode Data Files do not include PDF online code charts under the directory: +https://www.unicode.org/Public/ + +Unicode Software ("SOFTWARE") includes any source code published in the Unicode Standard +or any source code or compiled code under the directories: +https://www.unicode.org/Public/PROGRAMS/ +https://www.unicode.org/Public/cldr/ +http://site.icu-project.org/download/ +Terms of Use +Certain documents and files on this website contain a legend indicating that "Modification is permitted." Any person is hereby authorized, without fee, to modify such documents and files to create derivative works conforming to the Unicode® Standard, subject to Terms and Conditions herein. +Any person is hereby authorized, without fee, to view, use, reproduce, and distribute all documents and files, subject to the Terms and Conditions herein. +Further specifications of rights and restrictions pertaining to the use of the Unicode DATA FILES and SOFTWARE can be found in the Unicode Data Files and Software License. +Each version of the Unicode Standard has further specifications of rights and restrictions of use. For the book editions (Unicode 5.0 and earlier), these are found on the back of the title page. +The Unicode PDF online code charts carry specific restrictions. Those restrictions are incorporated as the first page of each PDF code chart. +All other files, including online documentation of the core specification for Unicode 6.0 and later, are covered under these general Terms of Use. +No license is granted to "mirror" the Unicode website where a fee is charged for access to the "mirror" site. +Modification is not permitted with respect to this document. All copies of this document must be verbatim. +Restricted Rights Legend +Any technical data or software which is licensed to the United States of America, its agencies and/or instrumentalities under this Agreement is commercial technical data or commercial computer software developed exclusively at private expense as defined in FAR 2.101, or DFARS 252.227-7014 (June 1995), as applicable. For technical data, use, duplication, or disclosure by the Government is subject to restrictions as set forth in DFARS 202.227-7015 Technical Data, Commercial and Items (Nov 1995) and this Agreement. For Software, in accordance with FAR 12-212 or DFARS 227-7202, as applicable, use, duplication or disclosure by the Government is subject to the restrictions set forth in this Agreement. +Warranties and Disclaimers +This publication and/or website may include technical or typographical errors or other inaccuracies. Changes are periodically added to the information herein; these changes will be incorporated in new editions of the publication and/or website. Unicode, Inc. may make improvements and/or changes in the product(s) and/or program(s) described in this publication and/or website at any time. +If this file has been purchased on magnetic or optical media from Unicode, Inc. the sole and exclusive remedy for any claim will be exchange of the defective media within ninety (90) days of original purchase. +EXCEPT AS PROVIDED IN SECTION E.2, THIS PUBLICATION AND/OR SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND EITHER EXPRESS, IMPLIED, OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. UNICODE, INC. AND ITS LICENSORS ASSUME NO RESPONSIBILITY FOR ERRORS OR OMISSIONS IN THIS PUBLICATION AND/OR SOFTWARE OR OTHER DOCUMENTS WHICH ARE REFERENCED BY OR LINKED TO THIS PUBLICATION OR THE UNICODE WEBSITE. +Waiver of Damages +In no event shall Unicode, Inc. or its licensors be liable for any special, incidental, indirect or consequential damages of any kind, or any damages whatsoever, whether or not Unicode, Inc. was advised of the possibility of the damage, including, without limitation, those resulting from the following: loss of use, data or profits, in connection with the use, modification or distribution of this information or its derivatives. +Trademarks & Logos +The Unicode Word Mark and the Unicode Logo are trademarks of Unicode, Inc. “The Unicode Consortium” and “Unicode, Inc.” are trade names of Unicode, Inc. Use of the information and materials found on this website indicates your acknowledgement of Unicode, Inc.’s exclusive worldwide rights in the Unicode Word Mark, the Unicode Logo, and the Unicode trade names. +The Unicode Consortium Name and Trademark Usage Policy (“Trademark Policy”) are incorporated herein by reference and you agree to abide by the provisions of the Trademark Policy, which may be changed from time to time in the sole discretion of Unicode, Inc. +All third party trademarks referenced herein are the property of their respective owners. +Miscellaneous +Jurisdiction and Venue. This website is operated from a location in the State of California, United States of America. Unicode, Inc. makes no representation that the materials are appropriate for use in other locations. If you access this website from other locations, you are responsible for compliance with local laws. This Agreement, all use of this website and any claims and damages resulting from use of this website are governed solely by the laws of the State of California without regard to any principles which would apply the laws of a different jurisdiction. The user agrees that any disputes regarding this website shall be resolved solely in the courts located in Santa Clara County, California. The user agrees said courts have personal jurisdiction and agree to waive any right to transfer the dispute to any other forum. +Modification by Unicode, Inc. Unicode, Inc. shall have the right to modify this Agreement at any time by posting it to this website. The user may not assign any part of this Agreement without Unicode, Inc.’s prior written consent. +Taxes. The user agrees to pay any taxes arising from access to this website or use of the information herein, except for those based on Unicode’s net income. +Severability. If any provision of this Agreement is declared invalid or unenforceable, the remaining provisions of this Agreement shall remain in effect. +Entire Agreement. This Agreement constitutes the entire agreement between the parties. + + ``` diff --git a/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java b/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java index 723b6b62687bf..40da19adfe7b4 100644 --- a/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java +++ b/test/jdk/java/text/Format/CompactNumberFormat/TestCompactNumber.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ */ /* * @test - * @bug 8177552 8217721 8222756 8295372 8306116 + * @bug 8177552 8217721 8222756 8295372 8306116 8319990 * @summary Checks the functioning of compact number format * @modules jdk.localedata * @run testng/othervm TestCompactNumber @@ -256,9 +256,9 @@ Object[][] compactFormatData() { // Boundary number {FORMAT_IT_SHORT, 1000, "1.000"}, // Long path - {FORMAT_IT_SHORT, 3000000L, "3\u00a0Mio"}, + {FORMAT_IT_SHORT, 3000000L, "3\u00a0Mln"}, // Double path - {FORMAT_IT_SHORT, 3000000.0, "3\u00a0Mio"}, + {FORMAT_IT_SHORT, 3000000.0, "3\u00a0Mln"}, // BigInteger path {FORMAT_IT_SHORT, new BigInteger("12345678901234567890"), "12345679\u00a0Bln"}, @@ -418,9 +418,9 @@ Object[][] compactParseData() { {FORMAT_JA_JP_SHORT, "12345679\u5146", 1.2345679E19, Double.class}, {FORMAT_JA_JP_SHORT, "-12345679\u5146", -1.2345679E19, Double.class}, {FORMAT_IT_SHORT, "-99", -99L, Long.class}, - {FORMAT_IT_SHORT, "1\u00a0Mio", 1000000L, Long.class}, - {FORMAT_IT_SHORT, "30\u00a0Mio", 30000000L, Long.class}, - {FORMAT_IT_SHORT, "-30\u00a0Mio", -30000000L, Long.class}, + {FORMAT_IT_SHORT, "1\u00a0Mln", 1000000L, Long.class}, + {FORMAT_IT_SHORT, "30\u00a0Mln", 30000000L, Long.class}, + {FORMAT_IT_SHORT, "-30\u00a0Mln", -30000000L, Long.class}, {FORMAT_IT_SHORT, "12345679\u00a0Bln", 1.2345679E19, Double.class}, {FORMAT_IT_SHORT, "-12345679\u00a0Bln", -1.2345679E19, Double.class}, {FORMAT_SW_LONG, "-0.0", -0.0, Double.class}, diff --git a/test/jdk/java/text/Format/CompactNumberFormat/TestParseBigDecimal.java b/test/jdk/java/text/Format/CompactNumberFormat/TestParseBigDecimal.java index b4eaf67b9766d..dc88ce4de4a6e 100644 --- a/test/jdk/java/text/Format/CompactNumberFormat/TestParseBigDecimal.java +++ b/test/jdk/java/text/Format/CompactNumberFormat/TestParseBigDecimal.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,7 +22,7 @@ */ /* * @test - * @bug 8177552 8306116 + * @bug 8177552 8306116 8319990 * @summary Checks CNF.parse() when parseBigDecimal is set to true * @modules jdk.localedata * @run testng/othervm TestParseBigDecimal @@ -133,9 +133,9 @@ Object[][] compactParseData() { {FORMAT_JA_JP_SHORT, "12345679\u5146", new BigDecimal("12345679000000000000")}, {FORMAT_JA_JP_SHORT, "-12345679\u5146", new BigDecimal("-12345679000000000000")}, {FORMAT_IT_SHORT, "-99", new BigDecimal("-99")}, - {FORMAT_IT_SHORT, "1\u00a0Mio", new BigDecimal("1000000")}, - {FORMAT_IT_SHORT, "30\u00a0Mio", new BigDecimal("30000000")}, - {FORMAT_IT_SHORT, "-30\u00a0Mio", new BigDecimal("-30000000")}, + {FORMAT_IT_SHORT, "1\u00a0Mln", new BigDecimal("1000000")}, + {FORMAT_IT_SHORT, "30\u00a0Mln", new BigDecimal("30000000")}, + {FORMAT_IT_SHORT, "-30\u00a0Mln", new BigDecimal("-30000000")}, {FORMAT_IT_SHORT, "12345679\u00a0Bln", new BigDecimal("12345679000000000000")}, {FORMAT_IT_SHORT, "-12345679\u00a0Bln", new BigDecimal("-12345679000000000000")}, {FORMAT_SW_LONG, "-0.0", new BigDecimal("-0.0")}, From b3bcc49491b8f8ad337eb4c06201a5468e5c1159 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov <kvn@openjdk.org> Date: Thu, 25 Apr 2024 22:46:11 +0000 Subject: [PATCH 115/141] 8330181: Move PcDesc cache from nmethod header Reviewed-by: dlong, jrose --- src/hotspot/os/posix/signals_posix.cpp | 1 - src/hotspot/share/code/nmethod.cpp | 111 ++++++++++++-------- src/hotspot/share/code/nmethod.hpp | 44 +++----- src/hotspot/share/runtime/sharedRuntime.cpp | 6 +- 4 files changed, 84 insertions(+), 78 deletions(-) diff --git a/src/hotspot/os/posix/signals_posix.cpp b/src/hotspot/os/posix/signals_posix.cpp index 5172853ecd5c2..a9d3bb9284c49 100644 --- a/src/hotspot/os/posix/signals_posix.cpp +++ b/src/hotspot/os/posix/signals_posix.cpp @@ -614,7 +614,6 @@ int JVM_HANDLE_XXX_SIGNAL(int sig, siginfo_t* info, if (NativeDeoptInstruction::is_deopt_at(pc)) { CodeBlob* cb = CodeCache::find_blob(pc); if (cb != nullptr && cb->is_nmethod()) { - MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXWrite, t);) // can call PcDescCache::add_pc_desc nmethod* nm = cb->as_nmethod(); assert(nm->insts_contains_inclusive(pc), ""); address deopt = nm->is_method_handle_return(pc) ? diff --git a/src/hotspot/share/code/nmethod.cpp b/src/hotspot/share/code/nmethod.cpp index ee57e11f9323c..7e4f6994ff1c6 100644 --- a/src/hotspot/share/code/nmethod.cpp +++ b/src/hotspot/share/code/nmethod.cpp @@ -208,7 +208,7 @@ struct native_nmethod_stats_struct { }; struct pc_nmethod_stats_struct { - uint pc_desc_resets; // number of resets (= number of caches) + uint pc_desc_init; // number of initialization of cache (= number of caches) uint pc_desc_queries; // queries to nmethod::find_pc_desc uint pc_desc_approx; // number of those which have approximate true uint pc_desc_repeats; // number of _pc_descs[0] hits @@ -223,7 +223,7 @@ struct pc_nmethod_stats_struct { (double)(pc_desc_tests + pc_desc_searches) / pc_desc_queries); tty->print_cr(" caches=%d queries=%u/%u, hits=%u+%u, tests=%u+%u, adds=%u", - pc_desc_resets, + pc_desc_init, pc_desc_queries, pc_desc_approx, pc_desc_repeats, pc_desc_hits, pc_desc_tests, pc_desc_searches, pc_desc_adds); @@ -341,28 +341,24 @@ void ExceptionCache::set_next(ExceptionCache *ec) { // Helper used by both find_pc_desc methods. static inline bool match_desc(PcDesc* pc, int pc_offset, bool approximate) { NOT_PRODUCT(++pc_nmethod_stats.pc_desc_tests); - if (!approximate) + if (!approximate) { return pc->pc_offset() == pc_offset; - else + } else { return (pc-1)->pc_offset() < pc_offset && pc_offset <= pc->pc_offset(); + } } -void PcDescCache::reset_to(PcDesc* initial_pc_desc) { - if (initial_pc_desc == nullptr) { - _pc_descs[0] = nullptr; // native method; no PcDescs at all - return; - } - NOT_PRODUCT(++pc_nmethod_stats.pc_desc_resets); - // reset the cache by filling it with benign (non-null) values - assert(initial_pc_desc->pc_offset() < 0, "must be sentinel"); - for (int i = 0; i < cache_size; i++) +void PcDescCache::init_to(PcDesc* initial_pc_desc) { + NOT_PRODUCT(++pc_nmethod_stats.pc_desc_init); + // initialize the cache by filling it with benign (non-null) values + assert(initial_pc_desc != nullptr && initial_pc_desc->pc_offset() == PcDesc::lower_offset_limit, + "must start with a sentinel"); + for (int i = 0; i < cache_size; i++) { _pc_descs[i] = initial_pc_desc; + } } PcDesc* PcDescCache::find_pc_desc(int pc_offset, bool approximate) { - NOT_PRODUCT(++pc_nmethod_stats.pc_desc_queries); - NOT_PRODUCT(if (approximate) ++pc_nmethod_stats.pc_desc_approx); - // Note: one might think that caching the most recently // read value separately would be a win, but one would be // wrong. When many threads are updating it, the cache @@ -375,8 +371,10 @@ PcDesc* PcDescCache::find_pc_desc(int pc_offset, bool approximate) { // Step one: Check the most recently added value. res = _pc_descs[0]; - if (res == nullptr) return nullptr; // native method; no PcDescs at all - if (match_desc(res, pc_offset, approximate)) { + assert(res != nullptr, "PcDesc cache should be initialized already"); + + // Approximate only here since PcDescContainer::find_pc_desc() checked for exact case. + if (approximate && match_desc(res, pc_offset, approximate)) { NOT_PRODUCT(++pc_nmethod_stats.pc_desc_repeats); return res; } @@ -396,7 +394,6 @@ PcDesc* PcDescCache::find_pc_desc(int pc_offset, bool approximate) { } void PcDescCache::add_pc_desc(PcDesc* pc_desc) { - MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXWrite, Thread::current());) NOT_PRODUCT(++pc_nmethod_stats.pc_desc_adds); // Update the LRU cache by shifting pc_desc forward. for (int i = 0; i < cache_size; i++) { @@ -1245,6 +1242,7 @@ nmethod::nmethod( init_defaults(code_buffer, offsets); _osr_entry_point = nullptr; + _pc_desc_container = nullptr; _entry_bci = InvocationEntryBci; _compile_id = compile_id; _comp_level = CompLevel_none; @@ -1279,8 +1277,6 @@ nmethod::nmethod( #endif assert((data_offset() + data_end_offset) <= nmethod_size, "wrong nmethod's size: %d < %d", nmethod_size, (data_offset() + data_end_offset)); - _pc_desc_container.reset_to(nullptr); - code_buffer->copy_code_and_locs_to(this); code_buffer->copy_values_to(this); @@ -1445,14 +1441,16 @@ nmethod::nmethod( #endif assert((data_offset() + data_end_offset) <= nmethod_size, "wrong nmethod's size: %d < %d", nmethod_size, (data_offset() + data_end_offset)); - // after _scopes_pcs_offset is set - _pc_desc_container.reset_to(scopes_pcs_begin()); - + // Copy code and relocation info code_buffer->copy_code_and_locs_to(this); - // Copy contents of ScopeDescRecorder to nmethod + // Copy oops and metadata code_buffer->copy_values_to(this); - debug_info->copy_to(this); dependencies->copy_to(this); + // Copy PcDesc and ScopeDesc data + debug_info->copy_to(this); + + // Create cache after PcDesc data is copied - it will be used to initialize cache + _pc_desc_container = new PcDescContainer(scopes_pcs_begin()); #if INCLUDE_JVMCI if (compiler->is_jvmci()) { @@ -2044,7 +2042,9 @@ void nmethod::purge(bool unregister_nmethod) { delete ec; ec = next; } - + if (_pc_desc_container != nullptr) { + delete _pc_desc_container; + } delete[] _compiled_ic_data; if (unregister_nmethod) { @@ -2619,18 +2619,19 @@ void nmethod::copy_scopes_data(u_char* buffer, int size) { } #ifdef ASSERT -static PcDesc* linear_search(const PcDescSearch& search, int pc_offset, bool approximate) { - PcDesc* lower = search.scopes_pcs_begin(); - PcDesc* upper = search.scopes_pcs_end(); - lower += 1; // exclude initial sentinel +static PcDesc* linear_search(int pc_offset, bool approximate, PcDesc* lower, PcDesc* upper) { PcDesc* res = nullptr; - for (PcDesc* p = lower; p < upper; p++) { + assert(lower != nullptr && lower->pc_offset() == PcDesc::lower_offset_limit, + "must start with a sentinel"); + // lower + 1 to exclude initial sentinel + for (PcDesc* p = lower + 1; p < upper; p++) { NOT_PRODUCT(--pc_nmethod_stats.pc_desc_tests); // don't count this call to match_desc if (match_desc(p, pc_offset, approximate)) { - if (res == nullptr) + if (res == nullptr) { res = p; - else + } else { res = (PcDesc*) badAddress; + } } } return res; @@ -2638,20 +2639,39 @@ static PcDesc* linear_search(const PcDescSearch& search, int pc_offset, bool app #endif +#ifndef PRODUCT +// Version of method to collect statistic +PcDesc* PcDescContainer::find_pc_desc(address pc, bool approximate, address code_begin, + PcDesc* lower, PcDesc* upper) { + ++pc_nmethod_stats.pc_desc_queries; + if (approximate) ++pc_nmethod_stats.pc_desc_approx; + + PcDesc* desc = _pc_desc_cache.last_pc_desc(); + assert(desc != nullptr, "PcDesc cache should be initialized already"); + if (desc->pc_offset() == (pc - code_begin)) { + // Cached value matched + ++pc_nmethod_stats.pc_desc_tests; + ++pc_nmethod_stats.pc_desc_repeats; + return desc; + } + return find_pc_desc_internal(pc, approximate, code_begin, lower, upper); +} +#endif + // Finds a PcDesc with real-pc equal to "pc" -PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, const PcDescSearch& search) { - address base_address = search.code_begin(); - if ((pc < base_address) || - (pc - base_address) >= (ptrdiff_t) PcDesc::upper_offset_limit) { +PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, address code_begin, + PcDesc* lower_incl, PcDesc* upper_incl) { + if ((pc < code_begin) || + (pc - code_begin) >= (ptrdiff_t) PcDesc::upper_offset_limit) { return nullptr; // PC is wildly out of range } - int pc_offset = (int) (pc - base_address); + int pc_offset = (int) (pc - code_begin); // Check the PcDesc cache if it contains the desired PcDesc // (This as an almost 100% hit rate.) PcDesc* res = _pc_desc_cache.find_pc_desc(pc_offset, approximate); if (res != nullptr) { - assert(res == linear_search(search, pc_offset, approximate), "cache ok"); + assert(res == linear_search(pc_offset, approximate, lower_incl, upper_incl), "cache ok"); return res; } @@ -2659,10 +2679,9 @@ PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, con // Find the last pc_offset less than the given offset. // The successor must be the required match, if there is a match at all. // (Use a fixed radix to avoid expensive affine pointer arithmetic.) - PcDesc* lower = search.scopes_pcs_begin(); - PcDesc* upper = search.scopes_pcs_end(); - upper -= 1; // exclude final sentinel - if (lower >= upper) return nullptr; // native method; no PcDescs at all + PcDesc* lower = lower_incl; // this is initial sentiel + PcDesc* upper = upper_incl - 1; // exclude final sentinel + if (lower >= upper) return nullptr; // no PcDescs at all #define assert_LU_OK \ /* invariant on lower..upper during the following search: */ \ @@ -2711,7 +2730,7 @@ PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, con #undef assert_LU_OK if (match_desc(upper, pc_offset, approximate)) { - assert(upper == linear_search(search, pc_offset, approximate), "search ok"); + assert(upper == linear_search(pc_offset, approximate, lower_incl, upper_incl), "search mismatch"); if (!Thread::current_in_asgct()) { // we don't want to modify the cache if we're in ASGCT // which is typically called in a signal handler @@ -2719,7 +2738,7 @@ PcDesc* PcDescContainer::find_pc_desc_internal(address pc, bool approximate, con } return upper; } else { - assert(nullptr == linear_search(search, pc_offset, approximate), "search ok"); + assert(nullptr == linear_search(pc_offset, approximate, lower_incl, upper_incl), "search mismatch"); return nullptr; } } diff --git a/src/hotspot/share/code/nmethod.hpp b/src/hotspot/share/code/nmethod.hpp index b22edaec5ace9..8ffb75eda34d4 100644 --- a/src/hotspot/share/code/nmethod.hpp +++ b/src/hotspot/share/code/nmethod.hpp @@ -101,45 +101,34 @@ class PcDescCache { volatile PcDescPtr _pc_descs[cache_size]; // last cache_size pc_descs found public: PcDescCache() { debug_only(_pc_descs[0] = nullptr); } - void reset_to(PcDesc* initial_pc_desc); + void init_to(PcDesc* initial_pc_desc); PcDesc* find_pc_desc(int pc_offset, bool approximate); void add_pc_desc(PcDesc* pc_desc); PcDesc* last_pc_desc() { return _pc_descs[0]; } }; -class PcDescSearch { -private: - address _code_begin; - PcDesc* _lower; - PcDesc* _upper; -public: - PcDescSearch(address code, PcDesc* lower, PcDesc* upper) : - _code_begin(code), _lower(lower), _upper(upper) - { - } - - address code_begin() const { return _code_begin; } - PcDesc* scopes_pcs_begin() const { return _lower; } - PcDesc* scopes_pcs_end() const { return _upper; } -}; - -class PcDescContainer { +class PcDescContainer : public CHeapObj<mtCode> { private: PcDescCache _pc_desc_cache; public: - PcDescContainer() {} + PcDescContainer(PcDesc* initial_pc_desc) { _pc_desc_cache.init_to(initial_pc_desc); } - PcDesc* find_pc_desc_internal(address pc, bool approximate, const PcDescSearch& search); - void reset_to(PcDesc* initial_pc_desc) { _pc_desc_cache.reset_to(initial_pc_desc); } + PcDesc* find_pc_desc_internal(address pc, bool approximate, address code_begin, + PcDesc* lower, PcDesc* upper); - PcDesc* find_pc_desc(address pc, bool approximate, const PcDescSearch& search) { - address base_address = search.code_begin(); + PcDesc* find_pc_desc(address pc, bool approximate, address code_begin, PcDesc* lower, PcDesc* upper) +#ifdef PRODUCT + { PcDesc* desc = _pc_desc_cache.last_pc_desc(); - if (desc != nullptr && desc->pc_offset() == pc - base_address) { + assert(desc != nullptr, "PcDesc cache should be initialized already"); + if (desc->pc_offset() == (pc - code_begin)) { + // Cached value matched return desc; } - return find_pc_desc_internal(pc, approximate, search); + return find_pc_desc_internal(pc, approximate, code_begin, lower, upper); } +#endif + ; }; // nmethods (native methods) are the compiled code versions of Java methods. @@ -206,7 +195,7 @@ class nmethod : public CodeBlob { }; }; - PcDescContainer _pc_desc_container; + PcDescContainer* _pc_desc_container; ExceptionCache* volatile _exception_cache; void* _gc_data; @@ -359,7 +348,8 @@ class nmethod : public CodeBlob { void post_compiled_method_unload(); PcDesc* find_pc_desc(address pc, bool approximate) { - return _pc_desc_container.find_pc_desc(pc, approximate, PcDescSearch(code_begin(), scopes_pcs_begin(), scopes_pcs_end())); + if (_pc_desc_container == nullptr) return nullptr; // native method + return _pc_desc_container->find_pc_desc(pc, approximate, code_begin(), scopes_pcs_begin(), scopes_pcs_end()); } // STW two-phase nmethod root processing helpers. diff --git a/src/hotspot/share/runtime/sharedRuntime.cpp b/src/hotspot/share/runtime/sharedRuntime.cpp index 802ef22ed6263..0a7f5c5467668 100644 --- a/src/hotspot/share/runtime/sharedRuntime.cpp +++ b/src/hotspot/share/runtime/sharedRuntime.cpp @@ -481,9 +481,6 @@ address SharedRuntime::raw_exception_handler_for_return_address(JavaThread* curr return StubRoutines::cont_returnBarrierExc(); } - // write lock needed because we might update the pc desc cache via PcDescCache::add_pc_desc - MACOS_AARCH64_ONLY(ThreadWXEnable wx(WXWrite, current)); - // The fastest case first CodeBlob* blob = CodeCache::find_blob(return_address); nmethod* nm = (blob != nullptr) ? blob->as_nmethod_or_null() : nullptr; @@ -1752,7 +1749,8 @@ JRT_LEAF(void, SharedRuntime::fixup_callers_callsite(Method* method, address cal return; } - // write lock needed because we might update the pc desc cache via PcDescCache::add_pc_desc + // write lock needed because we might patch call site by set_to_clean() + // and is_unloading() can modify nmethod's state MACOS_AARCH64_ONLY(ThreadWXEnable __wx(WXWrite, JavaThread::current())); CodeBlob* cb = CodeCache::find_blob(caller_pc); From ea06129851be7bd9876685f74e35392874154179 Mon Sep 17 00:00:00 2001 From: Adam Sotona <asotona@openjdk.org> Date: Fri, 26 Apr 2024 07:02:45 +0000 Subject: [PATCH 116/141] 8322847: java.lang.classfile.BufWriter should specify @throws for its writeXXX methods Reviewed-by: psandoz --- .../share/classes/java/lang/classfile/BufWriter.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/lang/classfile/BufWriter.java b/src/java.base/share/classes/java/lang/classfile/BufWriter.java index bab8ebda4b87c..f178b6b2db0f6 100644 --- a/src/java.base/share/classes/java/lang/classfile/BufWriter.java +++ b/src/java.base/share/classes/java/lang/classfile/BufWriter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, 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 @@ -124,6 +124,7 @@ public sealed interface BufWriter * @param arr the byte array * @param start the offset within the byte array of the range * @param length the length of the range + * @throws IndexOutOfBoundsException if range is outside of the array bounds */ void writeBytes(byte[] arr, int start, int length); @@ -134,6 +135,7 @@ public sealed interface BufWriter * @param offset the offset at which to patch * @param size the size of the integer value being written, in bytes * @param value the integer value + * @throws IndexOutOfBoundsException if patched int is outside of bounds */ void patchInt(int offset, int size, int value); @@ -152,7 +154,7 @@ public sealed interface BufWriter * to the buffer * * @param entry the constant pool entry - * @throws NullPointerException if the entry is null + * @throws IllegalArgumentException if the entry has invalid index */ void writeIndex(PoolEntry entry); @@ -161,6 +163,7 @@ public sealed interface BufWriter * to the buffer, or zero if the entry is null * * @param entry the constant pool entry + * @throws IllegalArgumentException if the entry has invalid index */ void writeIndexOrZero(PoolEntry entry); @@ -180,6 +183,7 @@ public sealed interface BufWriter * entry in the list. * * @param list the list of entries + * @throws IllegalArgumentException if any entry has invalid index */ void writeListIndices(List<? extends PoolEntry> list); @@ -199,6 +203,7 @@ public sealed interface BufWriter * @param array the byte array * @param bufferOffset the offset into the array at which to write the * contents of the buffer + * @throws IndexOutOfBoundsException if copying outside of the array bounds */ void copyTo(byte[] array, int bufferOffset); } From a407dc9cbb48c4f66af51433067925605d3bc39d Mon Sep 17 00:00:00 2001 From: Jan Lahoda <jlahoda@openjdk.org> Date: Fri, 26 Apr 2024 07:23:49 +0000 Subject: [PATCH 117/141] 8327512: JShell does not work correctly when a class named Object or Throwable is defined Reviewed-by: asotona --- .../jdk/jshell/ExpressionToTypeInfo.java | 7 ++- .../share/classes/jdk/jshell/KeyMap.java | 4 ++ .../share/classes/jdk/jshell/SnippetMaps.java | 11 +++- .../share/classes/jdk/jshell/TypePrinter.java | 3 +- .../share/classes/jdk/jshell/Wrap.java | 6 +- .../langtools/jdk/jshell/JLCollisionTest.java | 59 +++++++++++++++++++ 6 files changed, 82 insertions(+), 8 deletions(-) create mode 100644 test/langtools/jdk/jshell/JLCollisionTest.java diff --git a/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java b/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java index e9eaccea32149..8bc339c6dab8e 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/ExpressionToTypeInfo.java @@ -71,7 +71,8 @@ */ class ExpressionToTypeInfo { - private static final String OBJECT_TYPE_NAME = "Object"; + //only used in erroneous/non-standard circumstances; OK to use a FQN: + private static final String OBJECT_TYPE_NAME = "java.lang.Object"; final AnalyzeTask at; final CompilationUnitTree cu; @@ -394,8 +395,8 @@ private ExpressionInfo treeToInfo(TreePath tp) { break; case NULL: ei.isNonVoid = true; - ei.typeName = OBJECT_TYPE_NAME; - ei.accessibleTypeName = OBJECT_TYPE_NAME; + ei.typeName = varTypeName(syms.objectType, false, AnonymousTypeKind.SUPER); + ei.accessibleTypeName = ei.typeName; break; default: { ei.isNonVoid = true; diff --git a/src/jdk.jshell/share/classes/jdk/jshell/KeyMap.java b/src/jdk.jshell/share/classes/jdk/jshell/KeyMap.java index a2011a111bf26..e350cf4a7d794 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/KeyMap.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/KeyMap.java @@ -99,4 +99,8 @@ boolean doesVariableNameExist(String name) { Stream<ImportKey> importKeys() { return importMap.values().stream(); } + + Stream<TypeDeclKey> typeDeclKeys() { + return classMap.values().stream(); + } } diff --git a/src/jdk.jshell/share/classes/jdk/jshell/SnippetMaps.java b/src/jdk.jshell/share/classes/jdk/jshell/SnippetMaps.java index c801e489e2090..0bbf2a5dceb99 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/SnippetMaps.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/SnippetMaps.java @@ -158,6 +158,15 @@ String fullClassNameAndPackageToClass(String full, String pkg) { if (mat.lookingAt()) { return full.substring(mat.end()); } + String simpleName = full.substring(full.lastIndexOf(".") + 1); + Stream<String> declaredInSnippets = state.keyMap.typeDeclKeys() + .map(key -> (TypeDeclSnippet) getSnippet(key)) + .map(decl -> decl.name()); + if (declaredInSnippets.anyMatch(clazz -> simpleName.equals(clazz))) { + //simple name of full clashes with a name of a user-defined class, + //use the fully-qualified name: + return full; + } state.debug(DBG_DEP, "SM %s %s\n", full, pkg); List<String> klasses = importSnippets() .filter(isi -> !isi.isStar) @@ -165,7 +174,7 @@ String fullClassNameAndPackageToClass(String full, String pkg) { .toList(); for (String k : klasses) { if (k.equals(full)) { - return full.substring(full.lastIndexOf(".")+1); + return simpleName; } } if (pkg.isEmpty()) { diff --git a/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java b/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java index 36d3e882f3848..76f2e929e34c3 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/TypePrinter.java @@ -47,7 +47,8 @@ */ class TypePrinter extends Printer { - private static final String OBJECT = "Object"; + //only used in erroneous/non-standard circumstances; OK to use a FQN: + private static final String OBJECT = "java.lang.Object"; private final JavacMessages messages; private final Types types; diff --git a/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java b/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java index f9ae63b9cdeec..57ed543ce25ec 100644 --- a/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java +++ b/src/jdk.jshell/share/classes/jdk/jshell/Wrap.java @@ -113,9 +113,9 @@ public static Wrap varWrap(String source, Wrap wtype, String brackets, scratchName += "$"; } Wrap waux = new CompoundWrap( - " private static <" + scratchName + "> " + scratchName +" ", DOIT_METHOD_NAME + "Aux", "() throws Throwable {\n", + " private static <" + scratchName + "> " + scratchName +" ", DOIT_METHOD_NAME + "Aux", "() throws java.lang.Throwable {\n", wtype, brackets + " ", scratchName, "_ =\n ", winit, semi(winit), - " @SuppressWarnings(\"unchecked\") ", scratchName, " ", scratchName, "__ = (", scratchName, ")", scratchName, "_;\n", + " @java.lang.SuppressWarnings(\"unchecked\") ", scratchName, " ", scratchName, "__ = (", scratchName, ")", scratchName, "_;\n", " return ", scratchName, "__;\n", "}" ); @@ -550,7 +550,7 @@ private static String semi(String s) { private static class DoitMethodWrap extends CompoundWrap { DoitMethodWrap(Wrap w) { - super(" public static Object " + DOIT_METHOD_NAME + "() throws Throwable {\n" + super(" public static java.lang.Object " + DOIT_METHOD_NAME + "() throws java.lang.Throwable {\n" + " ", w, " }\n"); } diff --git a/test/langtools/jdk/jshell/JLCollisionTest.java b/test/langtools/jdk/jshell/JLCollisionTest.java new file mode 100644 index 0000000000000..2859c1a49f7b0 --- /dev/null +++ b/test/langtools/jdk/jshell/JLCollisionTest.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2024, 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 8327512 + * @summary Clashes between java.lang classes and custom-defined classes with + * the same simple names + * @modules jdk.jshell/jdk.jshell + * @build KullaTesting + * @run testng JLCollisionTest + */ + +import org.testng.annotations.Test; + +@Test +public class JLCollisionTest extends KullaTesting { + + public void testObject() { + assertEval("class Object {}"); + assertEval("1"); + assertEval("null"); + assertEval("$2 = \"\""); + } + + public void testThrowable() { + assertEval("class Throwable {}"); + assertEval("1"); + //var with an "enhanced" (non-denotable) type: + assertEval("var _ = new Object() {};"); + } + + public void testSuppressWarnings() { + assertEval("class SuppressWarnings {}"); + //var with an "enhanced" (non-denotable) type: + assertEval("var _ = new Object() {};"); + } + +} From 006f090f98135e0d3b0450c455d545272cfe6a38 Mon Sep 17 00:00:00 2001 From: Hamlin Li <mli@openjdk.org> Date: Fri, 26 Apr 2024 07:50:51 +0000 Subject: [PATCH 118/141] 8331150: RISC-V: Fix "bad AD file" bug Reviewed-by: fyang --- src/hotspot/cpu/riscv/riscv_v.ad | 1 + 1 file changed, 1 insertion(+) diff --git a/src/hotspot/cpu/riscv/riscv_v.ad b/src/hotspot/cpu/riscv/riscv_v.ad index 01a367a46eaa7..3069336ac111b 100644 --- a/src/hotspot/cpu/riscv/riscv_v.ad +++ b/src/hotspot/cpu/riscv/riscv_v.ad @@ -73,6 +73,7 @@ source %{ return false; } break; + case Op_LoadVectorGather: case Op_LoadVectorGatherMasked: if (is_subword_type(bt)) { return false; From 377f2e538ae0fc94fc5483700a3ae70175017741 Mon Sep 17 00:00:00 2001 From: Matthias Baesken <mbaesken@openjdk.org> Date: Fri, 26 Apr 2024 08:12:09 +0000 Subject: [PATCH 119/141] 8329862: libjli GetApplicationHome cleanups and enhance jli tracing Reviewed-by: clanger, stuefe --- src/java.base/unix/native/libjli/java_md.c | 18 ++++------- src/java.base/windows/native/libjli/java_md.c | 30 ++++--------------- 2 files changed, 10 insertions(+), 38 deletions(-) diff --git a/src/java.base/unix/native/libjli/java_md.c b/src/java.base/unix/native/libjli/java_md.c index 024cec571b770..d2c04d8c25da9 100644 --- a/src/java.base/unix/native/libjli/java_md.c +++ b/src/java.base/unix/native/libjli/java_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, 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 @@ -495,6 +495,8 @@ GetJREPath(char *path, jint pathsize, jboolean speculative) char libjava[MAXPATHLEN]; struct stat s; + JLI_TraceLauncher("Attempt to get JRE path from launcher executable path\n"); + if (GetApplicationHome(path, pathsize)) { /* Is JRE co-located with the application? */ JLI_Snprintf(libjava, sizeof(libjava), "%s/lib/" JAVA_DLL, path); @@ -502,20 +504,10 @@ GetJREPath(char *path, jint pathsize, jboolean speculative) JLI_TraceLauncher("JRE path is %s\n", path); return JNI_TRUE; } - /* ensure storage for path + /jre + NULL */ - if ((JLI_StrLen(path) + 4 + 1) > (size_t) pathsize) { - JLI_TraceLauncher("Insufficient space to store JRE path\n"); - return JNI_FALSE; - } - /* Does the app ship a private JRE in <apphome>/jre directory? */ - JLI_Snprintf(libjava, sizeof(libjava), "%s/jre/lib/" JAVA_DLL, path); - if (access(libjava, F_OK) == 0) { - JLI_StrCat(path, "/jre"); - JLI_TraceLauncher("JRE path is %s\n", path); - return JNI_TRUE; - } } + JLI_TraceLauncher("Attempt to get JRE path from shared lib of the image\n"); + if (GetApplicationHomeFromDll(path, pathsize)) { JLI_Snprintf(libjava, sizeof(libjava), "%s/lib/" JAVA_DLL, path); if (stat(libjava, &s) == 0) { diff --git a/src/java.base/windows/native/libjli/java_md.c b/src/java.base/windows/native/libjli/java_md.c index 39930a38535b8..6ff155bcb9b2a 100644 --- a/src/java.base/windows/native/libjli/java_md.c +++ b/src/java.base/windows/native/libjli/java_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -49,10 +49,6 @@ static jboolean GetJVMPath(const char *jrepath, const char *jvmtype, char *jvmpath, jint jvmpathsize); static jboolean GetJREPath(char *path, jint pathsize); -#ifdef USE_REGISTRY_LOOKUP -jboolean GetPublicJREHome(char *buf, jint bufsize); -#endif - /* We supports warmup for UI stack that is performed in parallel * to VM initialization. * This helps to improve startup of UI application as warmup phase @@ -300,6 +296,8 @@ GetJREPath(char *path, jint pathsize) char javadll[MAXPATHLEN]; struct stat s; + JLI_TraceLauncher("Attempt to get JRE path from launcher executable path\n"); + if (GetApplicationHome(path, pathsize)) { /* Is JRE co-located with the application? */ JLI_Snprintf(javadll, sizeof(javadll), "%s\\bin\\" JAVA_DLL, path); @@ -307,20 +305,10 @@ GetJREPath(char *path, jint pathsize) JLI_TraceLauncher("JRE path is %s\n", path); return JNI_TRUE; } - /* ensure storage for path + \jre + NULL */ - if ((JLI_StrLen(path) + 4 + 1) > (size_t) pathsize) { - JLI_TraceLauncher("Insufficient space to store JRE path\n"); - return JNI_FALSE; - } - /* Does this app ship a private JRE in <apphome>\jre directory? */ - JLI_Snprintf(javadll, sizeof (javadll), "%s\\jre\\bin\\" JAVA_DLL, path); - if (stat(javadll, &s) == 0) { - JLI_StrCat(path, "\\jre"); - JLI_TraceLauncher("JRE path is %s\n", path); - return JNI_TRUE; - } } + JLI_TraceLauncher("Attempt to get JRE path from shared lib of the image\n"); + /* Try getting path to JRE from path to JLI.DLL */ if (GetApplicationHomeFromDll(path, pathsize)) { JLI_Snprintf(javadll, sizeof(javadll), "%s\\bin\\" JAVA_DLL, path); @@ -330,14 +318,6 @@ GetJREPath(char *path, jint pathsize) } } -#ifdef USE_REGISTRY_LOOKUP - /* Lookup public JRE using Windows registry. */ - if (GetPublicJREHome(path, pathsize)) { - JLI_TraceLauncher("JRE path is %s\n", path); - return JNI_TRUE; - } -#endif - JLI_ReportErrorMessage(JRE_ERROR8 JAVA_DLL); return JNI_FALSE; } From ffd850f17efc88dddfeab629f829a03ad22dc49d Mon Sep 17 00:00:00 2001 From: Adam Sotona <asotona@openjdk.org> Date: Fri, 26 Apr 2024 08:26:22 +0000 Subject: [PATCH 120/141] 8309881: Qualified name of a type element depends on its origin (source vs class) Reviewed-by: darcy, jlahoda --- .../com/sun/tools/javac/code/Type.java | 1 + test/langtools/tools/javac/TypeToString.java | 74 +++++++++++++++++++ 2 files changed, 75 insertions(+) create mode 100644 test/langtools/tools/javac/TypeToString.java diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java index 5acb4c384ebac..702b51d3b96b6 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Type.java @@ -1120,6 +1120,7 @@ private String className(Symbol sym, boolean longform) { s += String.valueOf(sym.hashCode()); return s; } else if (longform) { + sym.apiComplete(); return sym.getQualifiedName().toString(); } else { return sym.name.toString(); diff --git a/test/langtools/tools/javac/TypeToString.java b/test/langtools/tools/javac/TypeToString.java new file mode 100644 index 0000000000000..422eb7e23143c --- /dev/null +++ b/test/langtools/tools/javac/TypeToString.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2024, 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 8309881 + * @library /tools/javac/lib + * @modules java.compiler + * jdk.compiler + * @build JavacTestingAbstractProcessor TypeToString + * @compile -cp . -processor TypeToString -proc:only TypeToString.java + * @compile/process -cp . -processor TypeToString -proc:only Test + */ +import java.lang.Runtime.Version; +import java.util.*; +import javax.annotation.processing.*; +import javax.lang.model.element.*; +import javax.lang.model.util.*; + +@SupportedAnnotationTypes("*") +public class TypeToString extends JavacTestingAbstractProcessor { + + public boolean process(Set<? extends TypeElement> typeElementSet,RoundEnvironment renv) { + if (renv.processingOver()) { + TypeElement testClass = processingEnv.getElementUtils().getTypeElement("Test"); + ExecutableElement method = ElementFilter.methodsIn(testClass.getEnclosedElements()) + .iterator() + .next(); + String expectedTypeToString = "java.lang.Runtime.Version"; + String actualToString = method.getReturnType().toString(); + + if (!Objects.equals(expectedTypeToString, actualToString)) { + throw new AssertionError("Unexpected toString value. " + + "Expected: " + expectedTypeToString + ", " + + "but got: " + actualToString); + } + + actualToString = method.getParameters().get(0).asType().toString(); + + if (!Objects.equals(expectedTypeToString, actualToString)) { + throw new AssertionError("Unexpected toString value. " + + "Expected: " + expectedTypeToString + ", " + + "but got: " + actualToString); + } + } + return false; + } +} + +class Test { + public Version get(Version v) { + return null; + } +} From cfd19f017681a7aded67937c5132263bbcc7be6f Mon Sep 17 00:00:00 2001 From: Joachim Kern <jkern@openjdk.org> Date: Fri, 26 Apr 2024 09:26:18 +0000 Subject: [PATCH 121/141] 8329850: [AIX] Allow loading of different members of same shared library archive Reviewed-by: mdoerr, mbaesken, stuefe --- src/hotspot/os/aix/porting_aix.cpp | 31 +++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/src/hotspot/os/aix/porting_aix.cpp b/src/hotspot/os/aix/porting_aix.cpp index c06d4ad9a7fc0..ac0cc8d53d81d 100644 --- a/src/hotspot/os/aix/porting_aix.cpp +++ b/src/hotspot/os/aix/porting_aix.cpp @@ -906,10 +906,11 @@ struct TableLocker { ~TableLocker() { pthread_mutex_unlock(&g_handletable_mutex); } }; struct handletableentry{ - void* handle; - ino64_t inode; - dev64_t devid; - uint refcount; + void* handle; + ino64_t inode; + dev64_t devid; + char* member; + uint refcount; }; constexpr unsigned init_num_handles = 128; static unsigned max_handletable = 0; @@ -1049,6 +1050,14 @@ void* Aix_dlopen(const char* filename, int Flags, const char** error_report) { return nullptr; } else { + // extract member string if exist duplicate it and store pointer of it + // if member does not exist store nullptr + char* member = nullptr; + const char* substr; + if (filename[strlen(filename) - 1] == ')' && (substr = strrchr(filename, '('))) { + member = os::strdup(substr); + } + unsigned i = 0; TableLocker lock; // check if library belonging to filename is already loaded. @@ -1056,7 +1065,10 @@ void* Aix_dlopen(const char* filename, int Flags, const char** error_report) { for (i = 0; i < g_handletable_used; i++) { if ((p_handletable + i)->handle && (p_handletable + i)->inode == libstat.st_ino && - (p_handletable + i)->devid == libstat.st_dev) { + (p_handletable + i)->devid == libstat.st_dev && + (((p_handletable + i)->member == nullptr && member == nullptr) || + ((p_handletable + i)->member != nullptr && member != nullptr && + strcmp((p_handletable + i)->member, member) == 0))) { (p_handletable + i)->refcount++; result = (p_handletable + i)->handle; break; @@ -1084,6 +1096,7 @@ void* Aix_dlopen(const char* filename, int Flags, const char** error_report) { (p_handletable + i)->handle = result; (p_handletable + i)->inode = libstat.st_ino; (p_handletable + i)->devid = libstat.st_dev; + (p_handletable + i)->member = member; (p_handletable + i)->refcount = 1; } else { @@ -1131,7 +1144,7 @@ bool os::pd_dll_unload(void* libhandle, char* ebuf, int ebuflen) { // while in the second case we simply have to nag. res = (0 == ::dlclose(libhandle)); if (!res) { - // error analysis when dlopen fails + // error analysis when dlclose fails const char* error_report = ::dlerror(); if (error_report == nullptr) { error_report = "dlerror returned no error description"; @@ -1145,7 +1158,11 @@ bool os::pd_dll_unload(void* libhandle, char* ebuf, int ebuflen) { if (i < g_handletable_used) { if (res) { // First case: libhandle was found (with refcount == 0) and ::dlclose successful, - // so delete entry from array + // so delete entry from array (do not forget to free member-string space if member exists) + if ((p_handletable + i)->member) { + os::free((p_handletable + i)->member); + (p_handletable + i)->member = nullptr; + } g_handletable_used--; // If the entry was the last one of the array, the previous g_handletable_used-- // is sufficient to remove the entry from the array, otherwise we move the last From e4ed7ced75c53cf5ff40c5dae4830b1ee2589802 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Jeli=C5=84ski?= <djelinski@openjdk.org> Date: Fri, 26 Apr 2024 11:01:46 +0000 Subject: [PATCH 122/141] 8331063: Some HttpClient tests don't report leaks Reviewed-by: dfuchs, vtewari, michaelm --- .../net/httpclient/ForbiddenHeadTest.java | 30 +++++++++++-------- .../net/httpclient/ProxySelectorTest.java | 23 +++++++------- 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/test/jdk/java/net/httpclient/ForbiddenHeadTest.java b/test/jdk/java/net/httpclient/ForbiddenHeadTest.java index 0c39b44d7f5f0..4b651eb48131a 100644 --- a/test/jdk/java/net/httpclient/ForbiddenHeadTest.java +++ b/test/jdk/java/net/httpclient/ForbiddenHeadTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -205,18 +205,18 @@ static final void printFailedTests(ITestContext context) { @DataProvider(name = "all") public Object[][] allcases() { List<Object[]> result = new ArrayList<>(); - for (var client : List.of(authClient, noAuthClient)) { + for (boolean useAuth : List.of(true, false)) { for (boolean async : List.of(true, false)) { for (int code : List.of(UNAUTHORIZED, PROXY_UNAUTHORIZED)) { var srv = code == PROXY_UNAUTHORIZED ? "/proxy" : "/server"; for (var auth : List.of("/auth", "/noauth")) { var pcode = code; if (auth.equals("/noauth")) { - if (client == authClient) continue; + if (useAuth) continue; pcode = FORBIDDEN; } for (var uri : List.of(httpURI, httpsURI, http2URI, https2URI)) { - result.add(new Object[]{uri + srv + auth, pcode, async, client}); + result.add(new Object[]{uri + srv + auth, pcode, async, useAuth}); } } } @@ -237,12 +237,13 @@ protected PasswordAuthentication getPasswordAuthentication() { static final AtomicLong sleepCount = new AtomicLong(); @Test(dataProvider = "all") - void test(String uriString, int code, boolean async, HttpClient client) throws Throwable { + void test(String uriString, int code, boolean async, boolean useAuth) throws Throwable { checkSkip(); + HttpClient client = useAuth ? authClient : noAuthClient; var name = String.format("test(%s, %d, %s, %s)", uriString, code, async ? "async" : "sync", client.authenticator().isPresent() ? "authClient" : "noAuthClient"); out.printf("%n---- starting %s ----%n", name); - assert client.authenticator().isPresent() ? client == authClient : client == noAuthClient; + assert client.authenticator().isPresent() == useAuth; uriString = uriString + "/ForbiddenTest"; for (int i=0; i<ITERATIONS; i++) { if (ITERATIONS > 1) out.printf("---- ITERATION %d%n",i); @@ -381,13 +382,16 @@ public void teardown() throws Exception { authClient = noAuthClient = null; Thread.sleep(100); AssertionError fail = TRACKER.check(500); - - proxy.stop(); - authproxy.stop(); - httpTestServer.stop(); - httpsTestServer.stop(); - http2TestServer.stop(); - https2TestServer.stop(); + try { + proxy.stop(); + authproxy.stop(); + httpTestServer.stop(); + httpsTestServer.stop(); + http2TestServer.stop(); + https2TestServer.stop(); + } finally { + if (fail != null) throw fail; + } } static class TestProxySelector extends ProxySelector { diff --git a/test/jdk/java/net/httpclient/ProxySelectorTest.java b/test/jdk/java/net/httpclient/ProxySelectorTest.java index bb3ddc84017b5..fd8f85fa6d7d2 100644 --- a/test/jdk/java/net/httpclient/ProxySelectorTest.java +++ b/test/jdk/java/net/httpclient/ProxySelectorTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, 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 @@ -377,15 +377,18 @@ public void teardown() throws Exception { client = null; Thread.sleep(100); AssertionError fail = TRACKER.check(500); - - proxy.stop(); - authproxy.stop(); - httpTestServer.stop(); - proxyHttpTestServer.stop(); - authProxyHttpTestServer.stop(); - httpsTestServer.stop(); - http2TestServer.stop(); - https2TestServer.stop(); + try { + proxy.stop(); + authproxy.stop(); + httpTestServer.stop(); + proxyHttpTestServer.stop(); + authProxyHttpTestServer.stop(); + httpsTestServer.stop(); + http2TestServer.stop(); + https2TestServer.stop(); + } finally { + if (fail != null) throw fail; + } } class TestProxySelector extends ProxySelector { From 2b7176a55ad0e5c6ba34abba3fe8fc1a411a5e2d Mon Sep 17 00:00:00 2001 From: Thomas Stuefe <stuefe@openjdk.org> Date: Fri, 26 Apr 2024 12:06:57 +0000 Subject: [PATCH 123/141] 8330625: Compilation memory statistic: prevent tearing of the final report Reviewed-by: kvn, thartmann --- .../compiler/compilationMemoryStatistic.cpp | 55 ++++++++++--------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/hotspot/share/compiler/compilationMemoryStatistic.cpp b/src/hotspot/share/compiler/compilationMemoryStatistic.cpp index 6bc3f39b939b8..2cf8efa23c3f4 100644 --- a/src/hotspot/share/compiler/compilationMemoryStatistic.cpp +++ b/src/hotspot/share/compiler/compilationMemoryStatistic.cpp @@ -404,14 +404,6 @@ void CompilationMemoryStatistic::on_end_compilation() { assert(directive->should_collect_memstat(), "Only call if memstat is enabled"); const bool print = directive->should_print_memstat(); - if (print) { - char buf[1024]; - fmn.as_C_string(buf, sizeof(buf)); - tty->print("%s Arena usage %s: ", compilertype2name(ct), buf); - arena_stat->print_on(tty); - tty->cr(); - } - // Store result // For this to work, we must call on_end_compilation() at a point where // Compile|Compilation already handed over the failure string to ciEnv, @@ -436,6 +428,13 @@ void CompilationMemoryStatistic::on_end_compilation() { arena_stat->live_nodes_at_peak(), result); } + if (print) { + char buf[1024]; + fmn.as_C_string(buf, sizeof(buf)); + tty->print("%s Arena usage %s: ", compilertype2name(ct), buf); + arena_stat->print_on(tty); + tty->cr(); + } arena_stat->end(); // reset things } @@ -539,6 +538,10 @@ static inline ssize_t diff_entries_by_size(const MemStatEntry* e1, const MemStat } void CompilationMemoryStatistic::print_all_by_size(outputStream* st, bool human_readable, size_t min_size) { + + MutexLocker ml(NMTCompilationCostHistory_lock, Mutex::_no_safepoint_check_flag); + + st->cr(); st->print_cr("Compilation memory statistics"); if (!enabled()) { @@ -559,29 +562,27 @@ void CompilationMemoryStatistic::print_all_by_size(outputStream* st, bool human_ MemStatEntry::print_header(st); MemStatEntry** filtered = nullptr; - { - MutexLocker ml(NMTCompilationCostHistory_lock, Mutex::_no_safepoint_check_flag); - if (_the_table != nullptr) { - // We sort with quicksort - int num = 0; - filtered = _the_table->calc_flat_array(num, min_size); - if (min_size > 0) { - st->print_cr("(%d/%d)", num, _the_table->number_of_entries()); - } - if (num > 0) { - QuickSort::sort(filtered, num, diff_entries_by_size, false); - // Now print. Has to happen under lock protection too, since entries may be changed. - for (int i = 0; i < num; i ++) { - filtered[i]->print_on(st, human_readable); - } - } else { - st->print_cr("No entries."); + if (_the_table != nullptr) { + // We sort with quicksort + int num = 0; + filtered = _the_table->calc_flat_array(num, min_size); + if (min_size > 0) { + st->print_cr("(%d/%d)", num, _the_table->number_of_entries()); + } + if (num > 0) { + QuickSort::sort(filtered, num, diff_entries_by_size, false); + // Now print. Has to happen under lock protection too, since entries may be changed. + for (int i = 0; i < num; i ++) { + filtered[i]->print_on(st, human_readable); } } else { - st->print_cr("Not initialized."); + st->print_cr("No entries."); } - } // locked + } else { + st->print_cr("Not initialized."); + } + st->cr(); FREE_C_HEAP_ARRAY(Entry, filtered); } From 5e2ced4b9e1c9953e459dc152076520e5ef9d76c Mon Sep 17 00:00:00 2001 From: Claes Redestad <redestad@openjdk.org> Date: Fri, 26 Apr 2024 12:36:55 +0000 Subject: [PATCH 124/141] 8327247: C2 uses up to 2GB of RAM to compile complex string concat in extreme cases Reviewed-by: mchung, shade --- .../java/lang/invoke/StringConcatFactory.java | 262 +++++++++++++++++- .../openjdk/bench/java/lang/StringConcat.java | 43 +++ 2 files changed, 297 insertions(+), 8 deletions(-) diff --git a/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java b/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java index b918b7563320d..67e22c384ac34 100644 --- a/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java +++ b/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2024, 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,17 +27,20 @@ import jdk.internal.access.JavaLangAccess; import jdk.internal.access.SharedSecrets; -import jdk.internal.javac.PreviewFeature; +import jdk.internal.misc.VM; +import jdk.internal.org.objectweb.asm.ClassWriter; +import jdk.internal.org.objectweb.asm.MethodVisitor; +import jdk.internal.util.ClassFileDumper; import jdk.internal.vm.annotation.Stable; import sun.invoke.util.Wrapper; import java.lang.invoke.MethodHandles.Lookup; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; import java.util.Objects; +import java.util.Set; +import static java.lang.invoke.MethodHandles.Lookup.ClassOption.STRONG; import static java.lang.invoke.MethodType.methodType; +import static jdk.internal.org.objectweb.asm.Opcodes.*; /** * <p>Methods to facilitate the creation of String concatenation methods, that @@ -98,6 +101,13 @@ */ public final class StringConcatFactory { + private static final int HIGH_ARITY_THRESHOLD; + + static { + String highArity = VM.getSavedProperty("java.lang.invoke.StringConcat.highArityThreshold"); + HIGH_ARITY_THRESHOLD = highArity != null ? Integer.parseInt(highArity) : 20; + } + /** * Tag used to demarcate an ordinary argument. */ @@ -354,9 +364,14 @@ public static CallSite makeConcatWithConstants(MethodHandles.Lookup lookup, } try { - return new ConstantCallSite( - generateMHInlineCopy(concatType, constantStrings) - .viewAsType(concatType, true)); + if (concatType.parameterCount() < HIGH_ARITY_THRESHOLD) { + return new ConstantCallSite( + generateMHInlineCopy(concatType, constantStrings) + .viewAsType(concatType, true)); + } else { + return new ConstantCallSite( + SimpleStringBuilderStrategy.generate(lookup, concatType, constantStrings)); + } } catch (Error e) { // Pass through any error throw e; @@ -1032,4 +1047,235 @@ private StringConcatFactory() { // no instantiation } + /** + * Bytecode StringBuilder strategy. + * + * <p>This strategy emits StringBuilder chains as similar as possible + * to what javac would. No exact sizing of parameters or estimates. + */ + private static final class SimpleStringBuilderStrategy { + static final int CLASSFILE_VERSION = 52; // JDK 8 + static final String METHOD_NAME = "concat"; + // ClassFileDumper replaced java.lang.invoke.ProxyClassDumper in JDK 21 + // -- see JDK-8304846 + static final ClassFileDumper DUMPER = + ClassFileDumper.getInstance("java.lang.invoke.StringConcatFactory.dump", "stringConcatClasses"); + + /** + * Ensure a capacity in the initial StringBuilder to accommodate all + * constants plus this factor times the number of arguments. + */ + static final int ARGUMENT_SIZE_FACTOR = 4; + + static final Set<Lookup.ClassOption> SET_OF_STRONG = Set.of(STRONG); + + private SimpleStringBuilderStrategy() { + // no instantiation + } + + private static MethodHandle generate(Lookup lookup, MethodType args, String[] constants) throws Exception { + String className = getClassName(lookup.lookupClass()); + ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES); + + cw.visit(CLASSFILE_VERSION, + ACC_SUPER + ACC_PUBLIC + ACC_FINAL + ACC_SYNTHETIC, + className, + null, + "java/lang/Object", + null + ); + + MethodVisitor mv = cw.visitMethod( + ACC_PUBLIC + ACC_STATIC + ACC_FINAL, + METHOD_NAME, + args.toMethodDescriptorString(), + null, + null); + + mv.visitCode(); + + + // Prepare StringBuilder instance + mv.visitTypeInsn(NEW, "java/lang/StringBuilder"); + mv.visitInsn(DUP); + + int len = 0; + for (String constant : constants) { + if (constant != null) { + len += constant.length(); + } + } + len += args.parameterCount() * ARGUMENT_SIZE_FACTOR; + iconst(mv, len); + mv.visitMethodInsn( + INVOKESPECIAL, + "java/lang/StringBuilder", + "<init>", + "(I)V", + false + ); + + // At this point, we have a blank StringBuilder on stack, fill it in with .append calls. + { + int off = 0; + for (int c = 0; c < args.parameterCount(); c++) { + if (constants[c] != null) { + mv.visitLdcInsn(constants[c]); + sbAppend(mv, "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); + } + Class<?> cl = args.parameterType(c); + mv.visitVarInsn(getLoadOpcode(cl), off); + off += getParameterSize(cl); + String desc = getSBAppendDesc(cl); + sbAppend(mv, desc); + } + if (constants[constants.length - 1] != null) { + mv.visitLdcInsn(constants[constants.length - 1]); + sbAppend(mv, "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); + } + } + + mv.visitMethodInsn( + INVOKEVIRTUAL, + "java/lang/StringBuilder", + "toString", + "()Ljava/lang/String;", + false + ); + + mv.visitInsn(ARETURN); + + mv.visitMaxs(-1, -1); + mv.visitEnd(); + cw.visitEnd(); + + byte[] classBytes = cw.toByteArray(); + try { + Lookup hiddenLookup = lookup.makeHiddenClassDefiner(className, classBytes, SET_OF_STRONG, DUMPER) + .defineClassAsLookup(true); + Class<?> innerClass = hiddenLookup.lookupClass(); + return hiddenLookup.findStatic(innerClass, METHOD_NAME, args); + } catch (Exception e) { + throw new StringConcatException("Exception while spinning the class", e); + } + } + + private static void sbAppend(MethodVisitor mv, String desc) { + mv.visitMethodInsn( + INVOKEVIRTUAL, + "java/lang/StringBuilder", + "append", + desc, + false + ); + } + + /** + * The generated class is in the same package as the host class as + * it's the implementation of the string concatenation for the host + * class. + */ + private static String getClassName(Class<?> hostClass) { + String name = hostClass.isHidden() ? hostClass.getName().replace('/', '_') + : hostClass.getName(); + return name.replace('.', '/') + "$$StringConcat"; + } + + private static String getSBAppendDesc(Class<?> cl) { + if (cl.isPrimitive()) { + if (cl == Integer.TYPE || cl == Byte.TYPE || cl == Short.TYPE) { + return "(I)Ljava/lang/StringBuilder;"; + } else if (cl == Boolean.TYPE) { + return "(Z)Ljava/lang/StringBuilder;"; + } else if (cl == Character.TYPE) { + return "(C)Ljava/lang/StringBuilder;"; + } else if (cl == Double.TYPE) { + return "(D)Ljava/lang/StringBuilder;"; + } else if (cl == Float.TYPE) { + return "(F)Ljava/lang/StringBuilder;"; + } else if (cl == Long.TYPE) { + return "(J)Ljava/lang/StringBuilder;"; + } else { + throw new IllegalStateException("Unhandled primitive StringBuilder.append: " + cl); + } + } else if (cl == String.class) { + return "(Ljava/lang/String;)Ljava/lang/StringBuilder;"; + } else { + return "(Ljava/lang/Object;)Ljava/lang/StringBuilder;"; + } + } + + private static String getStringValueOfDesc(Class<?> cl) { + if (cl.isPrimitive()) { + if (cl == Integer.TYPE || cl == Byte.TYPE || cl == Short.TYPE) { + return "(I)Ljava/lang/String;"; + } else if (cl == Boolean.TYPE) { + return "(Z)Ljava/lang/String;"; + } else if (cl == Character.TYPE) { + return "(C)Ljava/lang/String;"; + } else if (cl == Double.TYPE) { + return "(D)Ljava/lang/String;"; + } else if (cl == Float.TYPE) { + return "(F)Ljava/lang/String;"; + } else if (cl == Long.TYPE) { + return "(J)Ljava/lang/String;"; + } else { + throw new IllegalStateException("Unhandled String.valueOf: " + cl); + } + } else if (cl == String.class) { + return "(Ljava/lang/String;)Ljava/lang/String;"; + } else { + return "(Ljava/lang/Object;)Ljava/lang/String;"; + } + } + + /** + * The following method is copied from + * org.objectweb.asm.commons.InstructionAdapter. Part of ASM: a very small + * and fast Java bytecode manipulation framework. + * Copyright (c) 2000-2005 INRIA, France Telecom All rights reserved. + */ + private static void iconst(MethodVisitor mv, final int cst) { + if (cst >= -1 && cst <= 5) { + mv.visitInsn(ICONST_0 + cst); + } else if (cst >= Byte.MIN_VALUE && cst <= Byte.MAX_VALUE) { + mv.visitIntInsn(BIPUSH, cst); + } else if (cst >= Short.MIN_VALUE && cst <= Short.MAX_VALUE) { + mv.visitIntInsn(SIPUSH, cst); + } else { + mv.visitLdcInsn(cst); + } + } + + private static int getLoadOpcode(Class<?> c) { + if (c == Void.TYPE) { + throw new InternalError("Unexpected void type of load opcode"); + } + return ILOAD + getOpcodeOffset(c); + } + + private static int getOpcodeOffset(Class<?> c) { + if (c.isPrimitive()) { + if (c == Long.TYPE) { + return 1; + } else if (c == Float.TYPE) { + return 2; + } else if (c == Double.TYPE) { + return 3; + } + return 0; + } else { + return 4; + } + } + + private static int getParameterSize(Class<?> c) { + if (c == Void.TYPE) { + return 0; + } else if (c == Long.TYPE || c == Double.TYPE) { + return 2; + } + return 1; + } + } } diff --git a/test/micro/org/openjdk/bench/java/lang/StringConcat.java b/test/micro/org/openjdk/bench/java/lang/StringConcat.java index 82254f56e793e..c27514ec442fc 100644 --- a/test/micro/org/openjdk/bench/java/lang/StringConcat.java +++ b/test/micro/org/openjdk/bench/java/lang/StringConcat.java @@ -149,4 +149,47 @@ public String concatConst6Object() { return "string" + objectValue + objectValue + objectValue + objectValue + objectValue + objectValue; } + private String + f0="1", f1="1", f2="1", f3="1", f4="1", f5="1", f6="1", f7="1", f8="1", f9="1", + f10="1", f11="1", f12="1", f13="1", f14="1", f15="1", f16="1", f17="1", f18="1", f19="1", + f20="1", f21="1", f22="1", f23="1", f24="1", f25="1", f26="1", f27="1", f28="1", f29="1", + f30="1", f31="1", f32="1", f33="1", f34="1", f35="1", f36="1", f37="1", f38="1", f39="1", + f40="1", f41="1", f42="1", f43="1", f44="1", f45="1", f46="1", f47="1", f48="1", f49="1", + f50="1", f51="1", f52="1", f53="1", f54="1", f55="1", f56="1", f57="1", f58="1", f59="1", + f60="1", f61="1", f62="1", f63="1", f64="1", f65="1", f66="1", f67="1", f68="1", f69="1", + f70="1", f71="1", f72="1", f73="1", f74="1", f75="1", f76="1", f77="1", f78="1", f79="1", + f80="1", f81="1", f82="1", f83="1", f84="1", f85="1", f86="1", f87="1", f88="1", f89="1", + f90="1", f91="1", f92="1", f93="1", f94="1", f95="1", f96="1", f97="1", f98="1", f99="1", + f100="1",f101="1",f102="1",f103="1",f104="1",f105="1",f106="1",f107="1",f108="1",f109="1", + f110="1",f111="1",f112="1",f113="1",f114="1",f115="1",f116="1",f117="1",f118="1",f119="1", + f120="1",f121="1",f122="1"; + + @Benchmark + public String concat13String() { + return f0 + ","+ f1 + ","+ f2 + ","+ f3 + ","+ f4 + ","+ f5 + ","+ f6 + ","+ f7 + ","+ f8 + ","+ f9 + "," + + f10 + ","+ f11 + ","+ f12; + } + + @Benchmark + public String concat23String() { + return f0 + ","+ f1 + ","+ f2 + ","+ f3 + ","+ f4 + ","+ f5 + ","+ f6 + ","+ f7 + ","+ f8 + ","+ f9 + "," + + f10 + ","+ f11 + ","+ f12 + ","+ f13 + ","+ f14 + ","+ f15 + ","+ f16 + ","+ f17 + ","+ f18 + ","+ f19 + "," + + f20 + ","+ f21 + ","+ f22; + } + @Benchmark + public String concat123String() { + return f0 + ","+ f1 + ","+ f2 + ","+ f3 + ","+ f4 + ","+ f5 + ","+ f6 + ","+ f7 + ","+ f8 + ","+ f9 + "," + + f10 + ","+ f11 + ","+ f12 + ","+ f13 + ","+ f14 + ","+ f15 + ","+ f16 + ","+ f17 + ","+ f18 + ","+ f19 + "," + + f20 + ","+ f21 + ","+ f22 + ","+ f23 + ","+ f24 + ","+ f25 + ","+ f26 + ","+ f27 + ","+ f28 + ","+ f29 + "," + + f30 + ","+ f31 + ","+ f32 + ","+ f33 + ","+ f34 + ","+ f35 + ","+ f36 + ","+ f37 + ","+ f38 + ","+ f39 + "," + + f40 + ","+ f41 + ","+ f42 + ","+ f43 + ","+ f44 + ","+ f45 + ","+ f46 + ","+ f47 + ","+ f48 + ","+ f49 + "," + + f50 + ","+ f51 + ","+ f52 + ","+ f53 + ","+ f54 + ","+ f55 + ","+ f56 + ","+ f57 + ","+ f58 + ","+ f59 + "," + + f60 + ","+ f61 + ","+ f62 + ","+ f63 + ","+ f64 + ","+ f65 + ","+ f66 + ","+ f67 + ","+ f68 + ","+ f69 + "," + + f70 + ","+ f71 + ","+ f72 + ","+ f73 + ","+ f74 + ","+ f75 + ","+ f76 + ","+ f77 + ","+ f78 + ","+ f79 + "," + + f80 + ","+ f81 + ","+ f82 + ","+ f83 + ","+ f84 + ","+ f85 + ","+ f86 + ","+ f87 + ","+ f88 + ","+ f89 + "," + + f90 + ","+ f91 + ","+ f92 + ","+ f93 + ","+ f94 + ","+ f95 + ","+ f96 + ","+ f97 + ","+ f98 + ","+ f99 + "," + +f100 + ","+f101 + ","+f102 + ","+f103 + ","+f104 + ","+f105 + ","+f106 + ","+f107 + ","+f108 + ","+f109 + "," + +f110 + ","+f111 + ","+f112 + ","+f113 + ","+f114 + ","+f115 + ","+f116 + ","+f117 + ","+f118 + ","+f119 + "," + +f120 + ","+f121 + ","+f122; + } } From 8bbd7251a596c6fad1a6675c077deb9fd7c8ff95 Mon Sep 17 00:00:00 2001 From: Claes Redestad <redestad@openjdk.org> Date: Fri, 26 Apr 2024 14:06:53 +0000 Subject: [PATCH 125/141] 8331187: Optimize MethodTypeDesc and ClassDesc.ofDescriptor for primitive types Reviewed-by: jvernee, liach --- .../classes/java/lang/constant/ClassDesc.java | 17 ++--- .../java/lang/constant/ConstantDescs.java | 20 +++--- .../java/lang/constant/ConstantUtils.java | 21 +++++-- .../lang/constant/MethodTypeDescImpl.java | 22 +++---- .../classes/sun/invoke/util/Wrapper.java | 33 ++++++---- .../lang/constant/ClassDescFactories.java | 63 +++++++++++++++++++ 6 files changed, 122 insertions(+), 54 deletions(-) create mode 100644 test/micro/org/openjdk/bench/java/lang/constant/ClassDescFactories.java diff --git a/src/java.base/share/classes/java/lang/constant/ClassDesc.java b/src/java.base/share/classes/java/lang/constant/ClassDesc.java index 60adc7f1ab1f0..6adba119180d0 100644 --- a/src/java.base/share/classes/java/lang/constant/ClassDesc.java +++ b/src/java.base/share/classes/java/lang/constant/ClassDesc.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -158,19 +158,10 @@ static ClassDesc of(String packageName, String className) { * @see ClassDesc#ofInternalName(String) */ static ClassDesc ofDescriptor(String descriptor) { - requireNonNull(descriptor); - if (descriptor.isEmpty()) { - throw new IllegalArgumentException( - "not a valid reference type descriptor: " + descriptor); - } - int depth = ConstantUtils.arrayDepth(descriptor); - if (depth > ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS) { - throw new IllegalArgumentException( - "Cannot create an array type descriptor with more than " + - ConstantUtils.MAX_ARRAY_TYPE_DESC_DIMENSIONS + " dimensions"); - } + // implicit null-check return (descriptor.length() == 1) - ? new PrimitiveClassDescImpl(descriptor) + ? Wrapper.forPrimitiveType(descriptor.charAt(0)).primitiveClassDescriptor() + // will throw IAE on descriptor.length == 0 or if array dimensions too long : new ReferenceClassDescImpl(descriptor); } diff --git a/src/java.base/share/classes/java/lang/constant/ConstantDescs.java b/src/java.base/share/classes/java/lang/constant/ConstantDescs.java index 82f56b7cbd487..de895fc7af5d9 100644 --- a/src/java.base/share/classes/java/lang/constant/ConstantDescs.java +++ b/src/java.base/share/classes/java/lang/constant/ConstantDescs.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -236,31 +236,31 @@ private ConstantDescs() { } CD_Object, CD_Object); /** {@link ClassDesc} representing the primitive type {@code int} */ - public static final ClassDesc CD_int = ClassDesc.ofDescriptor("I"); + public static final ClassDesc CD_int = new PrimitiveClassDescImpl("I"); /** {@link ClassDesc} representing the primitive type {@code long} */ - public static final ClassDesc CD_long = ClassDesc.ofDescriptor("J"); + public static final ClassDesc CD_long = new PrimitiveClassDescImpl("J"); /** {@link ClassDesc} representing the primitive type {@code float} */ - public static final ClassDesc CD_float = ClassDesc.ofDescriptor("F"); + public static final ClassDesc CD_float = new PrimitiveClassDescImpl("F"); /** {@link ClassDesc} representing the primitive type {@code double} */ - public static final ClassDesc CD_double = ClassDesc.ofDescriptor("D"); + public static final ClassDesc CD_double = new PrimitiveClassDescImpl("D"); /** {@link ClassDesc} representing the primitive type {@code short} */ - public static final ClassDesc CD_short = ClassDesc.ofDescriptor("S"); + public static final ClassDesc CD_short = new PrimitiveClassDescImpl("S"); /** {@link ClassDesc} representing the primitive type {@code byte} */ - public static final ClassDesc CD_byte = ClassDesc.ofDescriptor("B"); + public static final ClassDesc CD_byte = new PrimitiveClassDescImpl("B"); /** {@link ClassDesc} representing the primitive type {@code char} */ - public static final ClassDesc CD_char = ClassDesc.ofDescriptor("C"); + public static final ClassDesc CD_char = new PrimitiveClassDescImpl("C"); /** {@link ClassDesc} representing the primitive type {@code boolean} */ - public static final ClassDesc CD_boolean = ClassDesc.ofDescriptor("Z"); + public static final ClassDesc CD_boolean = new PrimitiveClassDescImpl("Z"); /** {@link ClassDesc} representing the primitive type {@code void} */ - public static final ClassDesc CD_void = ClassDesc.ofDescriptor("V"); + public static final ClassDesc CD_void = new PrimitiveClassDescImpl("V"); /** * {@link MethodHandleDesc} representing {@link MethodHandles#classData(Lookup, String, Class) MethodHandles.classData} diff --git a/src/java.base/share/classes/java/lang/constant/ConstantUtils.java b/src/java.base/share/classes/java/lang/constant/ConstantUtils.java index 10ed2758e3ac0..312aac68c6302 100644 --- a/src/java.base/share/classes/java/lang/constant/ConstantUtils.java +++ b/src/java.base/share/classes/java/lang/constant/ConstantUtils.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,6 +24,8 @@ */ package java.lang.constant; +import sun.invoke.util.Wrapper; + import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -195,10 +197,10 @@ static String dropFirstAndLastChar(String s) { * @return the list of types * @throws IllegalArgumentException if the descriptor string is not valid */ - static List<String> parseMethodDescriptor(String descriptor) { + static List<ClassDesc> parseMethodDescriptor(String descriptor) { int cur = 0, end = descriptor.length(); - ArrayList<String> ptypes = new ArrayList<>(); - ptypes.add(null); //placeholder for return type + ArrayList<ClassDesc> ptypes = new ArrayList<>(); + ptypes.add(null); // placeholder for return type if (cur >= end || descriptor.charAt(cur) != '(') throw new IllegalArgumentException("Bad method descriptor: " + descriptor); @@ -208,7 +210,7 @@ static List<String> parseMethodDescriptor(String descriptor) { int len = skipOverFieldSignature(descriptor, cur, end, false); if (len == 0) throw new IllegalArgumentException("Bad method descriptor: " + descriptor); - ptypes.add(descriptor.substring(cur, cur + len)); + ptypes.add(resolveClassDesc(descriptor, cur, len)); cur += len; } if (cur >= end) @@ -218,10 +220,17 @@ static List<String> parseMethodDescriptor(String descriptor) { int rLen = skipOverFieldSignature(descriptor, cur, end, true); if (rLen == 0 || cur + rLen != end) throw new IllegalArgumentException("Bad method descriptor: " + descriptor); - ptypes.set(0, descriptor.substring(cur, cur + rLen)); + ptypes.set(0, resolveClassDesc(descriptor, cur, rLen)); return ptypes; } + private static ClassDesc resolveClassDesc(String descriptor, int start, int len) { + if (len == 1) { + return Wrapper.forBasicType(descriptor.charAt(start)).primitiveClassDescriptor(); + } + return ClassDesc.ofDescriptor(descriptor.substring(start, start + len)); + } + private static final char JVM_SIGNATURE_ARRAY = '['; private static final char JVM_SIGNATURE_BYTE = 'B'; private static final char JVM_SIGNATURE_CHAR = 'C'; diff --git a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java index c50cf7c58f0a6..40a9cf8bd60a3 100644 --- a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java +++ b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -88,21 +88,19 @@ static MethodTypeDescImpl ofTrusted(ClassDesc returnType, ClassDesc[] trustedArg * @jvms 4.3.3 Method Descriptors */ static MethodTypeDescImpl ofDescriptor(String descriptor) { - requireNonNull(descriptor); - - List<String> types = ConstantUtils.parseMethodDescriptor(descriptor); - - int paramCount = types.size() - 1; - var paramTypes = paramCount > 0 ? new ClassDesc[paramCount] : ConstantUtils.EMPTY_CLASSDESC; - for (int i = 0; i < paramCount; i++) { - paramTypes[i] = ClassDesc.ofDescriptor(types.get(i + 1)); - } - - MethodTypeDescImpl result = ofTrusted(ClassDesc.ofDescriptor(types.getFirst()), paramTypes); + // Implicit null-check of descriptor + List<ClassDesc> ptypes = ConstantUtils.parseMethodDescriptor(descriptor); + int args = ptypes.size() - 1; + ClassDesc[] paramTypes = args > 0 + ? ptypes.subList(1, args + 1).toArray(ConstantUtils.EMPTY_CLASSDESC) + : ConstantUtils.EMPTY_CLASSDESC; + + MethodTypeDescImpl result = ofTrusted(ptypes.get(0), paramTypes); result.cachedDescriptorString = descriptor; return result; } + @Override public ClassDesc returnType() { return returnType; diff --git a/src/java.base/share/classes/sun/invoke/util/Wrapper.java b/src/java.base/share/classes/sun/invoke/util/Wrapper.java index 76aede094872c..3a28d63b7c475 100644 --- a/src/java.base/share/classes/sun/invoke/util/Wrapper.java +++ b/src/java.base/share/classes/sun/invoke/util/Wrapper.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,25 +25,27 @@ package sun.invoke.util; -import java.util.Map; import static sun.invoke.util.Wrapper.NumericClasses.*; import jdk.internal.vm.annotation.DontInline; +import java.lang.constant.ClassDesc; +import java.lang.constant.ConstantDescs; + public enum Wrapper { // wrapperType simple primitiveType simple char emptyArray format numericClass superClass - BOOLEAN( Boolean.class, "Boolean", boolean.class, "boolean", 'Z', new boolean[0], Format.unsigned( 1), 0, 0), + BOOLEAN( Boolean.class, "Boolean", boolean.class, "boolean", 'Z', new boolean[0], Format.unsigned( 1), 0, 0, ConstantDescs.CD_boolean), // These must be in the order defined for widening primitive conversions in JLS 5.1.2 // Avoid boxing integral types here to defer initialization of internal caches - BYTE ( Byte.class, "Byte", byte.class, "byte", 'B', new byte[0], Format.signed( 8), BYTE_CLASS, BYTE_SUPERCLASSES), - SHORT ( Short.class, "Short", short.class, "short", 'S', new short[0], Format.signed( 16), SHORT_CLASS, SHORT_SUPERCLASSES), - CHAR (Character.class, "Character", char.class, "char", 'C', new char[0], Format.unsigned(16), CHAR_CLASS, CHAR_SUPERCLASSES), - INT ( Integer.class, "Integer", int.class, "int", 'I', new int[0], Format.signed( 32), INT_CLASS, INT_SUPERCLASSES), - LONG ( Long.class, "Long", long.class, "long", 'J', new long[0], Format.signed( 64), LONG_CLASS, LONG_SUPERCLASSES), - FLOAT ( Float.class, "Float", float.class, "float", 'F', new float[0], Format.floating(32), FLOAT_CLASS, FLOAT_SUPERCLASSES), - DOUBLE ( Double.class, "Double", double.class, "double", 'D', new double[0], Format.floating(64), DOUBLE_CLASS, DOUBLE_CLASS), - OBJECT ( Object.class, "Object", Object.class, "Object", 'L', new Object[0], Format.other( 1), 0, 0), + BYTE ( Byte.class, "Byte", byte.class, "byte", 'B', new byte[0], Format.signed( 8), BYTE_CLASS, BYTE_SUPERCLASSES, ConstantDescs.CD_byte), + SHORT ( Short.class, "Short", short.class, "short", 'S', new short[0], Format.signed( 16), SHORT_CLASS, SHORT_SUPERCLASSES, ConstantDescs.CD_short), + CHAR (Character.class, "Character", char.class, "char", 'C', new char[0], Format.unsigned(16), CHAR_CLASS, CHAR_SUPERCLASSES, ConstantDescs.CD_char), + INT ( Integer.class, "Integer", int.class, "int", 'I', new int[0], Format.signed( 32), INT_CLASS, INT_SUPERCLASSES, ConstantDescs.CD_int), + LONG ( Long.class, "Long", long.class, "long", 'J', new long[0], Format.signed( 64), LONG_CLASS, LONG_SUPERCLASSES, ConstantDescs.CD_long), + FLOAT ( Float.class, "Float", float.class, "float", 'F', new float[0], Format.floating(32), FLOAT_CLASS, FLOAT_SUPERCLASSES, ConstantDescs.CD_float), + DOUBLE ( Double.class, "Double", double.class, "double", 'D', new double[0], Format.floating(64), DOUBLE_CLASS, DOUBLE_CLASS, ConstantDescs.CD_double), + OBJECT ( Object.class, "Object", Object.class, "Object", 'L', new Object[0], Format.other( 1), 0, 0, ConstantDescs.CD_Object), // VOID must be the last type, since it is "assignable" from any other type: - VOID ( Void.class, "Void", void.class, "void", 'V', null, Format.other( 0), 0, 0), + VOID ( Void.class, "Void", void.class, "void", 'V', null, Format.other( 0), 0, 0, ConstantDescs.CD_void), ; public static final int COUNT = 10; @@ -58,8 +60,9 @@ public enum Wrapper { private final int superClasses; private final String wrapperSimpleName; private final String primitiveSimpleName; + private final ClassDesc primitiveTypeDesc; - private Wrapper(Class<?> wtype, String wtypeName, Class<?> ptype, String ptypeName, char tchar, Object emptyArray, int format, int numericClass, int superClasses) { + private Wrapper(Class<?> wtype, String wtypeName, Class<?> ptype, String ptypeName, char tchar, Object emptyArray, int format, int numericClass, int superClasses, ClassDesc primitiveTypeDesc) { this.wrapperType = wtype; this.primitiveType = ptype; this.basicTypeChar = tchar; @@ -70,6 +73,7 @@ private Wrapper(Class<?> wtype, String wtypeName, Class<?> ptype, String ptypeNa this.superClasses = superClasses; this.wrapperSimpleName = wtypeName; this.primitiveSimpleName = ptypeName; + this.primitiveTypeDesc = primitiveTypeDesc; } /** For debugging, give the details of this wrapper. */ @@ -376,6 +380,9 @@ public static Wrapper forBasicType(Class<?> type) { } } + /** A nominal descriptor of the primitive type */ + public ClassDesc primitiveClassDescriptor() { return primitiveTypeDesc; } + /** What is the primitive type wrapped by this wrapper? */ public Class<?> primitiveType() { return primitiveType; } diff --git a/test/micro/org/openjdk/bench/java/lang/constant/ClassDescFactories.java b/test/micro/org/openjdk/bench/java/lang/constant/ClassDescFactories.java new file mode 100644 index 0000000000000..c74271995d529 --- /dev/null +++ b/test/micro/org/openjdk/bench/java/lang/constant/ClassDescFactories.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2024, 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 org.openjdk.bench.java.lang.constant; + +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Fork; +import org.openjdk.jmh.annotations.Measurement; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Param; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; +import org.openjdk.jmh.annotations.Warmup; + +import java.lang.constant.ClassDesc; +import java.util.concurrent.TimeUnit; + +/** + * Performance of conversion from and to method type descriptor symbols with + * descriptor strings and class descriptor symbols + */ +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.NANOSECONDS) +@Warmup(iterations = 3, time = 2) +@Measurement(iterations = 6, time = 1) +@Fork(1) +@State(Scope.Thread) +public class ClassDescFactories { + + @Param({ + "Ljava/lang/Object;", + "V", + "I" + }) + public String descString; + + @Benchmark + public ClassDesc ofDescriptor() { + return ClassDesc.ofDescriptor(descString); + } +} From d13e53346f3cd50bf7a4241ba86d2e21d9081bbe Mon Sep 17 00:00:00 2001 From: Hamlin Li <mli@openjdk.org> Date: Fri, 26 Apr 2024 14:09:29 +0000 Subject: [PATCH 126/141] 8321014: RISC-V: C2 VectorLoadShuffle Reviewed-by: luhenry, fyang --- src/hotspot/cpu/riscv/riscv_v.ad | 44 ++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/hotspot/cpu/riscv/riscv_v.ad b/src/hotspot/cpu/riscv/riscv_v.ad index 3069336ac111b..7869d6156e590 100644 --- a/src/hotspot/cpu/riscv/riscv_v.ad +++ b/src/hotspot/cpu/riscv/riscv_v.ad @@ -82,6 +82,15 @@ source %{ case Op_VectorCastHF2F: case Op_VectorCastF2HF: return UseZvfh; + case Op_VectorLoadShuffle: + case Op_VectorRearrange: + // vlen >= 4 is required, because min vector size for byte is 4 on riscv, + // VectorLoadShuffle is from byte to X, so it requires vlen >= 4. + // VectorRearrange depends on VectorLoadShuffle, so it also requires vlen >= 4. + if (vlen < 4) { + return false; + } + break; default: break; } @@ -3561,6 +3570,41 @@ instruct vmask_reinterpret_diff_esize(vRegMask dst, vRegMask_V0 src, vReg tmp) % ins_pipe(pipe_slow); %} +// ------------------------------ Vector shuffle ------------------------------- + +instruct loadshuffleB(vReg dst) %{ + predicate(Matcher::vector_element_basic_type(n) == T_BYTE); + match(Set dst (VectorLoadShuffle dst)); + format %{ "loadshuffleB $dst, $dst" %} + ins_encode %{ + // For T_BYTE, no need to do anything + %} + ins_pipe(pipe_class_empty); +%} + +instruct loadshuffleX(vReg dst, vReg src) %{ + predicate(Matcher::vector_element_basic_type(n) == T_DOUBLE || + Matcher::vector_element_basic_type(n) == T_LONG || + Matcher::vector_element_basic_type(n) == T_FLOAT || + Matcher::vector_element_basic_type(n) == T_INT || + Matcher::vector_element_basic_type(n) == T_SHORT); + match(Set dst (VectorLoadShuffle src)); + effect(TEMP_DEF dst); + format %{ "loadshuffleX $dst, $src" %} + ins_encode %{ + BasicType bt = Matcher::vector_element_basic_type(this); + __ vsetvli_helper(bt, Matcher::vector_length(this)); + if (bt == T_SHORT) { + __ vzext_vf2(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); + } else if (bt == T_FLOAT || bt == T_INT) { + __ vzext_vf4(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); + } else { // bt == T_DOUBLE || bt == T_LONG + __ vzext_vf8(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); + } + %} + ins_pipe(pipe_slow); +%} + // ------------------------------ Vector rearrange ----------------------------- instruct rearrange(vReg dst, vReg src, vReg shuffle) %{ From 0bf516f7ba8425134ca42d856648ab19f5c69a86 Mon Sep 17 00:00:00 2001 From: Korov <korov9@163.com> Date: Fri, 26 Apr 2024 14:12:49 +0000 Subject: [PATCH 127/141] 8330624: Inconsistent use of semicolon in the code snippet of java.io.Serializable javadoc Reviewed-by: rriggs --- src/java.base/share/classes/java/io/Serializable.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/java.base/share/classes/java/io/Serializable.java b/src/java.base/share/classes/java/io/Serializable.java index 9add677049c01..eb50316925a1a 100644 --- a/src/java.base/share/classes/java/io/Serializable.java +++ b/src/java.base/share/classes/java/io/Serializable.java @@ -68,7 +68,7 @@ * * <PRE> * private void writeObject(java.io.ObjectOutputStream out) - * throws IOException + * throws IOException; * private void readObject(java.io.ObjectInputStream in) * throws IOException, ClassNotFoundException; * private void readObjectNoData() From 07facd0420c5e51f6e85e6210644df1659fbf765 Mon Sep 17 00:00:00 2001 From: Erik Gahlin <egahlin@openjdk.org> Date: Fri, 26 Apr 2024 17:15:09 +0000 Subject: [PATCH 128/141] 8330734: JFR: Re-engineer mirror class mechanism Reviewed-by: mgronlun --- .../jdk/jfr/events/DeserializationEvent.java | 5 +- .../jdk/jfr/events/ErrorThrownEvent.java | 5 +- .../jfr/events/ExceptionStatisticsEvent.java | 5 +- .../jdk/jfr/events/ExceptionThrownEvent.java | 5 +- .../jdk/jfr/events/ProcessStartEvent.java | 5 +- .../SecurityPropertyModificationEvent.java | 5 +- .../events/SecurityProviderServiceEvent.java | 5 +- .../SerializationMisdeclarationEvent.java | 5 +- .../jdk/jfr/events/SocketReadEvent.java | 5 +- .../jdk/jfr/events/SocketWriteEvent.java | 5 +- .../jdk/jfr/events/TLSHandshakeEvent.java | 5 +- .../jdk/jfr/events/ThreadSleepEvent.java | 5 +- .../jdk/jfr/events/VirtualThreadEndEvent.java | 5 +- .../jfr/events/VirtualThreadPinnedEvent.java | 5 +- .../jfr/events/VirtualThreadStartEvent.java | 5 +- .../VirtualThreadSubmitFailedEvent.java | 5 +- .../jdk/jfr/events/X509CertificateEvent.java | 5 +- .../jdk/jfr/events/X509ValidationEvent.java | 5 +- .../jfr/internal/EventInstrumentation.java | 21 +---- .../classes/jdk/jfr/internal/JVMUpcalls.java | 5 +- .../jdk/jfr/internal/MetadataRepository.java | 7 +- .../classes/jdk/jfr/internal/MirrorEvent.java | 46 +++++------ .../jdk/jfr/internal/MirrorEvents.java | 81 +++++++++---------- .../classes/jdk/jfr/internal/TypeLibrary.java | 12 ++- .../jdk/jfr/internal/util/ImplicitFields.java | 6 +- .../classes/jdk/jfr/internal/util/Utils.java | 18 ++++- 26 files changed, 127 insertions(+), 159 deletions(-) diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java index 66c376e9022dc..dd90a38b14c61 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/DeserializationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, 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,9 +36,8 @@ @Label("Deserialization") @Name("jdk.Deserialization") @Description("Results of deserialization and ObjectInputFilter checks") -@MirrorEvent(className = "jdk.internal.event.DeserializationEvent") @RemoveFields("duration") -public final class DeserializationEvent extends AbstractJDKEvent { +public final class DeserializationEvent extends MirrorEvent { @Label("Filter Configured") public boolean filterConfigured; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java index 337cfad20fb7d..a87f51ff718fc 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ErrorThrownEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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,9 +36,8 @@ @Label("Java Error") @Category("Java Application") @Description("An object derived from java.lang.Error has been created. OutOfMemoryErrors are ignored") -@MirrorEvent(className = "jdk.internal.event.ErrorThrownEvent") @RemoveFields("duration") -public final class ErrorThrownEvent extends AbstractJDKEvent { +public final class ErrorThrownEvent extends MirrorEvent { @Label("Message") public String message; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java index cdaa6372f68c7..795f618b4e62a 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionStatisticsEvent.java @@ -31,14 +31,15 @@ import jdk.jfr.Name; import jdk.jfr.StackTrace; import jdk.jfr.internal.MirrorEvent; +import jdk.jfr.internal.RemoveFields; import jdk.jfr.internal.Type; @Name(Type.EVENT_NAME_PREFIX + "ExceptionStatistics") @Label("Exception Statistics") @Category({ "Java Application", "Statistics" }) @Description("Number of objects derived from java.lang.Throwable that have been created") -@MirrorEvent(className = "jdk.internal.event.ExceptionStatisticsEvent") -public final class ExceptionStatisticsEvent extends AbstractPeriodicEvent { +@RemoveFields({"duration", "eventThread", "stackTrace"}) +public final class ExceptionStatisticsEvent extends MirrorEvent { @Label("Exceptions Created") public long throwables; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java index c61965755bde5..22c87f3132d43 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ExceptionThrownEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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 @@ -37,9 +37,8 @@ @Label("Java Exception") @Category("Java Application") @Description("An object derived from java.lang.Exception has been created") -@MirrorEvent(className = "jdk.internal.event.ExceptionThrownEvent") @RemoveFields("duration") -public final class ExceptionThrownEvent extends AbstractJDKEvent { +public final class ExceptionThrownEvent extends MirrorEvent { @Label("Message") public String message; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java index 5ad2dc82fc1de..01abc75e1559b 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ProcessStartEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,10 +36,9 @@ @Label("Process Start") @Name("jdk.ProcessStart") @Description("Operating system process started") -@MirrorEvent(className = "jdk.internal.event.ProcessStartEvent") @RemoveFields("duration") @StackFilter({"java.lang.ProcessBuilder", "java.lang.Runtime::exec"}) -public final class ProcessStartEvent extends AbstractJDKEvent { +public final class ProcessStartEvent extends MirrorEvent { @Label("Process Id") public long pid; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java index 7f4e5045c9d23..1e6aea7b5362d 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityPropertyModificationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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,10 +33,9 @@ @Label("Security Property Modification") @Name("jdk.SecurityPropertyModification") @Description("Modification of Security property") -@MirrorEvent(className = "jdk.internal.event.SecurityPropertyModificationEvent") @RemoveFields("duration") @StackFilter({"java.security.Security::setProperty"}) -public final class SecurityPropertyModificationEvent extends AbstractJDKEvent { +public final class SecurityPropertyModificationEvent extends MirrorEvent { @Label("Key") public String key; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java index 8bbbf09d87df5..fe4dbaec31d12 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SecurityProviderServiceEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -36,10 +36,9 @@ @Label("Security Provider Instance Request") @Name("jdk.SecurityProviderService") @Description("Details of Provider.getInstance(String type, String algorithm) calls") -@MirrorEvent(className = "jdk.internal.event.SecurityProviderServiceEvent") @RemoveFields("duration") @StackFilter({"java.security.Provider::getService"}) -public final class SecurityProviderServiceEvent extends AbstractJDKEvent { +public final class SecurityProviderServiceEvent extends MirrorEvent { @Label("Type of Service") public String type; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java index b88ba270708fc..ce170d5ad9ec4 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SerializationMisdeclarationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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,9 +40,8 @@ " The checks are usually performed just once per serializable class," + " the first time it is used by serialization." + " Under high memory pressure, a class might be re-checked again.") -@MirrorEvent(className = "jdk.internal.event.SerializationMisdeclarationEvent") @RemoveFields({"duration", "stackTrace", "eventThread"}) -public final class SerializationMisdeclarationEvent extends AbstractJDKEvent { +public final class SerializationMisdeclarationEvent extends MirrorEvent { @Label("Misdeclared Class") public Class<?> misdeclaredClass; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java index 7ef63765eec56..917eabd92067f 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SocketReadEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,8 +38,7 @@ @Label("Socket Read") @Category("Java Application") @Description("Reading data from a socket") -@MirrorEvent(className = "jdk.internal.event.SocketReadEvent") -public final class SocketReadEvent extends AbstractJDKEvent { +public final class SocketReadEvent extends MirrorEvent { @Label("Remote Host") public String host; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java index 6e776b8871d74..92c85c132d4ad 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/SocketWriteEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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 @@ -37,8 +37,7 @@ @Label("Socket Write") @Category("Java Application") @Description("Writing data to a socket") -@MirrorEvent(className = "jdk.internal.event.SocketWriteEvent") -public final class SocketWriteEvent extends AbstractJDKEvent { +public final class SocketWriteEvent extends MirrorEvent { @Label("Remote Host") public String host; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java index df2f4cfc2ed55..d0d81ac63bc39 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/TLSHandshakeEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -37,10 +37,9 @@ @Label("TLS Handshake") @Name("jdk.TLSHandshake") @Description("Parameters used in TLS Handshake") -@MirrorEvent(className = "jdk.internal.event.TLSHandshakeEvent") @RemoveFields("duration") @StackFilter("sun.security.ssl.Finished::recordEvent") -public final class TLSHandshakeEvent extends AbstractJDKEvent { +public final class TLSHandshakeEvent extends MirrorEvent { @Label("Peer Host") public String peerHost; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java index 216ad370acafd..617f18511ce15 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/ThreadSleepEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,11 +34,10 @@ @Category("Java Application") @Label("Java Thread Sleep") @Name("jdk.ThreadSleep") -@MirrorEvent(className = "jdk.internal.event.ThreadSleepEvent") @StackFilter({"java.lang.Thread::afterSleep", "java.lang.Thread::sleepNanos", "java.lang.Thread::sleep"}) -public final class ThreadSleepEvent extends AbstractJDKEvent { +public final class ThreadSleepEvent extends MirrorEvent { @Label("Sleep Time") @Timespan(Timespan.NANOSECONDS) public long time; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java index 8ad64abf1bfd6..12d404ace44dc 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadEndEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,9 +34,8 @@ @Category("Java Application") @Label("Virtual Thread End") @Name("jdk.VirtualThreadEnd") -@MirrorEvent(className = "jdk.internal.event.VirtualThreadEndEvent") @RemoveFields({"duration", "stackTrace"}) -public final class VirtualThreadEndEvent extends AbstractJDKEvent { +public final class VirtualThreadEndEvent extends MirrorEvent { @Label("Thread Id") public long javaThreadId; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java index f109966f1be5d..83547125ac53e 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadPinnedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -33,6 +33,5 @@ @Category("Java Application") @Label("Virtual Thread Pinned") @Name("jdk.VirtualThreadPinned") -@MirrorEvent(className = "jdk.internal.event.VirtualThreadPinnedEvent") -public final class VirtualThreadPinnedEvent extends AbstractJDKEvent { +public final class VirtualThreadPinnedEvent extends MirrorEvent { } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java index 646c2379178a9..216ecd9ba79a6 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadStartEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,9 +34,8 @@ @Category("Java Application") @Label("Virtual Thread Start") @Name("jdk.VirtualThreadStart") -@MirrorEvent(className = "jdk.internal.event.VirtualThreadStartEvent") @RemoveFields("duration") -public final class VirtualThreadStartEvent extends AbstractJDKEvent { +public final class VirtualThreadStartEvent extends MirrorEvent { @Label("Thread Id") public long javaThreadId; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java index d59fbe2931e98..5fab1eaebf0f3 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/VirtualThreadSubmitFailedEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, 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,9 +36,8 @@ @Label("Virtual Thread Submit Failed") @Name("jdk.VirtualThreadSubmitFailed") @Description("Submit of task for virtual thread failed") -@MirrorEvent(className = "jdk.internal.event.VirtualThreadSubmitFailedEvent") @RemoveFields("duration") -public final class VirtualThreadSubmitFailedEvent extends AbstractJDKEvent { +public final class VirtualThreadSubmitFailedEvent extends MirrorEvent { @Label("Thread Id") public long javaThreadId; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java index 7ec9c04360579..ab3aaafc52452 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/X509CertificateEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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,9 +33,8 @@ @Label("X509 Certificate") @Name("jdk.X509Certificate") @Description("Details of X.509 Certificate parsed by JDK") -@MirrorEvent(className = "jdk.internal.event.X509CertificateEvent") @RemoveFields("duration") -public final class X509CertificateEvent extends AbstractJDKEvent { +public final class X509CertificateEvent extends MirrorEvent { @Label("Signature Algorithm") public String algorithm; diff --git a/src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java index c4a73d2ffe841..5cc05f2f3ebd8 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/events/X509ValidationEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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,9 +33,8 @@ @Label("X509 Validation") @Name("jdk.X509Validation") @Description("Serial numbers from X.509 Certificates forming chain of trust") -@MirrorEvent(className = "jdk.internal.event.X509ValidationEvent") @RemoveFields("duration") -public final class X509ValidationEvent extends AbstractJDKEvent { +public final class X509ValidationEvent extends MirrorEvent { @CertificateId @Label("Certificate Id") @Unsigned diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java index b8d386f08bf32..9e99c90788ca8 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/EventInstrumentation.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, 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,7 +90,6 @@ private record SettingDesc(ClassDesc paramType, String methodName) { private static final ClassDesc TYPE_ISE = Bytecode.classDesc(IllegalStateException.class); private static final ClassDesc TYPE_EVENT_WRITER = classDesc(EventWriter.class); private static final ClassDesc TYPE_EVENT_WRITER_FACTORY = ClassDesc.of("jdk.jfr.internal.event.EventWriterFactory"); - private static final ClassDesc TYPE_MIRROR_EVENT = Bytecode.classDesc(MirrorEvent.class); private static final ClassDesc TYPE_OBJECT = Bytecode.classDesc(Object.class); private static final ClassDesc TYPE_SETTING_DEFINITION = Bytecode.classDesc(SettingDefinition.class); private static final MethodDesc METHOD_BEGIN = MethodDesc.of("begin", "()V"); @@ -144,9 +143,7 @@ private record SettingDesc(ClassDesc paramType, String methodName) { private ImplicitFields determineImplicitFields() { if (isJDK) { - // For now, only support mirror events in java.base - String fullName = "java.base:" + className; - Class<?> eventClass = MirrorEvents.find(fullName); + Class<?> eventClass = MirrorEvents.find(isJDK, className); if (eventClass != null) { return new ImplicitFields(eventClass); } @@ -221,20 +218,6 @@ boolean isEnabled() { return true; } - boolean isMirrorEvent() { - String typeDescriptor = TYPE_MIRROR_EVENT.descriptorString(); - for (ClassElement ce : classModel.elements()) { - if (ce instanceof RuntimeVisibleAnnotationsAttribute rvaa) { - for (var annotation : rvaa.annotations()) { - if (annotation.className().equalsString(typeDescriptor)) { - return true; - } - } - } - } - return false; - } - @SuppressWarnings("unchecked") // Only supports String, String[] and Boolean values private static <T> T annotationValue(ClassModel classModel, ClassDesc classDesc, Class<T> type) { diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMUpcalls.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMUpcalls.java index 25d0e0418f1ac..9c37a1ab660c9 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMUpcalls.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/JVMUpcalls.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, 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 @@ -112,9 +112,6 @@ static byte[] bytesForEagerInstrumentation(long traceId, boolean forceInstrument Logger.log(LogTag.JFR_SYSTEM, LogLevel.INFO, "Skipping instrumentation for " + eventName + " since container support is missing"); return oldBytes; } - if (ei.isMirrorEvent()) { - return oldBytes; - } if (!forceInstrumentation) { // Assume we are recording diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java index 29267803009c1..7d61d3c984fe2 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java @@ -144,10 +144,6 @@ public synchronized EventType register(Class<? extends jdk.internal.event.Event> } EventConfiguration configuration = getConfiguration(eventClass, true); if (configuration == null) { - if (eventClass.getAnnotation(MirrorEvent.class) != null) { - // Don't register mirror classes. - return null; - } PlatformEventType pe = findMirrorType(eventClass); configuration = makeConfiguration(eventClass, pe, dynamicAnnotations, dynamicFields); } @@ -162,8 +158,7 @@ public synchronized EventType register(Class<? extends jdk.internal.event.Event> } private PlatformEventType findMirrorType(Class<? extends jdk.internal.event.Event> eventClass) throws InternalError { - String fullName = eventClass.getModule().getName() + ":" + eventClass.getName(); - Class<? extends Event> mirrorClass = MirrorEvents.find(fullName); + Class<? extends MirrorEvent> mirrorClass = MirrorEvents.find(eventClass); if (mirrorClass == null) { return null; // not a mirror } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvent.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvent.java index ce5126e3afe6a..deabd2aaacd1c 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvent.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvent.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -22,32 +22,28 @@ * or visit www.oracle.com if you need additional information or have any * questions. */ - package jdk.jfr.internal; -import java.lang.annotation.Retention; -import java.lang.annotation.Target; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.ElementType; +import jdk.jfr.Enabled; +import jdk.jfr.Registered; +import jdk.jfr.StackTrace; + /** - * Any event class annotated with this annotation must be added - * to the {@link MirrorEvents) class for it to take effect. + * A mirror event is a fictitious event class that contains metadata about an + * event, but not the implementation to write the event data to buffers. + * <p> + * A mirror event should be used when an event class is in a module where a + * dependency on the jdk.jfr module is not possible, for example, due to a + * circular dependency. + * <p> + * Subclass the MirrorEvent class and add the exact same fields as the actual + * event, but with labels, descriptions etc. + * <p> + * For the mirror mechanism to work, the mirror class must be registered in the + * jdk.jfr.internal.MirrorEvents class. */ -@Retention(RetentionPolicy.RUNTIME) -@Target({ ElementType.TYPE }) -public @interface MirrorEvent { - /** - * Fully qualified name of the class to mirror metadata for (for example, - * {@code "jdk.internal.event.Example"}) - * - * @return the fully qualified class name of the event - */ - String className(); - - /** - * The module where the event is located, by default {@code "java.base"}. - * - * @return the module name - */ - String module() default "java.base"; +@Registered(false) +@Enabled(false) +@StackTrace(false) +public abstract class MirrorEvent { } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java index 7c74bb41f4acd..db148c105c4c7 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MirrorEvents.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,10 +24,9 @@ */ package jdk.jfr.internal; -import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; -import jdk.jfr.Event; import jdk.jfr.events.DeserializationEvent; import jdk.jfr.events.ErrorThrownEvent; import jdk.jfr.events.ExceptionStatisticsEvent; @@ -47,52 +46,46 @@ import jdk.jfr.events.X509CertificateEvent; import jdk.jfr.events.X509ValidationEvent; -public final class MirrorEvents { - private static final Class<?>[] mirrorEventClasses = { - DeserializationEvent.class, - ProcessStartEvent.class, - SecurityPropertyModificationEvent.class, - SecurityProviderServiceEvent.class, - SerializationMisdeclarationEvent.class, - SocketReadEvent.class, - SocketWriteEvent.class, - ThreadSleepEvent.class, - TLSHandshakeEvent.class, - VirtualThreadStartEvent.class, - VirtualThreadEndEvent.class, - VirtualThreadPinnedEvent.class, - VirtualThreadSubmitFailedEvent.class, - X509CertificateEvent.class, - X509ValidationEvent.class, - ErrorThrownEvent.class, - ExceptionStatisticsEvent.class, - ExceptionThrownEvent.class, +/** + * This class registers all mirror events. + */ +final class MirrorEvents { + private static final Map<String, Class<? extends MirrorEvent>> mirrorLookup = new ConcurrentHashMap<>(); + + // Add mirror event mapping here. See MirrorEvent class for details. + static { + register("jdk.internal.event.DeserializationEvent", DeserializationEvent.class); + register("jdk.internal.event.ProcessStartEvent", ProcessStartEvent.class); + register("jdk.internal.event.SecurityPropertyModificationEvent", SecurityPropertyModificationEvent.class); + register("jdk.internal.event.SecurityProviderServiceEvent", SecurityProviderServiceEvent.class); + register("jdk.internal.event.SerializationMisdeclarationEvent", SerializationMisdeclarationEvent.class); + register("jdk.internal.event.SocketReadEvent", SocketReadEvent.class); + register("jdk.internal.event.SocketWriteEvent", SocketWriteEvent.class); + register("jdk.internal.event.ThreadSleepEvent", ThreadSleepEvent.class); + register("jdk.internal.event.TLSHandshakeEvent", TLSHandshakeEvent.class); + register("jdk.internal.event.VirtualThreadStartEvent", VirtualThreadStartEvent.class); + register("jdk.internal.event.VirtualThreadEndEvent", VirtualThreadEndEvent.class); + register("jdk.internal.event.VirtualThreadPinnedEvent", VirtualThreadPinnedEvent.class); + register("jdk.internal.event.VirtualThreadSubmitFailedEvent", VirtualThreadSubmitFailedEvent.class); + register("jdk.internal.event.X509CertificateEvent", X509CertificateEvent.class); + register("jdk.internal.event.X509ValidationEvent", X509ValidationEvent.class); + register("jdk.internal.event.ErrorThrownEvent", ErrorThrownEvent.class); + register("jdk.internal.event.ExceptionStatisticsEvent", ExceptionStatisticsEvent.class); + register("jdk.internal.event.ExceptionThrownEvent", ExceptionThrownEvent.class); }; - private static final Map<String, Class<? extends Event>> mirrorLookup = createLookup(); + private static void register(String eventClassName, Class<? extends MirrorEvent> mirrorClass) { + mirrorLookup.put(eventClassName, mirrorClass); + } - public static Class<? extends Event> find(String name) { - // When <clinit> of this class is executed it may lead - // to a JVM up call and invocation of this method before - // the mirrorLookup field has been set. This is fine, - // mirrors should not be instrumented. - if (mirrorLookup != null) { - return mirrorLookup.get(name); - } - return null; + static Class<? extends MirrorEvent> find(Class<? extends jdk.internal.event.Event> eventClass) { + return find(eventClass.getClassLoader() == null, eventClass.getName()); } - @SuppressWarnings("unchecked") - private static Map<String, Class<? extends Event>> createLookup() { - Map<String, Class<? extends Event>> mirrors = new HashMap<>(); - for (Class<?> eventClass : mirrorEventClasses) { - MirrorEvent me = eventClass.getAnnotation(MirrorEvent.class); - if (me == null) { - throw new InternalError("Mirror class must have annotation " + MirrorEvent.class.getName()); - } - String fullName = me.module() + ":" + me.className(); - mirrors.put(fullName, (Class<? extends Event>) eventClass); + static Class<? extends MirrorEvent> find(boolean bootClassLoader, String name) { + if (bootClassLoader) { + return mirrorLookup.get(name); } - return mirrors; + return null; } } diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java index 19c83b3dc1c2b..cab6e7befe1aa 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/TypeLibrary.java @@ -263,7 +263,7 @@ public static synchronized Type createType(Class<?> clazz, List<AnnotationElemen // STRUCT String superType = null; boolean eventType = false; - if (jdk.internal.event.Event.class.isAssignableFrom(clazz)) { + if (isEventClass(clazz)) { superType = Type.SUPER_TYPE_EVENT; eventType= true; } @@ -291,6 +291,16 @@ public static synchronized Type createType(Class<?> clazz, List<AnnotationElemen return type; } + private static boolean isEventClass(Class<?> clazz) { + if (jdk.internal.event.Event.class.isAssignableFrom(clazz)) { + return true; + } + if (MirrorEvent.class.isAssignableFrom(clazz)) { + return true; + } + return false; + } + private static void addAnnotations(Class<?> clazz, Type type, List<AnnotationElement> dynamicAnnotations) { ArrayList<AnnotationElement> aes = new ArrayList<>(); if (dynamicAnnotations.isEmpty()) { diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/ImplicitFields.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/ImplicitFields.java index 8e302f8542f60..c97efe0bdb9f0 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/ImplicitFields.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/ImplicitFields.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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,11 +41,11 @@ public final class ImplicitFields { private final List<String> fields = new ArrayList<>(4); public ImplicitFields(Class<?> eventClass) { - fields.add(START_TIME); // for completeness, not really needed + fields.add(START_TIME); fields.add(DURATION); fields.add(STACK_TRACE); fields.add(EVENT_THREAD); - for (Class<?> c = eventClass; jdk.internal.event.Event.class != c; c = c.getSuperclass()) { + for (Class<?> c = eventClass; !Utils.isEventBaseClass(c); c = c.getSuperclass()) { RemoveFields rf = c.getAnnotation(RemoveFields.class); if (rf != null) { for (String value : rf.value()) { diff --git a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java index 4ed36989277eb..c133a11b3c53a 100644 --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/util/Utils.java @@ -51,6 +51,7 @@ import jdk.jfr.internal.LogLevel; import jdk.jfr.internal.LogTag; import jdk.jfr.internal.Logger; +import jdk.jfr.internal.MirrorEvent; import jdk.jfr.internal.SecuritySupport; import jdk.jfr.internal.Type; import jdk.jfr.internal.settings.PeriodSetting; @@ -206,9 +207,8 @@ public static <T> List<T> sanitizeNullFreeList(List<T> elements, Class<T> clazz) } public static List<Field> getVisibleEventFields(Class<?> clazz) { - Utils.ensureValidEventSubclass(clazz); List<Field> fields = new ArrayList<>(); - for (Class<?> c = clazz; c != jdk.internal.event.Event.class; c = c.getSuperclass()) { + for (Class<?> c = clazz; !Utils.isEventBaseClass(c); c = c.getSuperclass()) { for (Field field : c.getDeclaredFields()) { // skip private field in base classes if (c == clazz || !Modifier.isPrivate(field.getModifiers())) { @@ -219,6 +219,16 @@ public static List<Field> getVisibleEventFields(Class<?> clazz) { return fields; } + public static boolean isEventBaseClass(Class<?> clazz) { + if (jdk.internal.event.Event.class == clazz) { + return true; + } + if (jdk.jfr.internal.MirrorEvent.class == clazz) { + return true; + } + return false; + } + public static void ensureValidEventSubclass(Class<?> eventClass) { if (jdk.internal.event.Event.class.isAssignableFrom(eventClass) && Modifier.isAbstract(eventClass.getModifiers())) { throw new IllegalArgumentException("Abstract event classes are not allowed"); @@ -338,7 +348,7 @@ public static String upgradeLegacyJDKEvent(String eventName) { return eventName; } - public static void verifyMirror(Class<?> mirror, Class<?> real) { + public static void verifyMirror(Class<? extends MirrorEvent> mirror, Class<?> real) { Class<?> cMirror = Objects.requireNonNull(mirror); Class<?> cReal = Objects.requireNonNull(real); @@ -353,7 +363,7 @@ public static void verifyMirror(Class<?> mirror, Class<?> real) { } while (cReal != null) { for (Field realField : cReal.getDeclaredFields()) { - if (isSupportedType(realField.getType())) { + if (isSupportedType(realField.getType()) && !realField.isSynthetic()) { String fieldName = realField.getName(); Field mirrorField = mirrorFields.get(fieldName); if (mirrorField == null) { From f3bb3e21704dd47c6c5d5753ca5882520a538c06 Mon Sep 17 00:00:00 2001 From: Erik Gahlin <egahlin@openjdk.org> Date: Fri, 26 Apr 2024 19:20:27 +0000 Subject: [PATCH 129/141] 8331153: JFR: Improve logging of jdk/jfr/api/consumer/filestream/TestOrdered.java Reviewed-by: mgronlun --- .../api/consumer/filestream/TestOrdered.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java b/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java index 94383298ddcf8..8edb74b847ae1 100644 --- a/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java +++ b/test/jdk/jdk/jfr/api/consumer/filestream/TestOrdered.java @@ -88,46 +88,60 @@ public static void main(String... args) throws Exception { private static void testSetOrderedTrue(Path p) throws Exception { for (boolean reuse : BOOLEAN_STATES) { + System.out.println(); + System.out.println("Testing: testSetOrderedTrue reuse = " + reuse); AtomicReference<Instant> timestamp = new AtomicReference<>(Instant.MIN); + AtomicBoolean unordered = new AtomicBoolean(false); try (EventStream es = EventStream.openFile(p)) { es.setReuse(reuse); es.setOrdered(true); es.onEvent(e -> { Instant endTime = e.getEndTime(); + printTimestamp(endTime); if (endTime.isBefore(timestamp.get())) { - throw new Error("Events are not ordered! Reuse = " + reuse); + unordered.set(true); } timestamp.set(endTime); }); es.start(); } + if (unordered.get()) { + throw new Exception("Events are not ordered! Reuse = " + reuse); + } } } private static void testSetOrderedFalse(Path p) throws Exception { for (boolean reuse : BOOLEAN_STATES) { + System.out.println(); + System.out.println("Testing: testSetOrderedFalse reuse = " + reuse); AtomicReference<Instant> timestamp = new AtomicReference<>(Instant.MIN); - AtomicBoolean unoreded = new AtomicBoolean(false); + AtomicBoolean unordered = new AtomicBoolean(false); try (EventStream es = EventStream.openFile(p)) { es.setReuse(reuse); es.setOrdered(false); es.onEvent(e -> { Instant endTime = e.getEndTime(); - System.out.println("testSetOrderedFalse: endTime: " + endTime); + printTimestamp(endTime); if (endTime.isBefore(timestamp.get())) { - unoreded.set(true); - es.close(); + unordered.set(true); } timestamp.set(endTime); }); es.start(); - if (!unoreded.get()) { + if (!unordered.get()) { throw new Exception("Expected at least some events to be out of order! Reuse = " + reuse); } } } } + private static void printTimestamp(Instant timestamp) { + long seconds = timestamp.getEpochSecond(); + long nanos = timestamp.getNano(); + System.out.println(timestamp + " seconds = " + seconds + " nanos = " + nanos); + } + private static Path makeUnorderedRecording() throws Exception { CyclicBarrier barrier = new CyclicBarrier(THREAD_COUNT + 1); From a920af233a11592af113f456f7608cb59dd1617e Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons <jjg@openjdk.org> Date: Fri, 26 Apr 2024 19:47:06 +0000 Subject: [PATCH 130/141] 8303689: javac -Xlint could/should report on "dangling" doc comments Reviewed-by: vromero, ihse, prr --- make/CompileDemos.gmk | 2 +- make/CompileToolsJdk.gmk | 4 +- make/GenerateLinkOptData.gmk | 3 +- make/modules/java.desktop/Java.gmk | 4 +- make/modules/java.management/Java.gmk | 4 +- make/modules/java.naming/Java.gmk | 4 +- make/modules/java.security.jgss/Java.gmk | 4 +- make/modules/java.security.sasl/Java.gmk | 4 +- make/modules/java.sql.rowset/Java.gmk | 4 +- make/modules/java.sql/Java.gmk | 4 +- make/modules/java.xml.crypto/Java.gmk | 4 +- make/modules/java.xml/Java.gmk | 4 +- make/modules/jdk.accessibility/Java.gmk | 26 +++ make/modules/jdk.crypto.cryptoki/Java.gmk | 26 +++ make/modules/jdk.hotspot.agent/Java.gmk | 4 +- make/modules/jdk.internal.le/Java.gmk | 4 +- make/modules/jdk.internal.vm.ci/Java.gmk | 4 +- make/modules/jdk.jdi/Java.gmk | 4 +- make/modules/jdk.jfr/Java.gmk | 4 +- make/modules/jdk.security.auth/Java.gmk | 26 +++ make/modules/jdk.zipfs/Java.gmk | 27 ++++ make/test/BuildTestLib.gmk | 2 +- .../com/sun/tools/javac/api/JavacTrees.java | 7 +- .../tools/javac/code/DeferredLintHandler.java | 18 ++- .../com/sun/tools/javac/code/Lint.java | 8 +- .../com/sun/tools/javac/comp/Annotate.java | 4 +- .../com/sun/tools/javac/comp/Attr.java | 10 +- .../com/sun/tools/javac/comp/Check.java | 28 ++-- .../com/sun/tools/javac/comp/TypeEnter.java | 4 +- .../sun/tools/javac/parser/JavaTokenizer.java | 14 ++ .../sun/tools/javac/parser/JavacParser.java | 150 +++++++++++++++++- .../com/sun/tools/javac/parser/Lexer.java | 16 +- .../sun/tools/javac/parser/ParserFactory.java | 6 +- .../com/sun/tools/javac/parser/Scanner.java | 23 ++- .../com/sun/tools/javac/parser/Tokens.java | 3 +- .../sun/tools/javac/parser/VirtualParser.java | 8 +- .../tools/javac/resources/compiler.properties | 3 + .../tools/javac/resources/javac.properties | 5 +- .../sun/tools/javac/tree/DocTreeMaker.java | 7 +- .../share/classes/module-info.java | 4 +- src/jdk.compiler/share/man/javac.1 | 3 + .../internal/tool/JavadocMemberEnter.java | 4 +- src/jdk.javadoc/share/man/javadoc.1 | 16 ++ .../OverrideChecks/6199153/T6199153.java | 2 +- .../DanglingDocCommentsClass.enabled.out | 7 + .../DanglingDocCommentsClass.java | 46 ++++++ .../DanglingDocCommentsEnum.enabled.out | 8 + .../DanglingDocCommentsEnum.java | 37 +++++ .../tools/javac/danglingDocComments/empty.out | 0 .../depDocComment/DeprecatedDocComment3.java | 6 +- .../DanglingDocCommentWarning.java | 29 ++++ .../platform/PreviewAPIsWithRelease.java | 2 +- .../tools/javac/warnings/DepAnn.java | 2 +- .../tools/javac/warnings/Deprecation.java | 2 +- .../NestedDeprecation/NestedDeprecation.java | 2 +- .../tools/javac/warnings/Unchecked.java | 2 +- .../warnings/VerifyLintDescriptions.java | 4 +- .../javac/warnings/suppress/T6480588.java | 2 +- 58 files changed, 575 insertions(+), 89 deletions(-) create mode 100644 make/modules/jdk.accessibility/Java.gmk create mode 100644 make/modules/jdk.crypto.cryptoki/Java.gmk create mode 100644 make/modules/jdk.security.auth/Java.gmk create mode 100644 make/modules/jdk.zipfs/Java.gmk create mode 100644 test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.enabled.out create mode 100644 test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.java create mode 100644 test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.enabled.out create mode 100644 test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.java create mode 100644 test/langtools/tools/javac/danglingDocComments/empty.out create mode 100644 test/langtools/tools/javac/diags/examples/DanglingDocCommentWarning/DanglingDocCommentWarning.java diff --git a/make/CompileDemos.gmk b/make/CompileDemos.gmk index 9339250c4fb56..599ce9842e4b0 100644 --- a/make/CompileDemos.gmk +++ b/make/CompileDemos.gmk @@ -216,7 +216,7 @@ $(eval $(call SetupBuildDemo, SampleTree, \ )) $(eval $(call SetupBuildDemo, TableExample, \ - DISABLED_WARNINGS := rawtypes unchecked deprecation this-escape, \ + DISABLED_WARNINGS := rawtypes unchecked deprecation this-escape dangling-doc-comments, \ DEMO_SUBDIR := jfc, \ )) diff --git a/make/CompileToolsJdk.gmk b/make/CompileToolsJdk.gmk index 50ffe73a09680..feba5d8a902d7 100644 --- a/make/CompileToolsJdk.gmk +++ b/make/CompileToolsJdk.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2024, 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,7 +55,7 @@ $(eval $(call SetupJavaCompilation, BUILD_TOOLS_JDK, \ build/tools/depend \ , \ BIN := $(BUILDTOOLS_OUTPUTDIR)/jdk_tools_classes, \ - DISABLED_WARNINGS := options, \ + DISABLED_WARNINGS := dangling-doc-comments options, \ JAVAC_FLAGS := \ --add-exports java.desktop/sun.awt=ALL-UNNAMED \ --add-exports java.base/sun.text=ALL-UNNAMED \ diff --git a/make/GenerateLinkOptData.gmk b/make/GenerateLinkOptData.gmk index e7d6962fb79eb..576bc4190b960 100644 --- a/make/GenerateLinkOptData.gmk +++ b/make/GenerateLinkOptData.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2016, 2021, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -43,6 +43,7 @@ $(eval $(call SetupJavaCompilation, CLASSLIST_JAR, \ SMALL_JAVA := false, \ SRC := $(TOPDIR)/make/jdk/src/classes, \ INCLUDES := build/tools/classlist, \ + DISABLED_WARNINGS := dangling-doc-comments, \ BIN := $(BUILDTOOLS_OUTPUTDIR)/classlist_classes, \ JAR := $(SUPPORT_OUTPUTDIR)/classlist.jar, \ )) diff --git a/make/modules/java.desktop/Java.gmk b/make/modules/java.desktop/Java.gmk index 66ef88dcf14d6..7cc9cf470348a 100644 --- a/make/modules/java.desktop/Java.gmk +++ b/make/modules/java.desktop/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ # questions. # -DISABLED_WARNINGS_java += lossy-conversions this-escape +DISABLED_WARNINGS_java += dangling-doc-comments lossy-conversions this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' COPY += .gif .png .wav .txt .xml .css .pf diff --git a/make/modules/java.management/Java.gmk b/make/modules/java.management/Java.gmk index 781370b2e1879..7a337946cd7df 100644 --- a/make/modules/java.management/Java.gmk +++ b/make/modules/java.management/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.naming/Java.gmk b/make/modules/java.naming/Java.gmk index a7ade637af579..207329f594418 100644 --- a/make/modules/java.naming/Java.gmk +++ b/make/modules/java.naming/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.security.jgss/Java.gmk b/make/modules/java.security.jgss/Java.gmk index 781370b2e1879..7a337946cd7df 100644 --- a/make/modules/java.security.jgss/Java.gmk +++ b/make/modules/java.security.jgss/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.security.sasl/Java.gmk b/make/modules/java.security.sasl/Java.gmk index 269a1195b6a10..136b311a827a9 100644 --- a/make/modules/java.security.sasl/Java.gmk +++ b/make/modules/java.security.sasl/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2023, 2024, 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,4 +23,4 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape diff --git a/make/modules/java.sql.rowset/Java.gmk b/make/modules/java.sql.rowset/Java.gmk index 2dc60515a1be3..9f430a7121b4f 100644 --- a/make/modules/java.sql.rowset/Java.gmk +++ b/make/modules/java.sql.rowset/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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,8 @@ # questions. # +DISABLED_WARNINGS_java += dangling-doc-comments this-escape + DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' CLEAN_FILES += $(wildcard \ diff --git a/make/modules/java.sql/Java.gmk b/make/modules/java.sql/Java.gmk index 781370b2e1879..7a337946cd7df 100644 --- a/make/modules/java.sql/Java.gmk +++ b/make/modules/java.sql/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.xml.crypto/Java.gmk b/make/modules/java.xml.crypto/Java.gmk index 53e282aca272b..9ee19c8c30297 100644 --- a/make/modules/java.xml.crypto/Java.gmk +++ b/make/modules/java.xml.crypto/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:java.*,javax.*' diff --git a/make/modules/java.xml/Java.gmk b/make/modules/java.xml/Java.gmk index cf6f1753f1c3d..22c1dde2c2b17 100644 --- a/make/modules/java.xml/Java.gmk +++ b/make/modules/java.xml/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ # questions. # -DISABLED_WARNINGS_java += lossy-conversions this-escape +DISABLED_WARNINGS_java += dangling-doc-comments lossy-conversions this-escape DOCLINT += -Xdoclint:all/protected \ '-Xdoclint/package:$(call CommaList, javax.xml.catalog javax.xml.datatype \ javax.xml.transform javax.xml.validation javax.xml.xpath)' diff --git a/make/modules/jdk.accessibility/Java.gmk b/make/modules/jdk.accessibility/Java.gmk new file mode 100644 index 0000000000000..fc8b2f832d713 --- /dev/null +++ b/make/modules/jdk.accessibility/Java.gmk @@ -0,0 +1,26 @@ +# +# Copyright (c) 2024, 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. +# + +DISABLED_WARNINGS_java += dangling-doc-comments diff --git a/make/modules/jdk.crypto.cryptoki/Java.gmk b/make/modules/jdk.crypto.cryptoki/Java.gmk new file mode 100644 index 0000000000000..fc8b2f832d713 --- /dev/null +++ b/make/modules/jdk.crypto.cryptoki/Java.gmk @@ -0,0 +1,26 @@ +# +# Copyright (c) 2024, 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. +# + +DISABLED_WARNINGS_java += dangling-doc-comments diff --git a/make/modules/jdk.hotspot.agent/Java.gmk b/make/modules/jdk.hotspot.agent/Java.gmk index 52cb0c8d91a65..333d28a5aa0cf 100644 --- a/make/modules/jdk.hotspot.agent/Java.gmk +++ b/make/modules/jdk.hotspot.agent/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -24,5 +24,5 @@ # DISABLED_WARNINGS_java += rawtypes serial cast static overrides \ - fallthrough this-escape + dangling-doc-comments fallthrough this-escape COPY += .gif .png .properties diff --git a/make/modules/jdk.internal.le/Java.gmk b/make/modules/jdk.internal.le/Java.gmk index 75d99b8d2bb72..4c952b6357449 100644 --- a/make/modules/jdk.internal.le/Java.gmk +++ b/make/modules/jdk.internal.le/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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,6 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape COPY += .properties .caps .txt diff --git a/make/modules/jdk.internal.vm.ci/Java.gmk b/make/modules/jdk.internal.vm.ci/Java.gmk index 0dd5af1f3ea72..6bf8ad5e74c7f 100644 --- a/make/modules/jdk.internal.vm.ci/Java.gmk +++ b/make/modules/jdk.internal.vm.ci/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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 @@ # questions. # -DISABLED_WARNINGS_java += this-escape +DISABLED_WARNINGS_java += dangling-doc-comments this-escape # -parameters provides method's parameters information in class file, # JVMCI compilers make use of that information for various sanity checks. diff --git a/make/modules/jdk.jdi/Java.gmk b/make/modules/jdk.jdi/Java.gmk index 2e7cf805bc0f2..12ec29986b980 100644 --- a/make/modules/jdk.jdi/Java.gmk +++ b/make/modules/jdk.jdi/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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,8 @@ # questions. # +DISABLED_WARNINGS_java += dangling-doc-comments this-escape + EXCLUDES += \ com/sun/tools/example/debug/bdi \ com/sun/tools/example/debug/event \ diff --git a/make/modules/jdk.jfr/Java.gmk b/make/modules/jdk.jfr/Java.gmk index 207256fde2084..d07f9117c2dfc 100644 --- a/make/modules/jdk.jfr/Java.gmk +++ b/make/modules/jdk.jfr/Java.gmk @@ -1,5 +1,5 @@ # -# Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2020, 2024, 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,6 @@ # questions. # -DISABLED_WARNINGS_java += exports +DISABLED_WARNINGS_java += dangling-doc-comments exports COPY := .xsd .xml .dtd .ini JAVAC_FLAGS := -XDstringConcat=inline diff --git a/make/modules/jdk.security.auth/Java.gmk b/make/modules/jdk.security.auth/Java.gmk new file mode 100644 index 0000000000000..fc8b2f832d713 --- /dev/null +++ b/make/modules/jdk.security.auth/Java.gmk @@ -0,0 +1,26 @@ +# +# Copyright (c) 2024, 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. +# + +DISABLED_WARNINGS_java += dangling-doc-comments diff --git a/make/modules/jdk.zipfs/Java.gmk b/make/modules/jdk.zipfs/Java.gmk new file mode 100644 index 0000000000000..0771884172faf --- /dev/null +++ b/make/modules/jdk.zipfs/Java.gmk @@ -0,0 +1,27 @@ +# +# Copyright (c) 2024, 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. +# + +DISABLED_WARNINGS_java += dangling-doc-comments + diff --git a/make/test/BuildTestLib.gmk b/make/test/BuildTestLib.gmk index 00642a1e7cf61..d48f263f6f96d 100644 --- a/make/test/BuildTestLib.gmk +++ b/make/test/BuildTestLib.gmk @@ -64,7 +64,7 @@ $(eval $(call SetupJavaCompilation, BUILD_TEST_LIB_JAR, \ BIN := $(TEST_LIB_SUPPORT)/test-lib_classes, \ HEADERS := $(TEST_LIB_SUPPORT)/test-lib_headers, \ JAR := $(TEST_LIB_SUPPORT)/test-lib.jar, \ - DISABLED_WARNINGS := try deprecation rawtypes unchecked serial cast removal preview, \ + DISABLED_WARNINGS := try deprecation rawtypes unchecked serial cast removal preview dangling-doc-comments, \ JAVAC_FLAGS := --add-exports java.base/sun.security.util=ALL-UNNAMED \ --add-exports java.base/jdk.internal.classfile=ALL-UNNAMED \ --add-exports java.base/jdk.internal.classfile.attribute=ALL-UNNAMED \ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java index 081367fa26a3d..45c76071f8b8a 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/api/JavacTrees.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, 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 @@ -1059,6 +1059,11 @@ public String getText() { return ""; } + @Override + public JCDiagnostic.DiagnosticPosition getPos() { + return null; + } + @Override public int getSourcePos(int index) { return offset + index; diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java index 94d121ad04dca..9fba9b5318bd9 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/DeferredLintHandler.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, 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 @@ -52,10 +52,15 @@ public static DeferredLintHandler instance(Context context) { return instance; } + /** The Lint to use when {@link #immediate(Lint)} is used, + * instead of {@link #setPos(DiagnosticPosition)}. */ + private Lint immediateLint; + @SuppressWarnings("this-escape") protected DeferredLintHandler(Context context) { context.put(deferredLintHandlerKey, this); this.currentPos = IMMEDIATE_POSITION; + immediateLint = Lint.instance(context); } /**An interface for deferred lint reporting - loggers passed to @@ -63,7 +68,7 @@ protected DeferredLintHandler(Context context) { * {@link #flush(DiagnosticPosition) } is invoked. */ public interface LintLogger { - void report(); + void report(Lint lint); } private DiagnosticPosition currentPos; @@ -77,7 +82,7 @@ public interface LintLogger { */ public void report(LintLogger logger) { if (currentPos == IMMEDIATE_POSITION) { - logger.report(); + logger.report(immediateLint); } else { ListBuffer<LintLogger> loggers = loggersQueue.get(currentPos); if (loggers == null) { @@ -89,11 +94,11 @@ public void report(LintLogger logger) { /**Invoke all {@link LintLogger}s that were associated with the provided {@code pos}. */ - public void flush(DiagnosticPosition pos) { + public void flush(DiagnosticPosition pos, Lint lint) { ListBuffer<LintLogger> loggers = loggersQueue.get(pos); if (loggers != null) { for (LintLogger lintLogger : loggers) { - lintLogger.report(); + lintLogger.report(lint); } loggersQueue.remove(pos); } @@ -112,7 +117,8 @@ public DiagnosticPosition setPos(DiagnosticPosition currentPos) { /**{@link LintLogger}s passed to subsequent invocations of * {@link #report(LintLogger) } will be invoked immediately. */ - public DiagnosticPosition immediate() { + public DiagnosticPosition immediate(Lint lint) { + immediateLint = lint; return setPos(IMMEDIATE_POSITION); } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java index 92b2a773ffa98..d024dc75225fa 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/code/Lint.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, 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 @@ -180,6 +180,12 @@ public enum LintCategory { */ CLASSFILE("classfile"), + /** + * Warn about"dangling" documentation comments, + * not attached to any declaration. + */ + DANGLING_DOC_COMMENTS("dangling-doc-comments"), + /** * Warn about use of deprecated items. */ diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java index 71c9d59cb276c..40a2da354885d 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Annotate.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -254,7 +254,7 @@ public void annotateLater(List<JCAnnotation> annotations, Env<AttrContext> local DiagnosticPosition prevLintPos = deferPos != null ? deferredLintHandler.setPos(deferPos) - : deferredLintHandler.immediate(); + : deferredLintHandler.immediate(lint); Lint prevLint = deferPos != null ? null : chk.setLint(lint); try { if (s.hasAnnotations() && annotations.nonEmpty()) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java index 0d6e39c8b06f0..d0f3ae7464a86 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java @@ -979,7 +979,7 @@ public void visitMethodDef(JCMethodDecl tree) { env.info.ctorPrologue = false; MethodSymbol prevMethod = chk.setMethod(m); try { - deferredLintHandler.flush(tree.pos()); + deferredLintHandler.flush(tree.pos(), lint); chk.checkDeprecatedAnnotation(tree.pos(), m); @@ -1280,7 +1280,7 @@ public void visitVarDef(JCVariableDecl tree) { try { v.getConstValue(); // ensure compile-time constant initializer is evaluated - deferredLintHandler.flush(tree.pos()); + deferredLintHandler.flush(tree.pos(), lint); chk.checkDeprecatedAnnotation(tree.pos(), v); if (tree.init != null) { @@ -5297,7 +5297,7 @@ private void attribWithLint(TypeSymbol sym, Consumer<Env<AttrContext>> attrib) { JavaFileObject prev = log.useSource(env.toplevel.sourcefile); try { - deferredLintHandler.flush(env.tree.pos()); + deferredLintHandler.flush(env.tree.pos(), lint); attrib.accept(env); } finally { log.useSource(prev); @@ -5472,7 +5472,7 @@ void attribClass(ClassSymbol c) throws CompletionFailure { } } - deferredLintHandler.flush(env.tree); + deferredLintHandler.flush(env.tree, env.info.lint); env.info.returnResult = null; // java.lang.Enum may not be subclassed by a non-enum if (st.tsym == syms.enumSym && @@ -5522,7 +5522,7 @@ public void visitModuleDef(JCModuleDecl tree) { chk.checkDeprecatedAnnotation(tree, msym); try { - deferredLintHandler.flush(tree.pos()); + deferredLintHandler.flush(tree.pos(), lint); } finally { chk.setLint(prevLint); } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java index 1e717b2b034c2..e909afc0bdffd 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java @@ -673,7 +673,7 @@ public void checkRedundantCast(Env<AttrContext> env, final JCTypeCast tree) { && types.isSameType(tree.expr.type, tree.clazz.type) && !(ignoreAnnotatedCasts && TreeInfo.containsTypeAnnotation(tree.clazz)) && !is292targetTypeCast(tree)) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.CAST)) log.warning(LintCategory.CAST, tree.pos(), Warnings.RedundantCast(tree.clazz.type)); @@ -1350,7 +1350,7 @@ && checkDisjoint(pos, flags, private void warnOnExplicitStrictfp(DiagnosticPosition pos) { DiagnosticPosition prevLintPos = deferredLintHandler.setPos(pos); try { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.STRICTFP)) { log.warning(LintCategory.STRICTFP, pos, Warnings.Strictfp); } @@ -3809,13 +3809,13 @@ void checkDeprecated(Supplier<DiagnosticPosition> pos, final Symbol other, final || s.isDeprecated() && !other.isDeprecated()) && (s.outermostClass() != other.outermostClass() || s.outermostClass() == null) && s.kind != Kind.PCK) { - deferredLintHandler.report(() -> warnDeprecated(pos.get(), s)); + deferredLintHandler.report(_l -> warnDeprecated(pos.get(), s)); } } void checkSunAPI(final DiagnosticPosition pos, final Symbol s) { if ((s.flags() & PROPRIETARY) != 0) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { log.mandatoryWarning(pos, Warnings.SunProprietary(s)); }); } @@ -3834,10 +3834,10 @@ void checkPreview(DiagnosticPosition pos, Symbol other, Symbol s) { log.error(pos, Errors.IsPreview(s)); } else { preview.markUsesPreview(pos); - deferredLintHandler.report(() -> warnPreviewAPI(pos, Warnings.IsPreview(s))); + deferredLintHandler.report(_l -> warnPreviewAPI(pos, Warnings.IsPreview(s))); } } else { - deferredLintHandler.report(() -> warnPreviewAPI(pos, Warnings.IsPreviewReflective(s))); + deferredLintHandler.report(_l -> warnPreviewAPI(pos, Warnings.IsPreviewReflective(s))); } } if (preview.declaredUsingPreviewFeature(s)) { @@ -3846,14 +3846,14 @@ void checkPreview(DiagnosticPosition pos, Symbol other, Symbol s) { //If "s" is compiled from source, then there was an error for it already; //if "s" is from classfile, there already was an error for the classfile. preview.markUsesPreview(pos); - deferredLintHandler.report(() -> warnDeclaredUsingPreview(pos, s)); + deferredLintHandler.report(_l -> warnDeclaredUsingPreview(pos, s)); } } } void checkRestricted(DiagnosticPosition pos, Symbol s) { if (s.kind == MTH && (s.flags() & RESTRICTED) != 0) { - deferredLintHandler.report(() -> warnRestrictedAPI(pos, s)); + deferredLintHandler.report(_l -> warnRestrictedAPI(pos, s)); } } @@ -4102,7 +4102,7 @@ void checkDivZero(final DiagnosticPosition pos, Symbol operator, Type operand) { int opc = ((OperatorSymbol)operator).opcode; if (opc == ByteCodes.idiv || opc == ByteCodes.imod || opc == ByteCodes.ldiv || opc == ByteCodes.lmod) { - deferredLintHandler.report(() -> warnDivZero(pos)); + deferredLintHandler.report(_l -> warnDivZero(pos)); } } } @@ -4115,7 +4115,7 @@ void checkDivZero(final DiagnosticPosition pos, Symbol operator, Type operand) { */ void checkLossOfPrecision(final DiagnosticPosition pos, Type found, Type req) { if (found.isNumeric() && req.isNumeric() && !types.isAssignable(found, req)) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.LOSSY_CONVERSIONS)) log.warning(LintCategory.LOSSY_CONVERSIONS, pos, Warnings.PossibleLossOfPrecision(found, req)); @@ -4319,7 +4319,7 @@ void checkDefaultConstructor(ClassSymbol c, DiagnosticPosition pos) { // Warning may be suppressed by // annotations; check again for being // enabled in the deferred context. - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.MISSING_EXPLICIT_CTOR)) log.warning(LintCategory.MISSING_EXPLICIT_CTOR, pos, Warnings.MissingExplicitCtor(c, pkg, modle)); @@ -4654,7 +4654,7 @@ private void checkVisible(DiagnosticPosition pos, Symbol what, PackageSymbol inP void checkModuleExists(final DiagnosticPosition pos, ModuleSymbol msym) { if (msym.kind != MDL) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.MODULE)) log.warning(LintCategory.MODULE, pos, Warnings.ModuleNotFound(msym)); }); @@ -4664,7 +4664,7 @@ void checkModuleExists(final DiagnosticPosition pos, ModuleSymbol msym) { void checkPackageExistsForOpens(final DiagnosticPosition pos, PackageSymbol packge) { if (packge.members().isEmpty() && ((packge.flags() & Flags.HAS_RESOURCE) == 0)) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (lint.isEnabled(LintCategory.OPENS)) log.warning(pos, Warnings.PackageEmptyOrNotFound(packge)); }); @@ -4673,7 +4673,7 @@ void checkPackageExistsForOpens(final DiagnosticPosition pos, PackageSymbol pack void checkModuleRequires(final DiagnosticPosition pos, final RequiresDirective rd) { if ((rd.module.flags() & Flags.AUTOMATIC_MODULE) != 0) { - deferredLintHandler.report(() -> { + deferredLintHandler.report(_l -> { if (rd.isTransitive() && lint.isEnabled(LintCategory.REQUIRES_TRANSITIVE_AUTOMATIC)) { log.warning(pos, Warnings.RequiresTransitiveAutomatic); } else if (lint.isEnabled(LintCategory.REQUIRES_AUTOMATIC)) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java index af5f3dccdd69c..9366e802b1668 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/TypeEnter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -348,7 +348,7 @@ private void resolveImports(JCCompilationUnit tree, Env<AttrContext> env) { ImportFilter prevStaticImportFilter = staticImportFilter; ImportFilter prevTypeImportFilter = typeImportFilter; - DiagnosticPosition prevLintPos = deferredLintHandler.immediate(); + DiagnosticPosition prevLintPos = deferredLintHandler.immediate(lint); Lint prevLint = chk.setLint(lint); Env<AttrContext> prevEnv = this.env; try { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java index 88de233306945..403cb30921a84 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavaTokenizer.java @@ -34,6 +34,8 @@ import com.sun.tools.javac.parser.Tokens.Comment.CommentStyle; import com.sun.tools.javac.resources.CompilerProperties.Errors; import com.sun.tools.javac.resources.CompilerProperties.Warnings; +import com.sun.tools.javac.tree.EndPosTable; +import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.util.*; import com.sun.tools.javac.util.JCDiagnostic.*; @@ -1207,6 +1209,8 @@ protected static class BasicComment extends PositionTrackingReader implements Co */ CommentStyle cs; + DiagnosticPosition pos; + /** * true if comment contains @deprecated at beginning of a line. */ @@ -1228,6 +1232,12 @@ protected static class BasicComment extends PositionTrackingReader implements Co protected BasicComment(CommentStyle cs, UnicodeReader reader, int pos, int endPos) { super(reader, pos, endPos); this.cs = cs; + this.pos = new SimpleDiagnosticPosition(pos) { + @Override + public int getEndPosition(EndPosTable endPosTable) { + return endPos; + } + }; } /** @@ -1239,6 +1249,10 @@ public String getText() { return null; } + public DiagnosticPosition getPos() { + return pos; + } + /** * Return buffer position in original buffer mapped from buffer position in comment. * diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java index bc53b18b3a587..4eb7aa7c17d9c 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java @@ -111,6 +111,12 @@ public class JavacParser implements Parser { /** End position mappings container */ protected final AbstractEndPosTable endPosTable; + /** A map associating "other nearby documentation comments" + * with the preferred documentation comment for a declaration. */ + protected Map<Comment, List<Comment>> danglingComments = new HashMap<>(); + /** Handler for deferred diagnostics. */ + protected final DeferredLintHandler deferredLintHandler; + // Because of javac's limited lookahead, some contexts are ambiguous in // the presence of type annotations even though they are not ambiguous // in the absence of type annotations. Consider this code: @@ -181,6 +187,7 @@ protected JavacParser(ParserFactory fac, this.names = fac.names; this.source = fac.source; this.preview = fac.preview; + this.deferredLintHandler = fac.deferredLintHandler; this.allowStringFolding = fac.options.getBoolean("allowStringFolding", true); this.keepDocComments = keepDocComments; this.parseModuleInfo = parseModuleInfo; @@ -205,6 +212,7 @@ protected JavacParser(JavacParser parser, this.names = parser.names; this.source = parser.source; this.preview = parser.preview; + this.deferredLintHandler = parser.deferredLintHandler; this.allowStringFolding = parser.allowStringFolding; this.keepDocComments = parser.keepDocComments; this.parseModuleInfo = false; @@ -551,16 +559,119 @@ protected void checkNoMods(int pos, long mods) { */ private final DocCommentTable docComments; + /** Record nearby documentation comments against the + * primary documentation comment for a declaration. + * + * Dangling documentation comments are handled as follows. + * 1. {@code Scanner} adds all doc comments to a queue of + * recent doc comments. The queue is flushed whenever + * it is known that the recent doc comments should be + * ignored and should not cause any warnings. + * 2. The primary documentation comment is the one obtained + * from the first token of any declaration. + * (using {@code token.getDocComment()}. + * 3. At the end of the "signature" of the declaration + * (that is, before any initialization or body for the + * declaration) any other "recent" comments are saved + * in a map using the primary comment as a key, + * using this method, {@code saveDanglingComments}. + * 4. When the tree node for the declaration is finally + * available, and the primary comment, if any, + * is "attached", (in {@link #attach}) any related + * dangling comments are also attached to the tree node + * by registering them using the {@link #deferredLintHandler}. + * 5. (Later) Warnings may be generated for the dangling + * comments, subject to the {@code -Xlint} and + * {@code @SuppressWarnings}. + * + * @param dc the primary documentation comment + */ + private void saveDanglingDocComments(Comment dc) { + var recentComments = S.getDocComments(); + + switch (recentComments.size()) { + case 0: + // no recent comments + return; + + case 1: + if (recentComments.peek() == dc) { + // no other recent comments + recentComments.remove(); + return; + } + } + + var lb = new ListBuffer<Comment>(); + while (!recentComments.isEmpty()) { + var c = recentComments.remove(); + if (c != dc) { + lb.add(c); + } + } + danglingComments.put(dc, lb.toList()); + } + /** Make an entry into docComments hashtable, * provided flag keepDocComments is set and given doc comment is non-null. + * If there are any related "dangling comments", register + * diagnostics to be handled later, when @SuppressWarnings + * can be taken into account. + * * @param tree The tree to be used as index in the hashtable * @param dc The doc comment to associate with the tree, or null. */ protected void attach(JCTree tree, Comment dc) { if (keepDocComments && dc != null) { -// System.out.println("doc comment = ");System.out.println(dc);//DEBUG docComments.putComment(tree, dc); } + reportDanglingComments(tree, dc); + } + + /** Reports all dangling comments associated with the + * primary comment for a declaration against the position + * of the tree node for a declaration. + * + * @param tree the tree node for the declaration + * @param dc the primary comment for the declaration + */ + void reportDanglingComments(JCTree tree, Comment dc) { + var list = danglingComments.remove(dc); + if (list != null) { + var prevPos = deferredLintHandler.setPos(tree); + try { + list.forEach(this::reportDanglingDocComment); + } finally { + deferredLintHandler.setPos(prevPos); + } + } + } + + /** + * Reports an individual dangling comment using the {@link #deferredLintHandler}. + * The comment may or not may generate an actual diagnostic, depending on + * the settings for {@code -Xlint} and/or {@code @SuppressWarnings}. + * + * @param c the comment + */ + void reportDanglingDocComment(Comment c) { + var pos = c.getPos(); + if (pos != null) { + deferredLintHandler.report(lint -> { + if (lint.isEnabled(Lint.LintCategory.DANGLING_DOC_COMMENTS)) { + log.warning(Lint.LintCategory.DANGLING_DOC_COMMENTS, + pos, Warnings.DanglingDocComment); + } + }); + } + } + + /** + * Ignores any recent documentation comments found by the scanner, + * such as those that cannot be associated with a nearby declaration. + */ + private void ignoreDanglingComments() { + S.getDocComments().clear(); } /* -------- source positions ------- */ @@ -2626,6 +2737,7 @@ JCNewClass classCreatorRest(int newpos, List<JCExpression> args = arguments(); JCClassDecl body = null; if (token.kind == LBRACE) { + ignoreDanglingComments(); // ignore any comments from before the '{' int pos = token.pos; List<JCTree> defs = classInterfaceOrRecordBody(names.empty, false, false); JCModifiers mods = F.at(Position.NOPOS).Modifiers(0); @@ -2678,6 +2790,7 @@ JCExpression parExpression() { */ JCBlock block(int pos, long flags) { accept(LBRACE); + ignoreDanglingComments(); // ignore any comments from before the '{' List<JCStatement> stats = blockStatements(); JCBlock t = F.at(pos).Block(flags, stats); while (token.kind == CASE || token.kind == DEFAULT) { @@ -2709,6 +2822,7 @@ List<JCStatement> blockStatements() { ListBuffer<JCStatement> stats = new ListBuffer<>(); while (true) { List<JCStatement> stat = blockStatement(); + ignoreDanglingComments(); // ignore comments not consumed by the statement if (stat.isEmpty()) { return stats.toList(); } else { @@ -2780,7 +2894,7 @@ List<JCStatement> blockStatement() { return List.of(classOrRecordOrInterfaceOrEnumDeclaration(mods, dc)); } else { JCExpression t = parseType(true); - return localVariableDeclarations(mods, t); + return localVariableDeclarations(mods, t, dc); } } case ABSTRACT: case STRICTFP: { @@ -2866,8 +2980,8 @@ List<JCStatement> blockStatement() { } } } + dc = token.docComment(); if (isRecordStart() && allowRecords) { - dc = token.docComment(); return List.of(recordDeclaration(F.at(pos).Modifiers(0), dc)); } else { Token prevToken = token; @@ -2880,7 +2994,7 @@ List<JCStatement> blockStatement() { pos = token.pos; JCModifiers mods = F.at(Position.NOPOS).Modifiers(0); F.at(pos); - return localVariableDeclarations(mods, t); + return localVariableDeclarations(mods, t, dc); } else { // This Exec is an "ExpressionStatement"; it subsumes the terminating semicolon t = checkExprStat(t); @@ -2891,7 +3005,11 @@ List<JCStatement> blockStatement() { } } //where - private List<JCStatement> localVariableDeclarations(JCModifiers mods, JCExpression type) { + private List<JCStatement> localVariableDeclarations(JCModifiers mods, JCExpression type, Comment dc) { + if (dc != null) { + // ignore a well-placed doc comment, but save any misplaced ones + saveDanglingDocComments(dc); + } ListBuffer<JCStatement> stats = variableDeclarators(mods, type, new ListBuffer<>(), true); // A "LocalVariableDeclarationStatement" subsumes the terminating semicolon @@ -2919,6 +3037,7 @@ private List<JCStatement> localVariableDeclarations(JCModifiers mods, JCExpressi * | ";" */ public JCStatement parseSimpleStatement() { + ignoreDanglingComments(); // ignore comments before statement int pos = token.pos; switch (token.kind) { case LBRACE: @@ -3649,6 +3768,8 @@ JCVariableDecl variableDeclaratorRest(int pos, JCModifiers mods, JCExpression ty name = names.empty; } + saveDanglingDocComments(dc); + if (token.kind == EQ) { nextToken(); init = variableInitializer(); @@ -4221,6 +4342,9 @@ protected JCClassDecl classDeclaration(JCModifiers mods, Comment dc) { implementing = typeList(); } List<JCExpression> permitting = permitsClause(mods, "class"); + + saveDanglingDocComments(dc); + List<JCTree> defs = classInterfaceOrRecordBody(name, false, false); JCClassDecl result = toP(F.at(pos).ClassDef( mods, name, typarams, extending, implementing, permitting, defs)); @@ -4243,6 +4367,9 @@ protected JCClassDecl recordDeclaration(JCModifiers mods, Comment dc) { nextToken(); implementing = typeList(); } + + saveDanglingDocComments(dc); + List<JCTree> defs = classInterfaceOrRecordBody(name, false, true); java.util.List<JCVariableDecl> fields = new ArrayList<>(); for (JCVariableDecl field : headerFields) { @@ -4302,6 +4429,9 @@ protected JCClassDecl interfaceDeclaration(JCModifiers mods, Comment dc) { extending = typeList(); } List<JCExpression> permitting = permitsClause(mods, "interface"); + + saveDanglingDocComments(dc); + List<JCTree> defs; defs = classInterfaceOrRecordBody(name, true, false); JCClassDecl result = toP(F.at(pos).ClassDef( @@ -4347,6 +4477,8 @@ protected JCClassDecl enumDeclaration(JCModifiers mods, Comment dc) { implementing = typeList(); } + saveDanglingDocComments(dc); + List<JCTree> defs = enumBody(name); mods.flags |= Flags.ENUM; JCClassDecl result = toP(F.at(pos). @@ -4474,8 +4606,12 @@ JCTree enumeratorDeclaration(Name enumName) { int identPos = token.pos; Name name = ident(); int createPos = token.pos; + + saveDanglingDocComments(dc); + List<JCExpression> args = (token.kind == LPAREN) ? arguments() : List.nil(); + JCClassDecl body = null; if (token.kind == LBRACE) { JCModifiers mods1 = F.at(Position.NOPOS).Modifiers(Flags.ENUM); @@ -4580,6 +4716,7 @@ protected List<JCTree> classOrInterfaceOrRecordBodyDeclaration(JCModifiers mods, } else if (isRecord && (mods.flags & Flags.STATIC) == 0) { log.error(DiagnosticFlag.SYNTAX, token.pos, Errors.InstanceInitializerNotAllowedInRecords); } + ignoreDanglingComments(); // no declaration with which dangling comments can be associated return List.of(block(pos, mods.flags)); } else { return constructorOrMethodOrFieldDeclaration(mods, className, isInterface, isRecord, dc); @@ -4857,6 +4994,9 @@ protected JCTree methodDeclaratorRest(int pos, thrown = qualidentList(true); } } + + saveDanglingDocComments(dc); + JCBlock body = null; JCExpression defaultValue; if (token.kind == LBRACE) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Lexer.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Lexer.java index 2223999bebe53..bff4e027db75c 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Lexer.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Lexer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2005, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2005, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,6 +25,8 @@ package com.sun.tools.javac.parser; +import java.util.Queue; + import com.sun.tools.javac.parser.Tokens.*; import com.sun.tools.javac.util.Position.LineMap; @@ -89,4 +91,16 @@ public interface Lexer { * @return a LineMap */ LineMap getLineMap(); + + /** + * Returns a queue for the documentation comments encountered + * in a compilation unit. + * + * Comments may be added to this queue by the implementation; + * clients may remove them from the queue as they are analyzed. + * + * Note: all comments may also be associated with the following + * token. + */ + Queue<Comment> getDocComments(); } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java index d27a785e363d4..3c07c382aa3af 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/ParserFactory.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,8 @@ import java.util.Locale; +import com.sun.tools.javac.code.DeferredLintHandler; +import com.sun.tools.javac.code.Lint; import com.sun.tools.javac.code.Preview; import com.sun.tools.javac.code.Source; import com.sun.tools.javac.tree.DocTreeMaker; @@ -68,6 +70,7 @@ public static ParserFactory instance(Context context) { final Options options; final ScannerFactory scannerFactory; final Locale locale; + final DeferredLintHandler deferredLintHandler; @SuppressWarnings("this-escape") protected ParserFactory(Context context) { @@ -83,6 +86,7 @@ protected ParserFactory(Context context) { this.options = Options.instance(context); this.scannerFactory = ScannerFactory.instance(context); this.locale = context.get(Locale.class); + this.deferredLintHandler = DeferredLintHandler.instance(context); } public JavacParser newParser(CharSequence input, boolean keepDocComments, boolean keepEndPos, boolean keepLineMap) { diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Scanner.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Scanner.java index 3cfb8b9ddbeb3..a182c74b07b12 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Scanner.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Scanner.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,8 +26,10 @@ package com.sun.tools.javac.parser; import java.nio.*; +import java.util.ArrayDeque; import java.util.List; import java.util.ArrayList; +import java.util.Queue; import com.sun.tools.javac.util.Position.LineMap; import static com.sun.tools.javac.parser.Tokens.*; @@ -58,6 +60,11 @@ public class Scanner implements Lexer { private final JavaTokenizer tokenizer; + /** Queue of recently seen documentation comments. + * It is assumed the queue will typically be small. + */ + private final Queue<Comment> docComments = new ArrayDeque<>(); + /** * Create a scanner from the input array. This method might * modify the array. To avoid copying the input array, ensure @@ -115,6 +122,15 @@ public void nextToken() { token = savedTokens.remove(0); } else { token = tokenizer.readToken(); + if (token.comments != null) { + for (var c : token.comments) { + switch (c.getStyle()) { + case JAVADOC -> { + docComments.add(c); + } + } + } + } } } @@ -129,6 +145,11 @@ public LineMap getLineMap() { return tokenizer.getLineMap(); } + @Override + public Queue<Comment> getDocComments() { + return docComments; + } + public int errPos() { return tokenizer.errPos(); } diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Tokens.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Tokens.java index b6be0a84b7d46..a05d48d320b36 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Tokens.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/Tokens.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1999, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1999, 2024, 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 @@ -280,6 +280,7 @@ enum CommentStyle { } String getText(); + JCDiagnostic.DiagnosticPosition getPos(); int getSourcePos(int index); CommentStyle getStyle(); boolean isDeprecated(); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/VirtualParser.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/VirtualParser.java index 1d716f75a90d5..f32c1bf47565c 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/VirtualParser.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/parser/VirtualParser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -34,6 +34,7 @@ import com.sun.tools.javac.util.Position.LineMap; import java.util.Optional; +import java.util.Queue; import java.util.function.Consumer; import java.util.function.Function; @@ -146,6 +147,11 @@ public Token split() { return token; } + @Override + public Queue<Tokens.Comment> getDocComments() { + return S.getDocComments(); + } + @Override public int errPos() { return S.errPos(); diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties index 273c5bef7b4a3..26c16ebdc2c82 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/compiler.properties @@ -1869,6 +1869,9 @@ compiler.warn.lintOption=\ compiler.warn.constant.SVUID=\ serialVersionUID must be constant in class {0} +compiler.warn.dangling.doc.comment=\ + documentation comment is not attached to any declaration + # 0: path compiler.warn.dir.path.element.not.found=\ bad path element "{0}": no such directory diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties index 7893d328afa1e..0566272ca1b43 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/resources/javac.properties @@ -1,5 +1,5 @@ # -# Copyright (c) 1999, 2022, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 1999, 2024, Oracle and/or its affiliates. All rights reserved. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # This code is free software; you can redistribute it and/or modify it @@ -189,6 +189,9 @@ javac.opt.Xlint.desc.cast=\ javac.opt.Xlint.desc.classfile=\ Warn about issues related to classfile contents. +javac.opt.Xlint.desc.dangling-doc-comments=\ + Warn about dangling documentation comments, not attached to any declaration. + javac.opt.Xlint.desc.missing-explicit-ctor=\ Warn about missing explicit constructors in public and protected classes in exported packages. diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java index afa590240e2ac..c729b6ff832ef 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/tree/DocTreeMaker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -218,6 +218,11 @@ public String getText() { return null; } + @Override + public JCDiagnostic.DiagnosticPosition getPos() { + return null; + } + @Override public int getSourcePos(int index) { return Position.NOPOS; diff --git a/src/jdk.compiler/share/classes/module-info.java b/src/jdk.compiler/share/classes/module-info.java index 9826b3f576b5e..9b12171ef6d25 100644 --- a/src/jdk.compiler/share/classes/module-info.java +++ b/src/jdk.compiler/share/classes/module-info.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, 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 @@ -153,6 +153,8 @@ * from other files * <tr><th scope="row">{@code cast} <td>use of unnecessary casts * <tr><th scope="row">{@code classfile} <td>issues related to classfile contents + * <tr><th scope="row">{@code dangling-doc-comments} <td>issues related to "dangling" documentation comments, + * not attached to a declaration * <tr><th scope="row">{@code deprecation} <td>use of deprecated items * <tr><th scope="row">{@code dep-ann} <td>items marked as deprecated in a documentation comment but not * using the {@code @Deprecated} annotation diff --git a/src/jdk.compiler/share/man/javac.1 b/src/jdk.compiler/share/man/javac.1 index ab429ab7d9a40..6586bcaf83f80 100644 --- a/src/jdk.compiler/share/man/javac.1 +++ b/src/jdk.compiler/share/man/javac.1 @@ -708,6 +708,9 @@ in a source file, and is used from other files. \f[V]classfile\f[R]: Warns about the issues related to classfile contents. .IP \[bu] 2 +\f[V]dangling-doc-comments\f[R]: Warns about extra or misplaced +documentation comments near the beginning of a declaration. +.IP \[bu] 2 \f[V]deprecation\f[R]: Warns about the use of deprecated items. .IP \[bu] 2 \f[V]dep-ann\f[R]: Warns about the items marked as deprecated in diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java index 51f45627f31af..4628d851ab027 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/tool/JavadocMemberEnter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2003, 2024, 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 @@ -132,8 +132,8 @@ public void scan(JCTree tree) { tree.accept(this); } - @Override /** default for any non-overridden visit method. */ + @Override public void visitTree(JCTree tree) { maybeConstantExpr = false; } diff --git a/src/jdk.javadoc/share/man/javadoc.1 b/src/jdk.javadoc/share/man/javadoc.1 index 30256207b3ea7..d42d713765754 100644 --- a/src/jdk.javadoc/share/man/javadoc.1 +++ b/src/jdk.javadoc/share/man/javadoc.1 @@ -96,6 +96,22 @@ option either to recursively traverse a directory and its subdirectories, or to pass in an explicit list of package names. When you document individual source files, pass in a list of Java source file names. +.SS Documentation Comments +.PP +The \f[V]javadoc\f[R] tool uses the documentation comment, if any, that +immediately precedes the beginning of the declaration, whether that is +an annotation, modifier, or the name being declared. +If there are multiple documentation comments before the declaration, +only the last one (closest to the declaration) will be used. +If there are any documentation comments after the beginning of the +declaration, they will be ignored. +To check for any extra or misplaced documentation comments, compile your +source code with the \f[V]javac\f[R] option \f[V]-Xlint\f[R], or more +specifically, \f[V]-Xlint:dangling-doc-comments\f[R]. +Within a source file, you may use suppress any warnings generated by +these options by using +\f[V]\[at]SuppressWarnings(\[dq]dangling-doc-comments\[dq])\f[R] on a +suitable enclosing declaration. .SS Conformance .PP The standard doclet does not validate the content of documentation diff --git a/test/langtools/tools/javac/OverrideChecks/6199153/T6199153.java b/test/langtools/tools/javac/OverrideChecks/6199153/T6199153.java index 4a800d1f4150c..d696301f6d231 100644 --- a/test/langtools/tools/javac/OverrideChecks/6199153/T6199153.java +++ b/test/langtools/tools/javac/OverrideChecks/6199153/T6199153.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 6199153 * @summary Generic throws and overriding diff --git a/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.enabled.out b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.enabled.out new file mode 100644 index 0000000000000..76082537ed9b8 --- /dev/null +++ b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.enabled.out @@ -0,0 +1,7 @@ +DanglingDocCommentsClass.java:8:1: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:11:1: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:12:8: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:12:69: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:13:5: compiler.warn.dangling.doc.comment +DanglingDocCommentsClass.java:17:5: compiler.warn.dangling.doc.comment +6 warnings diff --git a/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.java b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.java new file mode 100644 index 0000000000000..2075bf4495ac2 --- /dev/null +++ b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsClass.java @@ -0,0 +1,46 @@ +/* + * @test /nodynamiccopyright/ + * @compile -Xlint:dangling-doc-comments DanglingDocCommentsClass.java + * @compile/ref=empty.out -XDrawDiagnostics DanglingDocCommentsClass.java + * @compile/ref=DanglingDocCommentsClass.enabled.out -XDrawDiagnostics -Xlint:dangling-doc-comments DanglingDocCommentsClass.java + */ + +/** Bad/Extra Class Comment. */ +/** Good Class Comment. */ +@Deprecated +/** Misplaced: after anno. */ +public /** Misplaced: after mods. */ class DanglingDocCommentsClass /** Misplaced: after ident */ { + /** Bad/Extra Field Comment. */ + /** Good Field Comment. */ + public int i; + + /** Bad/Extra Method Comment. */ + /** Good Method Comment. */ + public void m1() { } + + @SuppressWarnings("dangling-doc-comments") + /** Bad/misplaced/suppressed comment. */ + public void m2() { } + + public void m3(boolean b) { + /**************** + * Box comment * + ***************/ + if (b) return; + } + + public void m4a() { + /** Not a doc comment. */ + System.out.println(); + /** Not a doc comment; not dangling for m4b */ + } + + /** Good comment for m4b; no dangling comments. */ + public void m4b() { } + + /** Comment ignored here: does not affect decls in block */ + static { + /** Good comment. */ + int i = 0; + } +} \ No newline at end of file diff --git a/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.enabled.out b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.enabled.out new file mode 100644 index 0000000000000..78dfd6e963354 --- /dev/null +++ b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.enabled.out @@ -0,0 +1,8 @@ +DanglingDocCommentsEnum.java:8:1: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:11:1: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:12:8: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:12:67: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:14:5: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:20:5: compiler.warn.dangling.doc.comment +DanglingDocCommentsEnum.java:26:5: compiler.warn.dangling.doc.comment +7 warnings diff --git a/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.java b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.java new file mode 100644 index 0000000000000..eae98433b70d0 --- /dev/null +++ b/test/langtools/tools/javac/danglingDocComments/DanglingDocCommentsEnum.java @@ -0,0 +1,37 @@ +/* + * @test /nodynamiccopyright/ + * @compile -Xlint:dangling-doc-comments DanglingDocCommentsEnum.java + * @compile/ref=empty.out -XDrawDiagnostics DanglingDocCommentsEnum.java + * @compile/ref=DanglingDocCommentsEnum.enabled.out -XDrawDiagnostics -Xlint:dangling-doc-comments DanglingDocCommentsEnum.java + */ + +/** Bad/Extra Enum Comment. */ +/** Good Enum Comment. */ +@Deprecated +/** Misplaced: after anno. */ +public /** Misplaced: after mods. */ enum DanglingDocCommentsEnum /** Misplaced: after ident */ +{ + /** Bad/Extra enum-member Comment. */ + /** + * Good enum-member Comment. + */ + E1; + + /** Bad/Extra Field Comment. */ + /** + * Good Field Comment. + */ + public int i; + + /** Bad/Extra Method Comment. */ + /** + * Good Method Comment. + */ + public void m1() { + } + + @SuppressWarnings("dangling-doc-comments") + /** Bad/misplaced/suppressed comment. */ + public void m2() { + } +} \ No newline at end of file diff --git a/test/langtools/tools/javac/danglingDocComments/empty.out b/test/langtools/tools/javac/danglingDocComments/empty.out new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/test/langtools/tools/javac/depDocComment/DeprecatedDocComment3.java b/test/langtools/tools/javac/depDocComment/DeprecatedDocComment3.java index d7f4dbc0f2c09..4765444f069b5 100644 --- a/test/langtools/tools/javac/depDocComment/DeprecatedDocComment3.java +++ b/test/langtools/tools/javac/depDocComment/DeprecatedDocComment3.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2011, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,11 +21,11 @@ * questions. */ -/** +/* * @test * @bug 7096014 * @summary Javac tokens should retain state - * @compile -Xlint -Werror DeprecatedDocComment3.java + * @compile -Xlint:-dangling-doc-comments -Werror DeprecatedDocComment3.java */ class DeprecatedDocComment3 { diff --git a/test/langtools/tools/javac/diags/examples/DanglingDocCommentWarning/DanglingDocCommentWarning.java b/test/langtools/tools/javac/diags/examples/DanglingDocCommentWarning/DanglingDocCommentWarning.java new file mode 100644 index 0000000000000..9e87c2d0482e5 --- /dev/null +++ b/test/langtools/tools/javac/diags/examples/DanglingDocCommentWarning/DanglingDocCommentWarning.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2024, 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.warn.dangling.doc.comment +// options: -Xlint:dangling-doc-comments + +/** Comment 1. */ +/** Comment 2. */ +class DanglingDocCommentWarning { } diff --git a/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.java b/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.java index 155dd5335d943..a9167fc34dfef 100644 --- a/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.java +++ b/test/langtools/tools/javac/platform/PreviewAPIsWithRelease.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 8246704 * @summary Verify preview APIs are reported correctly when using --release. diff --git a/test/langtools/tools/javac/warnings/DepAnn.java b/test/langtools/tools/javac/warnings/DepAnn.java index 4f25d290e7bec..d725258cf3ab7 100644 --- a/test/langtools/tools/javac/warnings/DepAnn.java +++ b/test/langtools/tools/javac/warnings/DepAnn.java @@ -1,7 +1,7 @@ /* * @test /nodynamiccopyright/ * @bug 4986256 - * @compile/ref=DepAnn.out -XDrawDiagnostics -Xlint:all DepAnn.java + * @compile/ref=DepAnn.out -XDrawDiagnostics -Xlint:all,-dangling-doc-comments DepAnn.java */ // control: this class should generate warnings diff --git a/test/langtools/tools/javac/warnings/Deprecation.java b/test/langtools/tools/javac/warnings/Deprecation.java index 4a9d4fb2b3a5c..551ce6dc13e84 100644 --- a/test/langtools/tools/javac/warnings/Deprecation.java +++ b/test/langtools/tools/javac/warnings/Deprecation.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 4986256 6598104 8032211 8194764 * @compile/ref=Deprecation.noLint.out -XDrawDiagnostics Deprecation.java diff --git a/test/langtools/tools/javac/warnings/NestedDeprecation/NestedDeprecation.java b/test/langtools/tools/javac/warnings/NestedDeprecation/NestedDeprecation.java index 2e41f72b58b0c..0e4d19826eef8 100644 --- a/test/langtools/tools/javac/warnings/NestedDeprecation/NestedDeprecation.java +++ b/test/langtools/tools/javac/warnings/NestedDeprecation/NestedDeprecation.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 6598104 8032211 * @build p.Dep1 p.Dep2 diff --git a/test/langtools/tools/javac/warnings/Unchecked.java b/test/langtools/tools/javac/warnings/Unchecked.java index 7d5e4aa83a4d1..e64fd760a0764 100644 --- a/test/langtools/tools/javac/warnings/Unchecked.java +++ b/test/langtools/tools/javac/warnings/Unchecked.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 4986256 * @compile/ref=Unchecked.noLint.out -XDrawDiagnostics Unchecked.java diff --git a/test/langtools/tools/javac/warnings/VerifyLintDescriptions.java b/test/langtools/tools/javac/warnings/VerifyLintDescriptions.java index 54472a3b68287..4a025ca497fa8 100644 --- a/test/langtools/tools/javac/warnings/VerifyLintDescriptions.java +++ b/test/langtools/tools/javac/warnings/VerifyLintDescriptions.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2014, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -21,7 +21,7 @@ * questions. */ -/** +/* * @test * @bug 8033961 * @summary Verify that all LintCategories have their descriptions filled. diff --git a/test/langtools/tools/javac/warnings/suppress/T6480588.java b/test/langtools/tools/javac/warnings/suppress/T6480588.java index 84454d251a19a..da9513709d976 100644 --- a/test/langtools/tools/javac/warnings/suppress/T6480588.java +++ b/test/langtools/tools/javac/warnings/suppress/T6480588.java @@ -1,4 +1,4 @@ -/** +/* * @test /nodynamiccopyright/ * @bug 6470588 * @summary Verify that \\@SuppressWarnings("deprecation") works OK for all parts From aee91fbc70df716b96c202511b4ff1b302df8d60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hannes=20Walln=C3=B6fer?= <hannesw@openjdk.org> Date: Fri, 26 Apr 2024 19:59:57 +0000 Subject: [PATCH 131/141] 8296175: Output warning if generated docs contain diagnostic markers Reviewed-by: jjg --- .../doclets/formats/html/HtmlDoclet.java | 4 +++ .../formats/html/HtmlDocletWriter.java | 1 + .../internal/doclets/toolkit/Messages.java | 16 +++++++++ .../toolkit/resources/doclets.properties | 2 ++ .../jdk/javadoc/tool/doclint/DocLintTest.java | 33 ++++++++++++------- 5 files changed, 44 insertions(+), 12 deletions(-) diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java index aedaee2b828bb..17867e368bf4f 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDoclet.java @@ -335,6 +335,10 @@ protected void generateOtherFiles(ClassTree classTree) DocPaths.RESOURCE_FILES.resolve(DocPaths.JQUERY_UI_CSS), false); } copyLegalFiles(options.createIndex()); + // Print a notice if the documentation contains diagnostic markers + if (messages.containsDiagnosticMarkers()) { + messages.notice("doclet.contains.diagnostic.markers"); + } } @Override diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java index 25ec603a064bd..3e461dc3e74df 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/formats/html/HtmlDocletWriter.java @@ -1611,6 +1611,7 @@ private boolean shouldRedirectRelativeLinks(Element element) { * @return the output */ public Content invalidTagOutput(String summary, Optional<Content> detail) { + messages.setContainsDiagnosticMarkers(); if (detail.isEmpty() || detail.get().isEmpty()) { return HtmlTree.SPAN(HtmlStyle.invalidTag, Text.of(summary)); } diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java index 9183804ddc66b..576bf64e751f7 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/Messages.java @@ -47,6 +47,7 @@ public class Messages { private final BaseConfiguration configuration; private final Resources resources; private final Reporter reporter; + private boolean containsDiagnosticMarkers = false; /** * Creates a {@code Messages} object to provide standardized access to @@ -212,6 +213,21 @@ public void notice(String key, Object... args) { } } + /** + * {@return true if the generated documentation contains one or more diagnostic markers + * for invalid input} + */ + public boolean containsDiagnosticMarkers() { + return containsDiagnosticMarkers; + } + + /** + * Sets the flag for documentation containing a diagnostic marker for invalid input. + */ + public void setContainsDiagnosticMarkers() { + this.containsDiagnosticMarkers = true; + } + // ***** Internal support ***** private void report(Diagnostic.Kind k, String msg) { diff --git a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties index 7c5b43d35dfb0..859289ff8bd21 100644 --- a/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties +++ b/src/jdk.javadoc/share/classes/jdk/javadoc/internal/doclets/toolkit/resources/doclets.properties @@ -262,6 +262,8 @@ doclet.urlRedirected=URL {0} was redirected to {1} -- Update the command-line op doclet.unexpectedRedirect=Unexpected redirection for URL {0} to {1} doclet.duplicate.comment.for.property=Duplicate comment for property.\n\ Remove the comment on the property field or on this method to suppress this warning. +doclet.contains.diagnostic.markers=\ + The generated documentation contains diagnostic markers for invalid input. #Documentation for Enums doclet.enum_values_doc.fullbody=\ diff --git a/test/langtools/jdk/javadoc/tool/doclint/DocLintTest.java b/test/langtools/jdk/javadoc/tool/doclint/DocLintTest.java index 4af51070468f5..ff6e5ec8dffec 100644 --- a/test/langtools/jdk/javadoc/tool/doclint/DocLintTest.java +++ b/test/langtools/jdk/javadoc/tool/doclint/DocLintTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2012, 2024, 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 8004834 8007610 8129909 8182765 8247815 + * @bug 8004834 8007610 8129909 8182765 8247815 8296175 * @summary Add doclint support into javadoc * @modules jdk.compiler/com.sun.tools.javac.main */ @@ -117,7 +117,10 @@ private enum Message { // javadoc messages for bad options OPT_BADARG(ERROR, "error: Invalid argument for -Xdoclint option"), OPT_BADQUAL(ERROR, "error: Access qualifiers not permitted for -Xdoclint arguments"), - OPT_BADPACKAGEARG(ERROR, "error: Invalid argument for -Xdoclint/package option"); + OPT_BADPACKAGEARG(ERROR, "error: Invalid argument for -Xdoclint/package option"), + + // javadoc notice about markers for invalid input + JD_NOTE_MARK(NOTE, "The generated documentation contains diagnostic markers for invalid input."); final Diagnostic.Kind kind; final String text; @@ -151,11 +154,13 @@ void run() throws Exception { test(List.of(htmlVersion), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR10A, Message.DL_WRN14A)); + EnumSet.of(Message.DL_ERR10A, Message.DL_WRN14A, + Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR10, Message.DL_WRN14)); + EnumSet.of(Message.DL_ERR10, Message.DL_WRN14, + Message.JD_NOTE_MARK)); // test(List.of("-Xdoclint:none"), // Main.Result.OK, @@ -163,7 +168,8 @@ void run() throws Exception { test(List.of(htmlVersion, rawDiags, "-Xdoclint"), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR10, Message.DL_WRN14)); + EnumSet.of(Message.DL_ERR10, Message.DL_WRN14, + Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint:all/public"), Main.Result.ERROR, @@ -175,19 +181,21 @@ void run() throws Exception { test(List.of(htmlVersion, rawDiags, "-Xdoclint:missing"), Main.Result.OK, - EnumSet.of(Message.DL_WRN14)); + EnumSet.of(Message.DL_WRN14, Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-private"), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR6, Message.DL_ERR10, Message.DL_WRN14)); + EnumSet.of(Message.DL_ERR6, Message.DL_ERR10, + Message.DL_WRN14, Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint:missing,syntax", "-private"), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR6, Message.DL_WRN14)); + EnumSet.of(Message.DL_ERR6, Message.DL_WRN14, + Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint:reference"), Main.Result.ERROR, - EnumSet.of(Message.DL_ERR10)); + EnumSet.of(Message.DL_ERR10, Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint:badarg"), Main.Result.ERROR, @@ -199,12 +207,13 @@ void run() throws Exception { test(List.of(htmlVersion, rawDiags), Main.Result.ERROR, EnumSet.of(Message.DL_ERR_P1TEST, Message.DL_ERR_P2TEST, - Message.DL_WARN_P1TEST, Message.DL_WARN_P2TEST)); + Message.DL_WARN_P1TEST, Message.DL_WARN_P2TEST, Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint/package:p1"), Main.Result.ERROR, EnumSet.of(Message.DL_ERR_P1TEST, - Message.DL_WARN_P1TEST)); + Message.DL_WARN_P1TEST, + Message.JD_NOTE_MARK)); test(List.of(htmlVersion, rawDiags, "-Xdoclint/package:*p"), Main.Result.ERROR, From aa2edd491345cca1d8798848d71b151bc06c6c02 Mon Sep 17 00:00:00 2001 From: Jin Kwon <onacit@gmail.com> Date: Sat, 27 Apr 2024 01:11:33 +0000 Subject: [PATCH 132/141] 8330686: Fix typos in the DatabaseMetaData javadoc Reviewed-by: jpai, lancea, iris --- .../share/classes/java/sql/DatabaseMetaData.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/java.sql/share/classes/java/sql/DatabaseMetaData.java b/src/java.sql/share/classes/java/sql/DatabaseMetaData.java index 6f63c2989b80a..f4cb8787b5fe0 100644 --- a/src/java.sql/share/classes/java/sql/DatabaseMetaData.java +++ b/src/java.sql/share/classes/java/sql/DatabaseMetaData.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1996, 2022, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1996, 2024, 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 @@ -1215,7 +1215,7 @@ boolean dataDefinitionIgnoredInTransactions() * Only procedure descriptions matching the schema and * procedure name criteria are returned. They are ordered by * {@code PROCEDURE_CAT}, {@code PROCEDURE_SCHEM}, - * {@code PROCEDURE_NAME} and {@code SPECIFIC_ NAME}. + * {@code PROCEDURE_NAME} and {@code SPECIFIC_NAME}. * * <P>Each procedure description has the following columns: * <OL> @@ -3289,7 +3289,7 @@ ResultSet getClientInfoProperties() * function name criteria are returned. They are ordered by * {@code FUNCTION_CAT}, {@code FUNCTION_SCHEM}, * {@code FUNCTION_NAME} and - * {@code SPECIFIC_ NAME}. + * {@code SPECIFIC_NAME}. * * <P>Each function description has the following columns: * <OL> @@ -3339,7 +3339,7 @@ ResultSet getFunctions(String catalog, String schemaPattern, * parameter name criteria are returned. They are ordered by * {@code FUNCTION_CAT}, {@code FUNCTION_SCHEM}, * {@code FUNCTION_NAME} and - * {@code SPECIFIC_ NAME}. Within this, the return value, + * {@code SPECIFIC_NAME}. Within this, the return value, * if any, is first. Next are the parameter descriptions in call * order. The column descriptions follow in column number order. * @@ -3358,7 +3358,7 @@ ResultSet getFunctions(String catalog, String schemaPattern, * <LI> functionColumnIn - IN parameter * <LI> functionColumnInOut - INOUT parameter * <LI> functionColumnOut - OUT parameter - * <LI> functionColumnReturn - function return value + * <LI> functionReturn - function return value * <LI> functionColumnResult - Indicates that the parameter or column * is a column in the {@code ResultSet} * </UL> From e3eb652c251e8298c9df95d7ed2788f2cbb5f337 Mon Sep 17 00:00:00 2001 From: Viktor Klang <vklang@openjdk.org> Date: Sat, 27 Apr 2024 11:52:05 +0000 Subject: [PATCH 133/141] 8296543: Update exception documentation for ExecutorService.invokeAll overriders as required Reviewed-by: prappo, alanb --- .../concurrent/AbstractExecutorService.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java b/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java index f45c0036230f0..1b1ba4b29a0e5 100644 --- a/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java +++ b/src/java.base/share/classes/java/util/concurrent/AbstractExecutorService.java @@ -117,6 +117,7 @@ protected <T> RunnableFuture<T> newTaskFor(Callable<T> callable) { * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ + @Override public Future<?> submit(Runnable task) { if (task == null) throw new NullPointerException(); RunnableFuture<Void> ftask = newTaskFor(task, null); @@ -128,6 +129,7 @@ public Future<?> submit(Runnable task) { * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ + @Override public <T> Future<T> submit(Runnable task, T result) { if (task == null) throw new NullPointerException(); RunnableFuture<T> ftask = newTaskFor(task, result); @@ -139,6 +141,7 @@ public <T> Future<T> submit(Runnable task, T result) { * @throws RejectedExecutionException {@inheritDoc} * @throws NullPointerException {@inheritDoc} */ + @Override public <T> Future<T> submit(Callable<T> task) { if (task == null) throw new NullPointerException(); RunnableFuture<T> ftask = newTaskFor(task); @@ -219,6 +222,14 @@ else if (timed) { } } + /** + * @throws InterruptedException {@inheritDoc} + * @throws NullPointerException {@inheritDoc} + * @throws IllegalArgumentException {@inheritDoc} + * @throws ExecutionException {@inheritDoc} + * @throws RejectedExecutionException {@inheritDoc} + */ + @Override public <T> T invokeAny(Collection<? extends Callable<T>> tasks) throws InterruptedException, ExecutionException { try { @@ -229,12 +240,26 @@ public <T> T invokeAny(Collection<? extends Callable<T>> tasks) } } + /** + * @throws InterruptedException {@inheritDoc} + * @throws NullPointerException {@inheritDoc} + * @throws TimeoutException {@inheritDoc} + * @throws ExecutionException {@inheritDoc} + * @throws RejectedExecutionException {@inheritDoc} + */ + @Override public <T> T invokeAny(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return doInvokeAny(tasks, true, unit.toNanos(timeout)); } + /** + * @throws InterruptedException {@inheritDoc} + * @throws NullPointerException {@inheritDoc} + * @throws RejectedExecutionException {@inheritDoc} + */ + @Override public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) throws InterruptedException { if (tasks == null) @@ -260,6 +285,12 @@ public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks) } } + /** + * @throws InterruptedException {@inheritDoc} + * @throws NullPointerException {@inheritDoc} + * @throws RejectedExecutionException {@inheritDoc} + */ + @Override public <T> List<Future<T>> invokeAll(Collection<? extends Callable<T>> tasks, long timeout, TimeUnit unit) throws InterruptedException { From a078b5e6117d2a99386fecd349eb0e0c11b74953 Mon Sep 17 00:00:00 2001 From: Claes Redestad <redestad@openjdk.org> Date: Sat, 27 Apr 2024 12:12:51 +0000 Subject: [PATCH 134/141] 8331114: Further improve performance of MethodTypeDesc::descriptorString Reviewed-by: mchung, liach --- .../classes/java/lang/constant/ClassDesc.java | 2 +- .../java/lang/constant/ConstantUtils.java | 2 +- .../lang/constant/MethodTypeDescImpl.java | 15 ++++++++---- .../classes/sun/invoke/util/Wrapper.java | 23 +++++++++++++------ .../constant/MethodTypeDescFactories.java | 8 +++++-- 5 files changed, 34 insertions(+), 16 deletions(-) diff --git a/src/java.base/share/classes/java/lang/constant/ClassDesc.java b/src/java.base/share/classes/java/lang/constant/ClassDesc.java index 6adba119180d0..767fa953e9777 100644 --- a/src/java.base/share/classes/java/lang/constant/ClassDesc.java +++ b/src/java.base/share/classes/java/lang/constant/ClassDesc.java @@ -160,7 +160,7 @@ static ClassDesc of(String packageName, String className) { static ClassDesc ofDescriptor(String descriptor) { // implicit null-check return (descriptor.length() == 1) - ? Wrapper.forPrimitiveType(descriptor.charAt(0)).primitiveClassDescriptor() + ? Wrapper.forPrimitiveType(descriptor.charAt(0)).classDescriptor() // will throw IAE on descriptor.length == 0 or if array dimensions too long : new ReferenceClassDescImpl(descriptor); } diff --git a/src/java.base/share/classes/java/lang/constant/ConstantUtils.java b/src/java.base/share/classes/java/lang/constant/ConstantUtils.java index 312aac68c6302..d975eaa1d0cfa 100644 --- a/src/java.base/share/classes/java/lang/constant/ConstantUtils.java +++ b/src/java.base/share/classes/java/lang/constant/ConstantUtils.java @@ -226,7 +226,7 @@ static List<ClassDesc> parseMethodDescriptor(String descriptor) { private static ClassDesc resolveClassDesc(String descriptor, int start, int len) { if (len == 1) { - return Wrapper.forBasicType(descriptor.charAt(start)).primitiveClassDescriptor(); + return Wrapper.forPrimitiveType(descriptor.charAt(start)).classDescriptor(); } return ClassDesc.ofDescriptor(descriptor.substring(start, start + len)); } diff --git a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java index 40a9cf8bd60a3..a2d06615e5ddc 100644 --- a/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java +++ b/src/java.base/share/classes/java/lang/constant/MethodTypeDescImpl.java @@ -33,7 +33,6 @@ import java.util.Arrays; import java.util.List; import java.util.Objects; -import java.util.StringJoiner; import static java.util.Objects.requireNonNull; @@ -168,11 +167,17 @@ public String descriptorString() { if (desc != null) return desc; - var sj = new StringJoiner("", "(", ")" + returnType().descriptorString()); - for (int i = 0; i < parameterCount(); i++) { - sj.add(parameterType(i).descriptorString()); + int len = 2 + returnType.descriptorString().length(); + for (ClassDesc argType : argTypes) { + len += argType.descriptorString().length(); } - return cachedDescriptorString = sj.toString(); + StringBuilder sb = new StringBuilder(len).append('('); + for (ClassDesc argType : argTypes) { + sb.append(argType.descriptorString()); + } + desc = sb.append(')').append(returnType.descriptorString()).toString(); + cachedDescriptorString = desc; + return desc; } @Override diff --git a/src/java.base/share/classes/sun/invoke/util/Wrapper.java b/src/java.base/share/classes/sun/invoke/util/Wrapper.java index 3a28d63b7c475..fef9192932d64 100644 --- a/src/java.base/share/classes/sun/invoke/util/Wrapper.java +++ b/src/java.base/share/classes/sun/invoke/util/Wrapper.java @@ -32,7 +32,7 @@ import java.lang.constant.ConstantDescs; public enum Wrapper { - // wrapperType simple primitiveType simple char emptyArray format numericClass superClass + // wrapperType simple primitiveType simple char emptyArray format numericClass superClass classDescriptor BOOLEAN( Boolean.class, "Boolean", boolean.class, "boolean", 'Z', new boolean[0], Format.unsigned( 1), 0, 0, ConstantDescs.CD_boolean), // These must be in the order defined for widening primitive conversions in JLS 5.1.2 // Avoid boxing integral types here to defer initialization of internal caches @@ -60,9 +60,18 @@ public enum Wrapper { private final int superClasses; private final String wrapperSimpleName; private final String primitiveSimpleName; - private final ClassDesc primitiveTypeDesc; - - private Wrapper(Class<?> wtype, String wtypeName, Class<?> ptype, String ptypeName, char tchar, Object emptyArray, int format, int numericClass, int superClasses, ClassDesc primitiveTypeDesc) { + private final ClassDesc classDesc; + + private Wrapper(Class<?> wtype, + String wtypeName, + Class<?> ptype, + String ptypeName, + char tchar, + Object emptyArray, + int format, + int numericClass, + int superClasses, + ClassDesc classDesc) { this.wrapperType = wtype; this.primitiveType = ptype; this.basicTypeChar = tchar; @@ -73,7 +82,7 @@ private Wrapper(Class<?> wtype, String wtypeName, Class<?> ptype, String ptypeNa this.superClasses = superClasses; this.wrapperSimpleName = wtypeName; this.primitiveSimpleName = ptypeName; - this.primitiveTypeDesc = primitiveTypeDesc; + this.classDesc = classDesc; } /** For debugging, give the details of this wrapper. */ @@ -380,8 +389,8 @@ public static Wrapper forBasicType(Class<?> type) { } } - /** A nominal descriptor of the primitive type */ - public ClassDesc primitiveClassDescriptor() { return primitiveTypeDesc; } + /** A nominal descriptor of the wrapped type */ + public ClassDesc classDescriptor() { return classDesc; } /** What is the primitive type wrapped by this wrapper? */ public Class<?> primitiveType() { return primitiveType; } diff --git a/test/micro/org/openjdk/bench/java/lang/constant/MethodTypeDescFactories.java b/test/micro/org/openjdk/bench/java/lang/constant/MethodTypeDescFactories.java index b9614fccfd2fc..64019c37c1484 100644 --- a/test/micro/org/openjdk/bench/java/lang/constant/MethodTypeDescFactories.java +++ b/test/micro/org/openjdk/bench/java/lang/constant/MethodTypeDescFactories.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, 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,11 +54,14 @@ public class MethodTypeDescFactories { private static final ClassDesc DUMMY_CD = ClassDesc.of("Dummy_invalid"); + /** Dots will be replaced by the descriptor of this benchmark class. */ @Param({ "(Ljava/lang/Object;Ljava/lang/String;)I", "()V", "([IJLjava/lang/String;Z)Ljava/util/List;", - "()[Ljava/lang/String;" + "()[Ljava/lang/String;", + "(..IIJ)V", + "(.....................)." }) public String descString; public MethodTypeDesc desc; @@ -68,6 +71,7 @@ public class MethodTypeDescFactories { @Setup public void setup() { + descString = descString.replaceAll("\\.", MethodTypeDescFactories.class.descriptorString()); desc = MethodTypeDesc.ofDescriptor(descString); ret = desc.returnType(); args = desc.parameterArray(); From c3372c455542cef2aaf673d1f14be8759bb98e8d Mon Sep 17 00:00:00 2001 From: Claes Redestad <redestad@openjdk.org> Date: Sat, 27 Apr 2024 12:13:53 +0000 Subject: [PATCH 135/141] 8331134: Port SimpleStringBuilderStrategy to use ClassFile API Reviewed-by: mchung --- .../java/lang/invoke/StringConcatFactory.java | 255 ++++++------------ .../openjdk/bench/java/lang/StringConcat.java | 29 +- 2 files changed, 111 insertions(+), 173 deletions(-) diff --git a/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java b/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java index 67e22c384ac34..cd2f7ec170a5c 100644 --- a/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java +++ b/src/java.base/share/classes/java/lang/invoke/StringConcatFactory.java @@ -28,19 +28,25 @@ import jdk.internal.access.JavaLangAccess; import jdk.internal.access.SharedSecrets; import jdk.internal.misc.VM; -import jdk.internal.org.objectweb.asm.ClassWriter; -import jdk.internal.org.objectweb.asm.MethodVisitor; import jdk.internal.util.ClassFileDumper; import jdk.internal.vm.annotation.Stable; import sun.invoke.util.Wrapper; +import java.lang.classfile.ClassBuilder; +import java.lang.classfile.ClassFile; +import java.lang.classfile.CodeBuilder; +import java.lang.classfile.TypeKind; +import java.lang.constant.ClassDesc; +import java.lang.constant.ConstantDescs; +import java.lang.constant.MethodTypeDesc; import java.lang.invoke.MethodHandles.Lookup; +import java.lang.reflect.AccessFlag; import java.util.Objects; import java.util.Set; +import java.util.function.Consumer; import static java.lang.invoke.MethodHandles.Lookup.ClassOption.STRONG; import static java.lang.invoke.MethodType.methodType; -import static jdk.internal.org.objectweb.asm.Opcodes.*; /** * <p>Methods to facilitate the creation of String concatenation methods, that @@ -364,7 +370,7 @@ public static CallSite makeConcatWithConstants(MethodHandles.Lookup lookup, } try { - if (concatType.parameterCount() < HIGH_ARITY_THRESHOLD) { + if (concatType.parameterCount() <= HIGH_ARITY_THRESHOLD) { return new ConstantCallSite( generateMHInlineCopy(concatType, constantStrings) .viewAsType(concatType, true)); @@ -1054,12 +1060,20 @@ private StringConcatFactory() { * to what javac would. No exact sizing of parameters or estimates. */ private static final class SimpleStringBuilderStrategy { - static final int CLASSFILE_VERSION = 52; // JDK 8 static final String METHOD_NAME = "concat"; - // ClassFileDumper replaced java.lang.invoke.ProxyClassDumper in JDK 21 - // -- see JDK-8304846 + static final ClassDesc STRING_BUILDER = ClassDesc.ofDescriptor("Ljava/lang/StringBuilder;"); static final ClassFileDumper DUMPER = ClassFileDumper.getInstance("java.lang.invoke.StringConcatFactory.dump", "stringConcatClasses"); + static final MethodTypeDesc APPEND_BOOLEAN_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_boolean); + static final MethodTypeDesc APPEND_CHAR_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_char); + static final MethodTypeDesc APPEND_DOUBLE_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_double); + static final MethodTypeDesc APPEND_FLOAT_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_float); + static final MethodTypeDesc APPEND_INT_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_int); + static final MethodTypeDesc APPEND_LONG_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_long); + static final MethodTypeDesc APPEND_OBJECT_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_Object); + static final MethodTypeDesc APPEND_STRING_TYPE = MethodTypeDesc.of(STRING_BUILDER, ConstantDescs.CD_String); + static final MethodTypeDesc INT_CONSTRUCTOR_TYPE = MethodTypeDesc.of(ConstantDescs.CD_void, ConstantDescs.CD_int); + static final MethodTypeDesc TO_STRING_TYPE = MethodTypeDesc.of(ConstantDescs.CD_String); /** * Ensure a capacity in the initial StringBuilder to accommodate all @@ -1075,81 +1089,17 @@ private SimpleStringBuilderStrategy() { private static MethodHandle generate(Lookup lookup, MethodType args, String[] constants) throws Exception { String className = getClassName(lookup.lookupClass()); - ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS + ClassWriter.COMPUTE_FRAMES); - - cw.visit(CLASSFILE_VERSION, - ACC_SUPER + ACC_PUBLIC + ACC_FINAL + ACC_SYNTHETIC, - className, - null, - "java/lang/Object", - null - ); - - MethodVisitor mv = cw.visitMethod( - ACC_PUBLIC + ACC_STATIC + ACC_FINAL, - METHOD_NAME, - args.toMethodDescriptorString(), - null, - null); - - mv.visitCode(); - - - // Prepare StringBuilder instance - mv.visitTypeInsn(NEW, "java/lang/StringBuilder"); - mv.visitInsn(DUP); - - int len = 0; - for (String constant : constants) { - if (constant != null) { - len += constant.length(); - } - } - len += args.parameterCount() * ARGUMENT_SIZE_FACTOR; - iconst(mv, len); - mv.visitMethodInsn( - INVOKESPECIAL, - "java/lang/StringBuilder", - "<init>", - "(I)V", - false - ); - - // At this point, we have a blank StringBuilder on stack, fill it in with .append calls. - { - int off = 0; - for (int c = 0; c < args.parameterCount(); c++) { - if (constants[c] != null) { - mv.visitLdcInsn(constants[c]); - sbAppend(mv, "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); - } - Class<?> cl = args.parameterType(c); - mv.visitVarInsn(getLoadOpcode(cl), off); - off += getParameterSize(cl); - String desc = getSBAppendDesc(cl); - sbAppend(mv, desc); - } - if (constants[constants.length - 1] != null) { - mv.visitLdcInsn(constants[constants.length - 1]); - sbAppend(mv, "(Ljava/lang/String;)Ljava/lang/StringBuilder;"); - } - } - mv.visitMethodInsn( - INVOKEVIRTUAL, - "java/lang/StringBuilder", - "toString", - "()Ljava/lang/String;", - false - ); - - mv.visitInsn(ARETURN); - - mv.visitMaxs(-1, -1); - mv.visitEnd(); - cw.visitEnd(); - - byte[] classBytes = cw.toByteArray(); + byte[] classBytes = ClassFile.of().build(ClassDesc.of(className), + new Consumer<ClassBuilder>() { + @Override + public void accept(ClassBuilder clb) { + clb.withFlags(AccessFlag.FINAL, AccessFlag.SUPER, AccessFlag.SYNTHETIC) + .withMethodBody(METHOD_NAME, + MethodTypeDesc.ofDescriptor(args.toMethodDescriptorString()), + ClassFile.ACC_FINAL | ClassFile.ACC_PRIVATE | ClassFile.ACC_STATIC, + generateMethod(constants, args)); + }}); try { Lookup hiddenLookup = lookup.makeHiddenClassDefiner(className, classBytes, SET_OF_STRONG, DUMPER) .defineClassAsLookup(true); @@ -1160,14 +1110,48 @@ private static MethodHandle generate(Lookup lookup, MethodType args, String[] co } } - private static void sbAppend(MethodVisitor mv, String desc) { - mv.visitMethodInsn( - INVOKEVIRTUAL, - "java/lang/StringBuilder", - "append", - desc, - false - ); + private static Consumer<CodeBuilder> generateMethod(String[] constants, MethodType args) { + return new Consumer<CodeBuilder>() { + @Override + public void accept(CodeBuilder cb) { + cb.new_(STRING_BUILDER); + cb.dup(); + + int len = 0; + for (String constant : constants) { + if (constant != null) { + len += constant.length(); + } + } + len += args.parameterCount() * ARGUMENT_SIZE_FACTOR; + cb.constantInstruction(len); + cb.invokespecial(STRING_BUILDER, "<init>", INT_CONSTRUCTOR_TYPE); + + // At this point, we have a blank StringBuilder on stack, fill it in with .append calls. + { + int off = 0; + for (int c = 0; c < args.parameterCount(); c++) { + if (constants[c] != null) { + cb.ldc(constants[c]); + cb.invokevirtual(STRING_BUILDER, "append", APPEND_STRING_TYPE); + } + Class<?> cl = args.parameterType(c); + TypeKind kind = TypeKind.from(cl); + cb.loadInstruction(kind, off); + off += kind.slotSize(); + MethodTypeDesc desc = getSBAppendDesc(cl); + cb.invokevirtual(STRING_BUILDER, "append", desc); + } + if (constants[constants.length - 1] != null) { + cb.ldc(constants[constants.length - 1]); + cb.invokevirtual(STRING_BUILDER, "append", APPEND_STRING_TYPE); + } + } + + cb.invokevirtual(STRING_BUILDER, "toString", TO_STRING_TYPE); + cb.areturn(); + } + }; } /** @@ -1178,104 +1162,31 @@ private static void sbAppend(MethodVisitor mv, String desc) { private static String getClassName(Class<?> hostClass) { String name = hostClass.isHidden() ? hostClass.getName().replace('/', '_') : hostClass.getName(); - return name.replace('.', '/') + "$$StringConcat"; + return name + "$$StringConcat"; } - private static String getSBAppendDesc(Class<?> cl) { + private static MethodTypeDesc getSBAppendDesc(Class<?> cl) { if (cl.isPrimitive()) { if (cl == Integer.TYPE || cl == Byte.TYPE || cl == Short.TYPE) { - return "(I)Ljava/lang/StringBuilder;"; + return APPEND_INT_TYPE; } else if (cl == Boolean.TYPE) { - return "(Z)Ljava/lang/StringBuilder;"; + return APPEND_BOOLEAN_TYPE; } else if (cl == Character.TYPE) { - return "(C)Ljava/lang/StringBuilder;"; + return APPEND_CHAR_TYPE; } else if (cl == Double.TYPE) { - return "(D)Ljava/lang/StringBuilder;"; + return APPEND_DOUBLE_TYPE; } else if (cl == Float.TYPE) { - return "(F)Ljava/lang/StringBuilder;"; + return APPEND_FLOAT_TYPE; } else if (cl == Long.TYPE) { - return "(J)Ljava/lang/StringBuilder;"; + return APPEND_LONG_TYPE; } else { throw new IllegalStateException("Unhandled primitive StringBuilder.append: " + cl); } } else if (cl == String.class) { - return "(Ljava/lang/String;)Ljava/lang/StringBuilder;"; - } else { - return "(Ljava/lang/Object;)Ljava/lang/StringBuilder;"; - } - } - - private static String getStringValueOfDesc(Class<?> cl) { - if (cl.isPrimitive()) { - if (cl == Integer.TYPE || cl == Byte.TYPE || cl == Short.TYPE) { - return "(I)Ljava/lang/String;"; - } else if (cl == Boolean.TYPE) { - return "(Z)Ljava/lang/String;"; - } else if (cl == Character.TYPE) { - return "(C)Ljava/lang/String;"; - } else if (cl == Double.TYPE) { - return "(D)Ljava/lang/String;"; - } else if (cl == Float.TYPE) { - return "(F)Ljava/lang/String;"; - } else if (cl == Long.TYPE) { - return "(J)Ljava/lang/String;"; - } else { - throw new IllegalStateException("Unhandled String.valueOf: " + cl); - } - } else if (cl == String.class) { - return "(Ljava/lang/String;)Ljava/lang/String;"; - } else { - return "(Ljava/lang/Object;)Ljava/lang/String;"; - } - } - - /** - * The following method is copied from - * org.objectweb.asm.commons.InstructionAdapter. Part of ASM: a very small - * and fast Java bytecode manipulation framework. - * Copyright (c) 2000-2005 INRIA, France Telecom All rights reserved. - */ - private static void iconst(MethodVisitor mv, final int cst) { - if (cst >= -1 && cst <= 5) { - mv.visitInsn(ICONST_0 + cst); - } else if (cst >= Byte.MIN_VALUE && cst <= Byte.MAX_VALUE) { - mv.visitIntInsn(BIPUSH, cst); - } else if (cst >= Short.MIN_VALUE && cst <= Short.MAX_VALUE) { - mv.visitIntInsn(SIPUSH, cst); + return APPEND_STRING_TYPE; } else { - mv.visitLdcInsn(cst); - } - } - - private static int getLoadOpcode(Class<?> c) { - if (c == Void.TYPE) { - throw new InternalError("Unexpected void type of load opcode"); - } - return ILOAD + getOpcodeOffset(c); - } - - private static int getOpcodeOffset(Class<?> c) { - if (c.isPrimitive()) { - if (c == Long.TYPE) { - return 1; - } else if (c == Float.TYPE) { - return 2; - } else if (c == Double.TYPE) { - return 3; - } - return 0; - } else { - return 4; - } - } - - private static int getParameterSize(Class<?> c) { - if (c == Void.TYPE) { - return 0; - } else if (c == Long.TYPE || c == Double.TYPE) { - return 2; + return APPEND_OBJECT_TYPE; } - return 1; } } } diff --git a/test/micro/org/openjdk/bench/java/lang/StringConcat.java b/test/micro/org/openjdk/bench/java/lang/StringConcat.java index c27514ec442fc..c4d2d1bfe1155 100644 --- a/test/micro/org/openjdk/bench/java/lang/StringConcat.java +++ b/test/micro/org/openjdk/bench/java/lang/StringConcat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, 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 @@ -192,4 +192,31 @@ public String concat123String() { +f110 + ","+f111 + ","+f112 + ","+f113 + ","+f114 + ","+f115 + ","+f116 + ","+f117 + ","+f118 + ","+f119 + "," +f120 + ","+f121 + ","+f122; } + + @Benchmark + public String concat23StringConst() { + return f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + f0 + """ + A really long constant string. Such as a copyright header: + * Copyright (c) 2018, 2024, 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. + """; + } } From 16c7dcdb04a7c220684a20eb4a0da4505ae03813 Mon Sep 17 00:00:00 2001 From: Christoph Langer <clanger@openjdk.org> Date: Sat, 27 Apr 2024 13:10:40 +0000 Subject: [PATCH 136/141] 8330523: Reduce runtime and improve efficiency of KeepAliveTest Reviewed-by: djelinski --- .../www/http/HttpClient/KeepAliveTest.java | 1373 +++-------------- 1 file changed, 218 insertions(+), 1155 deletions(-) diff --git a/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java b/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java index 344ff5f89e9eb..02e60ebc75f76 100644 --- a/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java +++ b/test/jdk/sun/net/www/http/HttpClient/KeepAliveTest.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2022, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,177 +24,29 @@ /* * @test * @library /test/lib - * @bug 8291226 8291638 - * @modules java.base/sun.net:+open - * java.base/sun.net.www.http:+open - * java.base/sun.net.www:+open + * @bug 8291226 8291638 8330523 + * @modules java.base/sun.net.www.http:+open * java.base/sun.net.www.protocol.http:+open - * @run main/othervm KeepAliveTest 0 - * @run main/othervm KeepAliveTest 1 - * @run main/othervm KeepAliveTest 2 - * @run main/othervm KeepAliveTest 3 - * @run main/othervm KeepAliveTest 4 - * @run main/othervm KeepAliveTest 5 - * @run main/othervm KeepAliveTest 6 - * @run main/othervm KeepAliveTest 7 - * @run main/othervm KeepAliveTest 8 - * @run main/othervm KeepAliveTest 9 - * @run main/othervm KeepAliveTest 10 - * @run main/othervm KeepAliveTest 11 - * @run main/othervm KeepAliveTest 12 - * @run main/othervm KeepAliveTest 13 - * @run main/othervm KeepAliveTest 14 - * @run main/othervm KeepAliveTest 15 - * @run main/othervm KeepAliveTest 16 - * @run main/othervm KeepAliveTest 17 - * @run main/othervm KeepAliveTest 18 - * @run main/othervm KeepAliveTest 19 - * @run main/othervm KeepAliveTest 20 - * @run main/othervm KeepAliveTest 21 - * @run main/othervm KeepAliveTest 22 - * @run main/othervm KeepAliveTest 23 - * @run main/othervm KeepAliveTest 24 - * @run main/othervm KeepAliveTest 25 - * @run main/othervm KeepAliveTest 26 - * @run main/othervm KeepAliveTest 27 - * @run main/othervm KeepAliveTest 28 - * @run main/othervm KeepAliveTest 29 - * @run main/othervm KeepAliveTest 30 - * @run main/othervm KeepAliveTest 31 - * @run main/othervm KeepAliveTest 32 - * @run main/othervm KeepAliveTest 33 - * @run main/othervm KeepAliveTest 34 - * @run main/othervm KeepAliveTest 35 - * @run main/othervm KeepAliveTest 36 - * @run main/othervm KeepAliveTest 37 - * @run main/othervm KeepAliveTest 38 - * @run main/othervm KeepAliveTest 39 - * @run main/othervm KeepAliveTest 40 - * @run main/othervm KeepAliveTest 41 - * @run main/othervm KeepAliveTest 42 - * @run main/othervm KeepAliveTest 43 - * @run main/othervm KeepAliveTest 44 - * @run main/othervm KeepAliveTest 45 - * @run main/othervm KeepAliveTest 46 - * @run main/othervm KeepAliveTest 47 - * @run main/othervm KeepAliveTest 48 - * @run main/othervm KeepAliveTest 49 - * @run main/othervm KeepAliveTest 50 - * @run main/othervm KeepAliveTest 51 - * @run main/othervm KeepAliveTest 52 - * @run main/othervm KeepAliveTest 53 - * @run main/othervm KeepAliveTest 54 - * @run main/othervm KeepAliveTest 55 - * @run main/othervm KeepAliveTest 56 - * @run main/othervm KeepAliveTest 57 - * @run main/othervm KeepAliveTest 58 - * @run main/othervm KeepAliveTest 59 - * @run main/othervm KeepAliveTest 60 - * @run main/othervm KeepAliveTest 61 - * @run main/othervm KeepAliveTest 62 - * @run main/othervm KeepAliveTest 63 - * @run main/othervm KeepAliveTest 64 - * @run main/othervm KeepAliveTest 65 - * @run main/othervm KeepAliveTest 66 - * @run main/othervm KeepAliveTest 67 - * @run main/othervm KeepAliveTest 68 - * @run main/othervm KeepAliveTest 69 - * @run main/othervm KeepAliveTest 70 - * @run main/othervm KeepAliveTest 71 - * @run main/othervm KeepAliveTest 72 - * @run main/othervm KeepAliveTest 73 - * @run main/othervm KeepAliveTest 74 - * @run main/othervm KeepAliveTest 75 - * @run main/othervm KeepAliveTest 76 - * @run main/othervm KeepAliveTest 77 - * @run main/othervm KeepAliveTest 78 - * @run main/othervm KeepAliveTest 79 - * @run main/othervm KeepAliveTest 80 - * @run main/othervm KeepAliveTest 81 - * @run main/othervm KeepAliveTest 82 - * @run main/othervm KeepAliveTest 83 - * @run main/othervm KeepAliveTest 84 - * @run main/othervm KeepAliveTest 85 - * @run main/othervm KeepAliveTest 86 - * @run main/othervm KeepAliveTest 87 - * @run main/othervm KeepAliveTest 88 - * @run main/othervm KeepAliveTest 89 - * @run main/othervm KeepAliveTest 90 - * @run main/othervm KeepAliveTest 91 - * @run main/othervm KeepAliveTest 92 - * @run main/othervm KeepAliveTest 93 - * @run main/othervm KeepAliveTest 94 - * @run main/othervm KeepAliveTest 95 - * @run main/othervm KeepAliveTest 96 - * @run main/othervm KeepAliveTest 97 - * @run main/othervm KeepAliveTest 98 - * @run main/othervm KeepAliveTest 99 - * @run main/othervm KeepAliveTest 100 - * @run main/othervm KeepAliveTest 101 - * @run main/othervm KeepAliveTest 102 - * @run main/othervm KeepAliveTest 103 - * @run main/othervm KeepAliveTest 104 - * @run main/othervm KeepAliveTest 105 - * @run main/othervm KeepAliveTest 106 - * @run main/othervm KeepAliveTest 107 - * @run main/othervm KeepAliveTest 108 - * @run main/othervm KeepAliveTest 109 - * @run main/othervm KeepAliveTest 110 - * @run main/othervm KeepAliveTest 111 - * @run main/othervm KeepAliveTest 112 - * @run main/othervm KeepAliveTest 113 - * @run main/othervm KeepAliveTest 114 - * @run main/othervm KeepAliveTest 115 - * @run main/othervm KeepAliveTest 116 - * @run main/othervm KeepAliveTest 117 - * @run main/othervm KeepAliveTest 118 - * @run main/othervm KeepAliveTest 119 - * @run main/othervm KeepAliveTest 120 - * @run main/othervm KeepAliveTest 121 - * @run main/othervm KeepAliveTest 122 - * @run main/othervm KeepAliveTest 123 - * @run main/othervm KeepAliveTest 124 - * @run main/othervm KeepAliveTest 125 - * @run main/othervm KeepAliveTest 126 - * @run main/othervm KeepAliveTest 127 - * @run main/othervm KeepAliveTest 128 - * @run main/othervm KeepAliveTest 129 - * @run main/othervm KeepAliveTest 130 - * @run main/othervm KeepAliveTest 131 - * @run main/othervm KeepAliveTest 132 - * @run main/othervm KeepAliveTest 133 - * @run main/othervm KeepAliveTest 134 - * @run main/othervm KeepAliveTest 135 - * @run main/othervm KeepAliveTest 136 - * @run main/othervm KeepAliveTest 137 - * @run main/othervm KeepAliveTest 138 - * @run main/othervm KeepAliveTest 139 - * @run main/othervm KeepAliveTest 140 - * @run main/othervm KeepAliveTest 141 - * @run main/othervm KeepAliveTest 142 - * @run main/othervm KeepAliveTest 143 - * @run main/othervm KeepAliveTest 144 - * @run main/othervm KeepAliveTest 145 - * @run main/othervm KeepAliveTest 146 - * @run main/othervm KeepAliveTest 147 - * @run main/othervm KeepAliveTest 148 - * @run main/othervm KeepAliveTest 149 - * @run main/othervm KeepAliveTest 150 - * @run main/othervm KeepAliveTest 151 - * @run main/othervm KeepAliveTest 152 - * @run main/othervm KeepAliveTest 153 - * @run main/othervm KeepAliveTest 154 - * @run main/othervm KeepAliveTest 155 - * @run main/othervm KeepAliveTest 156 - * @run main/othervm KeepAliveTest 157 - * @run main/othervm KeepAliveTest 158 - * @run main/othervm KeepAliveTest 159 + * @run main/othervm KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=100 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.proxy=200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=100 -Dhttp.keepAlive.time.proxy=200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=-100 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.proxy=-200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=-100 -Dhttp.keepAlive.time.proxy=-200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.proxy=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=0 -Dhttp.keepAlive.time.proxy=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=0 -Dhttp.keepAlive.time.proxy=-200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=-100 -Dhttp.keepAlive.time.proxy=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=100 -Dhttp.keepAlive.time.proxy=0 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=0 -Dhttp.keepAlive.time.proxy=200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=100 -Dhttp.keepAlive.time.proxy=-200 KeepAliveTest + * @run main/othervm -Dhttp.keepAlive.time.server=-100 -Dhttp.keepAlive.time.proxy=200 KeepAliveTest */ - -import java.nio.charset.StandardCharsets; -import java.io.InputStream; import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.lang.reflect.Constructor; @@ -206,841 +58,59 @@ import java.net.ServerSocket; import java.net.Socket; import java.net.URL; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Map.Entry; -import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Phaser; import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; + +import jdk.test.lib.net.URIBuilder; + import sun.net.www.http.HttpClient; import sun.net.www.http.KeepAliveCache; import sun.net.www.protocol.http.HttpURLConnection; -import jdk.test.lib.net.URIBuilder; public class KeepAliveTest { - private static final Logger logger = Logger.getLogger("sun.net.www.protocol.http.HttpURLConnection"); - private static final String NOT_CACHED = "NotCached"; - private static final String CLIENT_SEPARATOR = ";"; - private static final String NEW_LINE = "\r\n"; - private volatile int SERVER_PORT = 0; + /* - * isProxySet is shared variable between server thread and client thread(main) and it should be set and reset to false for each and - * every scenario. - * isProxySet variable should be set by server thread before proceeding to client thread(main). + * This test covers a matrix of 10 server scenarios and 16 client scenarios. */ - private volatile boolean isProxySet = false; + private static final Logger logger = Logger.getLogger("sun.net.www.protocol.http.HttpURLConnection"); + + private static final String NEW_LINE = "\r\n"; + private static final String CONNECTION_KEEP_ALIVE_ONLY = "Connection: keep-alive"; private static final String PROXY_CONNECTION_KEEP_ALIVE_ONLY = "Proxy-Connection: keep-alive"; private static final String KEEP_ALIVE_TIMEOUT_NEG = "Keep-alive: timeout=-20"; private static final String KEEP_ALIVE_TIMEOUT_ZERO = "Keep-alive: timeout=0"; private static final String KEEP_ALIVE_TIMEOUT = "Keep-alive: timeout=20"; private static final String KEEP_ALIVE_PROXY_TIMEOUT = "Keep-alive: timeout=120"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_NEGATIVE = "http.keepAlive.time.server=-100"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_NEGATIVE = "http.keepAlive.time.proxy=-200"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_ZERO = "http.keepAlive.time.server=0"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_ZERO = "http.keepAlive.time.proxy=0"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_POSITIVE = "http.keepAlive.time.server=100"; - private static final String CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_POSITIVE = "http.keepAlive.time.proxy=200"; - private static final String CONNECTION_KEEP_ALIVE_WITH_TIMEOUT = CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE - + KEEP_ALIVE_TIMEOUT; - /* - * Following Constants represents Client Side Properties and is used as reference in below table as - * CLIENT_INPUT_CONSTANT_NAMES - */ - private static final String SERVER_100_NEGATIVE = CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_NEGATIVE; - private static final String PROXY_200_NEGATIVE = CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_NEGATIVE; - private static final String SERVER_ZERO = CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_ZERO; - private static final String PROXY_ZERO = CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_ZERO; - private static final String SERVER_100 = CLIENT_HTTP_KEEP_ALIVE_TIME_SERVER_POSITIVE; - private static final String PROXY_200 = CLIENT_HTTP_KEEP_ALIVE_TIME_PROXY_POSITIVE; - - /* - * CONSTANTS A,B,C,D,E,NI,F,G,H,I represents ServerScenarios and is used as reference in below table - * as SERVER_RESPONSE_CONSTANT_NAME - */ - private static final String A = CONNECTION_KEEP_ALIVE_ONLY; - private static final String B = CONNECTION_KEEP_ALIVE_WITH_TIMEOUT; - private static final String C = PROXY_CONNECTION_KEEP_ALIVE_ONLY; - private static final String D = PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + CONNECTION_KEEP_ALIVE_ONLY; - private static final String E = C + NEW_LINE + KEEP_ALIVE_PROXY_TIMEOUT; - private static final String NI = "NO_INPUT"; - private static final String F = A + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG; - private static final String G = A + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO; - private static final String H = C + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG; - private static final String I = C + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO; - - /* - * There are 160 scenarios run by this program. - * For every scenario there is mapping between serverScenarios[int],clientScenarios[int] and expectedOutput[int] - * - * serverScenarios[0] clientScenarios[0] expectedOutput[0] - * serverScenarios[1] clientScenarios[1] expectedOutput[1] - * serverScenarios[2] clientScenarios[2] expectedOutput[2] - * - * ... - * - * serverScenarios[159] cientScenarios[159] expectedOutput[159] - * - * whereas serverScenarios[int] is retrieved using getServerScenario(int) - * whereas clientScenarios[int] is retrieved using clientScenario[getClientScenarioNumber[int]] - * and - * expectedOutput[int] is retrieved using expectedOuput[int] directly. - * - */ - - /* Here is the complete table of server_response, client system properties input and expected cached timeout at client side */ - /* ScNo | SERVER RESPONSE (SERVER_RESPONSE_CONSTANT_NAME)| CLIENT SYSTEM PROPERTIES INPUT (CLIENT_INPUT_CONSTANT_NAMES) | EXPECTED CACHED TIMEOUT AT CLIENT SIDE - ***************************************************************************************************************************************** - * 0 | Connection: keep-alive (A) | No Input Provided (NI) | Default Timeout set to 5 - *--------------------------------------------------------------------------------------------------------------------------- - * 1 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 (SERVER_100)| Client Timeout set to 100 - *-------------------------------------------------------------------------------------------------------------------------- - * 2 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.proxy=200 (PROXY_200) | Default Timeout set to 5 - *--------------------------------------------------------------------------------------------------------------------------- - * 3 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 100 - * | | (SERVER_100 && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 4 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 | Default Timeout set to 5 - * | | (SERVER_100_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 5 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.proxy=-200 | Default Timeout set to 5 - * | | (PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 6 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Default Timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 7 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 | Connection Closed Immediately - * | | (SERVER_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 8 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.proxy=0 | Default Timeout set to 5 - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 9 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Connection Closed Immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 10 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Connection Closed Immediately - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 11 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Default Timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 12 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 100 - * | | (SERVER_100 && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 13 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Connection Closed Immediately - * | | (SERVER_ZERO && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 14 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 100 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 15 | Connection: keep-alive (A) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Default Timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 16 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | No Input Provided (NI) | Timeout set to 20 - *------------------------------------------------------------------------------------------------------------------------ - * 17 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 | Timeout set to 20 - * | | (SERVER_100) | - *--------------------------------------------------------------------------------------------------------------------------- - * 18 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 19 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (SERVER_100 && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 20 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=-100 | Timeout set to 20 - * | | (SERVER_100_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 21 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 - * | | (PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 22 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *--------------------------------------------------------------------------------------------------------------------------- - * 23 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 | Timeout set to 20 - * | | (SERVER_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 24 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 25 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 - * | | (SERVER_ZERO && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 26 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 27 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 28 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 20 - * | | (SERVER_100 && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 29 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (SERVER_ZERO && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 30 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 20 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 31 |Connection: keep-alive\r\nKeep-alive: timeout=20 (B) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 32 |Proxy-Connection: keep-alive (C) | No Input Provided (NI) | Default timeout set to 60 - *--------------------------------------------------------------------------------------------------------------------------- - * 33 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=100 | Default timeout set to 60 - * | | (SERVER_100) | - *--------------------------------------------------------------------------------------------------------------------------- - * 34 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------- - * 35 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100 && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------- - * 36 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=-100 | Default timeout set to 60 - * | | (SERVER_100_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 37 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 38 |Proxy-Connection: keep-alive (C) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | |(SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *--------------------------------------------------------------------------------------------------------------------------- - * 39 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 | Default timeout set to 60 - * | | (SERVER_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 40 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 41 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 42 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 43 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 44 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 45 |Proxy-Connection: keep-alive (C) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_ZERO && PROXY_200) | - *--------------------------------------------------------------------------------------------------------------------------- - * 46 |Proxy-Connection: keep-alive (C) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------- - * 47 |Proxy-Connection: keep-alive (C) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------- - * 48 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | No Input Provided (NI) | Default timeout set to 60 - *----------------------------------------------------------------------------------------------------------------------------- - * 49 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 | Default timeout set to 60 - * | | (SERVER_100) | - *--------------------------------------------------------------------------------------------------------------------------- - * 50 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------ - * 51 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------ - * 52 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100 | Default timeout set to 60 - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------ - * 53 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------ - * 54 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100&& | - * | | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE | - *------------------------------------------------------------------------------------------------------------------------------- - * 55 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 | Default timeout set to 60 - * | | (SERVER_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 56 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 57 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 58 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Default timeout set to 60 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 59 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 60 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 61 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_ZERO && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------ - * 62 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------ - * 63 |Connection:keep-alive\r\nProxy-connection:keep-alive (D) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------- - * 64 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| No Input Provided (NI) | Timeout set to 120 - *------------------------------------------------------------------------------------------------------------------------------- - * 65 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 | Timeout set to 120 - * | | (SERVER_100) | - *------------------------------------------------------------------------------------------------------------------------------- - * 66 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 - * | | (PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------- - * 67 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 - * | | (SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------- - * 68 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------- - * 69 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 - * | | (PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------- - * 70 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *------------------------------------------------------------------------------------------------------------------------------- - * 71 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 | Timeout set to 120 - * | | (SERVER_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 72 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 - * | | (PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 73 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 74 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------- - * 75 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 76 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 120 - * | | (SERVER_100 && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------- - * 77 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 - * | | (SERVER_ZERO && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------- - * 78 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------- - * 79 |Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 (E)| -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 120 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *----------------------------------------------------------------------------------------------------------------------------- - * 80 |No Input (NI) | No Input Provided (NI) | default timeout set to 5 - *----------------------------------------------------------------------------------------------------------------------------- - * 81 |No Input (NI) | -Dhttp.keepAlive.time.server=100 | Timeout set to 100 - * | | (SERVER_100) | - *----------------------------------------------------------------------------------------------------------------------------- - * 82 |No Input (NI) | -Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 - * | | (PROXY_200) | - *----------------------------------------------------------------------------------------------------------------------------- - * 83 |No Input (NI) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | client timeot set to 100 - * | | (SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------ - * 84 |No Input (NI) | -Dhttp.keepAlive.time.server=-100 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------ - * 85 |No Input (NI) | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 - * | | (PROXY_200_NEGATIVE) | - *---------------------------------------------------------------------------------------------------------------------------- - * 86 |No Input (NI) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *------------------------------------------------------------------------------------------------------------------------------ - * 87 |No Input (NI) | -Dhttp.keepAlive.time.server=0 | close connection immediately - * | | (SERVER_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 88 |No Input (NI) | -Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 89 |No Input (NI) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 90 |No Input (NI) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 91 |No Input (NI) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 92 |No Input (NI) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | Timeout set to 100 - * | | (SERVER_100 && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 93 |No Input (NI) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 94 |No Input (NI) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | Timeout set to 100 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 95 |No Input (NI) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 96 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) | No Input Provided (NI) | default timeout set to 5 - *-------------------------------------------------------------------------------------------------------------------------------- - * 97 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 | Timeout set to 100 - * | | (SERVER_100) | - *-------------------------------------------------------------------------------------------------------------------------------- - * 98 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 - * | | (PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 99 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 100 - * | |(SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 100 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 | default timeout set to 5 - * | |(SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 101 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 - * | |(PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 102 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *------------------------------------------------------------------------------------------------------------------------------------- - * 103 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 | close connection immediately - * | | (SERVER_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 104 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 - * | | (PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 105 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 106 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO_NEGATIVE)| - *------------------------------------------------------------------------------------------------------------------------------------- - * 107 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=0 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 108 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=0 | Timeout set to 100 - * | | (SERVER_100 && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 109 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=0 && | - * | |-Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 110 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | Timeout set to 100 - * | |(SERVER_100 && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 111 |Connection: keep-alive\r\nKeep-alive: timeout=-20 (F) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | default timeout set to 5 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 112 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | No Input Provided (NI) | close connection immediately - *------------------------------------------------------------------------------------------------------------------------------------- - * 113 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 | close connection immediately - * | | (SERVER_100) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 114 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 115 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_100 && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 116 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=-100 | close connection immediately - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------ - * 117 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 118 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) |-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 119 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 | close connection immediately - * | | (SERVER_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 120 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------ - * 121 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 122 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 123 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 124 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 125 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 126 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 127 |Connection: keep-alive\r\nKeep-alive: timeout=0 (G) | -Dhttp.keepAlive.time.server=-100 &&| - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 128 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| No Input Provided (NI) | default timeout set to 60 - --------------------------------------------------------------------------------------------------------------------------------------- - * 129 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=100 | default timeout set to 60 - * | | (SERVER_100) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 130 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 131 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100 && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 132 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=-100 | default timeout set to 60 - * | | (SERVER_100_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 133 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 134 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)|-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE)| - *--------------------------------------------------------------------------------------------------------------------------------- - * 135 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 | default timeout set to 60 - * | | (SERVER_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 136 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *---------------------------------------------------------------------------------------------------------------------------------- - * 137 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 138 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *--------------------------------------------------------------------------------------------------------------------------------------- - * 139 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 140 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 141 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)| -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | Timeout set to 20 - * | | (SERVER_ZERO && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 142 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)|-Dhttp.keepAlive.time.server=100 && | - * | |-Dhttp.keepAlive.time.proxy=-200 | default timeout set to 60 - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 143 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=-20 (H)|-Dhttp.keepAlive.time.server=-100 && | - * | |-Dhttp.keepAlive.time.proxy=200 | Timeout set to 200 - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 144 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | No Input Provided (NI) | close connection immediately - *-------------------------------------------------------------------------------------------------------------------------------------- - * 145 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 | close connection immediately - * | | (SERVER_100) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 146 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 147 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_100 && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 148 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 | close connection immediately - * | | (SERVER_100_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 149 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 150 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_200_NEGATIVE) | - *------------------------------------------------------------------------------------------------------------------------------------ - * 151 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 | close connection immediately - * | | (SERVER_ZERO) | - *----------------------------------------------------------------------------------------------------------------------------------- - * 152 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (PROXY_ZERO) | - *--------------------------------------------------------------------------------------------------------------------------------- - * 153 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_ZERO && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------ - * 154 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 155 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_ZERO) | - *------------------------------------------------------------------------------------------------------------------------------------- - * 156 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=0 | close connection immediately - * | | (SERVER_100 && PROXY_ZERO) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 157 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=0 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_ZERO && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 158 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=100 && | - * | | -Dhttp.keepAlive.time.proxy=-200 | close connection immediately - * | | (SERVER_100 && PROXY_200_NEGATIVE) | - *-------------------------------------------------------------------------------------------------------------------------------------- - * 159 |Proxy-Connection:keep-alive\r\nKeep-alive:timeout=0 (I) | -Dhttp.keepAlive.time.server=-100 && | - * | | -Dhttp.keepAlive.time.proxy=200 | close connection immediately - * | | (SERVER_100_NEGATIVE && PROXY_200) | - *-------------------------------------------------------------------------------------------------------------------------------------- - */ - - /* private static final String[] serverScenarios = { - A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, - B, B, B, B, B, B, B, B, B, B,B, B, B, B, B, B, - C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, C, - D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, - E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, E, - NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, NI, - F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, F, - G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, G, - H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, H, - I, I, I, I, I, I, I, I, I, I, I, I, I, I, I, I - }; */ - /* - * following are client scenarios which are repeated. - */ - private static final String[] a = { - NI, SERVER_100, PROXY_200, SERVER_100 + CLIENT_SEPARATOR + PROXY_200, SERVER_100_NEGATIVE, - PROXY_200_NEGATIVE, SERVER_100_NEGATIVE + CLIENT_SEPARATOR + PROXY_200_NEGATIVE, - SERVER_ZERO, PROXY_ZERO, SERVER_ZERO + CLIENT_SEPARATOR + PROXY_ZERO, - SERVER_ZERO + CLIENT_SEPARATOR + PROXY_200_NEGATIVE, SERVER_100_NEGATIVE + CLIENT_SEPARATOR + PROXY_ZERO, - SERVER_100 + CLIENT_SEPARATOR + PROXY_ZERO, SERVER_ZERO + CLIENT_SEPARATOR + PROXY_200, - SERVER_100 + CLIENT_SEPARATOR + PROXY_200_NEGATIVE, SERVER_100_NEGATIVE + CLIENT_SEPARATOR + PROXY_200 - }; + private static final String CONNECTION_KEEP_ALIVE_WITH_TIMEOUT = CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT; - /* private String[] clientScenarios = { - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15], - }; */ - - private static final String[] clientScenarios = { - a[0] , a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15] + private static final String[] serverHeaders = { + null, + CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE, + CONNECTION_KEEP_ALIVE_WITH_TIMEOUT + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_PROXY_TIMEOUT + NEW_LINE, + CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG + NEW_LINE, + CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT_NEG + NEW_LINE, + PROXY_CONNECTION_KEEP_ALIVE_ONLY + NEW_LINE + KEEP_ALIVE_TIMEOUT_ZERO + NEW_LINE }; - private static final int[] expectedValues = { - 5, 100, 5, 100, 5, 5, 5, 0, 5, 0, 0, 5, 100, 0, 100, 5, - 20, 20 , 20, 20, 20, 20, 20, 20, 20, 20 , 20, 20, 20, 20, 20, 20, - 60, 60, 200, 200, 60, 60, 60, 60, 0, 0, 60, 0, 0, 200, 60, 200, - 60, 60, 200, 200, 60, 60, 60, 60, 0, 0, 60, 0, 0, 200, 60, 200, - 120, 120, 120, 120,120,120,120,120,120, 120, 120, 120, 120, 120, 120, 120, - 5, 100, 5, 100, 5, 5, 5, 0, 5, 0, 0, 5, 100, 0, 100, 5, - 5, 100, 5, 100, 5, 5, 5, 0, 5, 0, 0, 5, 100, 0, 100, 5, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 60, 60, 200, 200, 60, 60, 60, 60, 0, 0, 60, 0, 0, 200, 60, 200, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - }; - - private final CountDownLatch countDownLatch = new CountDownLatch(1); - - private final CountDownLatch serverCountDownLatch = new CountDownLatch(1); - - /* - * setting of client properties -Dhttp.keepAlive.time.server and -Dhttp.keepAlive.time.proxy is handled through this method. - * There are 16 client scenarios in total starting with scenarioNumber 0(zero) and ending with 15. - * Server Scenarios are grouped into batch of 16 scenarios. - * There are 10 batches in total and each batch contains 16 scenarios so 10 * 16 = 160 scenarios in total. - * 16 Client Scenarios are used repeatedly for every server scenario batch. - * for serverscenario[0],serverscenario[16],serverscenario[32] ... serverscenario[144] is mapped to clientscenario[0] - * for serverscenario[1],serverscenario[17],serverscenario[33] ... serverscenario[145] is mapped to clientscenario[1] - * for serverscenario[2],serverscenario[18],serverscenario[34] ... serverscenario[146] is mapped to clientscenario[2] - * ... - * for serverscenario[15],serverscenario[31],serverscenario[47] ... serverscenario[159] is mapped to clientscenario[15] - */ - private int getClientScenarioNumber(int scenarioNumber) { - return scenarioNumber % 16 ; - } + private static KeepAliveCache keepAliveCache; - /* - * Returns SERVER_RESPONSE as String based on integer inputParameter scenarioNumber. - * Server Scenarios are grouped into batch of 16 scenarios starting with scenarioNumber 0 (zero) - * so there are 10 batches in total and each batch contains 16 scenarios so 10 * 16 = 160 scenarios in total. - * For each batch of 16 scenarios, there will be common SERVER_RESPONSE for all 16 scenarios in batch. - * for scenario numbers from 0 to 15 server response is: Connection:keep-alive - * for scenario numbers from 16 to 31 server response is: SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=20 - * for scenario numbers from 32 to 47 server response is: SERVER_RESPONSE=Proxy-Connection: keep-alive - * for scenario numbers from 48 to 63 server response is: SERVER_RESPONSE=Connection:keep-alive\r\nProxy-connection:keep-alive - * for scenario numbers from 64 to 79 server response is: SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 - * for scenario numbers from 80 to 95 server response is: SERVER_RESPONSE=No Input - * for scenario numbers from 96 to 111 server response is: SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=-20 - * for scenario numbers from 112 to 127 server resonse is: Connection: keep-alive\r\nKeep-alive: timeout=0 - * for scenario numbers from 128 to 143 server response is: Proxy-connection:keep-alive\r\nKeep-alive:timeout=-20 - * for scenario numbers from 144 to 159 server response is: Proxy-connection:keep-alive\r\nKeep-alive:timeout=0 - */ - private String getServerScenario(int scenarioNumber) { - /* - * ServerResponse for scenarios from 0 to 15 - * SERVER_RESPONSE:Connection:keep-alive - */ - if(scenarioNumber >= 0 && scenarioNumber <= 15) { - return A; - } - /* - * ServerResponse for scenarios from 16 to 31 - * SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=20 - */ - else if (scenarioNumber >= 16 && scenarioNumber <= 31){ - return B; - } - /* - * ServerResponse for scenarios from 32 to 47 - * SERVER_RESPONSE=Proxy-Connection: keep-alive - */ - else if (scenarioNumber >= 32 && scenarioNumber <= 47){ - return C; - } - /* - * ServerResponse for scenarios from 48 to 63 - * SERVER_RESPONSE=Connection:keep-alive\r\nProxy-connection:keep-alive - */ - else if (scenarioNumber >= 48 && scenarioNumber <= 63){ - return D; - /* - * ServerResponse for scenarios from 64 to 79 - * SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=120 - */ - } else if (scenarioNumber >= 64 && scenarioNumber <= 79){ - return E; - } - /* - * ServerResponse for scenarios from 80 to 95 - * SERVER_RESPONSE=No Input - */ - else if (scenarioNumber >= 80 && scenarioNumber <= 95){ - return NI; - } - /* - * ServerResponse for scenarios from 96 to 111 - * SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=-20 - */ - else if (scenarioNumber >= 96 && scenarioNumber <= 111){ - return F; - } - /* - * ServerResponse for scenarios from 112 to 127 - * SERVER_RESPONSE=Connection: keep-alive\r\nKeep-alive: timeout=0 - */ - else if (scenarioNumber >= 112 && scenarioNumber <= 127){ - return G; - } - /* - * ServerResponse for scenarios from 128 to 143 - * SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=-20 - */ - else if (scenarioNumber >= 128 && scenarioNumber <= 143){ - return H; - } - /* - * ServerResponse for scenarios from 144 to 159 - * SERVER_RESPONSE=Proxy-connection:keep-alive\r\nKeep-alive:timeout=0 - */ - else if (scenarioNumber >= 144 && scenarioNumber <= 159){ - return I; - } - /*Invalid Case*/ - return null; - } + private static Constructor<?> keepAliveKeyClassconstructor; - private void startScenario(int scenarioNumber) throws Exception { - System.out.println("serverScenarios[" + scenarioNumber + "]=" + getServerScenario(scenarioNumber)); - System.out.println("clientScenarios[" + scenarioNumber + "]=" + clientScenarios[getClientScenarioNumber(scenarioNumber)]); - if(expectedValues[scenarioNumber] == 0) { - System.out.println("ExpectedOutput=" + NOT_CACHED); - } else { - System.out.println("ExpectedOutput=" + expectedValues[scenarioNumber]); - } - System.out.println(); - startServer(scenarioNumber); - runClient(scenarioNumber); - } + // variables set by server thread + private volatile int serverPort; + private volatile boolean isProxySet; - private void startServer(int scenarioNumber) { - Thread server = new Thread(new Runnable() { - @Override - public void run() { - try { - executeServer(scenarioNumber); - } catch (IOException e) { - e.printStackTrace(); - } - } - }, "SERVER"); - server.start(); - } + private static final Phaser serverGate = new Phaser(2); private void readAll(Socket s) throws IOException { byte[] buf = new byte[128]; @@ -1058,215 +128,208 @@ private void readAll(Socket s) throws IOException { } } - private void executeServer(int scenarioNumber) throws IOException { - String serverScenarioContent = null; - if (!getServerScenario(scenarioNumber).equalsIgnoreCase(NI)) { - serverScenarioContent = getServerScenario(scenarioNumber) + NEW_LINE; - /* - * isProxySet should be set before Server is moved to Listen State. - */ - if (serverScenarioContent.contains("Proxy")) { - isProxySet = true; - } else { - isProxySet = false; - } + private void executeServer(int scenarioNumber) { + String scenarioHeaders = serverHeaders[scenarioNumber]; + if (scenarioHeaders != null) { + // isProxySet should be set before Server is moved to Listen State. + isProxySet = scenarioHeaders.contains("Proxy"); } - ServerSocket serverSocket = null; - Socket socket = null; - OutputStreamWriter out = null; - InetAddress loopback = InetAddress.getLoopbackAddress(); - try { - serverSocket = new ServerSocket(); - serverSocket.bind(new InetSocketAddress(loopback, 0)); - SERVER_PORT = serverSocket.getLocalPort(); - //serverReady = true; - this.serverCountDownLatch.countDown(); - System.out - .println("SERVER_PORT= " + SERVER_PORT +" isProxySet=" + isProxySet); - /* - * Server will be waiting for clients to connect. - */ - socket = serverSocket.accept(); - readAll(socket); - out = new OutputStreamWriter(socket.getOutputStream()); - String BODY = "SERVER REPLY: Hello world"; - String CLEN = "Content-Length: " + BODY.length() + NEW_LINE; - /* send the header */ - out.write("HTTP/1.1 200 OK\r\n"); - out.write("Content-Type: text/plain; charset=iso-8859-1\r\n"); - /* - * append each scenario content from array. - */ - if(serverScenarioContent != null) { - out.write(serverScenarioContent); - } - out.write(CLEN); - out.write(NEW_LINE); - out.write(BODY); - out.flush(); - } catch (IOException e) { - e.printStackTrace(); - } finally { - if (out != null) { - out.flush(); - out.close(); - } - if (socket != null) { - socket.close(); - } - if (serverSocket != null) { - serverSocket.close(); + try (ServerSocket serverSocket = new ServerSocket()) { + serverSocket.bind(new InetSocketAddress(InetAddress.getLoopbackAddress(), 0)); + serverPort = serverSocket.getLocalPort(); + serverGate.arrive(); + + // Server will be waiting for clients to connect. + try (Socket socket = serverSocket.accept()) { + readAll(socket); + try (OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream())) { + String BODY = "SERVER REPLY: Hello world"; + String CLEN = "Content-Length: " + BODY.length() + NEW_LINE; + + // send common headers + out.write("HTTP/1.1 200 OK\r\n"); + out.write("Content-Type: text/plain; charset=iso-8859-1\r\n"); + + // set scenario headers + if (scenarioHeaders != null) { + out.write(scenarioHeaders); + } + + // send content + out.write(CLEN); + out.write(NEW_LINE); + out.write(BODY); + } } + } catch (IOException ioe) { + throw new RuntimeException("IOException in server thread", ioe); } } - private void runClient(int scenarioNumber) throws Exception { - try { - connectToServerURL(scenarioNumber); - } finally { - System.out.println("client count down latch:" + scenarioNumber); - this.countDownLatch.countDown(); - System.out.println(); - System.out.println(); - } - } + private void fetchInfo(int expectedValue, HttpURLConnection httpUrlConnection) throws Exception { + Object expectedKeepAliveKey = keepAliveKeyClassconstructor.newInstance(httpUrlConnection.getURL(), null); + Object clientVectorObjectInMap = keepAliveCache.get(expectedKeepAliveKey); + System.out.println("ClientVector for KeepAliveKey:" + clientVectorObjectInMap); + HttpClient httpClientCached = keepAliveCache.get(httpUrlConnection.getURL(), null); + System.out.println("HttpClient in Cache:" + httpClientCached); - private void connectToServerURL(int scenarioNumber) throws Exception { - // System.setProperty("java.net.useSystemProxies", "false"); - // System.setProperty("http.nonProxyHosts", ""); - // System.setProperty("http.proxyHost", "localhost"); - // System.setProperty("http.proxyPort", String.valueOf(SERVER_PORT)); - System.out.println("Following are Existing System Properties if set any"); - System.out.println("http.keepAlive.time.server:" + System.getProperty("http.keepAlive.time.server")); - System.out.println("http.keepAlive.time.proxy:" + System.getProperty("http.keepAlive.time.proxy")); - System.setProperty("java.net.useSystemProxies", "false"); - System.out.println("http.proxyPort:"+System.getProperty("http.proxyPort")); - System.out.println("http.proxyHost:"+System.getProperty("http.proxyHost")); - System.clearProperty("http.keepAlive.time.server"); - System.clearProperty("http.keepAlive.time.proxy"); - // fetch clientScenearios for each scenarioNumber from array and set it to - // System property. - if (!clientScenarios[getClientScenarioNumber(scenarioNumber)].equalsIgnoreCase(NI)) { - System.out.println("Client Input Parsing"); - for (String clientScenarioString : clientScenarios[getClientScenarioNumber(scenarioNumber)].split(CLIENT_SEPARATOR)) { - System.out.println(clientScenarioString); - String key = clientScenarioString.split("=")[0]; - String value = clientScenarioString.split("=")[1]; - System.setProperty(key, value); + if (httpClientCached != null) { + System.out.println("KeepingAlive:" + httpClientCached.isKeepingAlive()); + System.out.println("UsingProxy:" + httpClientCached.getUsingProxy()); + System.out.println("ProxiedHost:" + httpClientCached.getProxyHostUsed()); + System.out.println("ProxiedPort:" + httpClientCached.getProxyPortUsed()); + Class<?> clientVectorClass = Class.forName("sun.net.www.http.KeepAliveCache$ClientVector"); + Field napField = clientVectorClass.getDeclaredField("nap"); + napField.setAccessible(true); + int napValue = (int) napField.get(clientVectorObjectInMap); + int actualValue = napValue / 1000; + if (expectedValue == actualValue) { + System.out.printf("Cache time:%d\n", actualValue); + } else { + throw new RuntimeException("Sleep time of " + actualValue + " not expected (" + expectedValue + ")"); + } + } else { + if (expectedValue == 0) { + System.out.println("Connection not cached."); + } else { + throw new RuntimeException("Connection was not cached although expected with sleep time of:" + expectedValue); } } + } + + private void connectToServerURL(int expectedValue) throws Exception { // wait until ServerSocket moves to listening state. - this.serverCountDownLatch.await(); - System.out.println("client started"); - URL url = URIBuilder.newBuilder().scheme("http").loopback().port(SERVER_PORT).toURL(); - System.out.println("connecting from client to SERVER URL:" + url); + serverGate.arriveAndAwaitAdvance(); + URL url = URIBuilder.newBuilder().scheme("http").loopback().port(serverPort).toURL(); + System.out.println("connecting to server URL: " + url + ", isProxySet: " + isProxySet); HttpURLConnection httpUrlConnection = null; - /* - * isProxySet is set to true when Expected Server Response contains Proxy-Connection header. - */ + + // isProxySet is set to true when Expected Server Response contains Proxy-Connection header. if (isProxySet) { - httpUrlConnection = (sun.net.www.protocol.http.HttpURLConnection) url - .openConnection(new Proxy(Type.HTTP, new InetSocketAddress("localhost", SERVER_PORT))); + httpUrlConnection = (HttpURLConnection) url + .openConnection(new Proxy(Type.HTTP, new InetSocketAddress("localhost", serverPort))); } else { - httpUrlConnection = (sun.net.www.protocol.http.HttpURLConnection) url.openConnection(); + httpUrlConnection = (HttpURLConnection) url.openConnection(); } - InputStreamReader inputStreamReader = new InputStreamReader(httpUrlConnection.getInputStream()); - BufferedReader bufferedReader = null; - try { - bufferedReader = new BufferedReader(inputStreamReader); + + try (InputStreamReader inputStreamReader = new InputStreamReader(httpUrlConnection.getInputStream()); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader)) { while (true) { - String eachLine = bufferedReader.readLine(); - if (eachLine == null) { + String line = bufferedReader.readLine(); + if (line == null) { break; } - System.out.println(eachLine); - } - } finally { - if (bufferedReader != null) { - bufferedReader.close(); + System.out.println(line); } } - // System.out.println("ResponseCode:" + httpUrlConnection.getResponseCode()); - // System.out.println("ResponseMessage:" + httpUrlConnection.getResponseMessage()); - // System.out.println("Content:" + httpUrlConnection.getContent()); - // Thread.sleep(2000); for (Entry<String, List<String>> header : httpUrlConnection.getHeaderFields().entrySet()) { System.out.println(header.getKey() + "=" + header.getValue()); } - fetchInfo(scenarioNumber, httpUrlConnection); + fetchInfo(expectedValue, httpUrlConnection); } - private void fetchInfo(int scenarioNumber, sun.net.www.protocol.http.HttpURLConnection httpUrlConnection) - throws Exception { - Field field = Class.forName("sun.net.www.protocol.http.HttpURLConnection").getDeclaredField("http"); - field.setAccessible(true); - HttpClient httpClient = (HttpClient) field.get(httpUrlConnection); - // System.out.println("httpclient=" + httpClient); - Field keepAliveField = Class.forName("sun.net.www.http.HttpClient").getDeclaredField("kac"); - keepAliveField.setAccessible(true); - KeepAliveCache keepAliveCache = (KeepAliveCache) keepAliveField.get(httpClient); - System.out.println("keepAliveCache" + keepAliveCache); - System.out.println("SERVER URL:" + httpUrlConnection.getURL()); - /* - * create KeepAliveKey(URL,Object) object and compare created KeepAliveKey and - * existing using equals() method: KeepAliveKey.equals() - */ - Class keepAliveKeyClass = Class.forName("sun.net.www.http.KeepAliveKey"); - // System.out.println("keepAliveKeyClass=" + keepAliveKeyClass); - Constructor keepAliveKeyClassconstructor = keepAliveKeyClass.getDeclaredConstructors()[0]; - keepAliveKeyClassconstructor.setAccessible(true); - Object expectedKeepAliveKey = keepAliveKeyClassconstructor.newInstance(httpUrlConnection.getURL(), null); - System.out.println("ExpectedKeepAliveKey=" + expectedKeepAliveKey); - Object clientVectorObjectInMap = keepAliveCache.get(expectedKeepAliveKey); - System.out.println("ClientVector=" + clientVectorObjectInMap); - HttpClient httpClientCached = keepAliveCache.get(httpUrlConnection.getURL(), null); - System.out.println("HttpClient in Cache:" + httpClientCached); - if(httpClientCached != null) { - System.out.println("KeepingAlive:" + httpClientCached.isKeepingAlive()); - System.out.println("UsingProxy:" + httpClientCached.getUsingProxy()); - System.out.println("ProxiedHost:" + httpClientCached.getProxyHostUsed()); - System.out.println("ProxiedPort:" + httpClientCached.getProxyPortUsed()); - System.out.println("ProxyPortUsingSystemProperty:" + System.getProperty("http.proxyPort")); - System.out.println("ProxyHostUsingSystemProperty:" + System.getProperty("http.proxyHost")); - System.out.println("http.keepAlive.time.server=" + System.getProperty("http.keepAlive.time.server")); - System.out.println("http.keepAlive.time.proxy=" + System.getProperty("http.keepAlive.time.proxy")); - Class clientVectorClass = Class.forName("sun.net.www.http.KeepAliveCache$ClientVector"); - // System.out.println("clientVectorClass=" + clientVectorClass); - Field napField = clientVectorClass.getDeclaredField("nap"); - napField.setAccessible(true); - int napValue = (int) napField.get(clientVectorObjectInMap); - int actualValue = napValue / 1000; - // System.out.println("nap=" + napValue / 1000); - System.out.printf("ExpectedOutput:%d ActualOutput:%d ", expectedValues[scenarioNumber], actualValue); - System.out.println(); - if (expectedValues[scenarioNumber] != actualValue) { - throw new RuntimeException( - "ExpectedOutput:" + expectedValues[scenarioNumber] + " ActualOutput: " + actualValue); + private int getExpectedCachingValue(int serverScenario) { + if (serverScenario == 2) { + // Connection: keep-alive && Keep-alive: timeout=20 + // + // server side keep-alive timeout is what counts here + return 20; + } else if (serverScenario == 3 || serverScenario == 4 || serverScenario == 8) { + // Proxy-Connection: keep-alive + // Connection:keep-alive && Proxy-connection:keep-alive + // Proxy-Connection:keep-alive && Keep-alive:timeout=-20 + // + // Proxy-connection:keep-alive is set, timeout could be invalid -> value of http.keepAlive.time.proxy or default of 60 + int httpKeepAliveTimeProxy; + try { + httpKeepAliveTimeProxy = Integer.valueOf(System.getProperty("http.keepAlive.time.proxy")); + } catch (NumberFormatException e) { + httpKeepAliveTimeProxy = -1; } + return httpKeepAliveTimeProxy < 0 ? 60 : httpKeepAliveTimeProxy; + } else if (serverScenario == 5) { + // Proxy-connection:keep-alive && Keep-alive:timeout=120 + // + // server side keep-alive timeout is what counts here + return 120; + } else if (serverScenario == 7 || serverScenario == 9) { + // Connection: keep-alive && Keep-alive: timeout=0 + // Proxy-Connection:keep-alive && Keep-alive:timeout=0 + // + // no caching + return 0; } else { - //executed when value is not cached. - String expected = expectedValues[scenarioNumber] == 0 ? NOT_CACHED - : String.valueOf(expectedValues[scenarioNumber]); - System.out.println("ExpectedOutput:" + expected + " ActualOutput:" + NOT_CACHED); - if (!expected.equalsIgnoreCase(NOT_CACHED)) { - throw new RuntimeException("ExpectedOutput:" + expected + " ActualOutput:" + NOT_CACHED); + // No server parameters + // Connection: keep-alive + // Connection: keep-alive && Keep-alive: timeout=-20 + // + // Nothing or Connection:keep-alive is set, timeout could be invalid -> value of http.keepAlive.time.server or default of 5 + int httpKeepAliveTimeServer; + try { + httpKeepAliveTimeServer = Integer.valueOf(System.getProperty("http.keepAlive.time.server")); + } catch (NumberFormatException e) { + httpKeepAliveTimeServer = -1; } - } + return httpKeepAliveTimeServer < 0 ? 5 : httpKeepAliveTimeServer; + } } - public static void main(String[] args) throws Exception { - if (args.length != 1) { - throw new IllegalArgumentException("Usage:java KeepAliveTest.java <scenarioNumber>"); + private void runScenario(int scenarioNumber) throws Exception { + int expectedValue = getExpectedCachingValue(scenarioNumber); + System.out.println("Expecting Cache Time of " + expectedValue + " for server headers:"); + if (serverHeaders[scenarioNumber] == null) { + System.out.println(); + } else { + System.out.print(serverHeaders[scenarioNumber]); } + Thread server = Thread.ofPlatform().start(() -> executeServer(scenarioNumber)); + connectToServerURL(expectedValue); + server.join(); + System.out.println(); + } + + private static void initialize() throws Exception { + System.clearProperty("http.proxyPort"); + System.clearProperty("http.proxyHost"); + System.setProperty("java.net.useSystemProxies", "false"); + + Field keepAliveField = sun.net.www.http.HttpClient.class.getDeclaredField("kac"); + keepAliveField.setAccessible(true); + keepAliveCache = (KeepAliveCache) keepAliveField.get(null); + System.out.println("KeepAliveCache: " + keepAliveCache); + keepAliveKeyClassconstructor = Class.forName("sun.net.www.http.KeepAliveKey").getDeclaredConstructors()[0]; + keepAliveKeyClassconstructor.setAccessible(true); + logger.setLevel(Level.FINEST); ConsoleHandler h = new ConsoleHandler(); h.setLevel(Level.FINEST); logger.addHandler(h); - KeepAliveTest keepAliveTest = new KeepAliveTest(); - if (args.length != 0) { - keepAliveTest.startScenario(Integer.valueOf(args[0])); + + System.out.println("Client properties: http.keepAlive.time.server=" + System.getProperty("http.keepAlive.time.server") + + ", http.keepAlive.time.proxy=" + System.getProperty("http.keepAlive.time.proxy")); + } + + public static void main(String[] args) throws Exception { + if (args.length > 1) { + throw new IllegalArgumentException("Usage:java KeepAliveTest.java <scenarioNumber>"); + } else if (args.length == 1) { + // an individual test scenario + try { + int scenarioNumber = Integer.valueOf(args[0]); + if (scenarioNumber < 0 || scenarioNumber > 9) { + throw new IllegalArgumentException("Scenario " + scenarioNumber + " does not exist"); + } + initialize(); + new KeepAliveTest().runScenario(scenarioNumber); + } catch (NumberFormatException e) { + throw new IllegalArgumentException("Scenario must be a number, got " + args[0]); + } + } else { + // all server scenarios + initialize(); + for (int i = 0; i < 10; i++) { + new KeepAliveTest().runScenario(i); + } } - // make main thread wait until server and client is completed. - keepAliveTest.countDownLatch.await(); } } From 4e5c25ee43d4ec31ed5160fd93a2fd15e35182f8 Mon Sep 17 00:00:00 2001 From: Joe Darcy <darcy@openjdk.org> Date: Sun, 28 Apr 2024 22:55:44 +0000 Subject: [PATCH 137/141] 8331108: Unused Math.abs call in java.lang.FdLibm.Expm1#compute Reviewed-by: naoto, bpb, rgiulietti --- src/java.base/share/classes/java/lang/FdLibm.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/java.base/share/classes/java/lang/FdLibm.java b/src/java.base/share/classes/java/lang/FdLibm.java index dd79ee82863f7..70d728a16db3d 100644 --- a/src/java.base/share/classes/java/lang/FdLibm.java +++ b/src/java.base/share/classes/java/lang/FdLibm.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 1998, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1998, 2024, 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 @@ -3005,7 +3005,6 @@ static double compute(double x) { hx = __HI(x); // high word of x xsb = hx & SIGN_BIT; // sign bit of x - y = Math.abs(x); hx &= EXP_SIGNIF_BITS; // high word of |x| // filter out huge and non-finite argument From fb63cbadb419f1de91acae9fc66be258e1d3d214 Mon Sep 17 00:00:00 2001 From: Adam Sotona <asotona@openjdk.org> Date: Mon, 29 Apr 2024 07:12:46 +0000 Subject: [PATCH 138/141] 8330684: ClassFile API runs into StackOverflowError while parsing certain class' bytes Reviewed-by: psandoz --- .../classfile/impl/ClassReaderImpl.java | 32 ++++++++++++++----- test/jdk/jdk/classfile/LimitsTest.java | 9 +++++- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/src/java.base/share/classes/jdk/internal/classfile/impl/ClassReaderImpl.java b/src/java.base/share/classes/jdk/internal/classfile/impl/ClassReaderImpl.java index 9b6c7d7ad4c8f..2022f8f01547d 100644 --- a/src/java.base/share/classes/jdk/internal/classfile/impl/ClassReaderImpl.java +++ b/src/java.base/share/classes/jdk/internal/classfile/impl/ClassReaderImpl.java @@ -150,7 +150,7 @@ public int flags() { @Override public ClassEntry thisClassEntry() { if (thisClass == null) { - thisClass = readEntry(thisClassPos, ClassEntry.class); + thisClass = readClassEntry(thisClassPos); } return thisClass; } @@ -339,6 +339,10 @@ void writeConstantPoolEntries(BufWriter buf) { // Constantpool @Override public PoolEntry entryByIndex(int index) { + return entryByIndex(index, 0, 0xff); + } + + private PoolEntry entryByIndex(int index, int lowerBoundTag, int upperBoundTag) { if (index <= 0 || index >= constantPoolCount) { throw new ConstantPoolException("Bad CP index: " + index); } @@ -349,6 +353,10 @@ public PoolEntry entryByIndex(int index) { throw new ConstantPoolException("Unusable CP index: " + index); } int tag = readU1(offset); + if (tag < lowerBoundTag || tag > upperBoundTag) { + throw new ConstantPoolException( + "Bad tag (" + tag + ") at index (" + index + ") position (" + offset + ")"); + } final int q = offset + 1; info = switch (tag) { case TAG_UTF8 -> new AbstractPoolEntry.Utf8EntryImpl(this, index, buffer, q + 2, readU2(q)); @@ -367,7 +375,7 @@ public PoolEntry entryByIndex(int index) { case TAG_NAMEANDTYPE -> new AbstractPoolEntry.NameAndTypeEntryImpl(this, index, (AbstractPoolEntry.Utf8EntryImpl) readUtf8Entry(q), (AbstractPoolEntry.Utf8EntryImpl) readUtf8Entry(q + 2)); case TAG_METHODHANDLE -> new AbstractPoolEntry.MethodHandleEntryImpl(this, index, readU1(q), - (AbstractPoolEntry.AbstractMemberRefEntry) readEntry(q + 1)); + readEntry(q + 1, AbstractPoolEntry.AbstractMemberRefEntry.class, TAG_FIELDREF, TAG_INTERFACEMETHODREF)); case TAG_METHODTYPE -> new AbstractPoolEntry.MethodTypeEntryImpl(this, index, (AbstractPoolEntry.Utf8EntryImpl) readUtf8Entry(q)); case TAG_CONSTANTDYNAMIC -> new AbstractPoolEntry.ConstantDynamicEntryImpl(this, index, readU2(q), (AbstractPoolEntry.NameAndTypeEntryImpl) readNameAndTypeEntry(q + 2)); case TAG_INVOKEDYNAMIC -> new AbstractPoolEntry.InvokeDynamicEntryImpl(this, index, readU2(q), (AbstractPoolEntry.NameAndTypeEntryImpl) readNameAndTypeEntry(q + 2)); @@ -423,7 +431,15 @@ public PoolEntry readEntry(int pos) { @Override public <T extends PoolEntry> T readEntry(int pos, Class<T> cls) { - var e = readEntry(pos); + return readEntry(pos, cls, 0, 0xff); + } + + private <T extends PoolEntry> T readEntry(int pos, Class<T> cls, int expectedTag) { + return readEntry(pos, cls, expectedTag, expectedTag); + } + + private <T extends PoolEntry> T readEntry(int pos, Class<T> cls, int lowerBoundTag, int upperBoundTag) { + var e = entryByIndex(readU2(pos), lowerBoundTag, upperBoundTag); if (cls.isInstance(e)) return cls.cast(e); throw new ConstantPoolException("Not a " + cls.getSimpleName() + " at index: " + readU2(pos)); } @@ -454,27 +470,27 @@ public Utf8Entry readUtf8EntryOrNull(int pos) { @Override public ModuleEntry readModuleEntry(int pos) { - return readEntry(pos, ModuleEntry.class); + return readEntry(pos, ModuleEntry.class, TAG_MODULE); } @Override public PackageEntry readPackageEntry(int pos) { - return readEntry(pos, PackageEntry.class); + return readEntry(pos, PackageEntry.class, TAG_PACKAGE); } @Override public ClassEntry readClassEntry(int pos) { - return readEntry(pos, ClassEntry.class); + return readEntry(pos, ClassEntry.class, TAG_CLASS); } @Override public NameAndTypeEntry readNameAndTypeEntry(int pos) { - return readEntry(pos, NameAndTypeEntry.class); + return readEntry(pos, NameAndTypeEntry.class, TAG_NAMEANDTYPE); } @Override public MethodHandleEntry readMethodHandleEntry(int pos) { - return readEntry(pos, MethodHandleEntry.class); + return readEntry(pos, MethodHandleEntry.class, TAG_METHODHANDLE); } @Override diff --git a/test/jdk/jdk/classfile/LimitsTest.java b/test/jdk/jdk/classfile/LimitsTest.java index d23a948fe9f80..00aaf32385d8d 100644 --- a/test/jdk/jdk/classfile/LimitsTest.java +++ b/test/jdk/jdk/classfile/LimitsTest.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8320360 + * @bug 8320360 8330684 * @summary Testing ClassFile limits. * @run junit LimitsTest */ @@ -31,6 +31,7 @@ import java.lang.constant.ConstantDescs; import java.lang.constant.MethodTypeDesc; import java.lang.classfile.ClassFile; +import java.lang.classfile.constantpool.ConstantPoolException; import jdk.internal.classfile.impl.LabelContext; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.*; @@ -92,4 +93,10 @@ void testReadingOutOfBounds() { assertThrows(IllegalArgumentException.class, () -> ClassFile.of().parse(new byte[]{(byte)0xCA, (byte)0xFE, (byte)0xBA, (byte)0xBE}), "reading magic only"); assertThrows(IllegalArgumentException.class, () -> ClassFile.of().parse(new byte[]{(byte)0xCA, (byte)0xFE, (byte)0xBA, (byte)0xBE, 0, 0, 0, 0, 0, 2}), "reading invalid CP size"); } + + @Test + void testInvalidClassEntry() { + assertThrows(ConstantPoolException.class, () -> ClassFile.of().parse(new byte[]{(byte)0xCA, (byte)0xFE, (byte)0xBA, (byte)0xBE, + 0, 0, 0, 0, 0, 2, ClassFile.TAG_METHODREF, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}).thisClass()); + } } From c615c18e9f92dc9fdc2db512fbd47fd255f7fe86 Mon Sep 17 00:00:00 2001 From: Roland Westrelin <roland@openjdk.org> Date: Mon, 29 Apr 2024 07:36:14 +0000 Subject: [PATCH 139/141] 8330158: C2: Loop strip mining uses ABS with min int Reviewed-by: shade, kvn, dlong, mbalao --- src/hotspot/share/opto/loopnode.cpp | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/hotspot/share/opto/loopnode.cpp b/src/hotspot/share/opto/loopnode.cpp index eb082bd74392f..fcd0e1a4df2ca 100644 --- a/src/hotspot/share/opto/loopnode.cpp +++ b/src/hotspot/share/opto/loopnode.cpp @@ -2352,7 +2352,8 @@ Node* PhaseIdealLoop::exact_limit( IdealLoopTree *loop ) { CountedLoopNode *cl = loop->_head->as_CountedLoop(); assert(cl->is_valid_counted_loop(T_INT), ""); - if (ABS(cl->stride_con()) == 1 || + if (cl->stride_con() == 1 || + cl->stride_con() == -1 || cl->limit()->Opcode() == Op_LoopLimit) { // Old code has exact limit (it could be incorrect in case of int overflow). // Loop limit is exact with stride == 1. And loop may already have exact limit. @@ -2962,14 +2963,22 @@ void OuterStripMinedLoopNode::adjust_strip_mined_loop(PhaseIterGVN* igvn) { CountedLoopEndNode* inner_cle = inner_cl->loopexit(); int stride = inner_cl->stride_con(); - jlong scaled_iters_long = ((jlong)LoopStripMiningIter) * ABS(stride); + // For a min int stride, LoopStripMiningIter * stride overflows the int range for all values of LoopStripMiningIter + // except 0 or 1. Those values are handled early on in this method and causes the method to return. So for a min int + // stride, the method is guaranteed to return at the next check below. + jlong scaled_iters_long = ((jlong)LoopStripMiningIter) * ABS((jlong)stride); int scaled_iters = (int)scaled_iters_long; - int short_scaled_iters = LoopStripMiningIterShortLoop* ABS(stride); + if ((jlong)scaled_iters != scaled_iters_long) { + // Remove outer loop and safepoint (too few iterations) + remove_outer_loop_and_safepoint(igvn); + return; + } + jlong short_scaled_iters = LoopStripMiningIterShortLoop * ABS(stride); const TypeInt* inner_iv_t = igvn->type(inner_iv_phi)->is_int(); jlong iter_estimate = (jlong)inner_iv_t->_hi - (jlong)inner_iv_t->_lo; assert(iter_estimate > 0, "broken"); - if ((jlong)scaled_iters != scaled_iters_long || iter_estimate <= short_scaled_iters) { - // Remove outer loop and safepoint (too few iterations) + if (iter_estimate <= short_scaled_iters) { + // Remove outer loop and safepoint: loop executes less than LoopStripMiningIterShortLoop remove_outer_loop_and_safepoint(igvn); return; } From 4edac349a5d695ce7923344ad5ad0400842241eb Mon Sep 17 00:00:00 2001 From: Matthias Baesken <mbaesken@openjdk.org> Date: Mon, 29 Apr 2024 07:58:18 +0000 Subject: [PATCH 140/141] 8331167: UBSan enabled build fails in adlc on macOS Reviewed-by: stuefe, lucy --- src/hotspot/share/adlc/adlparse.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/adlc/adlparse.cpp b/src/hotspot/share/adlc/adlparse.cpp index 48dea8804f3ff..033e8d26ca7c7 100644 --- a/src/hotspot/share/adlc/adlparse.cpp +++ b/src/hotspot/share/adlc/adlparse.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2024, 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 @@ -5225,7 +5225,7 @@ void ADLParser::skipws_common(bool do_preproc) { if (*_ptr == '\n') { // keep proper track of new lines if (!do_preproc) break; // let caller handle the newline next_line(); - _ptr = _curline; next = _ptr + 1; + _ptr = _curline; if (_ptr != nullptr) next = _ptr + 1; } else if ((*_ptr == '/') && (*next == '/')) // C++ comment do { _ptr++; next++; } while(*_ptr != '\n'); // So go to end of line From 766d0b0fa0809a0bf500f1883592f5074482f168 Mon Sep 17 00:00:00 2001 From: Guoxiong Li <gli@openjdk.org> Date: Mon, 29 Apr 2024 08:16:12 +0000 Subject: [PATCH 141/141] 8330960: Serial: Remove SerialFullGC::_total_invocations Reviewed-by: ayang, tschatzl --- src/hotspot/share/gc/serial/serialFullGC.cpp | 7 +------ src/hotspot/share/gc/serial/serialFullGC.hpp | 6 ------ 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/src/hotspot/share/gc/serial/serialFullGC.cpp b/src/hotspot/share/gc/serial/serialFullGC.cpp index 514a6e6ab74dd..1621aec7b6453 100644 --- a/src/hotspot/share/gc/serial/serialFullGC.cpp +++ b/src/hotspot/share/gc/serial/serialFullGC.cpp @@ -74,8 +74,6 @@ #include "jvmci/jvmci.hpp" #endif -uint SerialFullGC::_total_invocations = 0; - Stack<oop, mtGC> SerialFullGC::_marking_stack; Stack<ObjArrayTask, mtGC> SerialFullGC::_objarray_stack; @@ -113,7 +111,7 @@ class DeadSpacer : StackObj { // we don't start compacting before there is a significant gain to be made. // Occasionally, we want to ensure a full compaction, which is determined // by the MarkSweepAlwaysCompactCount parameter. - if ((SerialFullGC::total_invocations() % MarkSweepAlwaysCompactCount) != 0) { + if ((SerialHeap::heap()->total_full_collections() % MarkSweepAlwaysCompactCount) != 0) { _allowed_deadspace_words = (space->capacity() * ratio / 100) / HeapWordSize; } else { _active = false; @@ -694,9 +692,6 @@ void SerialFullGC::invoke_at_safepoint(bool clear_all_softrefs) { gch->trace_heap_before_gc(_gc_tracer); - // Increment the invocation count - _total_invocations++; - // Capture used regions for old-gen to reestablish old-to-young invariant // after full-gc. gch->old_gen()->save_used_region(); diff --git a/src/hotspot/share/gc/serial/serialFullGC.hpp b/src/hotspot/share/gc/serial/serialFullGC.hpp index fff287b1f5062..4b1a78a099409 100644 --- a/src/hotspot/share/gc/serial/serialFullGC.hpp +++ b/src/hotspot/share/gc/serial/serialFullGC.hpp @@ -81,9 +81,6 @@ class SerialFullGC : AllStatic { }; protected: - // Total invocations of serial full GC - static uint _total_invocations; - // Traversal stacks used during phase1 static Stack<oop, mtGC> _marking_stack; static Stack<ObjArrayTask, mtGC> _objarray_stack; @@ -119,9 +116,6 @@ class SerialFullGC : AllStatic { static void invoke_at_safepoint(bool clear_all_softrefs); - // Accessors - static uint total_invocations() { return _total_invocations; } - // Reference Processing static ReferenceProcessor* ref_processor() { return _ref_processor; }