Skip to content

Commit

Permalink
Add: is_read_only()
Browse files Browse the repository at this point in the history
  • Loading branch information
glx22 committed Dec 21, 2019
1 parent 9bc9b49 commit 07934b4
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 0 deletions.
6 changes: 6 additions & 0 deletions nml/expression/array.py
Expand Up @@ -31,3 +31,9 @@ def __str__(self):

def reduce(self, id_dicts = [], unknown_id_fatal = True):
return Array([val.reduce(id_dicts, unknown_id_fatal) for val in self.values], self.pos)

def is_read_only(self):
ret = True
for v in self.values:
ret = ret and v.is_read_only()
return ret
8 changes: 8 additions & 0 deletions nml/expression/base_expression.py
Expand Up @@ -101,6 +101,14 @@ def supported_by_actionD(self, raise_error):
if raise_error: raise generic.ScriptError("This expression can not be assigned to a parameter", self.pos)
return False

def is_read_only(self):
"""
Check if this expression store values.
@return: True if the expression doesn't store values.
"""
return True

def is_boolean(self):
"""
Check if this expression is limited to 0 or 1 as value.
Expand Down
6 changes: 6 additions & 0 deletions nml/expression/bin_not.py
Expand Up @@ -41,6 +41,9 @@ def supported_by_action2(self, raise_error):
def supported_by_actionD(self, raise_error):
return self.expr.supported_by_actionD(raise_error)

def is_read_only(self):
return self.expr.is_read_only()

def __str__(self):
return "~" + str(self.expr)

Expand Down Expand Up @@ -76,6 +79,9 @@ def supported_by_action2(self, raise_error):
def supported_by_actionD(self, raise_error):
return self.expr.supported_by_actionD(raise_error)

def is_read_only(self):
return self.expr.is_read_only()

def is_boolean(self):
return True

Expand Down
3 changes: 3 additions & 0 deletions nml/expression/binop.py
Expand Up @@ -178,6 +178,9 @@ def supported_by_actionD(self, raise_error):
return False
return self.expr1.supported_by_actionD(raise_error) and self.expr2.supported_by_actionD(raise_error)

def is_read_only(self):
return self.expr1.is_read_only() and self.expr2.is_read_only()

def is_boolean(self):
if self.op in (nmlop.AND, nmlop.OR, nmlop.XOR):
return self.expr1.is_boolean() and self.expr2.is_boolean()
Expand Down
6 changes: 6 additions & 0 deletions nml/expression/bitmask.py
Expand Up @@ -39,5 +39,11 @@ def reduce(self, id_dicts = [], unknown_id_fatal = True):
ret = BinOp(nmlop.OR, ret, val, self.pos)
return ret.reduce()

def is_read_only(self):
ret = True
for v in self.values:
ret = ret and v.is_read_only()
return ret

def __str__(self):
return "bitmask(" + ", ".join(str(e) for e in self.values) + ")"
3 changes: 3 additions & 0 deletions nml/expression/boolean.py
Expand Up @@ -44,6 +44,9 @@ def supported_by_action2(self, raise_error):
def supported_by_actionD(self, raise_error):
return self.expr.supported_by_actionD(raise_error)

def is_read_only(self):
return self.expr.is_read_only()

def is_boolean(self):
return True

Expand Down
3 changes: 3 additions & 0 deletions nml/expression/storage_op.py
Expand Up @@ -121,3 +121,6 @@ def supported_by_actionD(self, raise_error):
if raise_error:
raise generic.ScriptError("{}() may only be used inside switch-blocks".format(self.name), self.pos)
return False

def is_read_only(self):
return (not self.info['store']) and self.register.is_read_only() and (self.value.is_read_only() if self.value is not None else True)
3 changes: 3 additions & 0 deletions nml/expression/ternaryop.py
Expand Up @@ -51,6 +51,9 @@ def supported_by_action2(self, raise_error):
def supported_by_actionD(self, raise_error):
return self.guard.supported_by_actionD(raise_error) and self.expr1.supported_by_actionD(raise_error) and self.expr2.supported_by_actionD(raise_error)

def is_read_only(self):
return self.expr1.is_read_only() and self.expr2.is_read_only()

def is_boolean(self):
return self.expr1.is_boolean() and self.expr2.is_boolean()

Expand Down

0 comments on commit 07934b4

Please sign in to comment.