Index: ChangeLog =================================================================== diff -u -r519b71305f345f406448f602ad89be43371339cb -r9be808f7267163cc1f3911b5f9ad750cac0dc397 --- ChangeLog (.../ChangeLog) (revision 519b71305f345f406448f602ad89be43371339cb) +++ ChangeLog (.../ChangeLog) (revision 9be808f7267163cc1f3911b5f9ad750cac0dc397) @@ -1,3 +1,9 @@ +2007-10-30: + * change Tcl_ObjSetVar2() to Tcl_SetVar2Ex() to + address problem in setting variables from C. + The set variable was not seen in an eval. + * extending regression test + 2007-10-29: * return mixins before procs in procsearch * added regression test Index: generic/xotcl.c =================================================================== diff -u -r519b71305f345f406448f602ad89be43371339cb -r9be808f7267163cc1f3911b5f9ad750cac0dc397 --- generic/xotcl.c (.../xotcl.c) (revision 519b71305f345f406448f602ad89be43371339cb) +++ generic/xotcl.c (.../xotcl.c) (revision 9be808f7267163cc1f3911b5f9ad750cac0dc397) @@ -11644,9 +11644,9 @@ r1 = Tcl_ListObjGetElements(in, nonposArgsDefv[i], &npac, &npav); if (r1 == TCL_OK) { if (npac == 3) { - Tcl_ObjSetVar2(in, npav[0], NULL, npav[2], 0); + Tcl_SetVar2Ex(in, ObjStr(npav[0]), NULL, npav[2], 0); } else if (npac == 2 && !strcmp(ObjStr(npav[1]), "switch")) { - Tcl_ObjSetVar2(in, npav[0], NULL, Tcl_NewBooleanObj(0), 0); + Tcl_SetVar2Ex(in, ObjStr(npav[0]), NULL, Tcl_NewBooleanObj(0), 0); } } } Index: tests/testx.xotcl =================================================================== diff -u -rba364529cbe05cbf9acf64aa728bf7316c8b4af7 -r9be808f7267163cc1f3911b5f9ad750cac0dc397 --- tests/testx.xotcl (.../testx.xotcl) (revision ba364529cbe05cbf9acf64aa728bf7316c8b4af7) +++ tests/testx.xotcl (.../testx.xotcl) (revision 9be808f7267163cc1f3911b5f9ad750cac0dc397) @@ -3891,6 +3891,17 @@ errorCheck [catch {o p7 -x 2 }] 1 nonpos-16 errorCheck [catch {o p8 -x 2 }] 0 nonpos-17 o destroy + + Class X + X instproc ListOfStringsOption {{-default "murr6"} {-cb {}} name} { + if {$cb eq {}} { set cb "::set ::$name " } ;# global variable + eval $cb \$default + } + ::X create x1 + ::x1 ListOfStringsOption uu + errorCheck [set ::uu] murr6 murr6 + ::x1 destroy + X destroy }