Thanks - got it. Many thanks for the clarification. I reread and missed the part where you mentioned that those two flags are conflicts in CPython as well. I am sorry for my confusion there. (I'll ask CPython folks what's up if there is need).
On Mon, Dec 16, 2019 at 6:05 AM Armin Rigo <armin.r...@gmail.com> wrote: > Hi Rocky, > > On Mon, 16 Dec 2019 at 11:57, Rocky Bernstein <r...@dustyfeet.com> wrote: > > > > I did a little test, and for this program: > > > > # from 3.7 test_asyncgen.py > > def test_async_gen_iteration_01(self): > > async def gen(): > > await awaitable() > > a = yield 123 > > > > the 3.6 ASYNC_GENERATOR flag is added in the code object created for > "gen()" as 3.6 does. So I infer that flag 0x200 in a code object doesn't > imply the PYPY_DONT_IMPLY_DEDENT property. Does that mean that in 3.6 > PYPY_DON'T_IMPLY_DEDENT flag will never appear in a code object? Or just > for 3.6 and above or for all Pypy versions? > > > > I don't want to try guessing what the principle being used is looking at > all versions of Pypy across all the pypy-specific flags listed in > pypy/interpreter/astcompiler/consts.py if there is a principle being > followed and someone can just tell me what it is or point to a document > that describes what's up here. > > I could probably dig the answer, but the general rule is that PyPy > should do the same thing as CPython. These two PyCF_XXX flags are > passed as arguments to compile(), and should never end up inside the > co_flags object; the CO_XXX flags are what ends up there. > > > On Mon, Dec 16, 2019 at 5:33 AM Armin Rigo <armin.r...@gmail.com> wrote: > >> Can you give us a concrete example of code where CPython 3.6 differs > >> from PyPy 3.6? > > > > > > CPython 3.6 bytecode differs from PyPy 3.6 bytecode and so far as I know > it CPython bytecode version x.y differs from Pypy version x.y Otherwise I > wouldn't have to go through the extra effort to try to add code to make > Pypy disassembly and decompilation possible in a cross-version way. I have > for example that there are opcodes FORMAT_VALUE, BUILD_STRING and > JUMP_IF_NOT_DEBUG for example in Pypy3.6 that are not in CPython (among I > think other opcodes). > > > > But again I'd prefer not to guess this kind of thing if it is documented > somewhere or someone who knows this already can just let me know. > > I meant, an example where the flags that are produced are different. > It's entirely possible that there is a problem somewhere, e.g. we > might stick the wrong kind of flags inside co_flags. If you're asking > this question here in the first place, then maybe you already have > such an example? If not, then you can assume that there is no > difference as far as the flags are concerned; the only difference is > that PyPy has got a very small number of extra opcodes. (Note that > this includes JUMP_IF_NOT_DEBUG, but not FORMAT_VALUE and > BUILD_STRING, which are from CPython.) > > > A bientôt, > > Armin. >
_______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev