[pypy-dev] Re: [pypy-svn] r8078 - pypy/trunk/src/pypy/interpreter
holger krekel
hpk at trillke.net
Fri Jan 7 19:40:09 CET 2005
On Fri, Jan 07, 2005 at 18:09 +0000, Armin Rigo wrote:
> On Fri, Jan 07, 2005 at 12:39:41PM +0100, holger krekel wrote:
> > > Log:
> > > changed LOAD_GLOBAL to support the flow space better.
> > > In case of a NameError, where the space does not define NameError,
> > > we raise a real NameError with a message.
> >
> > (...). It seems the flow
> > object space could easily provide its own w_NameError and
> > then you can check the usual way, catching an OperationError and
> > then for e.match(space, space.w_NameError) without changing
> > the interpreter.
>
> I guess the goal is to have the problem crash the program with a meaningful
> error message. If the flow objspace provided a w_NameError, then it would
> become a normal exception within the flow graph, and you would end up
> compiling a program that contains an explicit "raise NameError". In this case
> it's better just to crash the flow objspace clearly.
Probably, it depends on the exact context.
But forgetting about this detail, I don't yet see the point of
throwing a NameError instead of an AttributeError here with a
slightly modified message. I mean if you see the lines like
...
w_exc_type = f.space.w_NameError
AtttributeError: 'FlowObjSpace' object has no attribute 'w_NameError'
you'll now see (approximately):
...
raise NameError, (message +
", but %s has no NameError!" % f.space)
NameError: global name w_NameError is not defined, but FlowObjSpace
has no NameError!
why is the latter more helpful?
> Maybe a nicer hack than Christian's can be found for this purpose, e.g.
> setting w_NameError to a special value that would trigger an (interp-level)
> AssertionError in the constructor of OperationError -- the advantage is that
> the AssertionError can provide the meaningful bit of information: the intended
> message of the faulty w_NameError.
Makes sense.
cheers,
holger
More information about the Pypy-dev
mailing list