Browse Source

Make read_dict a CFG JIT intrinsic

jonathanvdc 8 years ago
parent
commit
c734e30cc0
1 changed files with 14 additions and 0 deletions
  1. 14 0
      kernel/modelverse_jit/intrinsics.py

+ 14 - 0
kernel/modelverse_jit/intrinsics.py

@@ -344,6 +344,19 @@ def __dict_in_node_cfg(original_def, a, b):
                     'is not',
                     original_def.insert_before(cfg_ir.Literal(None))))))
 
+def __dict_read_cfg(original_def, a, b):
+    # Original definition:
+    #
+    # def dict_read(a, b, **remainder):
+    #     b_value, = yield [("RV", [b])]
+    #     result, = yield [("RD", [a, b_value])]
+    #     raise PrimitiveFinished(result)
+
+    original_def.redefine(
+        cfg_ir.create_read_dict_value(
+            a,
+            original_def.insert_before(cfg_ir.Read(b))))
+
 MISC_CFG_INTRINSICS = {
     # Reference equality
     'element_eq' :
@@ -419,6 +432,7 @@ MISC_CFG_INTRINSICS = {
 
     # Dictionary operations
     'dict_len' : __read_nr_out_cfg,
+    'dict_read' : __dict_read_cfg,
     'dict_in' : __dict_in_cfg,
     'dict_in_node' : __dict_in_node_cfg,