+ def __gen_when_expr(self, node):
+ and_list = []
+ cfgn = self.__cfg_node
+
+ if RewriteRule.WhenToggler != node:
+ raise cfgn.config_error(
+ f"invalid when(...) expression: {ast.unparse(node)}")
+
+ if RewriteRule.WhenTogglerItem == node:
+ and_list.append(node)
+ else:
+ and_list += node.values
+
+ for i in range(len(and_list)):
+ item = and_list[i]
+ operator = item.ops[0]
+
+ name = Lazy.from_type(cfgn, Lazy.NodeValue, item.left.id)
+ acc = self.__subscript_accessor(name, ast.Load(), node)
+
+ if isinstance(operator, ast.Is):
+ operator = ast.Eq()
+ else:
+ operator = ast.NotEq()
+
+ item.left = acc
+ item.ops = [operator]
+
+
+ current = ast.BoolOp(
+ op=ast.And(),
+ values=[ast.Constant(True), *and_list])
+
+ expr = self.__when_epxr
+ if expr:
+ assert isinstance(expr, ast.expr)
+ current = ast.BoolOp(op=ast.Or(), values=[expr, current])
+
+ self.__when_epxr = current
+