[pypy-commit] pypy py3.3: Add method TkApp.merge()
amauryfa
noreply at buildbot.pypy.org
Sun Dec 14 19:42:22 CET 2014
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch: py3.3
Changeset: r74923:97d75d169b30
Date: 2014-10-30 22:18 +0100
http://bitbucket.org/pypy/pypy/changeset/97d75d169b30/
Log: Add method TkApp.merge()
diff --git a/lib_pypy/_tkinter/app.py b/lib_pypy/_tkinter/app.py
--- a/lib_pypy/_tkinter/app.py
+++ b/lib_pypy/_tkinter/app.py
@@ -8,6 +8,7 @@
import sys
import threading
import time
+import warnings
class _DummyLock(object):
@@ -326,7 +327,7 @@
if res == tklib.TCL_ERROR:
self.raiseTclError()
result = tkffi.string(tklib.Tcl_GetStringResult(self.interp))
- return result.decode('utf-8')
+ return FromTclString(result)
def evalfile(self, filename):
self._check_tcl_appartment()
@@ -335,7 +336,7 @@
if res == tklib.TCL_ERROR:
self.raiseTclError()
result = tkffi.string(tklib.Tcl_GetStringResult(self.interp))
- return result.decode('utf-8')
+ return FromTclString(result)
def split(self, arg):
if isinstance(arg, TclObject):
@@ -435,6 +436,32 @@
finally:
tklib.Tcl_Free(argv[0])
+ def merge(self, *args):
+ warnings.warn("merge is deprecated and will be removed in 3.4",
+ DeprecationWarning)
+ s = self._merge(args)
+ return s.decode('utf-8')
+
+ def _merge(self, args):
+ argv = []
+ for arg in args:
+ if isinstance(arg, tuple):
+ argv.append(self._merge(arg))
+ elif arg is None:
+ break
+ elif isinstance(arg, bytes):
+ argv.append(arg)
+ else:
+ argv.append(str(arg).encode('utf-8'))
+ argv_array = [tkffi.new("char[]", arg) for arg in argv]
+ res = tklib.Tcl_Merge(len(argv), argv_array)
+ if not res:
+ raise TclError("merge failed")
+ try:
+ return tkffi.string(res)
+ finally:
+ tklib.Tcl_Free(res)
+
def getboolean(self, s):
if isinstance(s, int):
return s
diff --git a/lib_pypy/_tkinter/tclobj.py b/lib_pypy/_tkinter/tclobj.py
--- a/lib_pypy/_tkinter/tclobj.py
+++ b/lib_pypy/_tkinter/tclobj.py
@@ -19,7 +19,7 @@
except UnicodeDecodeError:
# Tcl encodes null character as \xc0\x80
try:
- return s.replace('\xc0\x80', '\x00').decode('utf-8')
+ return s.replace(b'\xc0\x80', b'\x00').decode('utf-8')
except UnicodeDecodeError:
pass
return s
diff --git a/lib_pypy/_tkinter/tklib.py b/lib_pypy/_tkinter/tklib.py
--- a/lib_pypy/_tkinter/tklib.py
+++ b/lib_pypy/_tkinter/tklib.py
@@ -89,6 +89,7 @@
int Tcl_ListObjLength(Tcl_Interp* interp, Tcl_Obj* listPtr, int* intPtr);
int Tcl_ListObjIndex(Tcl_Interp* interp, Tcl_Obj* listPtr, int index, Tcl_Obj** objPtrPtr);
int Tcl_SplitList(Tcl_Interp* interp, char* list, int* argcPtr, const char*** argvPtr);
+char* Tcl_Merge(int argc, char** argv);
int Tcl_Eval(Tcl_Interp* interp, const char* script);
int Tcl_EvalFile(Tcl_Interp* interp, const char* filename);
More information about the pypy-commit
mailing list