Stack analysis didn't really work in the presence of non-local exits. Two
changes were needed: -- make NLX entry blocks look like successors of the corresponding entry block in life analysis. This makes sure that any values live only at the NLX entry point are seen to be live at the place where the catcher is created. -- Push a :NLX-ENTRY marker on the stack when we are doing the simulation and we come to a place where we are going to recurse in the byte interpreter to create a catcher. The marker protects values underneath it from being considered dead. When we come to the corresponding breakup, we remove the marker.
Please register or sign in to comment