Commit efabce0a authored by Lisandro Dalcin's avatar Lisandro Dalcin

fix except+ for cppclass methods (with Denys Duchier)

parent b23fde17
...@@ -1615,7 +1615,9 @@ class CppClassScope(Scope): ...@@ -1615,7 +1615,9 @@ class CppClassScope(Scope):
e.pos, e.pos,
e.cname) e.cname)
return scope return scope
def add_include_file(self, filename):
self.outer_scope.add_include_file(filename)
class PropertyScope(Scope): class PropertyScope(Scope):
# Scope holding the __get__, __set__ and __del__ methods for # Scope holding the __get__, __set__ and __del__ methods for
......
...@@ -10,6 +10,12 @@ cdef extern from "cpp_exceptions_helper.h": ...@@ -10,6 +10,12 @@ cdef extern from "cpp_exceptions_helper.h":
cdef int raise_index_value "raise_index"(bint fire) except +ValueError cdef int raise_index_value "raise_index"(bint fire) except +ValueError
cdef int raise_index_custom "raise_index"(bint fire) except +raise_py_error cdef int raise_index_custom "raise_index"(bint fire) except +raise_py_error
cdef cppclass Foo:
int bar_raw "bar"(bint fire) except +
int bar_value "bar"(bint fire) except +ValueError
int bar_custom "bar"(bint fire) except +raise_py_error
def test_int_raw(bint fire): def test_int_raw(bint fire):
""" """
>>> test_int_raw(False) >>> test_int_raw(False)
...@@ -69,3 +75,45 @@ def test_index_custom(bint fire): ...@@ -69,3 +75,45 @@ def test_index_custom(bint fire):
TypeError: custom TypeError: custom
""" """
raise_index_custom(fire) raise_index_custom(fire)
def test_cppclass_method_raw(bint fire):
"""
>>> test_cppclass_method_raw(False)
>>> test_cppclass_method_raw(True)
Traceback (most recent call last):
...
RuntimeError: Unknown exception
"""
foo = new Foo()
try:
foo.bar_raw(fire)
finally:
del foo
def test_cppclass_method_value(bint fire):
"""
>>> test_cppclass_method_value(False)
>>> test_cppclass_method_value(True)
Traceback (most recent call last):
...
ValueError
"""
foo = new Foo()
try:
foo.bar_value(fire)
finally:
del foo
def test_cppclass_method_custom(bint fire):
"""
>>> test_cppclass_method_custom(False)
>>> test_cppclass_method_custom(True)
Traceback (most recent call last):
...
TypeError: custom
"""
foo = new Foo()
try:
foo.bar_custom(fire)
finally:
del foo
...@@ -13,3 +13,13 @@ int raise_index(int fire) { ...@@ -13,3 +13,13 @@ int raise_index(int fire) {
} }
return 0; return 0;
} }
class Foo {
public:
int bar(int fire) {
if (fire) {
throw 1;
}
return 0;
}
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment