Author: Amaury Forgeot d'Arc <amaur...@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); _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit