|
@@ -308,6 +308,42 @@ def __read_nr_out_cfg(original_def, a):
|
|
|
original_def.insert_before(
|
|
|
cfg_ir.create_read_outgoing_edges(a))))))
|
|
|
|
|
|
+def __dict_in_cfg(original_def, a, b):
|
|
|
+ # Original definition:
|
|
|
+ #
|
|
|
+ # def dict_in(a, b, **remainder):
|
|
|
+ # b_value, = yield [("RV", [b])]
|
|
|
+ # value, = yield [("RD", [a, b_value])]
|
|
|
+ # is_in = value is not None
|
|
|
+ # result, = yield [("CNV", [is_in])]
|
|
|
+ # raise PrimitiveFinished(result)
|
|
|
+
|
|
|
+ original_def.redefine(
|
|
|
+ cfg_ir.CreateNode(
|
|
|
+ original_def.insert_before(
|
|
|
+ cfg_ir.Binary(
|
|
|
+ original_def.insert_before(
|
|
|
+ cfg_ir.create_read_dict_value(
|
|
|
+ a, original_def.insert_before(cfg_ir.Read(b)))),
|
|
|
+ 'is not',
|
|
|
+ original_def.insert_before(cfg_ir.Literal(None))))))
|
|
|
+
|
|
|
+def __dict_in_node_cfg(original_def, a, b):
|
|
|
+ # Original definition:
|
|
|
+ #
|
|
|
+ # def dict_in_node(a, b, **remainder):
|
|
|
+ # value, = yield [("RDN", [a, b])]
|
|
|
+ # result, = yield [("CNV", [value is not None])]
|
|
|
+ # raise PrimitiveFinished(result)
|
|
|
+
|
|
|
+ original_def.redefine(
|
|
|
+ cfg_ir.CreateNode(
|
|
|
+ original_def.insert_before(
|
|
|
+ cfg_ir.Binary(
|
|
|
+ original_def.insert_before(cfg_ir.create_read_dict_node(a, b)),
|
|
|
+ 'is not',
|
|
|
+ original_def.insert_before(cfg_ir.Literal(None))))))
|
|
|
+
|
|
|
MISC_CFG_INTRINSICS = {
|
|
|
# Reference equality
|
|
|
'element_eq' :
|
|
@@ -383,6 +419,8 @@ MISC_CFG_INTRINSICS = {
|
|
|
|
|
|
# Dictionary operations
|
|
|
'dict_len' : __read_nr_out_cfg,
|
|
|
+ 'dict_in' : __dict_in_cfg,
|
|
|
+ 'dict_in_node' : __dict_in_node_cfg,
|
|
|
|
|
|
# List operations
|
|
|
'list_len' : __read_nr_out_cfg
|