Looking a bit further, it turns out the problem is that the save stack gets out of synch with the parser stack. Coincident with the first syntax error, part of the save stack gets popped, to a point further back than it was at the start of the first sub{}, while the parser state with the pending action to handle the end of that construct remains in place. The second sub{} reuses the same save stack positions that the first used. As a result, the save stack popping in newATTRSUB_x() doesn't manage to restore to a sane state, and in particular doesn't manage to restore PL_compcv. -zeframThread Previous | Thread Next