From: Jack J. <Jac...@cw...> - 2003-05-10 20:03:03
|
In Python's Tkinter on MacOSX we see a strange problem that does not seem to occur on other platforms (Windows and Linux have been tested). This has only been tested with the AquaTk installer. Tkinter refuses to work because tcl_version is the floating point number 8.40000000000xxx, whereas the expected value is the string "8.4". As we can't seem to figure out how _our_ code could be causing this, especially as it only happens on OSX, our next guess is that it's somehow _your_ code:-) Is there anything in Tcl/AquaTk that could cause this? -- - Jack Jansen <Jac...@or...> http://www.cwi.nl/~jack - - If I can't dance I don't want to be part of your revolution -- Emma Goldman - |
From: Jim I. <ji...@ap...> - 2003-05-10 20:52:26
|
How are you getting tcl_version? With the AquaTk installer version of Tcl, I get: inghji:~ > tclsh % set tcl_version 8.4 % set tcl_patchLevel 8.4.2 % info tclversion 8.4 The Tcl code on MacOS X is pretty much the same as the Linux version. I suspect your code ;-) Jim On Saturday, May 10, 2003, at 01:02 PM, Jack Jansen wrote: > In Python's Tkinter on MacOSX we see a strange problem that does not > seem to occur on other platforms (Windows and Linux have been tested). > This has only been tested with the AquaTk installer. > > Tkinter refuses to work because tcl_version is the floating point > number 8.40000000000xxx, whereas the expected value is the string > "8.4". > > As we can't seem to figure out how _our_ code could be causing this, > especially as it only happens on OSX, our next guess is that it's > somehow _your_ code:-) > > Is there anything in Tcl/AquaTk that could cause this? > -- > - Jack Jansen <Jac...@or...> > http://www.cwi.nl/~jack - > - If I can't dance I don't want to be part of your revolution -- Emma > Goldman - > > > > ------------------------------------------------------- > Enterprise Linux Forum Conference & Expo, June 4-6, 2003, Santa Clara > The only event dedicated to issues related to Linux enterprise > solutions > www.enterpriselinuxforum.com > > _______________________________________________ > Tcl-mac mailing list > Tc...@li... > https://lists.sourceforge.net/lists/listinfo/tcl-mac > _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- Jim Ingham ji...@ap... Developer Tools - gdb |
From: Jack J. <Jac...@cw...> - 2003-05-10 21:39:05
|
On zaterdag, mei 10, 2003, at 22:52 Europe/Amsterdam, Jim Ingham wrote: > How are you getting tcl_version? > > With the AquaTk installer version of Tcl, I get: > > inghji:~ > tclsh > % set tcl_version > 8.4 > % set tcl_patchLevel > 8.4.2 > % info tclversion > 8.4 > > The Tcl code on MacOS X is pretty much the same as the Linux version. > I suspect your code ;-) We're doing a Tcl_GetVar2Ex(interpreter, "tcl_version", NULL, TCL_LEAVE_ERR_MSG), then we look at value->typePtr to decide what to do next (NULL: convert to Python string, non-null, convert to corresponding Python type). As I get a Python float it seems the type is TCL double. Or, at least, our code thinks so:-) We then convert value->internalRep.doubleValue to a Python float object. -- - Jack Jansen <Jac...@or...> http://www.cwi.nl/~jack - - If I can't dance I don't want to be part of your revolution -- Emma Goldman - |
From: Jim I. <ji...@ap...> - 2003-05-10 23:59:48
|
Jack, tcl_version is created as a string variable with the value "8.2". If somebody tried to do some math with it (like evaluate expr $tcl_version <= 8.4 or something) then Tcl would set the internal representation to a float. I don't see any place where we are doing that, but maybe your Tkinter code does that to check something on Mac OS X? Anyway that would not be an error on Tcl's part. If you want tcl_version in Python explicitly as a string, you need to make sure the string representation exists, and then get the variable as a string. You can't rely on their being or not being any particular internal representation. Jim On Saturday, May 10, 2003, at 02:38 PM, Jack Jansen wrote: > > On zaterdag, mei 10, 2003, at 22:52 Europe/Amsterdam, Jim Ingham wrote: > >> How are you getting tcl_version? >> >> With the AquaTk installer version of Tcl, I get: >> >> inghji:~ > tclsh >> % set tcl_version >> 8.4 >> % set tcl_patchLevel >> 8.4.2 >> % info tclversion >> 8.4 >> >> The Tcl code on MacOS X is pretty much the same as the Linux version. >> I suspect your code ;-) > > We're doing a Tcl_GetVar2Ex(interpreter, "tcl_version", NULL, > TCL_LEAVE_ERR_MSG), then we look at value->typePtr to decide what to > do next (NULL: convert to Python string, non-null, convert to > corresponding Python type). As I get a Python float it seems the type > is TCL double. Or, at least, our code thinks so:-) We then convert > value->internalRep.doubleValue to a Python float object. > -- > - Jack Jansen <Jac...@or...> > http://www.cwi.nl/~jack - > - If I can't dance I don't want to be part of your revolution -- Emma > Goldman - > > > > ------------------------------------------------------- > Enterprise Linux Forum Conference & Expo, June 4-6, 2003, Santa Clara > The only event dedicated to issues related to Linux enterprise > solutions > www.enterpriselinuxforum.com > > _______________________________________________ > Tcl-mac mailing list > Tc...@li... > https://lists.sourceforge.net/lists/listinfo/tcl-mac > _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_- Jim Ingham ji...@ap... Developer Tools - gdb |
From: Jack J. <Jac...@cw...> - 2003-05-19 09:49:24
|
On Sunday, May 11, 2003, at 01:59 Europe/Amsterdam, Jim Ingham wrote: > Jack, > > tcl_version is created as a string variable with the value "8.2". If > somebody tried to do some math with it (like evaluate expr > $tcl_version <= 8.4 or something) then Tcl would set the internal > representation to a float. I don't see any place where we are doing > that, but maybe your Tkinter code does that to check something on Mac > OS X? Sorry to keep bothering you, but this thing drives me up the wall. The very first time our code even looks at tcl_version it is already a float. But: I've installed the "batteries included" distribution (and I assume a lot of people do so), and there's an awful lot of code in the /Library/Tcl directory that does numeric compares to tcl_version. Is any of this code automatically executed when a new tcl interpreter is instantiated? If so, and if people on Linux usually install a bare-bones Tcl/Tk it could be that this is the reason we're seeing the problem on MacOSX only... -- Jack Jansen, <Jac...@cw...>, http://www.cwi.nl/~jack If I can't dance I don't want to be part of your revolution -- Emma Goldman |
From: Daniel A. S. <st...@ic...> - 2003-05-19 09:58:59
|
Jack, On Monday, May 19, 2003, at 19:50 Australia/Sydney, Jack Jansen wrote: > Sorry to keep bothering you, but this thing drives me up the wall. The > very first time our code even looks at tcl_version it is already a > float. But: I've installed the "batteries included" distribution (and > I assume a lot of people do so), and there's an awful lot of code in > the /Library/Tcl directory that does numeric compares to tcl_version. this is very possible, many things could cause the version value to get converted to a float, e.g. code in init.tcl, in auto indexes etc, but why does it matter? Just use Tcl_GetString()/Tcl_GetStringFromObj() to get the string value, a Tcl_Obj's internal representation is an implementation detail and you cannot/must not rely on it being of any particular type. Cheers, Daniel -- ** Daniel A. Steffen ** "And now for something completely ** Dept. of Mathematics ** different" Monty Python ** Macquarie University ** <mailto:st...@ma...> ** NSW 2109 Australia ** <http://www.maths.mq.edu.au/~steffen/> |
From: Benjamin R. <Ben...@ep...> - 2003-05-11 13:48:55
|
Hi Jack, A general thought in additions to Jim's answer: Jack Jansen <Jac...@cw...> writes: > We're doing a Tcl_GetVar2Ex(interpreter, "tcl_version", NULL, > TCL_LEAVE_ERR_MSG), then we look at value->typePtr to decide what to > do next (NULL: convert to Python string, non-null, convert to > corresponding Python type). Well, somebody may already have told you that, but that's not how Tcl works. In Tcl *all* values are strings. You use Tcl_GetStringFromObj() to get that value. That's it. If you want a floating point, you explicitly *convert* by using Tcl_GetDoubleFromObj(). Everything you see related to "types" is just internal speed optimizations to avoid double conversions. These internal representations come and go at the whim of the implementation. Accessing these infos without the official APIs will lead to errors and inconsistent behaviour, as you have seen. The details of the behaviour will also quite likely change from Tcl version to Tcl version. so long, benny |