diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2002-11-26 22:12:12 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2002-11-26 22:12:12 (GMT) |
commit | 4ec2e7071eabf056541e76485e8b8f7c46a968d8 (patch) | |
tree | 624d6a1f2829563b3847b50e06c71b6c5e5838ea | |
parent | 54fe3fdf77e1f7ed16bb663dada3c2ca07db09d8 (diff) | |
download | cpython-4ec2e7071eabf056541e76485e8b8f7c46a968d8.zip cpython-4ec2e7071eabf056541e76485e8b8f7c46a968d8.tar.gz cpython-4ec2e7071eabf056541e76485e8b8f7c46a968d8.tar.bz2 |
Avoid including tclInt.h.
-rw-r--r-- | Modules/_tkinter.c | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/Modules/_tkinter.c b/Modules/_tkinter.c index 5b83c51..22850a4 100644 --- a/Modules/_tkinter.c +++ b/Modules/_tkinter.c @@ -50,11 +50,9 @@ Copyright (C) 1994 Steen Lumholt. #ifdef TK_FRAMEWORK #include <Tcl/tcl.h> -#include <Tcl/tclInt.h> #include <Tk/tk.h> #else #include <tcl.h> -#include <tclInt.h> #include <tk.h> #endif @@ -222,6 +220,15 @@ typedef struct { PyObject_HEAD Tcl_Interp *interp; int wantobjects; + /* We cannot include tclInt.h, as this is internal. + So we cache interesting types here. */ + Tcl_ObjType *BooleanType; + Tcl_ObjType *ByteArrayType; + Tcl_ObjType *DoubleType; + Tcl_ObjType *IntType; + Tcl_ObjType *ListType; + Tcl_ObjType *ProcBodyType; + Tcl_ObjType *StringType; } TkappObject; #define Tkapp_Check(v) ((v)->ob_type == &Tkapp_Type) @@ -535,6 +542,14 @@ Tkapp_New(char *screenName, char *baseName, char *className, v->interp = Tcl_CreateInterp(); v->wantobjects = wantobjects; + v->BooleanType = Tcl_GetObjType("boolean"); + v->ByteArrayType = Tcl_GetObjType("bytearray"); + v->DoubleType = Tcl_GetObjType("double"); + v->IntType = Tcl_GetObjType("int"); + v->ListType = Tcl_GetObjType("list"); + v->ProcBodyType = Tcl_GetObjType("procbody"); + v->StringType = Tcl_GetObjType("string"); + #if defined(macintosh) /* This seems to be needed */ ClearMenuBar(); @@ -753,31 +768,32 @@ static PyObject* FromObj(PyObject* tkapp, Tcl_Obj *value) { PyObject *result = NULL; + TkappObject *app = (TkappObject*)tkapp; if (value->typePtr == NULL) return PyString_FromStringAndSize(value->bytes, value->length); - if (value->typePtr == &tclBooleanType) { + if (value->typePtr == app->BooleanType) { result = value->internalRep.longValue ? Py_True : Py_False; Py_INCREF(result); return result; } - if (value->typePtr == &tclByteArrayType) { + if (value->typePtr == app->ByteArrayType) { int size; char *data = Tcl_GetByteArrayFromObj(value, &size); return PyString_FromStringAndSize(data, size); } - if (value->typePtr == &tclDoubleType) { + if (value->typePtr == app->DoubleType) { return PyFloat_FromDouble(value->internalRep.doubleValue); } - if (value->typePtr == &tclIntType) { + if (value->typePtr == app->IntType) { return PyInt_FromLong(value->internalRep.longValue); } - if (value->typePtr == &tclListType) { + if (value->typePtr == app->ListType) { int size; int i, status; PyObject *elem; @@ -806,11 +822,11 @@ FromObj(PyObject* tkapp, Tcl_Obj *value) return result; } - if (value->typePtr == &tclProcBodyType) { + if (value->typePtr == app->ProcBodyType) { // fall through: return tcl object } - if (value->typePtr == &tclStringType) { + if (value->typePtr == app->StringType) { #ifdef Py_USING_UNICODE #ifdef Py_UNICODE_WIDE PyObject *result; @@ -2188,7 +2204,7 @@ Tkinter_Create(PyObject *self, PyObject *args) baseName = Py_GetProgramName(); className = "Tk"; - if (!PyArg_ParseTuple(args, "|zssi:create", + if (!PyArg_ParseTuple(args, "|zssii:create", &screenName, &baseName, &className, &interactive, &wantobjects)) return NULL; |