[PEAK] trying to run peak-rules on python3

PJ Eby pje at telecommunity.com
Tue Mar 19 13:25:24 EDT 2013


On Tue, Mar 19, 2013 at 11:04 AM, Hervé Coatanhay
<herve.coatanhay at gmail.com> wrote:
> FYI
>
> I did changes in README.txt to pass test. Mostly obvious ones, like print
> and types changes. But i had to replace DUP_TOPX with DUP_TOP_TWO (I'm not
> entirely sure if that's OK).

Me either.  I haven't messed with py3 bytecode at all yet.  But if I
understand correctly, DUP_TOPX(1) would map to DUP_TOP and DUP_TOPX(2)
would map to DUP_TOP_TWO, but any larger number and it's more
complicated than that.


> There are still some failing tests. One seems like some discrepancy between
> python2 and python3:
>
> In python2:
>>>> exec(compile('42', '', 'eval'))
>>>> eval(compile('42', '', 'eval'))
> 42
>
> In python3:
>>>> exec(compile('42', '', 'eval'))
> 42
>>>> eval(compile('42', '', 'eval'))
> 42

That one probably won't affect anything in PEAK-Rules.


> Other failing tests a related to the use of from_function classmethod. I'm
> suspecting some issue with DecoratorTools because Decoratools tests are not
> passing. I'll try to make them pass.
>
> Finally, there are 2 tests failing that i don't know where to start with:
>
>     >>> from peak.util.assembler import TryExcept
>     >>> c = Code()
>     >>> c.return_(
>     ...     TryExcept(
>     ...         Return(1),                                      # body
>     ...         [(Const(KeyError),2), (Const(TypeError),3)],    # handlers
>     ...         Return(4)                                       # else
> clause
>     ...     )
>     ... )

Not sure what's up with this one: the log you sent shows this actually
having the same code (or at least as far as I can see).  It shouldn't
be a whitespace difference, as I think the flags are set to ignore
those.


>     >>> c = Code()
>     >>> c(1, True, 1.0, 1)     # equal, but different types
>     >>> dis(c.code())

This is a 2to3 artifact: the original test had the fourth value as
"1L", which resulted in a fourth constant.  Python 3 doesn't have a
distinct type for longs, so there's no way to create that value.  So
this failure is of no consequence.

Anyway, what about PEAK-Rules' own tests?  It's got quite a lot of
them, including for the criteria and predicate and indexing systems.


More information about the PEAK mailing list