Skip to content

Commit

Permalink
Add: optimise switch returning constants
Browse files Browse the repository at this point in the history
  • Loading branch information
glx22 committed Dec 21, 2019
1 parent 07934b4 commit d9dd0b7
Showing 1 changed file with 11 additions and 0 deletions.
11 changes: 11 additions & 0 deletions nml/expression/spritegroup_ref.py
Expand Up @@ -15,6 +15,7 @@

from nml import generic
from nml.actions import action2
from nml.ast import switch
from .base_expression import Type, Expression

class SpriteGroupRef(Expression):
Expand Down Expand Up @@ -72,6 +73,16 @@ def get_action2_id(self, feature):
return spritegroup.get_action2(feature).id

def reduce(self, id_dicts = [], unknown_id_fatal = True):
if self.name.value != 'CB_FAILED':
spritegroup = action2.resolve_spritegroup(self.name)
if isinstance(spritegroup, switch.Switch) and spritegroup.body.default is not None and spritegroup.expr.is_read_only():
value = spritegroup.body.default.value
for r in spritegroup.body.ranges:
if value != r.result.value:
return self
value = r.result.value
generic.print_warning("Block '{}' returns a constant, optimising.".format(spritegroup.name.value), self.pos)
return value
return self

def type(self):
Expand Down

0 comments on commit d9dd0b7

Please sign in to comment.