Nick Coghlan wrote:
my suspicion is that generator objects themselves need to be maintaining a full "generator stack" independent of the frame stack in the main eval loop in order to get the best of both worlds (i.e. optimised suspend/resume with confusing debuggers).
The f_yieldfrom chain effectively *is* a generator stack, it's just linked in the opposite direction to the way stacks normally are. While you probably could move f_yieldfrom out of the frame object and into the generator-iterator object, I don't see how it would make any difference to the traceback issue. I'm not even sure why my original implementation was getting tracebacks wrong. What *should* happen is that if an exception comes out of a generator being yielded from, the tail is chopped off the f_yieldfrom chain and the exception is thrown into the next frame up, thereby adding its frame to the traceback. It may simply be that there was a minor bug in my implementation that could be fixed without ditching the whole f_yieldfrom idea. I may look into this if I find time. -- Greg