@@ -183,26 +183,29 @@ impl<'gc> OptValue<'gc> {
183
183
let class_defs = activation. avm2 ( ) . class_defs ( ) ;
184
184
185
185
if let Some ( checked_class) = checked_type {
186
- let is_not_primitive_class = checked_class != class_defs. int
187
- && checked_class != class_defs. uint
188
- && checked_class != class_defs. number
189
- && checked_class != class_defs. boolean
190
- && checked_class != class_defs. void ;
191
-
192
186
if let Some ( own_class) = self . class {
193
187
// Check if the checked class is a superclass of our class, or if
194
188
// the checked class is `Number` and our class is `int` or `uint`
195
189
if own_class. has_class_in_chain ( checked_class) {
196
- true
190
+ return true ;
197
191
} else if ( own_class == class_defs. int || own_class == class_defs. uint )
198
192
&& checked_class == class_defs. number
199
193
{
200
- true
201
- } else {
202
- // Null matches every class except the primitive classes
203
- matches ! ( self . null_state, NullState :: IsNull ) && is_not_primitive_class
194
+ return true ;
204
195
}
196
+ }
197
+
198
+ if checked_class == class_defs. int && self . contains_valid_integer {
199
+ true
200
+ } else if checked_class == class_defs. uint && self . contains_valid_unsigned {
201
+ true
205
202
} else {
203
+ let is_not_primitive_class = checked_class != class_defs. int
204
+ && checked_class != class_defs. uint
205
+ && checked_class != class_defs. number
206
+ && checked_class != class_defs. boolean
207
+ && checked_class != class_defs. void ;
208
+
206
209
// Null matches every class except the primitive classes
207
210
matches ! ( self . null_state, NullState :: IsNull ) && is_not_primitive_class
208
211
}
0 commit comments