def _operator_or(node): _basic_optimize(node, "OPERAND1", "OPERAND2") if isinstance(node["OPERAND1"], dict) \ or isinstance(node["OPERAND2"], dict): return node return "true" \ if to_bool(node["OPERAND1"]) or to_bool(node["OPERAND2"]) \ else "false"
def _control_repeat_until(node): _basic_optimize(node, "CONDITION", "body") if isinstance(node["CONDITION"], dict): return node return None if to_bool(node["CONDITION"]) \ else { "type": "control_forever", "body": node["body"]}
def _control_while(node): _basic_optimize(node, "CONDITION", "body") if isinstance(node["CONDITION"], dict): return node return { "type": "control_forever", "body": node["body"] } if to_bool(node["CONDITION"]) else None
def _control_if(node): _basic_optimize(node, "CONDITION", "true_branch") if isinstance(node["CONDITION"], dict): return node return node["true_branch"] if to_bool(node["CONDITION"]) else None
def _operator_not(node): _basic_optimize(node, "OPERAND") if isinstance(node["OPERAND1"], dict): return node return "false" if to_bool(node["OPERAND"]) else "true"