From 7914f0100615d0047a3289a450f78d9ba1f969e7 Mon Sep 17 00:00:00 2001 From: Joeri Exelmans Date: Wed, 11 Dec 2024 21:14:22 +0100 Subject: [PATCH] make sure no one deletes elements that were matched in the RHS with a RHS-condition... --- transformation/rewriter.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/transformation/rewriter.py b/transformation/rewriter.py index ee5a07f..33fa3c5 100644 --- a/transformation/rewriter.py +++ b/transformation/rewriter.py @@ -82,8 +82,18 @@ def rewrite(state, # to be grown rhs_match = { name : lhs_match[name] for name in common } + + bound_api = bind_api(host_odapi) + original_delete = bound_api["delete"] + def wrapped_delete(obj): + not_allowed_to_delete = { host_odapi.get(host_name): pattern_name for pattern_name, host_name in rhs_match.items() } + if obj in not_allowed_to_delete: + pattern_name = not_allowed_to_delete[obj] + raise Exception(f"\n\nYou're trying to delete the element that was matched with the RHS-element '{pattern_name}'. This is not allowed! You're allowed to delete anything BUT NOT elements matched with your RHS-pattern. Instead, simply remove the element '{pattern_name}' from your RHS, if you want to delete it.") + return original_delete(obj) + bound_api["delete"] = wrapped_delete builtin = { - **bind_api(host_odapi), + **bound_api, 'matched': matched_callback, 'odapi': host_odapi, }