On Tue, Apr 7, 2009 at 4:12 PM, Lex Spoon <[email protected]> wrote: > > 5178: Also tightened up the recursive method slightly, and managing the > > "computed" set better. This works because once a class transitions from > > hasClinit -> !hasClinit, there's no possible way it can ever go back. > > Small problem: I believe line 644-646 in the patched version is > intended to test "target", not "type". If that sounds right, then the > rest LGTM. Otherwise, let's discuss how this is supposed to work. >
Nice catch! I botched a manual inlining of lines 636-641 in the original. > By the way, this algorithm could be sped up if, it mattered for > performance. Instead of repeatedly recursing for each type, start by > marking classes where hasLiveCode() as having clinits. Then, > propagate clinit-ness backwards along the getClinitTargets() graph. > Any class not reached does not needs its clinit. The advantage > probably doesn't matter in this case in practice, but I mention it > because this funny algorithm pattern keeps coming up. > That is a better approach, I'll have to remember that next time I run into this pattern. Thanks, Scott --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---
