I’m writing a scripting language using RPython. I have a base class for all
my objects. Now, I have an exception object. The exception object needs to
derive from my base class in order for me to use polymorphism inside the
interpreter. However, it also needs to derive from the Exception class to
be throwable. My code looked kind of like this:

class BaseObject(object):
    pass
class MyException(BaseObject, Exception):
    ...

However, upon trying to compile the code, I got this error:

[translation:ERROR] AssertionError: multiple inheritance only
supported with _mixin_: <class 'bolt.objects.BoltException'>
[translation:ERROR] Processing block:
[translation:ERROR]  block@122 is a <class
'rpython.flowspace.flowcontext.SpamBlock'>
[translation:ERROR]  in (bolt.main:10)parse_and_run
[translation:ERROR]  containing the following operations:
[translation:ERROR]        v0 = simple_call((type interpreter))
[translation:ERROR]  --end--

bolt.objects.BoltException is my exception class. If I remove the Exception
base, I get this:

[translation:ERROR] AssertionError
[translation:ERROR] Processing block:
[translation:ERROR]  block@9 is a <class
'rpython.flowspace.flowcontext.SpamBlock'>
[translation:ERROR]  in (bolt.main:4)run_file
[translation:ERROR]  containing the following operations:
[translation:ERROR]        v0 = simple_call((function create_file), p_0, ('r'))
[translation:ERROR]        v1 = getattr(v0, ('read'))
[translation:ERROR]        v2 = simple_call(v1)
[translation:ERROR]        v3 = simple_call((function parse_and_run), v2)
[translation:ERROR]        v4 = getattr(v0, ('close'))
[translation:ERROR]        v5 = simple_call(v4)
[translation:ERROR]  --end--

The only thing about multiple inheritance and RPython I found was
this<https://mail.python.org/pipermail//pypy-commit/2011-November/055925.html>
.

My current idea is to have my base object derive from Exception instead of
nothing. I was wondering if there’s a better solution, however.

-- 
Ryan
If anybody ever asks me why I prefer C++ to C, my answer will be simple:
"It's becauseslejfp23(@#Q*(E*EIdc-SEGFAULT. Wait, I don't think that was
nul-terminated."
_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
https://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to