From: Philip J. <re...@bu...> - 2008-12-10 04:55:14
|
New submission from Philip Jenvey <pj...@us...>: Our binop methods return null to signal the binop "doesn't support the operation -- try alternatives". When we expose them as binary ops, those nulls are translated into Py.NotImplemented The binop fast path looks for nulls, the slow path (_binop_rule) uses the exposed methods and looks for Py.NotImplemented PyInstance still does not use exposed annotations, provides binops for all ops, and they all return null. This breaks _binop_rule: Jython 2.5b0+ (trunk:5722:5725M, Dec 9 2008, 16:06:58) [Java HotSpot(TM) 64-Bit Server VM (Apple Inc.)] on java1.6.0_07 Type "help", "copyright", "credits" or "license" for more information. >>> class Foo: pass ... >>> class Bar(object): ... def __radd__(self, other): ... return 3 ... >>> print Foo() + Bar() None (We at least got a None, instead of null, because it went through the exposed version -- which is the Java integration version) i.e. >>> # should return NotImplemented >>> print types.InstanceType.__add__(Foo(), Bar()) None We either need to expose PyInstance (a bunch more generated .classes) or think of another workaround ---------- assignee: pjenvey messages: 3899 nosy: pjenvey severity: normal status: open title: Old style classes don't follow binop rules _______________________________________ Jython tracker <re...@bu...> <http://bugs.jython.org/issue1197> _______________________________________ |