provide better error message for unknown globals (copied from CPython)
authorStefan Behnel <stefan_ml@behnel.de>
Mon, 4 Mar 2013 06:07:32 +0000 (07:07 +0100)
committerStefan Behnel <stefan_ml@behnel.de>
Mon, 4 Mar 2013 06:07:32 +0000 (07:07 +0100)
--HG--
rename : tests/broken/ref2global.pyx => tests/run/ref2global.pyx

Cython/Utility/ObjectHandling.c
tests/broken/ref2global.pyx [deleted file]
tests/run/ref2global.pyx [new file with mode: 0644]

index 8a1cacf..a5e791f 100644 (file)
@@ -595,7 +595,12 @@ static PyObject *__Pyx_GetName(PyObject *dict, PyObject *name) {
             result = __Pyx_PyObject_GetAttrStr($builtins_cname, name);
         }
         if (!result) {
-            PyErr_SetObject(PyExc_NameError, name);
+            PyErr_Format(PyExc_NameError,
+#if PY_MAJOR_VERSION >= 3
+                "global name '%U' is not defined", name);
+#else
+                "global name '%s' is not defined", PyString_AS_STRING(name));
+#endif
         }
     }
     return result;
diff --git a/tests/broken/ref2global.pyx b/tests/broken/ref2global.pyx
deleted file mode 100644 (file)
index 5dfed27..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-def f(a):
-    a = f
-    a = g
-
diff --git a/tests/run/ref2global.pyx b/tests/run/ref2global.pyx
new file mode 100644 (file)
index 0000000..d69c4a1
--- /dev/null
@@ -0,0 +1,17 @@
+# mode: run
+# tag: global, nameerror
+
+try:
+    from heapq import *   # just to confuse the compiler
+except ImportError:
+    pass
+
+
+def f(a):
+    """
+    >>> f(1)
+    Traceback (most recent call last):
+    NameError: global name 'definitely_unknown_name' is not defined
+    """
+    a = f
+    a = definitely_unknown_name