Just a small followup: Since xotcl has about 30 tests for nonposargs, which are all passing for tcl 8.5, i was trying to extend the xotcl regression test, and found some more insight:
Your original script
Class X X instproc ListOfStringsOption {{-default ""} {-cb ""} name} { if {$cb eq {}} { set cb "::set ::$name " } ;# global variable eval $cb $default }
could be as well be repaired in 8.5 by avoiding eval with the new-style expand operator
X instproc ListOfStringsOption {{-default {}} {-cb ""} name} { if {$cb eq {}} { set cb "::set ::$name " } ;# global variable {*}$cb $default }
or strangely, by mentioning the variable "default" explicitely in the procbody
X instproc ListOfStringsOption {{-default ""} {-cb ""} name} { if {$cb eq {}} { set cb "::set ::$name " } ;# global variable set _ $default eval $cb $default }
I have still no clear understanding why in the original version the variable "default" is unknown within eval. Maybe there is a bad interaction with the byte-code compiler in Tcl 8.5...
Anyhow, altering Tcl_ObjSetVar2() to Tcl_SetVar2Ex() on the C level works fine in all cases.
best regards -gustaf neumann