Skip to content

Commit 1eda9f4

Browse files
Lord-McSweeneyLord-McSweeney
authored andcommitted
avm2: Improve OptValue::matches_type
1 parent 72e5a26 commit 1eda9f4

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

core/src/avm2/optimizer/optimize.rs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -183,26 +183,29 @@ impl<'gc> OptValue<'gc> {
183183
let class_defs = activation.avm2().class_defs();
184184

185185
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-
192186
if let Some(own_class) = self.class {
193187
// Check if the checked class is a superclass of our class, or if
194188
// the checked class is `Number` and our class is `int` or `uint`
195189
if own_class.has_class_in_chain(checked_class) {
196-
true
190+
return true;
197191
} else if (own_class == class_defs.int || own_class == class_defs.uint)
198192
&& checked_class == class_defs.number
199193
{
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;
204195
}
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
205202
} 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+
206209
// Null matches every class except the primitive classes
207210
matches!(self.null_state, NullState::IsNull) && is_not_primitive_class
208211
}

0 commit comments

Comments
 (0)