Indeed v4.9.4 adds dotted lines in the dependency graph.  The meaning of the lines is:

- solid line from A to B: procedure A contains a call to procedure B
- dotted line from A to B: procedure A contains a read or write of variable B

Sometimes there will be both a solid and dotted line from A to B.  This happens often when speculative inlining is done (to respect R5RS semantics).  For example:

(define (f x) (sin x))

will be compiled as:

(define f
  (lambda (x)
    (if (and ('#<procedure #2 ##eq?> sin '#<procedure #3 sin>)
             ('#<procedure #4 ##flonum?> x))
        ('#<procedure #5 ##flsin> x)
        (sin x))))

Procedure f contains a call to sin and a variable reference of sin, so there will be a solid and dotted line between f and sin in the dependency graph:


Moreover, sin is in black to indicate that the file does not contain a definition of sin.  It can help identify undefined procedures/variables, or procedures that should be imported from other modules.

Marc



On Jan 4, 2022, at 10:15 AM, Sven Hartrumpf <hartrumpf@gmx.net> wrote:

Investigating the original .dg files showed that the format was extended
so that my (not too clever) postprocessor missed some pieces of information.
For example, some dependency arcs are now annotated with "[style = dotted]".

After fixing this in my postprocessor, the reachability analyses are identical
when using Gambit 4.9.3 and 4.9.4.

Ciao
Sven

_______________________________________________
Gambit-list mailing list
Gambit-list@iro.umontreal.ca
https://mailman.iro.umontreal.ca/cgi-bin/mailman/listinfo/gambit-list