Tcl Source Code

Hex Artifact Content
Login

Artifact ca3291e8620365c1dff17545a43c1ff776e70b1b:

Attachment "958222-supp.patch" to ticket [958222ffff] added by dgp 2006-02-23 00:39:53.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74  Index: generic/t
0010: 63 6c 42 61 73 69 63 2e 63 0a 3d 3d 3d 3d 3d 3d  clBasic.c.======
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43  =============.RC
0060: 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74  S file: /cvsroot
0070: 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63  /tcl/tcl/generic
0080: 2f 74 63 6c 42 61 73 69 63 2e 63 2c 76 0a 72 65  /tclBasic.c,v.re
0090: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f  trieving revisio
00a0: 6e 20 31 2e 31 39 30 0a 64 69 66 66 20 2d 75 20  n 1.190.diff -u 
00b0: 2d 72 31 2e 31 39 30 20 74 63 6c 42 61 73 69 63  -r1.190 tclBasic
00c0: 2e 63 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74  .c.--- generic/t
00d0: 63 6c 42 61 73 69 63 2e 63 09 38 20 46 65 62 20  clBasic.c.8 Feb 
00e0: 32 30 30 36 20 32 31 3a 34 31 3a 32 37 20 2d 30  2006 21:41:27 -0
00f0: 30 30 30 09 31 2e 31 39 30 0a 2b 2b 2b 20 67 65  000.1.190.+++ ge
0100: 6e 65 72 69 63 2f 74 63 6c 42 61 73 69 63 2e 63  neric/tclBasic.c
0110: 09 32 32 20 46 65 62 20 32 30 30 36 20 31 37 3a  .22 Feb 2006 17:
0120: 32 37 3a 32 35 20 2d 30 30 30 30 0a 40 40 20 2d  27:25 -0000.@@ -
0130: 33 32 34 30 2c 31 33 20 2b 33 32 34 30 2c 31 30  3240,13 +3240,10
0140: 20 40 40 0a 20 20 20 20 20 69 6e 74 20 69 3b 0a   @@.     int i;.
0150: 20 20 20 20 20 43 61 6c 6c 46 72 61 6d 65 20 2a       CallFrame *
0160: 73 61 76 65 64 56 61 72 46 72 61 6d 65 50 74 72  savedVarFramePtr
0170: 3b 2f 2a 20 53 61 76 65 73 20 6f 6c 64 20 63 6f  ;/* Saves old co
0180: 70 79 20 6f 66 20 69 50 74 72 2d 3e 76 61 72 46  py of iPtr->varF
0190: 72 61 6d 65 50 74 72 20 69 6e 20 63 61 73 65 0a  ramePtr in case.
01a0: 20 09 09 09 09 20 2a 20 54 43 4c 5f 45 56 41 4c   .... * TCL_EVAL
01b0: 5f 47 4c 4f 42 41 4c 20 77 61 73 20 73 65 74 2e  _GLOBAL was set.
01c0: 20 2a 2f 0a 2d 20 20 20 20 4e 61 6d 65 73 70 61   */.-    Namespa
01d0: 63 65 20 2a 63 75 72 72 4e 73 50 74 72 20 3d 20  ce *currNsPtr = 
01e0: 4e 55 4c 4c 3b 2f 2a 20 55 73 65 64 20 74 6f 20  NULL;/* Used to 
01f0: 63 68 65 63 6b 20 66 6f 72 20 61 6e 64 20 69 6e  check for and in
0200: 76 6f 6b 65 20 61 6e 79 0a 2d 20 20 20 20 20 20  voke any.-      
0210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0220: 20 20 20 20 20 20 20 20 20 20 20 2a 20 72 65 67             * reg
0230: 69 73 74 65 72 65 64 20 75 6e 6b 6e 6f 77 6e 20  istered unknown 
0240: 63 6f 6d 6d 61 6e 64 0a 2d 20 20 20 20 20 20 20  command.-       
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 20 20 20 20 20 20 20 2a 20 68 61 6e 64            * hand
0270: 6c 65 72 20 66 6f 72 20 74 68 65 20 63 75 72 72  ler for the curr
0280: 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 0a 2d 20  ent namespace.- 
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02b0: 2a 20 28 73 65 65 20 54 49 50 20 31 38 31 29 2e  * (see TIP 181).
02c0: 20 2a 2f 0a 20 20 20 20 20 69 6e 74 20 63 6f 64   */.     int cod
02d0: 65 20 3d 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20  e = TCL_OK;.    
02e0: 20 69 6e 74 20 74 72 61 63 65 43 6f 64 65 20 3d   int traceCode =
02f0: 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 20 69 6e   TCL_OK;.     in
0300: 74 20 63 68 65 63 6b 54 72 61 63 65 73 20 3d 20  t checkTraces = 
0310: 31 3b 0a 2b 20 20 20 20 69 6e 74 20 63 6d 64 45  1;.+    int cmdE
0320: 70 6f 63 68 3b 0a 20 0a 20 20 20 20 20 69 66 20  poch;. .     if 
0330: 28 54 63 6c 49 6e 74 65 72 70 52 65 61 64 79 28  (TclInterpReady(
0340: 69 6e 74 65 72 70 29 20 3d 3d 20 54 43 4c 5f 45  interp) == TCL_E
0350: 52 52 4f 52 29 20 7b 0a 20 09 72 65 74 75 72 6e  RROR) {. .return
0360: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 40 40 20 2d   TCL_ERROR;.@@ -
0370: 33 32 37 33 2c 36 31 20 2b 33 32 37 30 2c 35 32  3273,61 +3270,52
0380: 20 40 40 0a 20 0a 20 20 20 72 65 70 61 72 73 65   @@. .   reparse
0390: 42 65 63 61 75 73 65 4f 66 54 72 61 63 65 73 3a  BecauseOfTraces:
03a0: 0a 20 20 20 20 20 73 61 76 65 64 56 61 72 46 72  .     savedVarFr
03b0: 61 6d 65 50 74 72 20 3d 20 69 50 74 72 2d 3e 76  amePtr = iPtr->v
03c0: 61 72 46 72 61 6d 65 50 74 72 3b 0a 2b 20 20 20  arFramePtr;.+   
03d0: 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 42 6f 74 68   /*.+     * Both
03e0: 20 49 4e 56 4f 4b 45 20 61 6e 64 20 47 4c 4f 42   INVOKE and GLOB
03f0: 41 4c 20 66 6c 61 67 73 20 64 69 63 74 61 74 65  AL flags dictate
0400: 20 74 68 61 74 20 63 6f 6d 6d 61 6e 64 20 72 65   that command re
0410: 73 6f 6c 75 74 69 6f 6e 0a 2b 20 20 20 20 20 2a  solution.+     *
0420: 20 68 61 70 70 65 6e 73 20 69 6e 20 61 6e 20 5b   happens in an [
0430: 75 70 6c 65 76 65 6c 20 23 30 5d 20 63 6f 6e 74  uplevel #0] cont
0440: 65 78 74 2e 20 28 69 50 74 72 2d 3e 76 61 72 46  ext. (iPtr->varF
0450: 72 61 6d 65 50 74 72 20 3d 3d 20 4e 55 4c 4c 29  ramePtr == NULL)
0460: 0a 2b 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 69  .+     */.     i
0470: 66 20 28 66 6c 61 67 73 20 26 20 28 54 43 4c 5f  f (flags & (TCL_
0480: 45 56 41 4c 5f 49 4e 56 4f 4b 45 20 7c 20 54 43  EVAL_INVOKE | TC
0490: 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41 4c 29 29 20  L_EVAL_GLOBAL)) 
04a0: 7b 0a 20 09 69 50 74 72 2d 3e 76 61 72 46 72 61  {. .iPtr->varFra
04b0: 6d 65 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 20  mePtr = NULL;.  
04c0: 20 20 20 7d 0a 20 20 20 20 20 63 6d 64 50 74 72     }.     cmdPtr
04d0: 20 3d 20 28 43 6f 6d 6d 61 6e 64 20 2a 29 20 54   = (Command *) T
04e0: 63 6c 5f 47 65 74 43 6f 6d 6d 61 6e 64 46 72 6f  cl_GetCommandFro
04f0: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
0500: 76 5b 30 5d 29 3b 0a 2d 20 20 20 20 2f 2a 0a 2d  v[0]);.-    /*.-
0510: 20 20 20 20 20 2a 20 47 72 61 62 20 63 75 72 72       * Grab curr
0520: 65 6e 74 20 6e 61 6d 65 73 70 61 63 65 20 62 65  ent namespace be
0530: 66 6f 72 65 20 72 65 73 74 6f 72 69 6e 67 20 76  fore restoring v
0540: 61 72 20 66 72 61 6d 65 2c 20 66 6f 72 20 75 6e  ar frame, for un
0550: 6b 6e 6f 77 6e 0a 2d 20 20 20 20 20 2a 20 68 61  known.-     * ha
0560: 6e 64 6c 65 72 20 63 68 65 63 6b 20 62 65 6c 6f  ndler check belo
0570: 77 2e 0a 2d 20 20 20 20 20 2a 2f 0a 2d 20 20 20  w..-     */.-   
0580: 20 69 66 20 28 69 50 74 72 2d 3e 76 61 72 46 72   if (iPtr->varFr
0590: 61 6d 65 50 74 72 20 21 3d 20 4e 55 4c 4c 20 26  amePtr != NULL &
05a0: 26 20 69 50 74 72 2d 3e 76 61 72 46 72 61 6d 65  & iPtr->varFrame
05b0: 50 74 72 2d 3e 6e 73 50 74 72 20 21 3d 20 4e 55  Ptr->nsPtr != NU
05c0: 4c 4c 29 20 7b 0a 2d 20 20 20 20 20 20 20 20 63  LL) {.-        c
05d0: 75 72 72 4e 73 50 74 72 20 3d 20 69 50 74 72 2d  urrNsPtr = iPtr-
05e0: 3e 76 61 72 46 72 61 6d 65 50 74 72 2d 3e 6e 73  >varFramePtr->ns
05f0: 50 74 72 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65  Ptr;.-    } else
0600: 20 7b 0a 2d 20 20 20 20 20 20 20 20 2f 2a 20 4e   {.-        /* N
0610: 6f 74 65 3a 20 61 73 73 75 6d 65 73 20 67 6c 6f  ote: assumes glo
0620: 62 61 6c 4e 73 50 74 72 20 63 61 6e 20 6e 65 76  balNsPtr can nev
0630: 65 72 20 62 65 20 4e 55 4c 4c 2e 20 2a 2f 0a 2d  er be NULL. */.-
0640: 20 20 20 20 20 20 20 20 63 75 72 72 4e 73 50 74          currNsPt
0650: 72 20 3d 20 69 50 74 72 2d 3e 67 6c 6f 62 61 6c  r = iPtr->global
0660: 4e 73 50 74 72 3b 0a 2d 20 20 20 20 20 20 20 20  NsPtr;.-        
0670: 69 66 20 28 63 75 72 72 4e 73 50 74 72 20 3d 3d  if (currNsPtr ==
0680: 20 4e 55 4c 4c 29 20 7b 0a 2d 20 20 20 20 20 20   NULL) {.-      
0690: 20 20 20 20 20 20 54 63 6c 5f 50 61 6e 69 63 28        Tcl_Panic(
06a0: 22 54 63 6c 45 76 61 6c 4f 62 6a 76 49 6e 74 65  "TclEvalObjvInte
06b0: 72 6e 61 6c 3a 20 4e 55 4c 4c 20 67 6c 6f 62 61  rnal: NULL globa
06c0: 6c 20 6e 61 6d 65 73 70 61 63 65 20 70 6f 69 6e  l namespace poin
06d0: 74 65 72 22 29 3b 0a 2d 20 20 20 20 20 20 20 20  ter");.-        
06e0: 7d 0a 2d 20 20 20 20 7d 0a 2d 20 20 20 20 69 50  }.-    }.-    iP
06f0: 74 72 2d 3e 76 61 72 46 72 61 6d 65 50 74 72 20  tr->varFramePtr 
0700: 3d 20 73 61 76 65 64 56 61 72 46 72 61 6d 65 50  = savedVarFrameP
0710: 74 72 3b 0a 2d 0a 20 20 20 20 20 69 66 20 28 63  tr;.-.     if (c
0720: 6d 64 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b  mdPtr == NULL) {
0730: 0a 2b 09 4e 61 6d 65 73 70 61 63 65 20 2a 63 75  .+.Namespace *cu
0740: 72 72 4e 73 50 74 72 20 3d 20 4e 55 4c 4c 3b 09  rrNsPtr = NULL;.
0750: 2f 2a 20 55 73 65 64 20 74 6f 20 63 68 65 63 6b  /* Used to check
0760: 20 66 6f 72 20 61 6e 64 20 69 6e 76 6f 6b 65 20   for and invoke 
0770: 61 6e 79 0a 2b 09 09 09 09 09 20 2a 20 72 65 67  any.+..... * reg
0780: 69 73 74 65 72 65 64 20 75 6e 6b 6e 6f 77 6e 20  istered unknown 
0790: 63 6f 6d 6d 61 6e 64 20 68 61 6e 64 6c 65 72 0a  command handler.
07a0: 2b 09 09 09 09 09 20 2a 20 66 6f 72 20 74 68 65  +..... * for the
07b0: 20 63 75 72 72 65 6e 74 20 6e 61 6d 65 73 70 61   current namespa
07c0: 63 65 0a 2b 09 09 09 09 09 20 2a 20 28 54 49 50  ce.+..... * (TIP
07d0: 20 31 38 31 29 2e 20 2a 2f 0a 20 20 20 20 20 20   181). */.      
07e0: 20 20 20 69 6e 74 20 6e 65 77 4f 62 6a 63 2c 20     int newObjc, 
07f0: 68 61 6e 64 6c 65 72 4f 62 6a 63 3b 0a 20 20 20  handlerObjc;.   
0800: 20 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 2a        Tcl_Obj **
0810: 68 61 6e 64 6c 65 72 4f 62 6a 76 3b 0a 2d 20 20  handlerObjv;.-  
0820: 20 20 20 20 20 20 2f 2a 0a 2d 20 20 20 20 20 20        /*.-      
0830: 20 20 20 2a 20 43 68 65 63 6b 20 69 66 20 74 68     * Check if th
0840: 65 72 65 20 69 73 20 61 6e 20 75 6e 6b 6e 6f 77  ere is an unknow
0850: 6e 20 68 61 6e 64 6c 65 72 20 72 65 67 69 73 74  n handler regist
0860: 65 72 65 64 20 66 6f 72 20 74 68 69 73 20 6e 61  ered for this na
0870: 6d 65 73 70 61 63 65 2e 0a 2d 20 20 20 20 20 20  mespace..-      
0880: 20 20 20 2a 20 4f 74 68 65 72 77 69 73 65 2c 20     * Otherwise, 
0890: 75 73 65 20 74 68 65 20 67 6c 6f 62 61 6c 20 6e  use the global n
08a0: 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e 6f 77 6e  amespace unknown
08b0: 20 68 61 6e 64 6c 65 72 2e 0a 2d 20 20 20 20 20   handler..-     
08c0: 20 20 20 20 2a 2f 0a 2b 0a 2b 09 69 66 20 28 69      */.+.+.if (i
08d0: 50 74 72 2d 3e 76 61 72 46 72 61 6d 65 50 74 72  Ptr->varFramePtr
08e0: 20 21 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 20 20   != NULL) {.+.  
08f0: 20 20 63 75 72 72 4e 73 50 74 72 20 3d 20 69 50    currNsPtr = iP
0900: 74 72 2d 3e 76 61 72 46 72 61 6d 65 50 74 72 2d  tr->varFramePtr-
0910: 3e 6e 73 50 74 72 3b 0a 2b 09 7d 0a 2b 09 69 66  >nsPtr;.+.}.+.if
0920: 20 28 28 63 75 72 72 4e 73 50 74 72 20 3d 3d 20   ((currNsPtr == 
0930: 4e 55 4c 4c 29 20 7c 7c 20 28 63 75 72 72 4e 73  NULL) || (currNs
0940: 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64  Ptr->unknownHand
0950: 6c 65 72 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 29  lerPtr == NULL))
0960: 20 7b 0a 2b 09 20 20 20 20 63 75 72 72 4e 73 50   {.+.    currNsP
0970: 74 72 20 3d 20 69 50 74 72 2d 3e 67 6c 6f 62 61  tr = iPtr->globa
0980: 6c 4e 73 50 74 72 3b 0a 2b 09 7d 0a 2b 09 69 66  lNsPtr;.+.}.+.if
0990: 20 28 63 75 72 72 4e 73 50 74 72 20 3d 3d 20 4e   (currNsPtr == N
09a0: 55 4c 4c 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c  ULL) {.+.    Tcl
09b0: 5f 50 61 6e 69 63 28 22 54 63 6c 45 76 61 6c 4f  _Panic("TclEvalO
09c0: 62 6a 76 49 6e 74 65 72 6e 61 6c 3a 20 4e 55 4c  bjvInternal: NUL
09d0: 4c 20 67 6c 6f 62 61 6c 20 6e 61 6d 65 73 70 61  L global namespa
09e0: 63 65 20 70 6f 69 6e 74 65 72 22 29 3b 0a 2b 09  ce pointer");.+.
09f0: 7d 0a 20 20 20 20 20 20 20 20 20 69 66 20 28 63  }.         if (c
0a00: 75 72 72 4e 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77  urrNsPtr->unknow
0a10: 6e 48 61 6e 64 6c 65 72 50 74 72 20 3d 3d 20 4e  nHandlerPtr == N
0a20: 55 4c 4c 29 20 7b 0a 2d 20 20 20 20 20 20 20 20  ULL) {.-        
0a30: 20 20 20 20 63 75 72 72 4e 73 50 74 72 20 3d 20      currNsPtr = 
0a40: 69 50 74 72 2d 3e 67 6c 6f 62 61 6c 4e 73 50 74  iPtr->globalNsPt
0a50: 72 3b 0a 2d 20 20 20 20 20 20 20 20 7d 0a 2d 20  r;.-        }.- 
0a60: 20 20 20 20 20 20 20 69 66 20 28 63 75 72 72 4e         if (currN
0a70: 73 50 74 72 20 3d 3d 20 69 50 74 72 2d 3e 67 6c  sPtr == iPtr->gl
0a80: 6f 62 61 6c 4e 73 50 74 72 20 26 26 0a 2d 20 20  obalNsPtr &&.-  
0a90: 20 20 20 20 20 20 20 20 20 20 63 75 72 72 4e 73            currNs
0aa0: 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64  Ptr->unknownHand
0ab0: 6c 65 72 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20  lerPtr == NULL) 
0ac0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {.             /
0ad0: 2a 20 47 6c 6f 62 61 6c 20 6e 61 6d 65 73 70 61  * Global namespa
0ae0: 63 65 20 68 61 73 20 6c 6f 73 74 20 75 6e 6b 6e  ce has lost unkn
0af0: 6f 77 6e 20 68 61 6e 64 6c 65 72 2c 20 72 65 73  own handler, res
0b00: 65 74 2e 20 2a 2f 0a 2d 20 20 20 20 20 20 20 20  et. */.-        
0b10: 20 20 20 20 63 75 72 72 4e 73 50 74 72 2d 3e 75      currNsPtr->u
0b20: 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72  nknownHandlerPtr
0b30: 20 3d 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20   =.-            
0b40: 20 20 20 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e      Tcl_NewStrin
0b50: 67 4f 62 6a 28 22 3a 3a 75 6e 6b 6e 6f 77 6e 22  gObj("::unknown"
0b60: 2c 20 2d 31 29 3b 0a 2b 20 20 20 20 20 20 20 20  , -1);.+        
0b70: 20 20 20 20 63 75 72 72 4e 73 50 74 72 2d 3e 75      currNsPtr->u
0b80: 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72  nknownHandlerPtr
0b90: 20 3d 20 54 63 6c 5f 4e 65 77 53 74 72 69 6e 67   = Tcl_NewString
0ba0: 4f 62 6a 28 22 3a 3a 75 6e 6b 6e 6f 77 6e 22 2c  Obj("::unknown",
0bb0: 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20   -1);.          
0bc0: 20 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f     Tcl_IncrRefCo
0bd0: 75 6e 74 28 63 75 72 72 4e 73 50 74 72 2d 3e 75  unt(currNsPtr->u
0be0: 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72 50 74 72  nknownHandlerPtr
0bf0: 29 3b 0a 20 20 20 20 20 20 20 20 20 7d 0a 2d 20  );.         }.- 
0c00: 20 20 20 20 20 20 20 69 66 20 28 54 63 6c 5f 4c         if (Tcl_L
0c10: 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74  istObjGetElement
0c20: 73 28 69 6e 74 65 72 70 2c 0a 2d 20 20 20 20 20  s(interp,.-     
0c30: 20 20 20 20 20 20 20 63 75 72 72 4e 73 50 74 72         currNsPtr
0c40: 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e 64 6c 65 72  ->unknownHandler
0c50: 50 74 72 2c 20 26 68 61 6e 64 6c 65 72 4f 62 6a  Ptr, &handlerObj
0c60: 63 2c 20 26 68 61 6e 64 6c 65 72 4f 62 6a 76 29  c, &handlerObjv)
0c70: 0a 2d 20 20 20 20 20 20 20 20 20 20 20 20 21 3d  .-            !=
0c80: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2d 20 20 20 20   TCL_OK) {.-    
0c90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 54          return T
0ca0: 43 4c 5f 45 52 52 4f 52 3b 0a 2d 20 20 20 20 20  CL_ERROR;.-     
0cb0: 20 20 20 7d 0a 2b 20 20 20 20 20 20 20 20 54 63     }.+        Tc
0cc0: 6c 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d  l_ListObjGetElem
0cd0: 65 6e 74 73 28 4e 55 4c 4c 2c 20 63 75 72 72 4e  ents(NULL, currN
0ce0: 73 50 74 72 2d 3e 75 6e 6b 6e 6f 77 6e 48 61 6e  sPtr->unknownHan
0cf0: 64 6c 65 72 50 74 72 2c 0a 2b 09 09 26 68 61 6e  dlerPtr,.+..&han
0d00: 64 6c 65 72 4f 62 6a 63 2c 20 26 68 61 6e 64 6c  dlerObjc, &handl
0d10: 65 72 4f 62 6a 76 29 3b 0a 20 20 20 20 20 20 20  erObjv);.       
0d20: 20 20 6e 65 77 4f 62 6a 63 20 3d 20 6f 62 6a 63    newObjc = objc
0d30: 20 2b 20 68 61 6e 64 6c 65 72 4f 62 6a 63 3b 0a   + handlerObjc;.
0d40: 20 09 6e 65 77 4f 62 6a 76 20 3d 20 28 54 63 6c   .newObjv = (Tcl
0d50: 5f 4f 62 6a 20 2a 2a 29 20 63 6b 61 6c 6c 6f 63  _Obj **) ckalloc
0d60: 28 28 75 6e 73 69 67 6e 65 64 29 0a 20 20 20 20  ((unsigned).    
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 65               (ne
0d80: 77 4f 62 6a 63 20 2a 20 73 69 7a 65 6f 66 28 54  wObjc * sizeof(T
0d90: 63 6c 5f 4f 62 6a 20 2a 29 29 29 3b 0a 20 20 20  cl_Obj *)));.   
0da0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 63 6f        /* Copy co
0db0: 6d 6d 61 6e 64 20 70 72 65 66 69 78 20 66 72 6f  mmand prefix fro
0dc0: 6d 20 75 6e 6b 6e 6f 77 6e 20 68 61 6e 64 6c 65  m unknown handle
0dd0: 72 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 66  r. */.         f
0de0: 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c 20 68  or (i = 0; i < h
0df0: 61 6e 64 6c 65 72 4f 62 6a 63 3b 20 2b 2b 69 29  andlerObjc; ++i)
0e00: 20 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   {.             
0e10: 6e 65 77 4f 62 6a 76 5b 69 5d 20 3d 20 68 61 6e  newObjv[i] = han
0e20: 64 6c 65 72 4f 62 6a 76 5b 69 5d 3b 0a 2b 09 20  dlerObjv[i];.+. 
0e30: 20 20 20 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f     Tcl_IncrRefCo
0e40: 75 6e 74 28 6e 65 77 4f 62 6a 76 5b 69 5d 29 3b  unt(newObjv[i]);
0e50: 0a 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  .         }.    
0e60: 20 20 20 20 20 2f 2a 20 41 64 64 20 69 6e 20 63       /* Add in c
0e70: 6f 6d 6d 61 6e 64 20 6e 61 6d 65 20 61 6e 64 20  ommand name and 
0e80: 61 72 67 75 6d 65 6e 74 73 2e 20 2a 2f 0a 20 20  arguments. */.  
0e90: 20 20 20 20 20 20 20 66 6f 72 20 28 69 20 3d 20         for (i = 
0ea0: 6f 62 6a 63 2d 31 3b 20 69 20 3e 3d 20 30 3b 20  objc-1; i >= 0; 
0eb0: 2d 2d 69 29 20 7b 0a 20 20 20 20 20 20 20 20 20  --i) {.         
0ec0: 20 20 20 20 6e 65 77 4f 62 6a 76 5b 69 2b 68 61      newObjv[i+ha
0ed0: 6e 64 6c 65 72 4f 62 6a 63 5d 20 3d 20 6f 62 6a  ndlerObjc] = obj
0ee0: 76 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 20 7d  v[i];.         }
0ef0: 0a 2d 09 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f  .-.Tcl_IncrRefCo
0f00: 75 6e 74 28 6e 65 77 4f 62 6a 76 5b 30 5d 29 3b  unt(newObjv[0]);
0f10: 0a 20 09 63 6d 64 50 74 72 20 3d 20 28 43 6f 6d  . .cmdPtr = (Com
0f20: 6d 61 6e 64 20 2a 29 20 54 63 6c 5f 47 65 74 43  mand *) Tcl_GetC
0f30: 6f 6d 6d 61 6e 64 46 72 6f 6d 4f 62 6a 28 69 6e  ommandFromObj(in
0f40: 74 65 72 70 2c 20 6e 65 77 4f 62 6a 76 5b 30 5d  terp, newObjv[0]
0f50: 29 3b 0a 2d 20 20 20 20 20 20 20 20 0a 2b 09 69  );.-        .+.i
0f60: 50 74 72 2d 3e 76 61 72 46 72 61 6d 65 50 74 72  Ptr->varFramePtr
0f70: 20 3d 20 73 61 76 65 64 56 61 72 46 72 61 6d 65   = savedVarFrame
0f80: 50 74 72 3b 0a 20 09 69 66 20 28 63 6d 64 50 74  Ptr;. .if (cmdPt
0f90: 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 20 09 20  r == NULL) {. . 
0fa0: 20 20 20 54 63 6c 5f 41 70 70 65 6e 64 52 65 73     Tcl_AppendRes
0fb0: 75 6c 74 28 69 6e 74 65 72 70 2c 20 22 69 6e 76  ult(interp, "inv
0fc0: 61 6c 69 64 20 63 6f 6d 6d 61 6e 64 20 6e 61 6d  alid command nam
0fd0: 65 20 5c 22 22 2c 0a 20 09 09 20 20 20 20 54 63  e \"",. ..    Tc
0fe0: 6c 47 65 74 53 74 72 69 6e 67 28 6f 62 6a 76 5b  lGetString(objv[
0ff0: 30 5d 29 2c 20 22 5c 22 22 2c 20 4e 55 4c 4c 29  0]), "\"", NULL)
1000: 3b 0a 40 40 20 2d 33 33 33 35 2c 32 30 20 2b 33  ;.@@ -3335,20 +3
1010: 33 32 33 2c 32 33 20 40 40 0a 20 09 7d 20 65 6c  323,23 @@. .} el
1020: 73 65 20 7b 0a 20 09 20 20 20 20 69 50 74 72 2d  se {. .    iPtr-
1030: 3e 6e 75 6d 4c 65 76 65 6c 73 2b 2b 3b 0a 20 09  >numLevels++;. .
1040: 20 20 20 20 63 6f 64 65 20 3d 20 54 63 6c 45 76      code = TclEv
1050: 61 6c 4f 62 6a 76 49 6e 74 65 72 6e 61 6c 28 69  alObjvInternal(i
1060: 6e 74 65 72 70 2c 20 6e 65 77 4f 62 6a 63 2c 20  nterp, newObjc, 
1070: 6e 65 77 4f 62 6a 76 2c 20 63 6f 6d 6d 61 6e 64  newObjv, command
1080: 2c 0a 2d 09 09 09 20 20 20 20 6c 65 6e 67 74 68  ,.-...    length
1090: 2c 20 30 29 3b 0a 2b 09 09 09 20 20 20 20 6c 65  , 0);.+...    le
10a0: 6e 67 74 68 2c 20 66 6c 61 67 73 29 3b 0a 20 09  ngth, flags);. .
10b0: 20 20 20 20 69 50 74 72 2d 3e 6e 75 6d 4c 65 76      iPtr->numLev
10c0: 65 6c 73 2d 2d 3b 0a 20 09 7d 0a 2d 09 54 63 6c  els--;. .}.-.Tcl
10d0: 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6e 65  _DecrRefCount(ne
10e0: 77 4f 62 6a 76 5b 30 5d 29 3b 0a 2b 20 20 20 20  wObjv[0]);.+    
10f0: 20 20 20 20 66 6f 72 20 28 69 20 3d 20 30 3b 20      for (i = 0; 
1100: 69 20 3c 20 68 61 6e 64 6c 65 72 4f 62 6a 63 3b  i < handlerObjc;
1110: 20 2b 2b 69 29 20 7b 0a 2b 09 20 20 20 20 54 63   ++i) {.+.    Tc
1120: 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74 28 6e  l_DecrRefCount(n
1130: 65 77 4f 62 6a 76 5b 69 5d 29 3b 0a 2b 20 20 20  ewObjv[i]);.+   
1140: 20 20 20 20 20 7d 0a 20 09 63 6b 66 72 65 65 28       }. .ckfree(
1150: 28 63 68 61 72 20 2a 29 20 6e 65 77 4f 62 6a 76  (char *) newObjv
1160: 29 3b 0a 2d 09 67 6f 74 6f 20 64 6f 6e 65 3b 0a  );.-.goto done;.
1170: 2b 09 72 65 74 75 72 6e 20 63 6f 64 65 3b 0a 20  +.return code;. 
1180: 20 20 20 20 7d 0a 2b 20 20 20 20 69 50 74 72 2d      }.+    iPtr-
1190: 3e 76 61 72 46 72 61 6d 65 50 74 72 20 3d 20 73  >varFramePtr = s
11a0: 61 76 65 64 56 61 72 46 72 61 6d 65 50 74 72 3b  avedVarFramePtr;
11b0: 0a 20 0a 20 20 20 20 20 2f 2a 0a 20 20 20 20 20  . .     /*.     
11c0: 20 2a 20 43 61 6c 6c 20 74 72 61 63 65 20 66 75   * Call trace fu
11d0: 6e 63 74 69 6f 6e 73 20 69 66 20 6e 65 65 64 65  nctions if neede
11e0: 64 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 0a 2b 20  d..      */. .+ 
11f0: 20 20 20 63 6d 64 45 70 6f 63 68 20 3d 20 63 6d     cmdEpoch = cm
1200: 64 50 74 72 2d 3e 63 6d 64 45 70 6f 63 68 3b 0a  dPtr->cmdEpoch;.
1210: 20 20 20 20 20 69 66 20 28 28 63 68 65 63 6b 54       if ((checkT
1220: 72 61 63 65 73 29 20 26 26 20 28 63 6f 6d 6d 61  races) && (comma
1230: 6e 64 20 21 3d 20 4e 55 4c 4c 29 29 20 7b 0a 2d  nd != NULL)) {.-
1240: 09 69 6e 74 20 63 6d 64 45 70 6f 63 68 20 3d 20  .int cmdEpoch = 
1250: 63 6d 64 50 74 72 2d 3e 63 6d 64 45 70 6f 63 68  cmdPtr->cmdEpoch
1260: 3b 0a 20 09 63 6d 64 50 74 72 2d 3e 72 65 66 43  ;. .cmdPtr->refC
1270: 6f 75 6e 74 2b 2b 3b 0a 20 0a 20 09 2f 2a 0a 40  ount++;. . ./*.@
1280: 40 20 2d 33 33 36 36 2c 31 34 20 2b 33 33 35 37  @ -3366,14 +3357
1290: 2c 31 31 20 40 40 0a 20 09 09 20 20 20 20 63 6d  ,11 @@. ..    cm
12a0: 64 50 74 72 2c 20 63 6f 64 65 2c 20 54 43 4c 5f  dPtr, code, TCL_
12b0: 54 52 41 43 45 5f 45 4e 54 45 52 5f 45 58 45 43  TRACE_ENTER_EXEC
12c0: 2c 20 6f 62 6a 63 2c 20 6f 62 6a 76 29 3b 0a 20  , objc, objv);. 
12d0: 09 7d 0a 20 09 63 6d 64 50 74 72 2d 3e 72 65 66  .}. .cmdPtr->ref
12e0: 43 6f 75 6e 74 2d 2d 3b 0a 2d 09 69 66 20 28 63  Count--;.-.if (c
12f0: 6d 64 45 70 6f 63 68 20 21 3d 20 63 6d 64 50 74  mdEpoch != cmdPt
1300: 72 2d 3e 63 6d 64 45 70 6f 63 68 29 20 7b 0a 2d  r->cmdEpoch) {.-
1310: 09 20 20 20 20 2f 2a 0a 2d 09 20 20 20 20 20 2a  .    /*.-.     *
1320: 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 68 61 73   The command has
1330: 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 20 69   been modified i
1340: 6e 20 73 6f 6d 65 20 77 61 79 2e 0a 2d 09 20 20  n some way..-.  
1350: 20 20 20 2a 2f 0a 2d 0a 2d 09 20 20 20 20 63 68     */.-.-.    ch
1360: 65 63 6b 54 72 61 63 65 73 20 3d 20 30 3b 0a 2d  eckTraces = 0;.-
1370: 09 20 20 20 20 67 6f 74 6f 20 72 65 70 61 72 73  .    goto repars
1380: 65 42 65 63 61 75 73 65 4f 66 54 72 61 63 65 73  eBecauseOfTraces
1390: 3b 0a 2d 09 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20  ;.-.}.+    }.+  
13a0: 20 20 69 66 20 28 63 6d 64 45 70 6f 63 68 20 21    if (cmdEpoch !
13b0: 3d 20 63 6d 64 50 74 72 2d 3e 63 6d 64 45 70 6f  = cmdPtr->cmdEpo
13c0: 63 68 29 20 7b 0a 2b 09 2f 2a 20 54 68 65 20 63  ch) {.+./* The c
13d0: 6f 6d 6d 61 6e 64 20 68 61 73 20 62 65 65 6e 20  ommand has been 
13e0: 6d 6f 64 69 66 69 65 64 20 69 6e 20 73 6f 6d 65  modified in some
13f0: 20 77 61 79 2e 20 2a 2f 0a 2b 09 63 68 65 63 6b   way. */.+.check
1400: 54 72 61 63 65 73 20 3d 20 30 3b 0a 2b 09 67 6f  Traces = 0;.+.go
1410: 74 6f 20 72 65 70 61 72 73 65 42 65 63 61 75 73  to reparseBecaus
1420: 65 4f 66 54 72 61 63 65 73 3b 0a 20 20 20 20 20  eOfTraces;.     
1430: 7d 0a 20 0a 20 20 20 20 20 2f 2a 0a 40 40 20 2d  }. .     /*.@@ -
1440: 33 33 38 34 2c 36 20 2b 33 33 37 32 2c 31 31 20  3384,6 +3372,11 
1450: 40 40 0a 20 20 20 20 20 69 50 74 72 2d 3e 63 6d  @@.     iPtr->cm
1460: 64 43 6f 75 6e 74 2b 2b 3b 0a 20 20 20 20 20 69  dCount++;.     i
1470: 66 20 28 63 6f 64 65 20 3d 3d 20 54 43 4c 5f 4f  f (code == TCL_O
1480: 4b 20 26 26 20 74 72 61 63 65 43 6f 64 65 20 3d  K && traceCode =
1490: 3d 20 54 43 4c 5f 4f 4b 20 26 26 20 21 54 63 6c  = TCL_OK && !Tcl
14a0: 5f 4c 69 6d 69 74 45 78 63 65 65 64 65 64 28 69  _LimitExceeded(i
14b0: 6e 74 65 72 70 29 29 20 7b 0a 20 09 73 61 76 65  nterp)) {. .save
14c0: 64 56 61 72 46 72 61 6d 65 50 74 72 20 3d 20 69  dVarFramePtr = i
14d0: 50 74 72 2d 3e 76 61 72 46 72 61 6d 65 50 74 72  Ptr->varFramePtr
14e0: 3b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 4f 6e 6c 79  ;.+./*.+. * Only
14f0: 20 74 68 65 20 47 4c 4f 42 41 4c 20 66 6c 61 67   the GLOBAL flag
1500: 20 64 69 63 74 61 74 65 73 20 63 6f 6d 6d 61 6e   dictates comman
1510: 64 20 70 72 6f 63 65 64 75 72 65 20 65 78 65 63  d procedure exec
1520: 74 69 6f 6e 20 28 64 69 73 74 69 6e 63 74 0a 2b  tion (distinct.+
1530: 09 20 2a 20 66 72 6f 6d 20 63 6f 6d 6d 61 6e 64  . * from command
1540: 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e   name resolution
1550: 20 61 62 6f 76 65 29 20 68 61 70 70 65 6e 73 20   above) happens 
1560: 69 6e 20 61 6e 20 5b 75 70 6c 65 76 65 6c 20 23  in an [uplevel #
1570: 30 5d 0a 2b 09 20 2a 20 63 6f 6e 74 65 78 74 2e  0].+. * context.
1580: 20 28 69 50 74 72 2d 3e 76 61 72 46 72 61 6d 65   (iPtr->varFrame
1590: 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 0a 2b 09  Ptr == NULL) .+.
15a0: 20 2a 2f 0a 20 09 69 66 20 28 66 6c 61 67 73 20   */. .if (flags 
15b0: 26 20 54 43 4c 5f 45 56 41 4c 5f 47 4c 4f 42 41  & TCL_EVAL_GLOBA
15c0: 4c 29 20 7b 0a 20 09 20 20 20 20 69 50 74 72 2d  L) {. .    iPtr-
15d0: 3e 76 61 72 46 72 61 6d 65 50 74 72 20 3d 20 4e  >varFramePtr = N
15e0: 55 4c 4c 3b 0a 20 09 7d 0a 40 40 20 2d 33 34 33  ULL;. .}.@@ -343
15f0: 38 2c 38 20 2b 33 34 33 31 2c 36 20 40 40 0a 20  8,8 +3431,6 @@. 
1600: 20 20 20 20 69 66 20 28 2a 28 69 50 74 72 2d 3e      if (*(iPtr->
1610: 72 65 73 75 6c 74 29 20 21 3d 20 30 29 20 7b 0a  result) != 0) {.
1620: 20 09 28 76 6f 69 64 29 20 54 63 6c 5f 47 65 74   .(void) Tcl_Get
1630: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70  ObjResult(interp
1640: 29 3b 0a 20 20 20 20 20 7d 0a 2d 0a 2d 20 20 64  );.     }.-.-  d
1650: 6f 6e 65 3a 0a 20 20 20 20 20 72 65 74 75 72 6e  one:.     return
1660: 20 63 6f 64 65 3b 0a 20 7d 0a 20 0c 0a 49 6e 64   code;. }. ..Ind
1670: 65 78 3a 20 74 65 73 74 73 2f 6e 61 6d 65 73 70  ex: tests/namesp
1680: 61 63 65 2e 74 65 73 74 0a 3d 3d 3d 3d 3d 3d 3d  ace.test.=======
1690: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
16a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
16b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
16c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53  ============.RCS
16d0: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f   file: /cvsroot/
16e0: 74 63 6c 2f 74 63 6c 2f 74 65 73 74 73 2f 6e 61  tcl/tcl/tests/na
16f0: 6d 65 73 70 61 63 65 2e 74 65 73 74 2c 76 0a 72  mespace.test,v.r
1700: 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69  etrieving revisi
1710: 6f 6e 20 31 2e 35 33 0a 64 69 66 66 20 2d 75 20  on 1.53.diff -u 
1720: 2d 72 31 2e 35 33 20 6e 61 6d 65 73 70 61 63 65  -r1.53 namespace
1730: 2e 74 65 73 74 0a 2d 2d 2d 20 74 65 73 74 73 2f  .test.--- tests/
1740: 6e 61 6d 65 73 70 61 63 65 2e 74 65 73 74 09 31  namespace.test.1
1750: 20 46 65 62 20 32 30 30 36 20 31 38 3a 32 37 3a   Feb 2006 18:27:
1760: 34 38 20 2d 30 30 30 30 09 31 2e 35 33 0a 2b 2b  48 -0000.1.53.++
1770: 2b 20 74 65 73 74 73 2f 6e 61 6d 65 73 70 61 63  + tests/namespac
1780: 65 2e 74 65 73 74 09 32 32 20 46 65 62 20 32 30  e.test.22 Feb 20
1790: 30 36 20 31 37 3a 32 37 3a 32 38 20 2d 30 30 30  06 17:27:28 -000
17a0: 30 0a 40 40 20 2d 32 34 39 32 2c 36 20 2b 32 34  0.@@ -2492,6 +24
17b0: 39 32 2c 37 33 20 40 40 0a 20 20 20 20 20 24 69  92,73 @@.     $i
17c0: 20 69 6e 76 6f 6b 65 68 69 64 64 65 6e 20 70 72   invokehidden pr
17d0: 6f 63 20 75 6e 6b 6e 6f 77 6e 20 61 72 67 73 20  oc unknown args 
17e0: 7b 20 72 65 74 75 72 6e 20 22 46 49 4e 45 22 20  { return "FINE" 
17f0: 7d 0a 20 20 20 20 20 24 69 20 65 76 61 6c 20 7b  }.     $i eval {
1800: 20 66 6f 6f 20 62 61 72 20 62 6f 62 20 7d 0a 20   foo bar bob }. 
1810: 7d 20 7b 46 49 4e 45 7d 0a 2b 74 65 73 74 20 6e  } {FINE}.+test n
1820: 61 6d 65 73 70 61 63 65 2d 35 32 2e 39 20 7b 75  amespace-52.9 {u
1830: 6e 6b 6e 6f 77 6e 3a 20 72 65 66 63 6f 75 6e 74  nknown: refcount
1840: 69 6e 67 7d 20 2d 73 65 74 75 70 20 7b 0a 2b 20  ing} -setup {.+ 
1850: 20 20 20 70 72 6f 63 20 74 68 69 73 20 61 72 67     proc this arg
1860: 73 20 7b 0a 2b 09 75 6e 73 65 74 20 61 72 67 73  s {.+.unset args
1870: 09 09 3b 23 20 73 74 6f 70 20 73 68 61 72 69 6e  ..;# stop sharin
1880: 67 0a 2b 09 73 65 74 20 63 6f 70 79 20 5b 6e 61  g.+.set copy [na
1890: 6d 65 73 70 61 63 65 20 75 6e 6b 6e 6f 77 6e 5d  mespace unknown]
18a0: 0a 2b 09 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  .+.string length
18b0: 20 24 63 6f 70 79 09 3b 23 20 73 68 69 6d 6d 65   $copy.;# shimme
18c0: 72 20 61 77 61 79 20 6c 69 73 74 20 72 65 70 0a  r away list rep.
18d0: 2b 09 69 6e 66 6f 20 6c 65 76 65 6c 20 30 0a 2b  +.info level 0.+
18e0: 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 68      }.+    set h
18f0: 61 6e 64 6c 65 72 20 5b 6e 61 6d 65 73 70 61 63  andler [namespac
1900: 65 20 75 6e 6b 6e 6f 77 6e 5d 0a 2b 20 20 20 20  e unknown].+    
1910: 6e 61 6d 65 73 70 61 63 65 20 75 6e 6b 6e 6f 77  namespace unknow
1920: 6e 20 7b 74 68 69 73 20 69 73 20 61 20 74 65 73  n {this is a tes
1930: 74 7d 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 72  t}.+    catch {r
1940: 65 6e 61 6d 65 20 6e 6f 53 75 63 68 43 6f 6d 6d  ename noSuchComm
1950: 61 6e 64 20 7b 7d 7d 0a 2b 7d 20 2d 62 6f 64 79  and {}}.+} -body
1960: 20 7b 0a 2b 20 20 20 20 6e 6f 53 75 63 68 43 6f   {.+    noSuchCo
1970: 6d 6d 61 6e 64 0a 2b 7d 20 2d 63 6c 65 61 6e 75  mmand.+} -cleanu
1980: 70 20 7b 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61  p {.+    namespa
1990: 63 65 20 75 6e 6b 6e 6f 77 6e 20 24 68 61 6e 64  ce unknown $hand
19a0: 6c 65 72 0a 2b 20 20 20 20 72 65 6e 61 6d 65 20  ler.+    rename 
19b0: 74 68 69 73 20 7b 7d 0a 2b 7d 20 2d 72 65 73 75  this {}.+} -resu
19c0: 6c 74 20 7b 74 68 69 73 20 69 73 20 61 20 74 65  lt {this is a te
19d0: 73 74 20 6e 6f 53 75 63 68 43 6f 6d 6d 61 6e 64  st noSuchCommand
19e0: 7d 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70 61 63  }.+test namespac
19f0: 65 2d 35 32 2e 31 30 20 7b 75 6e 6b 6e 6f 77 6e  e-52.10 {unknown
1a00: 3a 20 77 69 74 68 20 54 43 4c 5f 45 56 41 4c 5f  : with TCL_EVAL_
1a10: 47 4c 4f 42 41 4c 7d 20 2d 73 65 74 75 70 20 7b  GLOBAL} -setup {
1a20: 0a 2b 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 75  .+    rename ::u
1a30: 6e 6b 6e 6f 77 6e 20 75 6e 6b 6e 6f 77 6e 2e 73  nknown unknown.s
1a40: 61 76 65 0a 2b 20 20 20 20 70 72 6f 63 20 3a 3a  ave.+    proc ::
1a50: 75 6e 6b 6e 6f 77 6e 20 61 72 67 73 20 7b 0a 2b  unknown args {.+
1a60: 09 73 65 74 20 63 61 6c 6c 65 72 20 5b 75 70 6c  .set caller [upl
1a70: 65 76 65 6c 20 31 20 7b 6e 61 6d 65 73 70 61 63  evel 1 {namespac
1a80: 65 20 63 75 72 72 65 6e 74 7d 5d 0a 2b 09 6e 61  e current}].+.na
1a90: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 24 63 61  mespace eval $ca
1aa0: 6c 6c 65 72 20 7b 0a 2b 09 20 20 20 20 76 61 72  ller {.+.    var
1ab0: 69 61 62 6c 65 20 66 6f 6f 0a 2b 09 20 20 20 20  iable foo.+.    
1ac0: 72 65 74 75 72 6e 20 24 66 6f 6f 0a 2b 09 7d 0a  return $foo.+.}.
1ad0: 2b 20 20 20 20 7d 0a 2b 20 20 20 20 63 61 74 63  +    }.+    catc
1ae0: 68 20 7b 72 65 6e 61 6d 65 20 3a 3a 6e 6f 53 75  h {rename ::noSu
1af0: 63 68 43 6f 6d 6d 61 6e 64 20 7b 7d 7d 0a 2b 7d  chCommand {}}.+}
1b00: 20 2d 62 6f 64 79 20 7b 0a 2b 20 20 20 20 6e 61   -body {.+    na
1b10: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 20  mespace eval :: 
1b20: 7b 0a 2b 09 76 61 72 69 61 62 6c 65 20 66 6f 6f  {.+.variable foo
1b30: 20 53 55 43 43 45 53 53 0a 2b 20 20 20 20 7d 0a   SUCCESS.+    }.
1b40: 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  +    namespace e
1b50: 76 61 6c 20 74 65 73 74 5f 6e 73 5f 31 20 7b 0a  val test_ns_1 {.
1b60: 2b 09 76 61 72 69 61 62 6c 65 20 66 6f 6f 20 46  +.variable foo F
1b70: 41 49 4c 0a 2b 09 74 65 73 74 65 76 61 6c 6f 62  AIL.+.testevalob
1b80: 6a 76 20 31 20 6e 6f 53 75 63 68 43 6f 6d 6d 61  jv 1 noSuchComma
1b90: 6e 64 0a 2b 20 20 20 20 7d 0a 2b 7d 20 2d 63 6c  nd.+    }.+} -cl
1ba0: 65 61 6e 75 70 20 7b 0a 2b 20 20 20 20 75 6e 73  eanup {.+    uns
1bb0: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a  et -nocomplain :
1bc0: 3a 66 6f 6f 0a 2b 20 20 20 20 6e 61 6d 65 73 70  :foo.+    namesp
1bd0: 61 63 65 20 64 65 6c 65 74 65 20 74 65 73 74 5f  ace delete test_
1be0: 6e 73 5f 31 0a 2b 20 20 20 20 72 65 6e 61 6d 65  ns_1.+    rename
1bf0: 20 3a 3a 75 6e 6b 6e 6f 77 6e 20 7b 7d 0a 2b 20   ::unknown {}.+ 
1c00: 20 20 20 72 65 6e 61 6d 65 20 75 6e 6b 6e 6f 77     rename unknow
1c10: 6e 2e 73 61 76 65 20 3a 3a 75 6e 6b 6e 6f 77 6e  n.save ::unknown
1c20: 0a 2b 7d 20 2d 72 65 73 75 6c 74 20 53 55 43 43  .+} -result SUCC
1c30: 45 53 53 0a 2b 74 65 73 74 20 6e 61 6d 65 73 70  ESS.+test namesp
1c40: 61 63 65 2d 35 32 2e 31 31 20 7b 75 6e 6b 6e 6f  ace-52.11 {unkno
1c50: 77 6e 3a 20 77 69 74 68 20 54 43 4c 5f 45 56 41  wn: with TCL_EVA
1c60: 4c 5f 49 4e 56 4f 4b 45 7d 20 2d 73 65 74 75 70  L_INVOKE} -setup
1c70: 20 7b 0a 2b 20 20 20 20 73 65 74 20 68 61 6e 64   {.+    set hand
1c80: 6c 65 72 20 5b 6e 61 6d 65 73 70 61 63 65 20 65  ler [namespace e
1c90: 76 61 6c 20 3a 3a 20 7b 6e 61 6d 65 73 70 61 63  val :: {namespac
1ca0: 65 20 75 6e 6b 6e 6f 77 6e 7d 5d 0a 2b 20 20 20  e unknown}].+   
1cb0: 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20   namespace eval 
1cc0: 3a 3a 20 7b 6e 61 6d 65 73 70 61 63 65 20 75 6e  :: {namespace un
1cd0: 6b 6e 6f 77 6e 20 75 6e 6b 6e 6f 77 6e 7d 0a 2b  known unknown}.+
1ce0: 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 75 6e 6b      rename ::unk
1cf0: 6e 6f 77 6e 20 75 6e 6b 6e 6f 77 6e 2e 73 61 76  nown unknown.sav
1d00: 65 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65  e.+    namespace
1d10: 20 65 76 61 6c 20 3a 3a 20 7b 0a 2b 09 70 72 6f   eval :: {.+.pro
1d20: 63 20 75 6e 6b 6e 6f 77 6e 20 61 72 67 73 20 7b  c unknown args {
1d30: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 53 55  .+.    return SU
1d40: 43 43 45 53 53 0a 2b 09 7d 0a 2b 20 20 20 20 7d  CCESS.+.}.+    }
1d50: 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 72 65 6e  .+    catch {ren
1d60: 61 6d 65 20 3a 3a 6e 6f 53 75 63 68 43 6f 6d 6d  ame ::noSuchComm
1d70: 61 6e 64 20 7b 7d 7d 0a 2b 20 20 20 20 73 65 74  and {}}.+    set
1d80: 20 73 6c 61 76 65 20 5b 69 6e 74 65 72 70 20 63   slave [interp c
1d90: 72 65 61 74 65 5d 0a 2b 7d 20 2d 62 6f 64 79 20  reate].+} -body 
1da0: 7b 0a 2b 20 20 20 20 24 73 6c 61 76 65 20 61 6c  {.+    $slave al
1db0: 69 61 73 20 62 61 72 20 6e 6f 53 75 63 68 43 6f  ias bar noSuchCo
1dc0: 6d 6d 61 6e 64 0a 2b 20 20 20 20 6e 61 6d 65 73  mmand.+    names
1dd0: 70 61 63 65 20 65 76 61 6c 20 74 65 73 74 5f 6e  pace eval test_n
1de0: 73 5f 31 20 7b 0a 2b 09 6e 61 6d 65 73 70 61 63  s_1 {.+.namespac
1df0: 65 20 75 6e 6b 6e 6f 77 6e 20 75 6e 6b 6e 6f 77  e unknown unknow
1e00: 6e 0a 2b 09 70 72 6f 63 20 75 6e 6b 6e 6f 77 6e  n.+.proc unknown
1e10: 20 61 72 67 73 20 7b 0a 2b 09 20 20 20 20 72 65   args {.+.    re
1e20: 74 75 72 6e 20 46 41 49 4c 0a 2b 09 7d 0a 2b 09  turn FAIL.+.}.+.
1e30: 24 73 6c 61 76 65 20 65 76 61 6c 20 62 61 72 0a  $slave eval bar.
1e40: 2b 20 20 20 20 7d 0a 2b 7d 20 2d 63 6c 65 61 6e  +    }.+} -clean
1e50: 75 70 20 7b 0a 2b 20 20 20 20 69 6e 74 65 72 70  up {.+    interp
1e60: 20 64 65 6c 65 74 65 20 24 73 6c 61 76 65 0a 2b   delete $slave.+
1e70: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 64 65      namespace de
1e80: 6c 65 74 65 20 74 65 73 74 5f 6e 73 5f 31 0a 2b  lete test_ns_1.+
1e90: 20 20 20 20 72 65 6e 61 6d 65 20 3a 3a 75 6e 6b      rename ::unk
1ea0: 6e 6f 77 6e 20 7b 7d 0a 2b 20 20 20 20 72 65 6e  nown {}.+    ren
1eb0: 61 6d 65 20 75 6e 6b 6e 6f 77 6e 2e 73 61 76 65  ame unknown.save
1ec0: 20 3a 3a 75 6e 6b 6e 6f 77 6e 0a 2b 20 20 20 20   ::unknown.+    
1ed0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
1ee0: 3a 20 5b 6c 69 73 74 20 6e 61 6d 65 73 70 61 63  : [list namespac
1ef0: 65 20 75 6e 6b 6e 6f 77 6e 20 24 68 61 6e 64 6c  e unknown $handl
1f00: 65 72 5d 0a 2b 7d 20 2d 72 65 73 75 6c 74 20 53  er].+} -result S
1f10: 55 43 43 45 53 53 0a 20 20 20 20 20 0a 20 23 20  UCCESS.     . # 
1f20: 63 6c 65 61 6e 75 70 0a 20 63 61 74 63 68 20 7b  cleanup. catch {
1f30: 72 65 6e 61 6d 65 20 63 6d 64 31 20 7b 7d 7d 0a  rename cmd1 {}}.