Reason: stack trace printer assumes such errors contain keys in messages thus 
translated “no such buffer” (or like) gets displayed as `'\xNN\xNN…'`. This 
patch makes stack trace printer assumption true.

# HG changeset patch
# User ZyX <[email protected]>
# Date 1367208763 -14400
# Branch python-extended-2
# Node ID 3075a07310c74b64b5d55cd5f205ca6e1d690ed5
# Parent  204a9f44442a4e8361a4a06b364acd971314ce23
Make KeyErrors use PyErr_SetObject

diff -r 204a9f44442a -r 3075a07310c7 src/if_py_both.h
--- a/src/if_py_both.h  Wed May 01 17:55:13 2013 +0400
+++ b/src/if_py_both.h  Mon Apr 29 08:12:43 2013 +0400
@@ -732,7 +732,7 @@
 
     if (di == NULL)
     {
-       PyErr_SetString(PyExc_KeyError, _("no such key in dictionary"));
+       PyErr_SetObject(PyExc_KeyError, keyObject);
        return NULL;
     }
 
@@ -765,7 +765,7 @@
        if (di == NULL)
        {
            DICTKEY_UNREF
-           PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
+           PyErr_SetObject(PyExc_KeyError, keyObject);
            return -1;
        }
        hi = hash_find(&d->dv_hashtab, di->di_key);
@@ -1351,7 +1351,7 @@
 
     if (flags == 0)
     {
-       PyErr_SetString(PyExc_KeyError, "Option does not exist in given scope");
+       PyErr_SetObject(PyExc_KeyError, keyObject);
        return NULL;
     }
 
@@ -1445,7 +1445,7 @@
 
     if (flags == 0)
     {
-       PyErr_SetString(PyExc_KeyError, "Option does not exist in given scope");
+       PyErr_SetObject(PyExc_KeyError, keyObject);
        return -1;
     }
 
@@ -3143,7 +3143,7 @@
        return BufferNew(b);
     else
     {
-       PyErr_SetString(PyExc_KeyError, _("no such buffer"));
+       PyErr_SetObject(PyExc_KeyError, keyObject);
        return NULL;
     }
 }
diff -r 204a9f44442a -r 3075a07310c7 src/if_python.c
--- a/src/if_python.c   Wed May 01 17:55:13 2013 +0400
+++ b/src/if_python.c   Mon Apr 29 08:12:43 2013 +0400
@@ -155,6 +155,7 @@
 # define PyErr_Occurred dll_PyErr_Occurred
 # define PyErr_SetNone dll_PyErr_SetNone
 # define PyErr_SetString dll_PyErr_SetString
+# define PyErr_SetObject dll_PyErr_SetObject
 # define PyEval_InitThreads dll_PyEval_InitThreads
 # define PyEval_RestoreThread dll_PyEval_RestoreThread
 # define PyEval_SaveThread dll_PyEval_SaveThread
@@ -260,6 +261,7 @@
 static PyObject*(*dll_PyErr_Occurred)(void);
 static void(*dll_PyErr_SetNone)(PyObject *);
 static void(*dll_PyErr_SetString)(PyObject *, const char *);
+static void(*dll_PyErr_SetObject)(PyObject *, PyObject *);
 static void(*dll_PyEval_InitThreads)(void);
 static void(*dll_PyEval_RestoreThread)(PyThreadState *);
 static PyThreadState*(*dll_PyEval_SaveThread)(void);
@@ -393,6 +395,7 @@
     {"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred},
     {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone},
     {"PyErr_SetString", (PYTHON_PROC*)&dll_PyErr_SetString},
+    {"PyErr_SetObject", (PYTHON_PROC*)&dll_PyErr_SetObject},
     {"PyEval_InitThreads", (PYTHON_PROC*)&dll_PyEval_InitThreads},
     {"PyEval_RestoreThread", (PYTHON_PROC*)&dll_PyEval_RestoreThread},
     {"PyEval_SaveThread", (PYTHON_PROC*)&dll_PyEval_SaveThread},
diff -r 204a9f44442a -r 3075a07310c7 src/if_python3.c
--- a/src/if_python3.c  Wed May 01 17:55:13 2013 +0400
+++ b/src/if_python3.c  Mon Apr 29 08:12:43 2013 +0400
@@ -128,6 +128,7 @@
 # define PyErr_Occurred py3_PyErr_Occurred
 # define PyErr_SetNone py3_PyErr_SetNone
 # define PyErr_SetString py3_PyErr_SetString
+# define PyErr_SetObject py3_PyErr_SetObject
 # define PyEval_InitThreads py3_PyEval_InitThreads
 # define PyEval_RestoreThread py3_PyEval_RestoreThread
 # define PyEval_SaveThread py3_PyEval_SaveThread
@@ -250,6 +251,7 @@
 static PyObject* (*py3_PyErr_NoMemory)(void);
 static void (*py3_Py_Finalize)(void);
 static void (*py3_PyErr_SetString)(PyObject *, const char *);
+static void (*py3_PyErr_SetObject)(PyObject *, PyObject *);
 static int (*py3_PyRun_SimpleString)(char *);
 static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *);
 static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t);
