The patch was taken from CPython 3.3.5pull/152/head
@ -0,0 +1,70 @@ | |||||
diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c | |||||
--- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 | |||||
+++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 | |||||
@@ -231,8 +231,7 @@ | |||||
if (!PyArg_ParseTuple(args, buf, &function)) | |||||
return NULL; | |||||
if (function == Py_None) { | |||||
- Py_XDECREF(*hook_var); | |||||
- *hook_var = NULL; | |||||
+ Py_CLEAR(*hook_var); | |||||
} | |||||
else if (PyCallable_Check(function)) { | |||||
PyObject *tmp = *hook_var; | |||||
@@ -774,14 +773,22 @@ | |||||
} | |||||
static int | |||||
+#if defined(_RL_FUNCTION_TYPEDEF) | |||||
on_startup_hook(void) | |||||
+#else | |||||
+on_startup_hook() | |||||
+#endif | |||||
{ | |||||
return on_hook(startup_hook); | |||||
} | |||||
#ifdef HAVE_RL_PRE_INPUT_HOOK | |||||
static int | |||||
+#if defined(_RL_FUNCTION_TYPEDEF) | |||||
on_pre_input_hook(void) | |||||
+#else | |||||
+on_pre_input_hook() | |||||
+#endif | |||||
{ | |||||
return on_hook(pre_input_hook); | |||||
} | |||||
@@ -819,7 +826,7 @@ | |||||
(r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { | |||||
goto error; | |||||
} | |||||
- Py_XDECREF(r); r=NULL; | |||||
+ Py_CLEAR(r); | |||||
if (0) { | |||||
error: | |||||
@@ -877,7 +884,7 @@ | |||||
* before calling the normal completer */ | |||||
static char ** | |||||
-flex_complete(char *text, int start, int end) | |||||
+flex_complete(const char *text, int start, int end) | |||||
{ | |||||
#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER | |||||
rl_completion_append_character ='\0'; | |||||
@@ -936,12 +943,12 @@ | |||||
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap); | |||||
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap); | |||||
/* Set our hook functions */ | |||||
- rl_startup_hook = (Function *)on_startup_hook; | |||||
+ rl_startup_hook = on_startup_hook; | |||||
#ifdef HAVE_RL_PRE_INPUT_HOOK | |||||
- rl_pre_input_hook = (Function *)on_pre_input_hook; | |||||
+ rl_pre_input_hook = on_pre_input_hook; | |||||
#endif | |||||
/* Set our completion function */ | |||||
- rl_attempted_completion_function = (CPPFunction *)flex_complete; | |||||
+ rl_attempted_completion_function = flex_complete; | |||||
/* Set Python word break characters */ | |||||
completer_word_break_characters = | |||||
rl_completer_word_break_characters = |
@ -0,0 +1,70 @@ | |||||
diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c | |||||
--- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 | |||||
+++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 | |||||
@@ -231,8 +231,7 @@ | |||||
if (!PyArg_ParseTuple(args, buf, &function)) | |||||
return NULL; | |||||
if (function == Py_None) { | |||||
- Py_XDECREF(*hook_var); | |||||
- *hook_var = NULL; | |||||
+ Py_CLEAR(*hook_var); | |||||
} | |||||
else if (PyCallable_Check(function)) { | |||||
PyObject *tmp = *hook_var; | |||||
@@ -774,14 +773,22 @@ | |||||
} | |||||
static int | |||||
+#if defined(_RL_FUNCTION_TYPEDEF) | |||||
on_startup_hook(void) | |||||
+#else | |||||
+on_startup_hook() | |||||
+#endif | |||||
{ | |||||
return on_hook(startup_hook); | |||||
} | |||||
#ifdef HAVE_RL_PRE_INPUT_HOOK | |||||
static int | |||||
+#if defined(_RL_FUNCTION_TYPEDEF) | |||||
on_pre_input_hook(void) | |||||
+#else | |||||
+on_pre_input_hook() | |||||
+#endif | |||||
{ | |||||
return on_hook(pre_input_hook); | |||||
} | |||||
@@ -819,7 +826,7 @@ | |||||
(r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { | |||||
goto error; | |||||
} | |||||
- Py_XDECREF(r); r=NULL; | |||||
+ Py_CLEAR(r); | |||||
if (0) { | |||||
error: | |||||
@@ -877,7 +884,7 @@ | |||||
* before calling the normal completer */ | |||||
static char ** | |||||
-flex_complete(char *text, int start, int end) | |||||
+flex_complete(const char *text, int start, int end) | |||||
{ | |||||
#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER | |||||
rl_completion_append_character ='\0'; | |||||
@@ -936,12 +943,12 @@ | |||||
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap); | |||||
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap); | |||||
/* Set our hook functions */ | |||||
- rl_startup_hook = (Function *)on_startup_hook; | |||||
+ rl_startup_hook = on_startup_hook; | |||||
#ifdef HAVE_RL_PRE_INPUT_HOOK | |||||
- rl_pre_input_hook = (Function *)on_pre_input_hook; | |||||
+ rl_pre_input_hook = on_pre_input_hook; | |||||
#endif | |||||
/* Set our completion function */ | |||||
- rl_attempted_completion_function = (CPPFunction *)flex_complete; | |||||
+ rl_attempted_completion_function = flex_complete; | |||||
/* Set Python word break characters */ | |||||
completer_word_break_characters = | |||||
rl_completer_word_break_characters = |
@ -0,0 +1,70 @@ | |||||
diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c | |||||
--- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 | |||||
+++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 | |||||
@@ -231,8 +231,7 @@ | |||||
if (!PyArg_ParseTuple(args, buf, &function)) | |||||
return NULL; | |||||
if (function == Py_None) { | |||||
- Py_XDECREF(*hook_var); | |||||
- *hook_var = NULL; | |||||
+ Py_CLEAR(*hook_var); | |||||
} | |||||
else if (PyCallable_Check(function)) { | |||||
PyObject *tmp = *hook_var; | |||||
@@ -774,14 +773,22 @@ | |||||
} | |||||
static int | |||||
+#if defined(_RL_FUNCTION_TYPEDEF) | |||||
on_startup_hook(void) | |||||
+#else | |||||
+on_startup_hook() | |||||
+#endif | |||||
{ | |||||
return on_hook(startup_hook); | |||||
} | |||||
#ifdef HAVE_RL_PRE_INPUT_HOOK | |||||
static int | |||||
+#if defined(_RL_FUNCTION_TYPEDEF) | |||||
on_pre_input_hook(void) | |||||
+#else | |||||
+on_pre_input_hook() | |||||
+#endif | |||||
{ | |||||
return on_hook(pre_input_hook); | |||||
} | |||||
@@ -819,7 +826,7 @@ | |||||
(r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { | |||||
goto error; | |||||
} | |||||
- Py_XDECREF(r); r=NULL; | |||||
+ Py_CLEAR(r); | |||||
if (0) { | |||||
error: | |||||
@@ -877,7 +884,7 @@ | |||||
* before calling the normal completer */ | |||||
static char ** | |||||
-flex_complete(char *text, int start, int end) | |||||
+flex_complete(const char *text, int start, int end) | |||||
{ | |||||
#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER | |||||
rl_completion_append_character ='\0'; | |||||
@@ -936,12 +943,12 @@ | |||||
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap); | |||||
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap); | |||||
/* Set our hook functions */ | |||||
- rl_startup_hook = (Function *)on_startup_hook; | |||||
+ rl_startup_hook = on_startup_hook; | |||||
#ifdef HAVE_RL_PRE_INPUT_HOOK | |||||
- rl_pre_input_hook = (Function *)on_pre_input_hook; | |||||
+ rl_pre_input_hook = on_pre_input_hook; | |||||
#endif | |||||
/* Set our completion function */ | |||||
- rl_attempted_completion_function = (CPPFunction *)flex_complete; | |||||
+ rl_attempted_completion_function = flex_complete; | |||||
/* Set Python word break characters */ | |||||
completer_word_break_characters = | |||||
rl_completer_word_break_characters = |
@ -0,0 +1,70 @@ | |||||
diff -r -u ../Python-3.3.3.orig/Modules/readline.c ./Modules/readline.c | |||||
--- ../Python-3.3.3.orig/Modules/readline.c 2013-11-17 16:23:01.000000000 +0900 | |||||
+++ ./Modules/readline.c 2014-03-29 16:22:10.219305878 +0900 | |||||
@@ -231,8 +231,7 @@ | |||||
if (!PyArg_ParseTuple(args, buf, &function)) | |||||
return NULL; | |||||
if (function == Py_None) { | |||||
- Py_XDECREF(*hook_var); | |||||
- *hook_var = NULL; | |||||
+ Py_CLEAR(*hook_var); | |||||
} | |||||
else if (PyCallable_Check(function)) { | |||||
PyObject *tmp = *hook_var; | |||||
@@ -774,14 +773,22 @@ | |||||
} | |||||
static int | |||||
+#if defined(_RL_FUNCTION_TYPEDEF) | |||||
on_startup_hook(void) | |||||
+#else | |||||
+on_startup_hook() | |||||
+#endif | |||||
{ | |||||
return on_hook(startup_hook); | |||||
} | |||||
#ifdef HAVE_RL_PRE_INPUT_HOOK | |||||
static int | |||||
+#if defined(_RL_FUNCTION_TYPEDEF) | |||||
on_pre_input_hook(void) | |||||
+#else | |||||
+on_pre_input_hook() | |||||
+#endif | |||||
{ | |||||
return on_hook(pre_input_hook); | |||||
} | |||||
@@ -819,7 +826,7 @@ | |||||
(r != Py_None && PyLong_AsLong(r) == -1 && PyErr_Occurred())) { | |||||
goto error; | |||||
} | |||||
- Py_XDECREF(r); r=NULL; | |||||
+ Py_CLEAR(r); | |||||
if (0) { | |||||
error: | |||||
@@ -877,7 +884,7 @@ | |||||
* before calling the normal completer */ | |||||
static char ** | |||||
-flex_complete(char *text, int start, int end) | |||||
+flex_complete(const char *text, int start, int end) | |||||
{ | |||||
#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER | |||||
rl_completion_append_character ='\0'; | |||||
@@ -936,12 +943,12 @@ | |||||
rl_bind_key_in_map ('\t', rl_complete, emacs_meta_keymap); | |||||
rl_bind_key_in_map ('\033', rl_complete, emacs_meta_keymap); | |||||
/* Set our hook functions */ | |||||
- rl_startup_hook = (Function *)on_startup_hook; | |||||
+ rl_startup_hook = on_startup_hook; | |||||
#ifdef HAVE_RL_PRE_INPUT_HOOK | |||||
- rl_pre_input_hook = (Function *)on_pre_input_hook; | |||||
+ rl_pre_input_hook = on_pre_input_hook; | |||||
#endif | |||||
/* Set our completion function */ | |||||
- rl_attempted_completion_function = (CPPFunction *)flex_complete; | |||||
+ rl_attempted_completion_function = flex_complete; | |||||
/* Set Python word break characters */ | |||||
completer_word_break_characters = | |||||
rl_completer_word_break_characters = |