[pypy-commit] pypy default: Another fix for boolean values
amauryfa
noreply at buildbot.pypy.org
Mon Jun 15 09:33:20 CEST 2015
Author: Amaury Forgeot d'Arc <amauryfa at gmail.com>
Branch:
Changeset: r78103:62653cade172
Date: 2015-06-14 23:57 +0200
http://bitbucket.org/pypy/pypy/changeset/62653cade172/
Log: Another fix for boolean values
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
@@ -5,7 +5,8 @@
class TypeCache(object):
def __init__(self):
- self.BooleanType = tklib.Tcl_GetObjType("boolean")
+ self.OldBooleanType = tklib.Tcl_GetObjType("boolean")
+ self.BooleanType = None
self.ByteArrayType = tklib.Tcl_GetObjType("bytearray")
self.DoubleType = tklib.Tcl_GetObjType("double")
self.IntType = tklib.Tcl_GetObjType("int")
@@ -16,6 +17,11 @@
def add_extra_types(self, app):
# Some types are not registered in Tcl.
+ result = app.call('expr', 'true')
+ typePtr = AsObj(result).typePtr
+ if tkffi.string(typePtr.name) == "booleanString":
+ self.BooleanType = typePtr
+
result = app.call('expr', '2**63')
typePtr = AsObj(result).typePtr
if tkffi.string(typePtr.name) == "bignum":
@@ -64,8 +70,12 @@
buf = tkffi.buffer(value.bytes, value.length)
return FromTclString(buf[:])
- if value.typePtr == typeCache.BooleanType:
- return bool(value.internalRep.longValue)
+ if value.typePtr in (typeCache.BooleanType, typeCache.OldBooleanType):
+ value_ptr = tkffi.new("int*")
+ if tklib.Tcl_GetBooleanFromObj(
+ app.interp, value, value_ptr) == tklib.TCL_ERROR:
+ app.raiseTclError()
+ return bool(value_ptr[0])
if value.typePtr == typeCache.ByteArrayType:
size = tkffi.new('int*')
data = tklib.Tcl_GetByteArrayFromObj(value, size)
diff --git a/lib_pypy/_tkinter/tklib_build.py b/lib_pypy/_tkinter/tklib_build.py
--- a/lib_pypy/_tkinter/tklib_build.py
+++ b/lib_pypy/_tkinter/tklib_build.py
@@ -120,6 +120,7 @@
int Tcl_GetBoolean(Tcl_Interp* interp, const char* src, int* boolPtr);
int Tcl_GetInt(Tcl_Interp* interp, const char* src, int* intPtr);
int Tcl_GetDouble(Tcl_Interp* interp, const char* src, double* doublePtr);
+int Tcl_GetBooleanFromObj(Tcl_Interp* interp, Tcl_Obj* objPtr, int* valuePtr);
char *Tcl_GetString(Tcl_Obj* objPtr);
char *Tcl_GetStringFromObj(Tcl_Obj* objPtr, int* lengthPtr);
unsigned char *Tcl_GetByteArrayFromObj(Tcl_Obj* objPtr, int* lengthPtr);
More information about the pypy-commit
mailing list