[Python-Dev] Changing the Division Operator -- PEP 238, rev 1.12
Michael Hudson
mwh@python.net
30 Jul 2001 15:46:10 -0400
Samuele Pedroni <pedroni@inf.ethz.ch> writes:
> [GvR]
> >
> > > [Michael Hudson]
> > > > One - probably called Compile - will sport a __call__ method which
> > > > will act much like the builtin "compile" of 2.1 with the
> > > > difference that after it has compiled a __future__ statement, it
> > > > "remembers" it and compiles all subsequent code with the
> > > > __future__ options in effect.
> > > >
> > > > It will do this by examining the co_flags field of any code object
> > > > it returns, which in turn means writing and maintaining a Python
> > > > version of the function PyEval_MergeCompilerFlags found in
> > > > Python/ceval.c.
> >
> > > FYI, in Jython (internally) we have a series of compile_flags functions
> > > that take a "opaque" object CompilerFlags that is passed to the function
> > > and compilation actually change the object in order to reflect future
> > > statements encoutered during compilation...
> > > Not elegant but avoids code duplication.
> > >
> > > Of course we can change that.
> >
> > Does codeop currently work in Jython? The solution should continue to
> > work in Jython then.
> We have our interface compatible version of codeop that works.
Would implementing the new interfaces I sketched out for codeop.py be
possible in Jython? That's the bit I care about, not so much the
interface to __builtin__.compile.
> > Does Jython support the same flag bit values as
> > CPython? If not, Paul Prescod's suggestion to use keyword arguments
> > becomes very relevant.
> we support a subset of the co_flags, CO_NESTED e.g. is there with the same
> value.
>
> But the embedding API is very different, my implementation of nested
> scopes does not define any Py_CF... flags, we have an internal CompilerFlags
> object but is more similar to PyFutureFeatures ...
Is this object exposed to Python code at all? One approach would be
PyObject-izing PyFutureFlags and making *that* the fourth argument to
compile...
class Compiler:
def __init__(self):
self.ff = ff.new() # or whatever
def __call__(self, source, filename, start_symbol):
code = compile(source, filename, start_symbol, self.ff)
self.ff.merge(code.co_flags)
return code
Cheers,
M.
--
Like most people, I don't always agree with the BDFL (especially
when he wants to change things I've just written about in very
large books), ...
-- Mark Lutz, http://python.oreilly.com/news/python_0501.html