Skip to content

Commit 3933937

Browse files
avm2: use LazyLock instead of OnceLock for transfer table
1 parent 99982b9 commit 3933937

File tree

1 file changed

+60
-59
lines changed

1 file changed

+60
-59
lines changed

core/src/avm2/api_version.rs

Lines changed: 60 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::sync::OnceLock;
1+
use std::sync::LazyLock;
22

33
use crate::PlayerRuntime;
44
use enum_map::{enum_map, Enum, EnumMap};
@@ -62,7 +62,64 @@ pub enum ApiVersion {
6262
VM_INTERNAL = 52,
6363
}
6464

65-
static TRANSFER_TABLE: OnceLock<EnumMap<ApiVersion, (ApiVersion, ApiVersion)>> = OnceLock::new();
65+
static TRANSFER_TABLE: LazyLock<EnumMap<ApiVersion, (ApiVersion, ApiVersion)>> =
66+
LazyLock::new(|| {
67+
enum_map! {
68+
ApiVersion::AllVersions => (ApiVersion::AllVersions, ApiVersion::AllVersions),
69+
ApiVersion::AIR_1_0 => (ApiVersion::AIR_1_0, ApiVersion::VM_INTERNAL),
70+
ApiVersion::FP_10_0 => (ApiVersion::AIR_1_5, ApiVersion::FP_10_0),
71+
ApiVersion::AIR_1_5 => (ApiVersion::AIR_1_5, ApiVersion::VM_INTERNAL),
72+
ApiVersion::AIR_1_5_1 => (ApiVersion::AIR_1_5_1, ApiVersion::VM_INTERNAL),
73+
ApiVersion::FP_10_0_32 => (ApiVersion::AIR_1_5_2, ApiVersion::FP_10_0_32),
74+
ApiVersion::AIR_1_5_2 => (ApiVersion::AIR_1_5_2, ApiVersion::VM_INTERNAL),
75+
ApiVersion::FP_10_1 => (ApiVersion::AIR_2_0, ApiVersion::FP_10_1),
76+
ApiVersion::AIR_2_0 => (ApiVersion::AIR_2_0, ApiVersion::VM_INTERNAL),
77+
ApiVersion::AIR_2_5 => (ApiVersion::AIR_2_5, ApiVersion::VM_INTERNAL),
78+
ApiVersion::FP_10_2 => (ApiVersion::AIR_2_6, ApiVersion::FP_10_2),
79+
ApiVersion::AIR_2_6 => (ApiVersion::AIR_2_6, ApiVersion::VM_INTERNAL),
80+
ApiVersion::SWF_12 => (ApiVersion::SWF_12, ApiVersion::SWF_12),
81+
ApiVersion::AIR_2_7 => (ApiVersion::AIR_2_7, ApiVersion::VM_INTERNAL),
82+
ApiVersion::SWF_13 => (ApiVersion::AIR_3_0, ApiVersion::SWF_13),
83+
ApiVersion::AIR_3_0 => (ApiVersion::AIR_3_0, ApiVersion::VM_INTERNAL),
84+
ApiVersion::SWF_14 => (ApiVersion::AIR_3_1, ApiVersion::SWF_14),
85+
ApiVersion::AIR_3_1 => (ApiVersion::AIR_3_1, ApiVersion::VM_INTERNAL),
86+
ApiVersion::SWF_15 => (ApiVersion::AIR_3_2, ApiVersion::SWF_15),
87+
ApiVersion::AIR_3_2 => (ApiVersion::AIR_3_2, ApiVersion::VM_INTERNAL),
88+
ApiVersion::SWF_16 => (ApiVersion::AIR_3_3, ApiVersion::SWF_16),
89+
ApiVersion::AIR_3_3 => (ApiVersion::AIR_3_3, ApiVersion::VM_INTERNAL),
90+
ApiVersion::SWF_17 => (ApiVersion::AIR_3_4, ApiVersion::SWF_17),
91+
ApiVersion::AIR_3_4 => (ApiVersion::AIR_3_4, ApiVersion::VM_INTERNAL),
92+
ApiVersion::SWF_18 => (ApiVersion::AIR_3_5, ApiVersion::SWF_18),
93+
ApiVersion::AIR_3_5 => (ApiVersion::AIR_3_5, ApiVersion::VM_INTERNAL),
94+
ApiVersion::SWF_19 => (ApiVersion::AIR_3_6, ApiVersion::SWF_19),
95+
ApiVersion::AIR_3_6 => (ApiVersion::AIR_3_6, ApiVersion::VM_INTERNAL),
96+
ApiVersion::SWF_20 => (ApiVersion::AIR_3_7, ApiVersion::SWF_20),
97+
ApiVersion::AIR_3_7 => (ApiVersion::AIR_3_7, ApiVersion::VM_INTERNAL),
98+
ApiVersion::SWF_21 => (ApiVersion::AIR_3_8, ApiVersion::SWF_21),
99+
ApiVersion::AIR_3_8 => (ApiVersion::AIR_3_8, ApiVersion::VM_INTERNAL),
100+
ApiVersion::SWF_22 => (ApiVersion::AIR_3_9, ApiVersion::SWF_22),
101+
ApiVersion::AIR_3_9 => (ApiVersion::AIR_3_9, ApiVersion::VM_INTERNAL),
102+
ApiVersion::SWF_23 => (ApiVersion::AIR_4_0, ApiVersion::SWF_23),
103+
ApiVersion::AIR_4_0 => (ApiVersion::AIR_4_0, ApiVersion::VM_INTERNAL),
104+
ApiVersion::SWF_24 => (ApiVersion::AIR_13_0, ApiVersion::SWF_24),
105+
ApiVersion::AIR_13_0 => (ApiVersion::AIR_13_0, ApiVersion::VM_INTERNAL),
106+
ApiVersion::SWF_25 => (ApiVersion::AIR_14_0, ApiVersion::SWF_25),
107+
ApiVersion::AIR_14_0 => (ApiVersion::AIR_14_0, ApiVersion::VM_INTERNAL),
108+
ApiVersion::SWF_26 => (ApiVersion::AIR_15_0, ApiVersion::SWF_26),
109+
ApiVersion::AIR_15_0 => (ApiVersion::AIR_15_0, ApiVersion::VM_INTERNAL),
110+
ApiVersion::SWF_27 => (ApiVersion::AIR_16_0, ApiVersion::SWF_27),
111+
ApiVersion::AIR_16_0 => (ApiVersion::AIR_16_0, ApiVersion::VM_INTERNAL),
112+
ApiVersion::SWF_28 => (ApiVersion::AIR_17_0, ApiVersion::SWF_28),
113+
ApiVersion::AIR_17_0 => (ApiVersion::AIR_17_0, ApiVersion::VM_INTERNAL),
114+
ApiVersion::SWF_29 => (ApiVersion::AIR_18_0, ApiVersion::SWF_29),
115+
ApiVersion::AIR_18_0 => (ApiVersion::AIR_18_0, ApiVersion::VM_INTERNAL),
116+
ApiVersion::SWF_30 => (ApiVersion::AIR_19_0, ApiVersion::SWF_30),
117+
ApiVersion::AIR_19_0 => (ApiVersion::AIR_19_0, ApiVersion::VM_INTERNAL),
118+
ApiVersion::SWF_31 => (ApiVersion::AIR_20_0, ApiVersion::SWF_31),
119+
ApiVersion::AIR_20_0 => (ApiVersion::AIR_20_0, ApiVersion::VM_INTERNAL),
120+
ApiVersion::VM_INTERNAL => (ApiVersion::VM_INTERNAL, ApiVersion::VM_INTERNAL),
121+
}
122+
});
66123

