reverted rev 809 as it currently leads to crashes
authorStefan Behnel <scoder@users.berlios.de>
Sat, 19 Jul 2008 09:54:46 +0000 (11:54 +0200)
committerStefan Behnel <scoder@users.berlios.de>
Sat, 19 Jul 2008 09:54:46 +0000 (11:54 +0200)
Cython/Compiler/ExprNodes.py
Cython/Compiler/ModuleNode.py
Cython/Compiler/Naming.py
Cython/Compiler/Nodes.py

index 0644b9fc17d92e4d8ebe35f12e2fdd0b72811e20..3ce905c801644d48df68600b66f127829b2ff396 100644 (file)
@@ -1668,17 +1668,6 @@ class SimpleCallNode(CallNode):
         if func_type.is_ptr:
             func_type = func_type.base_type
         return func_type
-        
-    def exception_checks(self):
-        func_type = self.function_type()
-        exc_val = func_type.exception_value
-        exc_check = func_type.exception_check
-        if exc_val is None and self.function.entry.visibility != 'extern':
-            return_type = func_type.return_type
-            if not return_type.is_struct_or_union and not return_type.is_void:
-                exc_val = return_type.cast_code(Naming.default_error)
-            exc_check = 1
-        return exc_val, exc_check
     
     def analyse_c_function_call(self, env):
         func_type = self.function_type()
@@ -1721,13 +1710,12 @@ class SimpleCallNode(CallNode):
                     "Python object cannot be passed as a varargs parameter")
         # Calc result type and code fragment
         self.type = func_type.return_type
-        if self.type.is_pyobject:
-            self.is_temp = 1
-            self.result_ctype = py_object_type
-        else:
-            exc_val, exc_check = self.exception_checks()
-            if self.type.is_pyobject or exc_val is not None or exc_check:
+        if self.type.is_pyobject \
+            or func_type.exception_value is not None \
+            or func_type.exception_check:
                 self.is_temp = 1
+                if self.type.is_pyobject:
+                    self.result_ctype = py_object_type
         # C++ exception handler
         if func_type.exception_check == '+':
             if func_type.exception_value is None:
@@ -1792,7 +1780,8 @@ class SimpleCallNode(CallNode):
             if self.type.is_pyobject:
                 exc_checks.append("!%s" % self.result_code)
             else:
-                exc_val, exc_check = self.exception_checks()
+                exc_val = func_type.exception_value
+                exc_check = func_type.exception_check
                 if exc_val is not None:
                     exc_checks.append("%s == %s" % (self.result_code, exc_val))
                 if exc_check:
index b5d9a10988c2ac3070dd8398c69008384d099e84..68394529e46eb2d20eeff18d98758827e4725808 100644 (file)
@@ -487,9 +487,6 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
         code.putln("#ifndef __cdecl")
         code.putln("  #define __cdecl")
         code.putln("#endif")
-        code.putln('');
-        code.putln('#define %s 0xB0000000B000B0BBLL' % Naming.default_error);
-        code.putln('');
         self.generate_extern_c_macro_definition(code)
         code.putln("#include <math.h>")
         code.putln("#define %s" % Naming.api_guard_prefix + self.api_name(env))
index ec70c6e280ef97c07c3da8b952a533722d53607b..4296bf71f024fc53de5a46928aea9cb3d7bcca22 100644 (file)
@@ -74,7 +74,6 @@ import_star      = pyrex_prefix + "import_star"
 import_star_set  = pyrex_prefix + "import_star_set"
 cur_scope_cname  = pyrex_prefix + "cur_scope"
 enc_scope_cname  = pyrex_prefix + "enc_scope"
-default_error    = pyrex_prefix + "ERROR"
 
 line_c_macro = "__LINE__"
 
index d237e5c61ca692a889402656014e1035bae12605..1964b9520c5bae0e951f8f3f42040f6c269f91f0 100644 (file)
@@ -1209,18 +1209,11 @@ class CFuncDefNode(FuncDefNode):
         if self.return_type.is_pyobject:
             return "0"
         else:
-            if self.entry.type.exception_value is not None:
-                return self.entry.type.exception_value
-            elif self.return_type.is_struct_or_union or self.return_type.is_void:
-                return None
-            else:
-                return self.return_type.cast_code(Naming.default_error)
+            #return None
+            return self.entry.type.exception_value
             
     def caller_will_check_exceptions(self):
-        if self.entry.type.exception_value is None:
-            return 1
-        else:
-            return self.entry.type.exception_check
+        return self.entry.type.exception_check
                     
     def generate_optarg_wrapper_function(self, env, code):
         if self.type.optional_arg_count and \