Itcl - the [incr Tcl] extension

Check-in [46272cca4d]
Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Workaround of the incompatibility in Tcl_NewObjectInstance() in Tcl 8.6.15. (See Tcl Ticket 154f0982f2)

Without this workaround, Itcl Bug d0126511d9 re-emerges.

I don't think this is a real solution, but it silences the Itcl test suite.

I think the interface between Itcl 4 and Tcl is cursed to be forever secretly broken outside narrow ranges of use, which fortunately cover a large space of utility.

A vote of confidence from another Tcler before merge to Itcl trunk would be appreciated.

Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | workaround-d0126511d9
Files: files | file ages | folders
SHA3-256: 46272cca4dc657b3afb4ce53c4a2b55ad866fd6d6de6eeb8aa249fed86e90c2a
User & Date: dgp 2024-09-04 20:05:29.574
Context
2024-09-05
19:30
Merge the workaround for Tcl_NewObjectInstance() changes. check-in: a85c02da52 user: dgp tags: trunk, rc0, main
2024-09-04
20:05
Workaround of the incompatibility in Tcl_NewObjectInstance() in Tcl 8.6.15. (See Tcl Ticket 154f0982f2)

Without this workaround, Itcl Bug d0126511d9 re-emerges.

I don't think this is a real solution, but it silences the Itcl test suite.

I think the interface between Itcl 4 and Tcl is cursed to be forever secretly broken outside narrow ranges of use, which fortunately cover a large space of utility.

A vote of confidence from another Tcler before merge to Itcl trunk would be appreciated. Closed-Leaf check-in: 46272cca4d user: dgp tags: workaround-d0126511d9

2024-08-24
11:47
fixes [4fff3fc277] (Itcl not thread-safe) - use tcl-internal threaded-object cache instead of (unsafe) Itcl-internal list pool. check-in: 9e63c6d8e5 user: sebres tags: trunk, main
Changes
Unified Diff Ignore Whitespace Patch
Changes to generic/itclClass.c.
146
147
148
149
150
151
152
153

154
155
156
157
158
159
160
161
    ItclObjectInfo *infoPtr = (ItclObjectInfo *)data[0];
    const char *path = (const char *)data[1];
    Tcl_Object *oPtr = (Tcl_Object *)data[2];
    Tcl_Obj *nameObjPtr = (Tcl_Obj *)data[3];

    *oPtr = NULL;
    if (infoPtr->clazzClassPtr) {
	*oPtr = Tcl_NewObjectInstance(interp, infoPtr->clazzClassPtr,

                path, path, 0, NULL, 0);
    }
    if (*oPtr == NULL) {
        Tcl_AppendResult(interp,
                "ITCL: cannot create Tcl_NewObjectInstance for class \"",
                Tcl_GetString(nameObjPtr), "\"", NULL);
       return TCL_ERROR;
    }







|
>
|







146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
    ItclObjectInfo *infoPtr = (ItclObjectInfo *)data[0];
    const char *path = (const char *)data[1];
    Tcl_Object *oPtr = (Tcl_Object *)data[2];
    Tcl_Obj *nameObjPtr = (Tcl_Obj *)data[3];

    *oPtr = NULL;
    if (infoPtr->clazzClassPtr) {
	*oPtr = Tcl_NewObjectInstance(interp, infoPtr->clazzClassPtr, path,
		Tcl_FindNamespace(interp, path, NULL, 0) ? NULL : path,
		0, NULL, 0);
    }
    if (*oPtr == NULL) {
        Tcl_AppendResult(interp,
                "ITCL: cannot create Tcl_NewObjectInstance for class \"",
                Tcl_GetString(nameObjPtr), "\"", NULL);
       return TCL_ERROR;
    }