Tcl Source Code

Hex Artifact Content
Login

Artifact e7519f8111ea0af0104b866bc47f979ee329ab59:

Attachment "1655294.patch" to ticket [1655294fff] added by dgp 2007-02-09 04:34:49.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74  Index: generic/t
0010: 63 6c 4e 61 6d 65 73 70 2e 63 0a 3d 3d 3d 3d 3d  clNamesp.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 3d 0a 52  ==============.R
0060: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f  CS file: /cvsroo
0070: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69  t/tcl/tcl/generi
0080: 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 2c 76 0a  c/tclNamesp.c,v.
0090: 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69 73  retrieving revis
00a0: 69 6f 6e 20 31 2e 33 31 2e 32 2e 31 33 0a 64 69  ion 1.31.2.13.di
00b0: 66 66 20 2d 75 20 2d 72 31 2e 33 31 2e 32 2e 31  ff -u -r1.31.2.1
00c0: 33 20 74 63 6c 4e 61 6d 65 73 70 2e 63 0a 2d 2d  3 tclNamesp.c.--
00d0: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d  - generic/tclNam
00e0: 65 73 70 2e 63 09 32 38 20 4e 6f 76 20 32 30 30  esp.c.28 Nov 200
00f0: 36 20 32 32 3a 32 30 3a 30 32 20 2d 30 30 30 30  6 22:20:02 -0000
0100: 09 31 2e 33 31 2e 32 2e 31 33 0a 2b 2b 2b 20 67  .1.31.2.13.+++ g
0110: 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73 70  eneric/tclNamesp
0120: 2e 63 09 38 20 46 65 62 20 32 30 30 37 20 32 31  .c.8 Feb 2007 21
0130: 3a 33 32 3a 32 33 20 2d 30 30 30 30 0a 40 40 20  :32:23 -0000.@@ 
0140: 2d 32 39 39 2c 36 20 2b 32 39 39 2c 37 20 40 40  -299,6 +299,7 @@
0150: 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20 6e  .     }. .     n
0160: 73 50 74 72 2d 3e 61 63 74 69 76 61 74 69 6f 6e  sPtr->activation
0170: 43 6f 75 6e 74 2b 2b 3b 0a 2b 20 20 20 20 6e 73  Count++;.+    ns
0180: 50 74 72 2d 3e 72 65 66 43 6f 75 6e 74 2b 2b 3b  Ptr->refCount++;
0190: 0a 20 20 20 20 20 66 72 61 6d 65 50 74 72 2d 3e  .     framePtr->
01a0: 6e 73 50 74 72 20 3d 20 6e 73 50 74 72 3b 0a 20  nsPtr = nsPtr;. 
01b0: 20 20 20 20 66 72 61 6d 65 50 74 72 2d 3e 69 73      framePtr->is
01c0: 50 72 6f 63 43 61 6c 6c 46 72 61 6d 65 20 3d 20  ProcCallFrame = 
01d0: 69 73 50 72 6f 63 43 61 6c 6c 46 72 61 6d 65 3b  isProcCallFrame;
01e0: 0a 20 20 20 20 20 66 72 61 6d 65 50 74 72 2d 3e  .     framePtr->
01f0: 6f 62 6a 63 20 3d 20 30 3b 0a 40 40 20 2d 33 38  objc = 0;.@@ -38
0200: 34 2c 36 20 2b 33 38 35 2c 31 30 20 40 40 0a 20  4,6 +385,10 @@. 
0210: 09 20 20 20 20 26 26 20 28 6e 73 50 74 72 2d 3e  .    && (nsPtr->
0220: 61 63 74 69 76 61 74 69 6f 6e 43 6f 75 6e 74 20  activationCount 
0230: 3d 3d 20 30 29 29 20 7b 0a 20 20 20 20 20 20 20  == 0)) {.       
0240: 20 20 54 63 6c 5f 44 65 6c 65 74 65 4e 61 6d 65    Tcl_DeleteName
0250: 73 70 61 63 65 28 28 54 63 6c 5f 4e 61 6d 65 73  space((Tcl_Names
0260: 70 61 63 65 20 2a 29 20 6e 73 50 74 72 29 3b 0a  pace *) nsPtr);.
0270: 20 20 20 20 20 7d 0a 2b 20 20 20 20 6e 73 50 74       }.+    nsPt
0280: 72 2d 3e 72 65 66 43 6f 75 6e 74 2d 2d 3b 0a 2b  r->refCount--;.+
0290: 20 20 20 20 69 66 20 28 28 6e 73 50 74 72 2d 3e      if ((nsPtr->
02a0: 72 65 66 43 6f 75 6e 74 20 3d 3d 20 30 29 20 26  refCount == 0) &
02b0: 26 20 28 6e 73 50 74 72 2d 3e 66 6c 61 67 73 20  & (nsPtr->flags 
02c0: 26 20 4e 53 5f 44 45 41 44 29 29 20 7b 0a 2b 09  & NS_DEAD)) {.+.
02d0: 4e 61 6d 65 73 70 61 63 65 46 72 65 65 28 6e 73  NamespaceFree(ns
02e0: 50 74 72 29 3b 0a 2b 20 20 20 20 7d 0a 20 20 20  Ptr);.+    }.   
02f0: 20 20 66 72 61 6d 65 50 74 72 2d 3e 6e 73 50 74    framePtr->nsPt
0300: 72 20 3d 20 4e 55 4c 4c 3b 0a 20 7d 0a 20 0c 0a  r = NULL;. }. ..
0310: 40 40 20 2d 36 30 32 2c 37 20 2b 36 30 37 2c 37  @@ -602,7 +607,7
0320: 20 40 40 0a 20 20 20 20 20 20 2a 20 46 72 65 65   @@.      * Free
0330: 4e 73 4e 61 6d 65 49 6e 74 65 72 6e 61 6c 52 65  NsNameInternalRe
0340: 70 20 77 68 65 6e 20 69 74 73 20 72 65 66 43 6f  p when its refCo
0350: 75 6e 74 20 72 65 61 63 68 65 73 20 30 2e 0a 20  unt reaches 0.. 
0360: 20 20 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 69       */. .-    i
0370: 66 20 28 6e 73 50 74 72 2d 3e 61 63 74 69 76 61  f (nsPtr->activa
0380: 74 69 6f 6e 43 6f 75 6e 74 20 3e 20 30 29 20 7b  tionCount > 0) {
0390: 0a 2b 20 20 20 20 69 66 20 28 30 20 26 26 20 6e  .+    if (0 && n
03a0: 73 50 74 72 2d 3e 61 63 74 69 76 61 74 69 6f 6e  sPtr->activation
03b0: 43 6f 75 6e 74 20 3e 20 30 29 20 7b 0a 20 20 20  Count > 0) {.   
03c0: 20 20 20 20 20 20 6e 73 50 74 72 2d 3e 66 6c 61        nsPtr->fla
03d0: 67 73 20 7c 3d 20 4e 53 5f 44 59 49 4e 47 3b 0a  gs |= NS_DYING;.
03e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 73 50           if (nsP
03f0: 74 72 2d 3e 70 61 72 65 6e 74 50 74 72 20 21 3d  tr->parentPtr !=
0400: 20 4e 55 4c 4c 29 20 7b 0a 20 20 20 20 20 20 20   NULL) {.       
0410: 20 20 20 20 20 20 65 6e 74 72 79 50 74 72 20 3d        entryPtr =
0420: 20 54 63 6c 5f 46 69 6e 64 48 61 73 68 45 6e 74   Tcl_FindHashEnt
0430: 72 79 28 26 6e 73 50 74 72 2d 3e 70 61 72 65 6e  ry(&nsPtr->paren
0440: 74 50 74 72 2d 3e 63 68 69 6c 64 54 61 62 6c 65  tPtr->childTable
0450: 2c 0a 40 40 20 2d 36 33 34 2c 39 20 2b 36 33 39  ,.@@ -634,9 +639
0460: 2c 31 32 20 40 40 0a 20 09 20 20 20 20 20 2a 2f  ,12 @@. .     */
0470: 0a 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  . .             
0480: 54 63 6c 44 65 6c 65 74 65 4e 61 6d 65 73 70 61  TclDeleteNamespa
0490: 63 65 56 61 72 73 28 6e 73 50 74 72 29 3b 0a 2b  ceVars(nsPtr);.+
04a0: 09 20 20 20 20 54 63 6c 5f 49 6e 69 74 48 61 73  .    Tcl_InitHas
04b0: 68 54 61 62 6c 65 28 26 6e 73 50 74 72 2d 3e 76  hTable(&nsPtr->v
04c0: 61 72 54 61 62 6c 65 2c 20 54 43 4c 5f 53 54 52  arTable, TCL_STR
04d0: 49 4e 47 5f 4b 45 59 53 29 3b 0a 20 09 20 20 20  ING_KEYS);. .   
04e0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 54   .             T
04f0: 63 6c 5f 44 65 6c 65 74 65 48 61 73 68 54 61 62  cl_DeleteHashTab
0500: 6c 65 28 26 6e 73 50 74 72 2d 3e 63 68 69 6c 64  le(&nsPtr->child
0510: 54 61 62 6c 65 29 3b 0a 2b 09 20 20 20 20 54 63  Table);.+.    Tc
0520: 6c 5f 49 6e 69 74 48 61 73 68 54 61 62 6c 65 28  l_InitHashTable(
0530: 26 6e 73 50 74 72 2d 3e 63 68 69 6c 64 54 61 62  &nsPtr->childTab
0540: 6c 65 2c 20 54 43 4c 5f 53 54 52 49 4e 47 5f 4b  le, TCL_STRING_K
0550: 45 59 53 29 3b 0a 20 20 20 20 20 20 20 20 20 20  EYS);.          
0560: 20 20 20 54 63 6c 5f 44 65 6c 65 74 65 48 61 73     Tcl_DeleteHas
0570: 68 54 61 62 6c 65 28 26 6e 73 50 74 72 2d 3e 63  hTable(&nsPtr->c
0580: 6d 64 54 61 62 6c 65 29 3b 0a 2b 09 20 20 20 20  mdTable);.+.    
0590: 54 63 6c 5f 49 6e 69 74 48 61 73 68 54 61 62 6c  Tcl_InitHashTabl
05a0: 65 28 26 6e 73 50 74 72 2d 3e 63 6d 64 54 61 62  e(&nsPtr->cmdTab
05b0: 6c 65 2c 20 54 43 4c 5f 53 54 52 49 4e 47 5f 4b  le, TCL_STRING_K
05c0: 45 59 53 29 3b 0a 20 0a 20 20 20 20 20 20 20 20  EYS);. .        
05d0: 20 20 20 20 20 2f 2a 0a 20 20 20 20 20 20 20 20       /*.        
05e0: 20 20 20 20 20 20 2a 20 49 66 20 74 68 65 20 72        * If the r
05f0: 65 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 20 69  eference count i
0600: 73 20 30 2c 20 74 68 65 6e 20 64 69 73 63 61 72  s 0, then discar
0610: 64 20 74 68 65 20 6e 61 6d 65 73 70 61 63 65 2e  d the namespace.
0620: 0a                                               .