? 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}
> 
