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.
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.