summaryrefslogtreecommitdiffstats
path: root/generic/tclLoad.c
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2012-11-19 08:30:11 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2012-11-19 08:30:11 (GMT)
commit4edd261b39fc6c68c6795dcb88f7ec03d39aa6c6 (patch)
tree5863b58bdecb0ae12d258385e3bbb5cbcd640a8f /generic/tclLoad.c
parentba3714a1c6b066ad7d41fcb1dadf84ade25f1499 (diff)
downloadtcl-4edd261b39fc6c68c6795dcb88f7ec03d39aa6c6.zip
tcl-4edd261b39fc6c68c6795dcb88f7ec03d39aa6c6.tar.gz
tcl-4edd261b39fc6c68c6795dcb88f7ec03d39aa6c6.tar.bz2
Better solution for handling errors from Tcl 8.x compiled extensions. Works for existing ones.
Diffstat (limited to 'generic/tclLoad.c')
-rw-r--r--generic/tclLoad.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/generic/tclLoad.c b/generic/tclLoad.c
index 5cacab1..a2cdc04 100644
--- a/generic/tclLoad.c
+++ b/generic/tclLoad.c
@@ -463,14 +463,20 @@ Tcl_LoadObjCmd(
}
code = pkgPtr->initProc(target);
}
-
/*
* Test for whether the initialization failed. If so, transfer the error
* from the target interpreter to the originating one.
*/
if (code != TCL_OK) {
- Tcl_TransferResult(target, code, interp);
+ Interp *iPtr = (Interp *) target;
+ if (iPtr->result != NULL) {
+ /* We have an Tcl 8.x extension with incompatible stub table. */
+ Tcl_Obj *obj = Tcl_NewStringObj(iPtr->result, -1);
+ Tcl_SetObjResult(interp, obj);
+ } else {
+ Tcl_TransferResult(target, code, interp);
+ }
goto done;
}