fix except+ for cppclass methods (with Denys Duchier)
authorLisandro Dalcin <dalcinl@gmail.com>
Sat, 8 May 2010 22:24:53 +0000 (19:24 -0300)
committerLisandro Dalcin <dalcinl@gmail.com>
Sat, 8 May 2010 22:24:53 +0000 (19:24 -0300)
Cython/Compiler/Symtab.py
tests/run/cpp_exceptions.pyx
tests/run/cpp_exceptions_helper.h

index 5b74ebc1fb556895357e860e978cbf3b288cb498..426151b7697f9b38c080a696af72e2da9a1e5d8c 100644 (file)
@@ -1615,7 +1615,9 @@ class CppClassScope(Scope):
                                             e.pos,
                                             e.cname)
         return scope
-        
+
+    def add_include_file(self, filename):
+        self.outer_scope.add_include_file(filename)        
         
 class PropertyScope(Scope):
     #  Scope holding the __get__, __set__ and __del__ methods for
index e7707a7acf648d2a401919d6286e4b49ad85f61d..7d1f16b800a6a3ee0a939906d0a1037ee497eebe 100644 (file)
@@ -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_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):
     """
     >>> test_int_raw(False)
@@ -69,3 +75,45 @@ def test_index_custom(bint fire):
     TypeError: custom
     """
     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
index 7640f5316151382b7f7b4896466ccdfcae0a0778..e0ff3e94fb2bc894b2a908cfc1b2905e5b7f63f0 100644 (file)
@@ -13,3 +13,13 @@ int raise_index(int fire) {
     }
     return 0;
 }
+
+class Foo {
+ public:
+  int bar(int fire) {
+    if (fire) {
+      throw 1;
+    }
+    return 0;
+  }
+};