67124
impl ApiVersion {
68125
pub fn to_valid_playerglobals_version(self, runtime: PlayerRuntime) -> ApiVersion {
@@ -79,63 +136,7 @@ impl ApiVersion {
79136
// running in FlashPlayer.
80137
//
81138
// See https://github.com/adobe/avmplus/blob/858d034a3bd3a54d9b70909386435cf4aec81d21/core/api-versions.cpp#L63
82-
let active_series = TRANSFER_TABLE.get_or_init(|| {
83-
enum_map! {
84-
ApiVersion::AllVersions => (ApiVersion::AllVersions, ApiVersion::AllVersions),
85-
ApiVersion::AIR_1_0 => (ApiVersion::AIR_1_0, ApiVersion::VM_INTERNAL),
86-
ApiVersion::FP_10_0 => (ApiVersion::AIR_1_5, ApiVersion::FP_10_0),
87-
ApiVersion::AIR_1_5 => (ApiVersion::AIR_1_5, ApiVersion::VM_INTERNAL),
88-
ApiVersion::AIR_1_5_1 => (ApiVersion::AIR_1_5_1, ApiVersion::VM_INTERNAL),
89-
ApiVersion::FP_10_0_32 => (ApiVersion::AIR_1_5_2, ApiVersion::FP_10_0_32),
90-
ApiVersion::AIR_1_5_2 => (ApiVersion::AIR_1_5_2, ApiVersion::VM_INTERNAL),
91-
ApiVersion::FP_10_1 => (ApiVersion::AIR_2_0, ApiVersion::FP_10_1),
92-
ApiVersion::AIR_2_0 => (ApiVersion::AIR_2_0, ApiVersion::VM_INTERNAL),
93-
ApiVersion::AIR_2_5 => (ApiVersion::AIR_2_5, ApiVersion::VM_INTERNAL),
94-
ApiVersion::FP_10_2 => (ApiVersion::AIR_2_6, ApiVersion::FP_10_2),
95-
ApiVersion::AIR_2_6 => (ApiVersion::AIR_2_6, ApiVersion::VM_INTERNAL),
96-
ApiVersion::SWF_12 => (ApiVersion::SWF_12, ApiVersion::SWF_12),
97-
ApiVersion::AIR_2_7 => (ApiVersion::AIR_2_7, ApiVersion::VM_INTERNAL),
98-
ApiVersion::SWF_13 => (ApiVersion::AIR_3_0, ApiVersion::SWF_13),
99-
ApiVersion::AIR_3_0 => (ApiVersion::AIR_3_0, ApiVersion::VM_INTERNAL),
100-
ApiVersion::SWF_14 => (ApiVersion::AIR_3_1, ApiVersion::SWF_14),
101-
ApiVersion::AIR_3_1 => (ApiVersion::AIR_3_1, ApiVersion::VM_INTERNAL),
102-
ApiVersion::SWF_15 => (ApiVersion::AIR_3_2, ApiVersion::SWF_15),
103-
ApiVersion::AIR_3_2 => (ApiVersion::AIR_3_2, ApiVersion::VM_INTERNAL),
104-
ApiVersion::SWF_16 => (ApiVersion::AIR_3_3, ApiVersion::SWF_16),
105-
ApiVersion::AIR_3_3 => (ApiVersion::AIR_3_3, ApiVersion::VM_INTERNAL),
106-
ApiVersion::SWF_17 => (ApiVersion::AIR_3_4, ApiVersion::SWF_17),
107-
ApiVersion::AIR_3_4 => (ApiVersion::AIR_3_4, ApiVersion::VM_INTERNAL),
108-
ApiVersion::SWF_18 => (ApiVersion::AIR_3_5, ApiVersion::SWF_18),
109-
ApiVersion::AIR_3_5 => (ApiVersion::AIR_3_5, ApiVersion::VM_INTERNAL),
110-
ApiVersion::SWF_19 => (ApiVersion::AIR_3_6, ApiVersion::SWF_19),
111-
ApiVersion::AIR_3_6 => (ApiVersion::AIR_3_6, ApiVersion::VM_INTERNAL),
112-
ApiVersion::SWF_20 => (ApiVersion::AIR_3_7, ApiVersion::SWF_20),
113-
ApiVersion::AIR_3_7 => (ApiVersion::AIR_3_7, ApiVersion::VM_INTERNAL),
114-
ApiVersion::SWF_21 => (ApiVersion::AIR_3_8, ApiVersion::SWF_21),
115-
ApiVersion::AIR_3_8 => (ApiVersion::AIR_3_8, ApiVersion::VM_INTERNAL),
116-
ApiVersion::SWF_22 => (ApiVersion::AIR_3_9, ApiVersion::SWF_22),
117-
ApiVersion::AIR_3_9 => (ApiVersion::AIR_3_9, ApiVersion::VM_INTERNAL),
118-
ApiVersion::SWF_23 => (ApiVersion::AIR_4_0, ApiVersion::SWF_23),
119-
ApiVersion::AIR_4_0 => (ApiVersion::AIR_4_0, ApiVersion::VM_INTERNAL),
120-
ApiVersion::SWF_24 => (ApiVersion::AIR_13_0, ApiVersion::SWF_24),
121-
ApiVersion::AIR_13_0 => (ApiVersion::AIR_13_0, ApiVersion::VM_INTERNAL),
122-
ApiVersion::SWF_25 => (ApiVersion::AIR_14_0, ApiVersion::SWF_25),
123-
ApiVersion::AIR_14_0 => (ApiVersion::AIR_14_0, ApiVersion::VM_INTERNAL),
124-
ApiVersion::SWF_26 => (ApiVersion::AIR_15_0, ApiVersion::SWF_26),
125-
ApiVersion::AIR_15_0 => (ApiVersion::AIR_15_0, ApiVersion::VM_INTERNAL),
126-
ApiVersion::SWF_27 => (ApiVersion::AIR_16_0, ApiVersion::SWF_27),
127-
ApiVersion::AIR_16_0 => (ApiVersion::AIR_16_0, ApiVersion::VM_INTERNAL),
128-
ApiVersion::SWF_28 => (ApiVersion::AIR_17_0, ApiVersion::SWF_28),
129-
ApiVersion::AIR_17_0 => (ApiVersion::AIR_17_0, ApiVersion::VM_INTERNAL),
130-
ApiVersion::SWF_29 => (ApiVersion::AIR_18_0, ApiVersion::SWF_29),
131-
ApiVersion::AIR_18_0 => (ApiVersion::AIR_18_0, ApiVersion::VM_INTERNAL),
132-
ApiVersion::SWF_30 => (ApiVersion::AIR_19_0, ApiVersion::SWF_30),
133-
ApiVersion::AIR_19_0 => (ApiVersion::AIR_19_0, ApiVersion::VM_INTERNAL),
134-
ApiVersion::SWF_31 => (ApiVersion::AIR_20_0, ApiVersion::SWF_31),
135-
ApiVersion::AIR_20_0 => (ApiVersion::AIR_20_0, ApiVersion::VM_INTERNAL),
136-
ApiVersion::VM_INTERNAL => (ApiVersion::VM_INTERNAL, ApiVersion::VM_INTERNAL),
137-
}
138-
})[self];
139+
let active_series = TRANSFER_TABLE[self];
139140

140141
match runtime {
141142
PlayerRuntime::AIR => active_series.0,

0 commit comments

Comments
 (0)