1
- use std:: sync:: OnceLock ;
1
+ use std:: sync:: LazyLock ;
2
2
3
3
use crate :: PlayerRuntime ;
4
4
use enum_map:: { enum_map, Enum , EnumMap } ;
@@ -62,7 +62,64 @@ pub enum ApiVersion {
62
62
VM_INTERNAL = 52 ,
63
63
}
64
64
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
+ } ) ;
66
123
67
124
impl ApiVersion {
68
125
pub fn to_valid_playerglobals_version ( self , runtime : PlayerRuntime ) -> ApiVersion {
@@ -79,63 +136,7 @@ impl ApiVersion {
79
136
// running in FlashPlayer.
80
137
//
81
138
// 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 ] ;
139
140
140
141
match runtime {
141
142
PlayerRuntime :: AIR => active_series. 0 ,
0 commit comments