Simple xref question

Thomas Lindgren thomas.lindgren@REDACTED
Thu Apr 25 15:12:44 CEST 2002


>    How can I find all functions in the standard system that call
>a given function {Mod,Func,Arity}?
>
>   Is their a one-liner to do this?

You can pass the option {use, MFAs} to 'analyze' once you have the analyzer
running, it seems. Alas, I don't think apply/spawn is handled the way one
wants. (They are treated as "unresolved calls" in general.)

This is annoying so here is a proposal for Son of Erlang: new directives.

-export([f/n, ...]).
-apply([f/n, ...]).
-spawn([f/n, ...]).

An -export means the functions can be called remotely, mod:f(...).
An -apply means the functions can be invoked by apply.
A -spawn means the functions can be spawned.

There are two advantages to this:

1. Programmers can ensure that a function only can be called
   directly, by ONLY -export:ing it, which means xref will find all
references to it.

2. No need for the "internal exports" that dot the code, e.g., when
   one needs to spawn certain servers. If f/n is -spawn declared
   but not -export:ed, then it will not be visible to the outside.

I think such an extension (though non-compatible, since -export does all
three today) would clean up some annoyances, remove some queer coding
practices and generally usher in an era of utopical bliss.

-- Thomas




More information about the erlang-questions mailing list