Skip to content

Commit 1ebe279

Browse files
committed
Import icu locale fallback data
1 parent 18a1de2 commit 1ebe279

File tree

12 files changed

+1111
-13
lines changed

12 files changed

+1111
-13
lines changed

Cargo.lock

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3293,7 +3293,9 @@ dependencies = [
32933293
"icu_list",
32943294
"icu_locid",
32953295
"icu_provider",
3296+
"icu_provider_adapters",
32963297
"litemap",
3298+
"zerovec",
32973299
]
32983300

32993301
[[package]]

compiler/rustc_baked_icu_data/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,6 @@ edition = "2021"
77
icu_list = "1.0.0"
88
icu_locid = "1.0.0"
99
icu_provider = "1.0.1"
10+
icu_provider_adapters = "1.0.0"
1011
litemap = "0.6.0"
12+
zerovec = "0.9.0"

compiler/rustc_baked_icu_data/src/data/any.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,37 @@ impl AnyProvider for BakedDataProvider {
33
fn load_any(&self, key: DataKey, req: DataRequest) -> Result<AnyResponse, DataError> {
44
const ANDLISTV1MARKER: ::icu_provider::DataKeyHash =
55
::icu_list::provider::AndListV1Marker::KEY.hashed();
6+
const COLLATIONFALLBACKSUPPLEMENTV1MARKER: ::icu_provider::DataKeyHash =
7+
::icu_provider_adapters::fallback::provider::CollationFallbackSupplementV1Marker::KEY
8+
.hashed();
9+
const LOCALEFALLBACKLIKELYSUBTAGSV1MARKER: ::icu_provider::DataKeyHash =
10+
::icu_provider_adapters::fallback::provider::LocaleFallbackLikelySubtagsV1Marker::KEY
11+
.hashed();
12+
const LOCALEFALLBACKPARENTSV1MARKER: ::icu_provider::DataKeyHash =
13+
::icu_provider_adapters::fallback::provider::LocaleFallbackParentsV1Marker::KEY
14+
.hashed();
615
#[allow(clippy::match_single_binding)]
716
match key.hashed() {
817
ANDLISTV1MARKER => list::and_v1::DATA
918
.get_by(|k| req.locale.strict_cmp(k.as_bytes()).reverse())
1019
.copied()
1120
.map(AnyPayload::from_static_ref)
1221
.ok_or(DataErrorKind::MissingLocale),
22+
COLLATIONFALLBACKSUPPLEMENTV1MARKER => fallback::supplement::co_v1::DATA
23+
.get_by(|k| req.locale.strict_cmp(k.as_bytes()).reverse())
24+
.copied()
25+
.map(AnyPayload::from_static_ref)
26+
.ok_or(DataErrorKind::MissingLocale),
27+
LOCALEFALLBACKLIKELYSUBTAGSV1MARKER => fallback::likelysubtags_v1::DATA
28+
.get_by(|k| req.locale.strict_cmp(k.as_bytes()).reverse())
29+
.copied()
30+
.map(AnyPayload::from_static_ref)
31+
.ok_or(DataErrorKind::MissingLocale),
32+
LOCALEFALLBACKPARENTSV1MARKER => fallback::parents_v1::DATA
33+
.get_by(|k| req.locale.strict_cmp(k.as_bytes()).reverse())
34+
.copied()
35+
.map(AnyPayload::from_static_ref)
36+
.ok_or(DataErrorKind::MissingLocale),
1337
_ => Err(DataErrorKind::MissingDataKey),
1438
}
1539
.map_err(|e| e.with_req(key, req))

compiler/rustc_baked_icu_data/src/data/fallback/likelysubtags_v1.rs

Lines changed: 733 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
// @generated
2+
pub mod likelysubtags_v1;
3+
pub mod parents_v1;
4+
pub mod supplement;

compiler/rustc_baked_icu_data/src/data/fallback/parents_v1.rs

Lines changed: 207 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// @generated
2+
type DataStruct = < :: icu_provider_adapters :: fallback :: provider :: CollationFallbackSupplementV1Marker as :: icu_provider :: DataMarker > :: Yokeable ;
3+
pub static DATA: litemap::LiteMap<&str, &DataStruct, &[(&str, &DataStruct)]> =
4+
litemap::LiteMap::from_sorted_store_unchecked(&[("und", UND)]);
5+
static UND: &DataStruct =
6+
&::icu_provider_adapters::fallback::provider::LocaleFallbackSupplementV1 {
7+
parents: unsafe {
8+
#[allow(unused_unsafe)]
9+
::zerovec::ZeroMap::from_parts_unchecked(
10+
unsafe {
11+
::zerovec::VarZeroVec::from_bytes_unchecked(&[
12+
1u8, 0u8, 0u8, 0u8, 0u8, 0u8, 121u8, 117u8, 101u8,
13+
])
14+
},
15+
unsafe {
16+
::zerovec::ZeroVec::from_bytes_unchecked(&[
17+
122u8, 104u8, 0u8, 1u8, 72u8, 97u8, 110u8, 116u8, 0u8, 0u8, 0u8, 0u8,
18+
])
19+
},
20+
)
21+
},
22+
unicode_extension_defaults: unsafe {
23+
#[allow(unused_unsafe)]
24+
::zerovec::ZeroMap2d::from_parts_unchecked(
25+
unsafe { ::zerovec::ZeroVec::from_bytes_unchecked(&[99u8, 111u8]) },
26+
unsafe { ::zerovec::ZeroVec::from_bytes_unchecked(&[2u8, 0u8, 0u8, 0u8]) },
27+
unsafe {
28+
::zerovec::VarZeroVec::from_bytes_unchecked(&[
29+
2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 2u8, 0u8, 122u8, 104u8, 122u8, 104u8, 45u8,
30+
72u8, 97u8, 110u8, 116u8,
31+
])
32+
},
33+
unsafe {
34+
::zerovec::VarZeroVec::from_bytes_unchecked(&[
35+
2u8, 0u8, 0u8, 0u8, 0u8, 0u8, 6u8, 0u8, 112u8, 105u8, 110u8, 121u8, 105u8,
36+
110u8, 115u8, 116u8, 114u8, 111u8, 107u8, 101u8,
37+
])
38+
},
39+
)
40+
},
41+
};
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
// @generated
2+
pub mod co_v1;

compiler/rustc_baked_icu_data/src/data/mod.rs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// @generated
2+
mod fallback;
23
mod list;
34
/// This data provider was programmatically generated by [`icu_datagen`](
45
/// https://unicode-org.github.io/icu4x-docs/doc/icu_datagen/enum.Out.html#variant.Module).
@@ -23,3 +24,67 @@ impl DataProvider<::icu_list::provider::AndListV1Marker> for BakedDataProvider {
2324
})
2425
}
2526
}
27+
impl DataProvider<::icu_provider_adapters::fallback::provider::CollationFallbackSupplementV1Marker>
28+
for BakedDataProvider
29+
{
30+
fn load(
31+
&self,
32+
req: DataRequest,
33+
) -> Result<
34+
DataResponse<
35+
::icu_provider_adapters::fallback::provider::CollationFallbackSupplementV1Marker,
36+
>,
37+
DataError,
38+
> {
39+
Ok(DataResponse {
40+
metadata: Default::default(),
41+
payload: Some(DataPayload::from_owned(zerofrom::ZeroFrom::zero_from(
42+
*fallback::supplement::co_v1::DATA.get_by(|k| req.locale.strict_cmp(k.as_bytes()).reverse()).ok_or_else(|| {
43+
DataErrorKind::MissingLocale.with_req(::icu_provider_adapters::fallback::provider::CollationFallbackSupplementV1Marker::KEY, req)
44+
})?,
45+
))),
46+
})
47+
}
48+
}
49+
impl DataProvider<::icu_provider_adapters::fallback::provider::LocaleFallbackLikelySubtagsV1Marker>
50+
for BakedDataProvider
51+
{
52+
fn load(
53+
&self,
54+
req: DataRequest,
55+
) -> Result<
56+
DataResponse<
57+
::icu_provider_adapters::fallback::provider::LocaleFallbackLikelySubtagsV1Marker,
58+
>,
59+
DataError,
60+
> {
61+
Ok(DataResponse {
62+
metadata: Default::default(),
63+
payload: Some(DataPayload::from_owned(zerofrom::ZeroFrom::zero_from(
64+
*fallback::likelysubtags_v1::DATA.get_by(|k| req.locale.strict_cmp(k.as_bytes()).reverse()).ok_or_else(|| {
65+
DataErrorKind::MissingLocale.with_req(::icu_provider_adapters::fallback::provider::LocaleFallbackLikelySubtagsV1Marker::KEY, req)
66+
})?,
67+
))),
68+
})
69+
}
70+
}
71+
impl DataProvider<::icu_provider_adapters::fallback::provider::LocaleFallbackParentsV1Marker>
72+
for BakedDataProvider
73+
{
74+
fn load(
75+
&self,
76+
req: DataRequest,
77+
) -> Result<
78+
DataResponse<::icu_provider_adapters::fallback::provider::LocaleFallbackParentsV1Marker>,
79+
DataError,
80+
> {
81+
Ok(DataResponse {
82+
metadata: Default::default(),
83+
payload: Some(DataPayload::from_owned(zerofrom::ZeroFrom::zero_from(
84+
*fallback::parents_v1::DATA.get_by(|k| req.locale.strict_cmp(k.as_bytes()).reverse()).ok_or_else(|| {
85+
DataErrorKind::MissingLocale.with_req(::icu_provider_adapters::fallback::provider::LocaleFallbackParentsV1Marker::KEY, req)
86+
})?,
87+
))),
88+
})
89+
}
90+
}

