ADG: handling functions defined after a reference

Faré fahree at gmail.com
Sat Dec 31 21:48:25 UTC 2022


IIRC, at ITA we loaded all the source code of QPX as source code in a
first pass before we compiled it, to get all the functions resolved
(happily, there weren't any macro-defining macros requiring more than
one level of such loading), due to the code having been defined
without such a clean build in mind. I don't remember for sure, but I
suspect we did that also when we used ADG on that code-base to detect
the dependencies. Maybe we even ran ADG twice? In the end, we also
generated fine-grained dependency reports so we could later split the
files in multiple parts that had a proper dependency order, and even
automatically did the file-splitting based on dependencies with
toplevel-form granularity. (The output from this project was dropped
for political reasons, though, sigh).

Sorry, my memories are growing dim, and I don't have access to this
codebase anymore. I might know people who have access and might be
able to dig it out (or then again might not—the code might have been
archived with the old revision control system when ITA was absorbed by
Google, and no one is going to get paid to fight bureaucracy to get to
ancient code; and it probably was in a branch which will make
archaeology harder).

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
“In reviewing the history of the English Government, its wars and its taxes,
a bystander, not blinded by prejudice nor warped by interest, would declare
that taxes were not raised to carry on wars, but that wars were raised
to carry on taxes.”  — Thomas Paine, “Rights of Man”




On Sat, Dec 31, 2022 at 12:43 AM Robert Dodier <robert.dodier at gmail.com> wrote:
>
> Hi, thanks for your help so far.
>
> I have noticed that asdf-dependency-grovel doesn't handle functions
> which are defined after a reference. E.g. suppose a file says (defun f
> () (g)) and G hasn't been defined yet. Then a file that's loaded
> afterwards says (defun g ()). If the loading order of the files were
> reversed, ADG would detect the dependency, but as it stands, ADG sees
> that there is a new symbol G but doesn't output a dependency for that.
>
> It seems like the problem might be originating from dependencies being
> detected at the time that the reference is detected. It seems like if
> the definitions and references were all generated, and then all of the
> references matched with definitions after everything is loaded, then
> ADG would detect out-of-order references. Just guessing there.
>
> Do you see an easy way to get ADG to detect out-of-order dependencies?
> The reason I ask is that the practical example I am interested in
> (Maxima) has a lot of those.
>
> Thanks for any insights,
>
> Robert



More information about the asdf-devel mailing list