From 6da89841fa0386b1fd6015fd1d93b5752a964e6c Mon Sep 17 00:00:00 2001
From: Stefan Behnel <scoder@users.berlios.de>
Date: Sat, 19 Jul 2008 11:54:46 +0200
Subject: [PATCH] reverted rev 809 as it currently leads to crashes

---
 Cython/Compiler/ExprNodes.py  | 25 +++++++------------------
 Cython/Compiler/ModuleNode.py |  3 ---
 Cython/Compiler/Naming.py     |  1 -
 Cython/Compiler/Nodes.py      | 13 +++----------
 4 files changed, 10 insertions(+), 32 deletions(-)

diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py
index 0644b9fc1..3ce905c80 100644
--- a/Cython/Compiler/ExprNodes.py
+++ b/Cython/Compiler/ExprNodes.py
@@ -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:
diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py
index b5d9a1098..68394529e 100644
--- a/Cython/Compiler/ModuleNode.py
+++ b/Cython/Compiler/ModuleNode.py
@@ -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))
diff --git a/Cython/Compiler/Naming.py b/Cython/Compiler/Naming.py
index ec70c6e28..4296bf71f 100644
--- a/Cython/Compiler/Naming.py
+++ b/Cython/Compiler/Naming.py
@@ -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__"
 
diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py
index d237e5c61..1964b9520 100644
--- a/Cython/Compiler/Nodes.py
+++ b/Cython/Compiler/Nodes.py
@@ -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 \
-- 
2.30.9