[m-dev.] New pragmas for tail recursion warnings
paul at bone.id.au
Fri Nov 13 17:20:46 AEDT 2015
On Fri, Nov 13, 2015 at 05:08:20PM +1100, Paul Bone wrote:
> Recently Ian improvement to warnings about tail recursive code, I removed
> warnings for calls that are obviously non-tail recursive. Such as for the
> first recursive call in something like qsort.
> What I'd like to do next to make these warnings more usable by adding two to
> four pragmas to control the warnings on a finer level. The motivation for
> this is as follows. A programmer enables this warning for their whole
> project or module, but they have some code that isn't, and will never be,
> tail recursive. So they should be able to use a pragma to disable this
> warning for this one procedure.
> Likewise, another programmer does not enable this warning for their project
> or module. But they have a procedure that they know may be called with very
> large inputs, so it's important that that procedure is tail recursive. They
> should be able to enable the warning for that procedure.
> What I'd like to have reviewed at this stage are the names and syntax of the
> % This pragma works on all procedures of a given predicate/function.
> :- pragma no_warn_tail_recursion(NAME/ARITY).
> % This pragma works on a single procedure.
> :- pragma no_warn_tail_recursion(NAME(ARG_MODES*)).
> :- pragma warn_tail_recursion(NAME/ARITY).
> :- pragma warn_tail_recursion(NAME(ARG_MODES*)).
Argh, I meant to say no_warn_non_tail_recursion and
warn_non_tail_recursion, these match the option name
More information about the developers