Print refnanny errors rather than raise them.
authorRobert Bradshaw <robertwb@math.washington.edu>
Fri, 20 Feb 2009 11:33:18 +0000 (03:33 -0800)
committerRobert Bradshaw <robertwb@math.washington.edu>
Fri, 20 Feb 2009 11:33:18 +0000 (03:33 -0800)
Cython/Compiler/ModuleNode.py
Cython/Runtime/refnanny.pyx

index d60de603914fdb104a9c6f50c0f09f780ef79d63..5caeb4c2df7378774c43e8103be5dd8d739ab716 100644 (file)
@@ -1594,7 +1594,7 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
         code.putln("  if (!__Pyx_Refnanny)")
         code.putln("      Py_FatalError(\"failed to import refnanny module\");")
         code.putln("}")
-        code.putln("__pyx_refchk = __Pyx_Refnanny->NewContext(\"%s\", __LINE__);"% header3)
+        code.putln("__pyx_refchk = __Pyx_Refnanny->NewContext(\"%s\", __LINE__, __FILE__);"% header3)
         code.putln("#endif")
 
         code.putln("%s = PyTuple_New(0); %s" % (Naming.empty_tuple, code.error_goto_if_null(Naming.empty_tuple, self.pos)));
@@ -2338,7 +2338,7 @@ typedef struct {
   void (*DECREF)(void*, PyObject*, int);
   void (*GOTREF)(void*, PyObject*, int);
   void (*GIVEREF)(void*, PyObject*, int);
-  void* (*NewContext)(const char*, int);
+  void* (*NewContext)(const char*, int, char*);
   int (*FinishContext)(void**);
 } __Pyx_RefnannyAPIStruct;
 static __Pyx_RefnannyAPIStruct *__Pyx_Refnanny = NULL;
@@ -2350,7 +2350,7 @@ static __Pyx_RefnannyAPIStruct *__Pyx_Refnanny = NULL;
 #define __Pyx_GIVEREF(r) __Pyx_Refnanny->GIVEREF(__pyx_refchk, (PyObject *)(r), __LINE__)
 #define __Pyx_XDECREF(r) if((r) == NULL) ; else __Pyx_DECREF(r)
 #define __Pyx_SetupRefcountContext(name) \
-  void* __pyx_refchk = __Pyx_Refnanny->NewContext((name), __LINE__)
+  void* __pyx_refchk = __Pyx_Refnanny->NewContext((name), __LINE__, __FILE__)
 #define __Pyx_FinishRefcountContext() \
   __Pyx_Refnanny->FinishContext(&__pyx_refchk)
 #else
index f02d96b07fa1d049ca9215e2de600798131c19c8..9f5ac62e28d668964b9c50c6aeb2447c4a1f64fc 100644 (file)
@@ -15,7 +15,10 @@ class Error(Exception):
     pass
 
 class Context(object):
-    def __init__(self):
+    def __init__(self, name, line=0, filename=None):
+        self.name = name
+        self.start = line
+        self.filename = filename
         self.refs = {} # id -> (count, [lineno])
         self.errors = []
 
@@ -57,11 +60,11 @@ class Context(object):
 
 
 
-cdef PyObject* NewContext(char* funcname, int lineno) except NULL:
+cdef PyObject* NewContext(char* funcname, int lineno, char* filename) except NULL:
     cdef PyObject* type = NULL, *value = NULL, *tb = NULL
     PyErr_Fetch(&type, &value, &tb)
     try:
-        ctx = Context()
+        ctx = Context(funcname, lineno, filename)
         PyErr_Restore(<object>type, <object>value, <object>tb)
         Py_INCREF(ctx)
         return <PyObject*>ctx
@@ -120,6 +123,7 @@ cdef int FinishContext(PyObject** ctx) except -1:
     PyErr_Fetch(&type, &value, &tb)
     try:
         errors = (<object>ctx[0]).end()
+        pos = (<object>ctx[0]).filename, (<object>ctx[0]).name
         PyErr_Restore(<object>type, <object>value, <object>tb)
     except:
         Py_XDECREF(<object>type)
@@ -130,7 +134,8 @@ cdef int FinishContext(PyObject** ctx) except -1:
         Py_XDECREF(<object>ctx[0])
         ctx[0] = NULL
     if errors:
-        raise Error(errors)
+        print "%s: %s()" % pos
+        print errors # raise Error(errors)
     return 0
 
 
@@ -144,7 +149,7 @@ ctypedef struct RefnannyAPIStruct:
   void (*DECREF)(PyObject*, PyObject*, int)
   void (*GOTREF)(PyObject*, PyObject*, int)
   void (*GIVEREF)(PyObject*, PyObject*, int)
-  PyObject* (*NewContext)(char*, int) except NULL
+  PyObject* (*NewContext)(char*, int, char*) except NULL
   int (*FinishContext)(PyObject**) except -1
 
 cdef RefnannyAPIStruct api