It is possible for one rule to depend on the success or failure of another rule. There are four possibilities:
X: The rule is only applied to bindings that X succeeded on. In the following:@foo_found disable all@
identifier foo;
@@
foo(...)
{
<+...
{
...
return;
}
...+>
}
@bar depends on foo_found@
@@
-bar()
any instances of the call bar() will only be removed when a match has occurred against a function called foo.
!X: The current rule only applies to bindings that X failed on.ever X: The current rule only applies if there are some bindings that X succeeded on.never X: The rule is only applied if there are no bindings in the current source file that X succeeded on. The following pattern:@stop_matches@ identifier lock_out @@ lock_out @foo_2_bar depends on never stop_matches@ @@ -foo(); +bar();
will only replace foo with bar if the source file does not contain any instance of an identifier named lock_out.