The reachability algorithm
All we want is the summarization edges, which connects from push and pop nodes. e.g. s1----> +f ----> s2 ----> -f ----> s3. we want to connect s1 and s3. For the first point, we can know it is matching precisely to the returning point.
In addition, we also want to know all the possible pushed frames, to do abstract garbage collection, e.g. that s1---> +f1 -----> s2 ---> +f2 ----> s3. we know that +f1 and +f2 are the pushded frames.
For achieve the two purposes, we have to record a lot of information. we may want to have a data structure that possibleFrames, to record for every node, its is possible frames.
However, essentially, we have to take care of the propagation information, which is encoded in the epslang closure graph.
In the epslang closure graph, it is used to propagate the top frame information, the epslang closure information, the epslang successor information, the predessor node for pushed frames, as well as updating the possible frames.
In pushing frames, we only need to record the top frames and predecessor node for pushed frames for the target node. Of course, mark the possible frames structure.
In popping frames, we want to get the all the epslang predecessors of the source node and equalize each of them with the target node, which can be reduced to the logic of handling epslang edge.
I think this is the first time I have clearer idea of how this algorithm works!
However, this algorithm is not memory efficiency. At least, for every node, we are recoding the predecessors, top frames... though state node are passed by reference, the memory will not be allocated in those entries.
I would like to know how other transitive closure graph algorithm works. and I expect to come up something a little new.











