mirror of
https://github.com/SELinuxProject/setools
synced 2025-04-09 19:11:31 +00:00
Improve readability of ConditionalExpression rendering code.
This commit is contained in:
parent
2f44b599ca
commit
7bacae7596
@ -1,4 +1,4 @@
|
|||||||
# Copyright 2014, Tresys Technology, LLC
|
# Copyright 2014-2015, Tresys Technology, LLC
|
||||||
#
|
#
|
||||||
# This file is part of SETools.
|
# This file is part of SETools.
|
||||||
#
|
#
|
||||||
@ -98,7 +98,7 @@ class ConditionalExpr(symbol.PolicySymbol):
|
|||||||
# highest precedence (NOT) so if there is a single binary
|
# highest precedence (NOT) so if there is a single binary
|
||||||
# operator, no parentheses are output
|
# operator, no parentheses are output
|
||||||
stack = []
|
stack = []
|
||||||
prev_oper = qpol.QPOL_COND_EXPR_NOT
|
prev_op_precedence = self._cond_expr_val_to_precedence[qpol.QPOL_COND_EXPR_NOT]
|
||||||
for expr_node in self.qpol_symbol.expr_node_iter(self.policy):
|
for expr_node in self.qpol_symbol.expr_node_iter(self.policy):
|
||||||
expr_node_type = expr_node.expr_type(self.policy)
|
expr_node_type = expr_node.expr_type(self.policy)
|
||||||
|
|
||||||
@ -109,37 +109,33 @@ class ConditionalExpr(symbol.PolicySymbol):
|
|||||||
stack.append(str(nodebool))
|
stack.append(str(nodebool))
|
||||||
elif expr_node_type == qpol.QPOL_COND_EXPR_NOT: # unary operator
|
elif expr_node_type == qpol.QPOL_COND_EXPR_NOT: # unary operator
|
||||||
operand = stack.pop()
|
operand = stack.pop()
|
||||||
|
operator = self._cond_expr_val_to_text[expr_node_type]
|
||||||
|
op_precedence = self._cond_expr_val_to_precedence[expr_node_type]
|
||||||
|
|
||||||
# NOT is the highest precedence, so only need
|
# NOT is the highest precedence, so only need
|
||||||
# parentheses if the operand is a subexpression
|
# parentheses if the operand is a subexpression
|
||||||
if isinstance(operand, list):
|
if isinstance(operand, list):
|
||||||
subexpr = [
|
subexpr = [operator, "(", operand, ")"]
|
||||||
self._cond_expr_val_to_text[expr_node_type],
|
|
||||||
"(", operand, ")"]
|
|
||||||
else:
|
else:
|
||||||
subexpr = [
|
subexpr = [operator, operand]
|
||||||
self._cond_expr_val_to_text[expr_node_type], operand]
|
|
||||||
|
|
||||||
stack.append(subexpr)
|
stack.append(subexpr)
|
||||||
prev_oper = expr_node_type
|
prev_op_precedence = op_precedence
|
||||||
else:
|
else:
|
||||||
operand1 = stack.pop()
|
operand1 = stack.pop()
|
||||||
operand2 = stack.pop()
|
operand2 = stack.pop()
|
||||||
|
operator = self._cond_expr_val_to_text[expr_node_type]
|
||||||
|
op_precedence = self._cond_expr_val_to_precedence[expr_node_type]
|
||||||
|
|
||||||
if self._cond_expr_val_to_precedence[prev_oper] > \
|
if prev_op_precedence > op_precedence:
|
||||||
self._cond_expr_val_to_precedence[expr_node_type]:
|
|
||||||
# if previous operator is of higher precedence
|
# if previous operator is of higher precedence
|
||||||
# no parentheses are needed.
|
# no parentheses are needed.
|
||||||
subexpr = [
|
subexpr = [operand1, operator, operand2]
|
||||||
operand1, self._cond_expr_val_to_text[expr_node_type],
|
|
||||||
operand2]
|
|
||||||
else:
|
else:
|
||||||
subexpr = ["(", operand1,
|
subexpr = ["(", operand1, operator, operand2, ")"]
|
||||||
self._cond_expr_val_to_text[expr_node_type],
|
|
||||||
operand2, ")"]
|
|
||||||
|
|
||||||
stack.append(subexpr)
|
stack.append(subexpr)
|
||||||
prev_oper = expr_node_type
|
prev_op_precedence = op_precedence
|
||||||
|
|
||||||
return self.__unwind_subexpression(stack)
|
return self.__unwind_subexpression(stack)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user