|
@@ -296,6 +296,51 @@ MISC_CFG_INTRINSICS = {
|
|
|
original_def.insert_before(
|
|
|
cfg_ir.Binary(a, '!=', b)))),
|
|
|
|
|
|
+
|
|
|
+ # String operations
|
|
|
+ 'string_get' :
|
|
|
+ lambda original_def, a, b:
|
|
|
+ original_def.redefine(
|
|
|
+ cfg_ir.CreateNode(
|
|
|
+ original_def.insert_before(
|
|
|
+ cfg_ir.create_index(
|
|
|
+ original_def.insert_before(cfg_ir.Read(a)),
|
|
|
+ original_def.insert_before(cfg_ir.Read(b)))))),
|
|
|
+ 'string_len' :
|
|
|
+ lambda original_def, a:
|
|
|
+ original_def.redefine(
|
|
|
+ cfg_ir.CreateNode(
|
|
|
+ original_def.insert_before(
|
|
|
+ cfg_ir.create_pure_simple_call(
|
|
|
+ 'len',
|
|
|
+ original_def.insert_before(cfg_ir.Read(a)))))),
|
|
|
+ 'string_join' :
|
|
|
+ lambda original_def, a, b:
|
|
|
+ original_def.redefine(
|
|
|
+ cfg_ir.CreateNode(
|
|
|
+ original_def.insert_before(
|
|
|
+ cfg_ir.Binary(
|
|
|
+ original_def.insert_before(
|
|
|
+ cfg_ir.create_pure_simple_call(
|
|
|
+ 'str',
|
|
|
+ original_def.insert_before(cfg_ir.Read(a)))),
|
|
|
+ '+',
|
|
|
+ original_def.insert_before(
|
|
|
+ cfg_ir.create_pure_simple_call(
|
|
|
+ 'str',
|
|
|
+ original_def.insert_before(cfg_ir.Read(b)))))))),
|
|
|
+ 'string_startswith' :
|
|
|
+ lambda original_def, a, b:
|
|
|
+ original_def.redefine(
|
|
|
+ cfg_ir.CreateNode(
|
|
|
+ original_def.insert_before(
|
|
|
+ cfg_ir.DirectFunctionCall(
|
|
|
+ 'startswith',
|
|
|
+ [('self', original_def.insert_before(cfg_ir.Read(a))),
|
|
|
+ ('substring', original_def.insert_before(cfg_ir.Read(b)))],
|
|
|
+ calling_convention=cfg_ir.SELF_POSITIONAL_CALLING_CONVENTION,
|
|
|
+ has_value=True, has_side_effects=False)))),
|
|
|
+
|
|
|
# State creation
|
|
|
'create_node' :
|
|
|
lambda original_def:
|