40 lines
690 B
Markdown
40 lines
690 B
Markdown
|
There still an issue with inferring for a given function call /
|
||
|
constant reference where that thing is defined.
|
||
|
|
||
|
We're currently generating the forest of references from the call
|
||
|
graph by calculating a spanning forest. There's a problem with that.
|
||
|
Consider the following map of call-sites:
|
||
|
|
||
|
{
|
||
|
a: [b]
|
||
|
b: []
|
||
|
}
|
||
|
|
||
|
The following is a spanning tree:
|
||
|
|
||
|
{
|
||
|
a: []
|
||
|
b: []
|
||
|
}
|
||
|
|
||
|
Here it looks like `a` doesn't call `b`.
|
||
|
|
||
|
|
||
|
We should also store all the call-sites. These will end up as leaves
|
||
|
in the call tree.
|
||
|
|
||
|
|
||
|
{
|
||
|
"K": {},
|
||
|
"A": {},
|
||
|
"f": {
|
||
|
"f": "__cycle__"
|
||
|
},
|
||
|
"A.f": {
|
||
|
"K.g": {}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
Write graphviz output.
|