compiler/rustc_baked_icu_data/src/lib.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,27 @@
55
/* generated with:
66
```text
77
icu4x-datagen -W --pretty --fingerprint --use-separate-crates --cldr-tag latest --icuexport-tag latest \
8-
--format mod -l en es fr it ja pt ru tr zh-Hans zh-Hant -k list/and@1 -o src/data
8+
--format mod -l en es fr it ja pt ru tr zh-Hans zh-Hant -k list/and@1 fallback/likelysubtags@1 fallback/parents@1 fallback/supplement/co@1 \
9+
-o src/data
910
```
1011
*/
1112

12-
mod data;
13+
// FIXME: Workaround https://github.com/unicode-org/icu4x/issues/2815
14+
mod data {
15+
/*
16+
use super::data::BakedDataProvider;
17+
use icu_provider::{
18+
AnyPayload, AnyProvider, AnyResponse, DataError, DataErrorKind, DataKey, DataRequest,
19+
KeyedDataMarker,
20+
};
21+
22+
use crate::data::fallback;
23+
use crate::data::list;
24+
*/
25+
26+
include!("data/mod.rs");
27+
include!("data/any.rs");
28+
}
1329

1430
pub use data::BakedDataProvider;
1531

compiler/rustc_error_messages/src/lib.rs

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -607,19 +607,20 @@ pub fn fluent_value_from_str_list_sep_by_and<'source>(
607607
Self: Sized,
608608
{
609609
let baked_data_provider = rustc_baked_icu_data::baked_data_provider();
610-
let locale_fallbacker = LocaleFallbacker::try_new_unstable(&baked_data_provider);
611-
let data_provider = LocaleFallbackProvider::new_with_fallbacker(
612-
&baked_data_provider,
613-
locale_fallbacker,
614-
);
610+
let locale_fallbacker =
611+
LocaleFallbacker::try_new_with_any_provider(&baked_data_provider)
612+
.expect("Failed to create fallback provider");
613+
let data_provider =
614+
LocaleFallbackProvider::new_with_fallbacker(baked_data_provider, locale_fallbacker);
615615
let locale = icu_locale_from_unic_langid(lang)
616616
.unwrap_or_else(|| rustc_baked_icu_data::supported_locales::EN);
617-
let list_formatter = icu_list::ListFormatter::try_new_and_with_length_unstable(
618-
&data_provider,
619-
&locale.into(),
620-
icu_list::ListLength::Wide,
621-
)
622-
.expect("Failed to create list formatter");
617+
let list_formatter =
618+
icu_list::ListFormatter::try_new_and_with_length_with_any_provider(
619+
&data_provider,
620+
&locale.into(),
621+
icu_list::ListLength::Wide,
622+
)
623+
.expect("Failed to create list formatter");
623624

624625
Ok(MemoizableListFormatter(list_formatter))
625626
}

src/tools/tidy/src/deps.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ const PERMITTED_RUSTC_DEPENDENCIES: &[&str] = &[
135135
"icu_list",
136136
"icu_locid",
137137
"icu_provider",
138+
"icu_provider_adapters",
138139
"icu_provider_macros",
139140
"if_chain",
140141
"indexmap",

0 commit comments

Comments
 (0)