Index: TODO =================================================================== diff -u -r3946480dcc906b5004bf18ee49b49054fa400e0d -ra709e3ea0a2913db419352f9b1bbee5aa40917e1 --- TODO (.../TODO) (revision 3946480dcc906b5004bf18ee49b49054fa400e0d) +++ TODO (.../TODO) (revision a709e3ea0a2913db419352f9b1bbee5aa40917e1) @@ -5624,12 +5624,10 @@ parameters is the same. - XOTcl 2.0 keeps implicit substdefaults (backward compatible) - fix bug: never try to substdefault, when there is no default given. +- don't swallow errors triggered from variable write traces in configure - ======================================================================== TODO: -- check error propagation in trace procs - - maybe use as well "$obj eval $cmd" for valuechangedcmd Consequence: commands like the folowings become more complicated ::nx Class { Index: generic/nsf.c =================================================================== diff -u -rdbe0bb3d2a84a4f0836d45aaacb3d4354d6e8805 -ra709e3ea0a2913db419352f9b1bbee5aa40917e1 --- generic/nsf.c (.../nsf.c) (revision dbe0bb3d2a84a4f0836d45aaacb3d4354d6e8805) +++ generic/nsf.c (.../nsf.c) (revision a709e3ea0a2913db419352f9b1bbee5aa40917e1) @@ -28001,7 +28001,20 @@ goto configure_exit; } } else { - Tcl_ObjSetVar2(interp, paramPtr->nameObj, NULL, newValue, TCL_LEAVE_ERR_MSG|TCL_PARSE_PART1); + Tcl_Obj *resultObj; + /* + * Plain set of the variable. + */ + resultObj = Tcl_ObjSetVar2(interp, paramPtr->nameObj, NULL, newValue, TCL_LEAVE_ERR_MSG|TCL_PARSE_PART1); + if (unlikely(resultObj == NULL)) { + /* + * When the setting of the variable failed (e.g. caused by variable + * traces), report the error back. + */ + result = TCL_ERROR; + Nsf_PopFrameObj(interp, framePtr); + goto configure_exit; + } } } } @@ -28105,7 +28118,7 @@ goto cget_exit; } - /*fprintf(stderr, "arg %s found, flags %.8x\n", nameString, paramPtr->flags);*/ + /*fprintf(stderr, "cget: arg %s found, flags %.8x\n", nameString, paramPtr->flags);*/ /* * Check for slot invocation