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, }