? 231259.txt Index: generic/tclInt.h =================================================================== RCS file: /cvsroot/tcl/tcl/generic/tclInt.h,v retrieving revision 1.52 diff -r1.52 tclInt.h 187,191c187,193 < int resolverEpoch; /* Incremented whenever the name resolution < * rules change for this namespace; this < * invalidates all byte codes compiled in < * the namespace, causing the code to be < * recompiled under the new rules. */ --- > int resolverEpoch; /* Incremented whenever (a) the name resolution > * rules change for this namespace or (b) a > * newly added command shadows a command that > * is compiled to bytecodes. > * This invalidates all byte codes compiled > * in the namespace, causing the code to be > * recompiled under the new rules.*/ Index: generic/tclNamesp.c =================================================================== RCS file: /cvsroot/tcl/tcl/generic/tclNamesp.c,v retrieving revision 1.22 diff -r1.22 tclNamesp.c 2285a2286,2296 > > /* > * If the shadowed command was compiled to bytecodes, we > * invalidate all the bytecodes in nsPtr, to force a new > * compilation. We use the resolverEpoch to signal the need > * for a fresh compilation of every bytecode. > */ > > if ((((Command *) hPtr)->compileProc) != NULL) { > nsPtr->resolverEpoch++; > } Index: tests/namespace.test =================================================================== RCS file: /cvsroot/tcl/tcl/tests/namespace.test,v retrieving revision 1.15 diff -r1.15 namespace.test 1138a1139,1152 > test namespace-41.1 {Shadowing byte-compiled commands} { > namespace eval ns { > proc test {} { > set ::g 0 > } > lappend ::res [test] > proc set {a b} { > ::set a [incr b] > } > lappend ::res [test] > } > set res > } {0 1} >