@@ -379,6 +381,7 @@
     {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory},
     {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
     {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
+    {"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject},
     {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString},
     {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String},
     {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem},

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


diff -cr vim.204a9f44442a/src/if_py_both.h vim.3075a07310c7/src/if_py_both.h
*** vim.204a9f44442a/src/if_py_both.h	2013-05-01 19:07:59.235346432 +0400
--- vim.3075a07310c7/src/if_py_both.h	2013-05-01 19:07:59.244346344 +0400
***************
*** 732,738 ****
  
      if (di == NULL)
      {
! 	PyErr_SetString(PyExc_KeyError, _("no such key in dictionary"));
  	return NULL;
      }
  
--- 732,738 ----
  
      if (di == NULL)
      {
! 	PyErr_SetObject(PyExc_KeyError, keyObject);
  	return NULL;
      }
  
***************
*** 765,771 ****
  	if (di == NULL)
  	{
  	    DICTKEY_UNREF
! 	    PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
  	    return -1;
  	}
  	hi = hash_find(&d->dv_hashtab, di->di_key);
--- 765,771 ----
  	if (di == NULL)
  	{
  	    DICTKEY_UNREF
! 	    PyErr_SetObject(PyExc_KeyError, keyObject);
  	    return -1;
  	}
  	hi = hash_find(&d->dv_hashtab, di->di_key);
***************
*** 1351,1357 ****
  
      if (flags == 0)
      {
! 	PyErr_SetString(PyExc_KeyError, "Option does not exist in given scope");
  	return NULL;
      }
  
--- 1351,1357 ----
  
      if (flags == 0)
      {
! 	PyErr_SetObject(PyExc_KeyError, keyObject);
  	return NULL;
      }
  
***************
*** 1445,1451 ****
  
      if (flags == 0)
      {
! 	PyErr_SetString(PyExc_KeyError, "Option does not exist in given scope");
  	return -1;
      }
  
--- 1445,1451 ----
  
      if (flags == 0)
      {
! 	PyErr_SetObject(PyExc_KeyError, keyObject);
  	return -1;
      }
  
***************
*** 3143,3149 ****
  	return BufferNew(b);
      else
      {
! 	PyErr_SetString(PyExc_KeyError, _("no such buffer"));
  	return NULL;
      }
  }
--- 3143,3149 ----
  	return BufferNew(b);
      else
      {
! 	PyErr_SetObject(PyExc_KeyError, keyObject);
  	return NULL;
      }
  }
diff -cr vim.204a9f44442a/src/if_python3.c vim.3075a07310c7/src/if_python3.c
*** vim.204a9f44442a/src/if_python3.c	2013-05-01 19:07:59.232346461 +0400
--- vim.3075a07310c7/src/if_python3.c	2013-05-01 19:07:59.241346373 +0400
***************
*** 128,133 ****
--- 128,134 ----
  # define PyErr_Occurred py3_PyErr_Occurred
  # define PyErr_SetNone py3_PyErr_SetNone
  # define PyErr_SetString py3_PyErr_SetString
+ # define PyErr_SetObject py3_PyErr_SetObject
  # define PyEval_InitThreads py3_PyEval_InitThreads
  # define PyEval_RestoreThread py3_PyEval_RestoreThread
  # define PyEval_SaveThread py3_PyEval_SaveThread
***************
*** 250,255 ****
--- 251,257 ----
  static PyObject* (*py3_PyErr_NoMemory)(void);
  static void (*py3_Py_Finalize)(void);
  static void (*py3_PyErr_SetString)(PyObject *, const char *);
+ static void (*py3_PyErr_SetObject)(PyObject *, PyObject *);
  static int (*py3_PyRun_SimpleString)(char *);
  static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *);
  static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t);
***************
*** 379,384 ****
--- 381,387 ----
      {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory},
      {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
      {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
+     {"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject},
      {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString},
      {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String},
      {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem},
diff -cr vim.204a9f44442a/src/if_python.c vim.3075a07310c7/src/if_python.c
*** vim.204a9f44442a/src/if_python.c	2013-05-01 19:07:59.237346412 +0400
--- vim.3075a07310c7/src/if_python.c	2013-05-01 19:07:59.246346324 +0400
***************
*** 155,160 ****
--- 155,161 ----
  # define PyErr_Occurred dll_PyErr_Occurred
  # define PyErr_SetNone dll_PyErr_SetNone
  # define PyErr_SetString dll_PyErr_SetString
+ # define PyErr_SetObject dll_PyErr_SetObject
  # define PyEval_InitThreads dll_PyEval_InitThreads
  # define PyEval_RestoreThread dll_PyEval_RestoreThread
  # define PyEval_SaveThread dll_PyEval_SaveThread
***************
*** 260,265 ****
--- 261,267 ----
  static PyObject*(*dll_PyErr_Occurred)(void);
  static void(*dll_PyErr_SetNone)(PyObject *);
  static void(*dll_PyErr_SetString)(PyObject *, const char *);
+ static void(*dll_PyErr_SetObject)(PyObject *, PyObject *);
  static void(*dll_PyEval_InitThreads)(void);
  static void(*dll_PyEval_RestoreThread)(PyThreadState *);
  static PyThreadState*(*dll_PyEval_SaveThread)(void);
***************
*** 393,398 ****
--- 395,401 ----
      {"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred},
      {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone},
      {"PyErr_SetString", (PYTHON_PROC*)&dll_PyErr_SetString},
+     {"PyErr_SetObject", (PYTHON_PROC*)&dll_PyErr_SetObject},
      {"PyEval_InitThreads", (PYTHON_PROC*)&dll_PyEval_InitThreads},
      {"PyEval_RestoreThread", (PYTHON_PROC*)&dll_PyEval_RestoreThread},
      {"PyEval_SaveThread", (PYTHON_PROC*)&dll_PyEval_SaveThread},

Raspunde prin e-mail lui