Tcl Source Code

Hex Artifact Content
Login

Artifact 60f97c6a23246d7147f554ea84da80a4bba306f8:

Attachment "errorstack.patch" to ticket [2868499fff] added by ferrieux 2009-10-07 14:04:27.
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 34 30 34 0a 64 69 66 66 20 2d 75 20  n 1.404.diff -u 
00b0: 2d 72 31 2e 34 30 34 20 74 63 6c 42 61 73 69 63  -r1.404 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 31 31 20 53 65 70  clBasic.c.11 Sep
00e0: 20 32 30 30 39 20 32 30 3a 31 33 3a 32 37 20 2d   2009 20:13:27 -
00f0: 30 30 30 30 09 31 2e 34 30 34 0a 2b 2b 2b 20 67  0000.1.404.+++ g
0100: 65 6e 65 72 69 63 2f 74 63 6c 42 61 73 69 63 2e  eneric/tclBasic.
0110: 63 09 37 20 4f 63 74 20 32 30 30 39 20 30 37 3a  c.7 Oct 2009 07:
0120: 30 31 3a 31 39 20 2d 30 30 30 30 0a 40 40 20 2d  01:19 -0000.@@ -
0130: 34 32 34 2c 36 20 2b 34 32 34 2c 34 31 20 40 40  424,6 +424,41 @@
0140: 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  . /*.  *--------
0150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20  --------------. 
0190: 20 2a 0a 2b 20 2a 20 45 72 72 6f 72 53 74 61 63   *.+ * ErrorStac
01a0: 6b 52 65 61 64 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a  kRead --.+ *.+ *
01b0: 09 43 61 6c 6c 65 64 20 77 68 65 6e 20 74 68 65  .Called when the
01c0: 20 3a 3a 74 63 6c 3a 3a 65 72 72 6f 72 53 74 61   ::tcl::errorSta
01d0: 63 6b 20 76 61 72 69 61 62 6c 65 20 69 73 20 72  ck variable is r
01e0: 65 61 64 2e 20 43 6f 70 69 65 73 20 74 68 65 20  ead. Copies the 
01f0: 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a 2b 20  current value.+ 
0200: 2a 09 6f 66 20 74 68 65 20 69 6e 74 65 72 70 27  *.of the interp'
0210: 73 20 65 72 72 6f 72 53 74 61 63 6b 20 66 69 65  s errorStack fie
0220: 6c 64 20 69 6e 74 6f 20 3a 3a 74 63 6c 3a 3a 65  ld into ::tcl::e
0230: 72 72 6f 72 53 74 61 63 6b 2e 0a 2b 20 2a 0a 2b  rrorStack..+ *.+
0240: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09   * Results:.+ *.
0250: 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69  None..+ *.+ * Si
0260: 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09  de effects:.+ *.
0270: 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d  None..+ *.+ *---
0280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02c0: 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74  ---.+ */.+.+stat
02d0: 69 63 20 63 68 61 72 20 2a 0a 2b 45 72 72 6f 72  ic char *.+Error
02e0: 53 74 61 63 6b 52 65 61 64 28 0a 2b 20 20 20 20  StackRead(.+    
02f0: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
0300: 74 44 61 74 61 2c 0a 2b 20 20 20 20 54 63 6c 5f  tData,.+    Tcl_
0310: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a  Interp *interp,.
0320: 2b 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  +    const char 
0330: 2a 6e 61 6d 65 31 2c 0a 2b 20 20 20 20 63 6f 6e  *name1,.+    con
0340: 73 74 20 63 68 61 72 20 2a 6e 61 6d 65 32 2c 0a  st char *name2,.
0350: 2b 20 20 20 20 69 6e 74 20 66 6c 61 67 73 29 0a  +    int flags).
0360: 2b 7b 0a 2b 20 20 20 20 49 6e 74 65 72 70 20 2a  +{.+    Interp *
0370: 69 50 74 72 20 3d 20 28 49 6e 74 65 72 70 20 2a  iPtr = (Interp *
0380: 29 20 69 6e 74 65 72 70 3b 0a 2b 0a 2b 20 20 20  ) interp;.+.+   
0390: 20 69 66 20 28 54 63 6c 5f 49 6e 74 65 72 70 44   if (Tcl_InterpD
03a0: 65 6c 65 74 65 64 28 69 6e 74 65 72 70 29 20 7c  eleted(interp) |
03b0: 7c 20 28 21 69 50 74 72 2d 3e 75 73 65 45 72 72  | (!iPtr->useErr
03c0: 6f 72 53 74 61 63 6b 29 29 20 7b 0a 2b 09 72 65  orStack)) {.+.re
03d0: 74 75 72 6e 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20  turn NULL;.+    
03e0: 7d 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 53 65  }.+    Tcl_ObjSe
03f0: 74 56 61 72 32 28 69 6e 74 65 72 70 2c 20 69 50  tVar2(interp, iP
0400: 74 72 2d 3e 65 73 56 61 72 2c 20 4e 55 4c 4c 2c  tr->esVar, NULL,
0410: 0a 2b 09 09 20 20 20 69 50 74 72 2d 3e 65 72 72  .+..   iPtr->err
0420: 6f 72 53 74 61 63 6b 2c 20 30 29 3b 0a 2b 20 20  orStack, 0);.+  
0430: 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 2b    return NULL;.+
0440: 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d  }.+..+/*.+ *----
0450: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0490: 2d 2d 0a 2b 20 2a 0a 20 20 2a 20 54 63 6c 5f 43  --.+ *.  * Tcl_C
04a0: 72 65 61 74 65 49 6e 74 65 72 70 20 2d 2d 0a 20  reateInterp --. 
04b0: 20 2a 0a 20 20 2a 09 43 72 65 61 74 65 20 61 20   *.  *.Create a 
04c0: 6e 65 77 20 54 43 4c 20 63 6f 6d 6d 61 6e 64 20  new TCL command 
04d0: 69 6e 74 65 72 70 72 65 74 65 72 2e 0a 40 40 20  interpreter..@@ 
04e0: 2d 35 33 30 2c 36 20 2b 35 36 35 2c 31 32 20 40  -530,6 +565,12 @
04f0: 40 0a 20 20 20 20 20 69 50 74 72 2d 3e 65 72 72  @.     iPtr->err
0500: 6f 72 49 6e 66 6f 20 3d 20 4e 55 4c 4c 3b 0a 20  orInfo = NULL;. 
0510: 20 20 20 20 54 63 6c 4e 65 77 4c 69 74 65 72 61      TclNewLitera
0520: 6c 53 74 72 69 6e 67 4f 62 6a 28 69 50 74 72 2d  lStringObj(iPtr-
0530: 3e 65 69 56 61 72 2c 20 22 3a 3a 65 72 72 6f 72  >eiVar, "::error
0540: 49 6e 66 6f 22 29 3b 0a 20 20 20 20 20 54 63 6c  Info");.     Tcl
0550: 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 69 50  _IncrRefCount(iP
0560: 74 72 2d 3e 65 69 56 61 72 29 3b 0a 2b 20 20 20  tr->eiVar);.+   
0570: 20 54 63 6c 4e 65 77 4c 69 74 65 72 61 6c 53 74   TclNewLiteralSt
0580: 72 69 6e 67 4f 62 6a 28 69 50 74 72 2d 3e 65 73  ringObj(iPtr->es
0590: 56 61 72 2c 20 22 3a 3a 74 63 6c 3a 3a 65 72 72  Var, "::tcl::err
05a0: 6f 72 53 74 61 63 6b 22 29 3b 0a 2b 20 20 20 20  orStack");.+    
05b0: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
05c0: 28 69 50 74 72 2d 3e 65 73 56 61 72 29 3b 0a 2b  (iPtr->esVar);.+
05d0: 20 20 20 20 69 50 74 72 2d 3e 65 72 72 6f 72 53      iPtr->errorS
05e0: 74 61 63 6b 20 3d 20 54 63 6c 5f 4e 65 77 4c 69  tack = Tcl_NewLi
05f0: 73 74 4f 62 6a 28 30 2c 20 4e 55 4c 4c 29 3b 0a  stObj(0, NULL);.
0600: 2b 20 20 20 20 54 63 6c 5f 49 6e 63 72 52 65 66  +    Tcl_IncrRef
0610: 43 6f 75 6e 74 28 69 50 74 72 2d 3e 65 72 72 6f  Count(iPtr->erro
0620: 72 53 74 61 63 6b 29 3b 0a 2b 20 20 20 20 69 50  rStack);.+    iP
0630: 74 72 2d 3e 75 73 65 45 72 72 6f 72 53 74 61 63  tr->useErrorStac
0640: 6b 3d 30 3b 0a 2b 20 20 20 20 69 50 74 72 2d 3e  k=0;.+    iPtr->
0650: 72 65 73 65 74 45 72 72 6f 72 53 74 61 63 6b 20  resetErrorStack 
0660: 3d 20 31 3b 0a 20 20 20 20 20 69 50 74 72 2d 3e  = 1;.     iPtr->
0670: 65 72 72 6f 72 43 6f 64 65 20 3d 20 4e 55 4c 4c  errorCode = NULL
0680: 3b 0a 20 20 20 20 20 54 63 6c 4e 65 77 4c 69 74  ;.     TclNewLit
0690: 65 72 61 6c 53 74 72 69 6e 67 4f 62 6a 28 69 50  eralStringObj(iP
06a0: 74 72 2d 3e 65 63 56 61 72 2c 20 22 3a 3a 65 72  tr->ecVar, "::er
06b0: 72 6f 72 43 6f 64 65 22 29 3b 0a 20 20 20 20 20  rorCode");.     
06c0: 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74  Tcl_IncrRefCount
06d0: 28 69 50 74 72 2d 3e 65 63 56 61 72 29 3b 0a 40  (iPtr->ecVar);.@
06e0: 40 20 2d 37 39 32 2c 36 20 2b 38 33 33 2c 31 36  @ -792,6 +833,16
06f0: 20 40 40 0a 20 09 20 20 20 20 54 63 6c 5f 52 65   @@. .    Tcl_Re
0700: 70 72 65 73 65 6e 74 61 74 69 6f 6e 43 6d 64 2c  presentationCmd,
0710: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 20 0a   NULL, NULL);. .
0720: 20 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20       /*.+     * 
0730: 54 49 50 20 33 34 38 0a 2b 20 20 20 20 20 2a 2f  TIP 348.+     */
0740: 0a 2b 0a 2b 20 20 20 20 54 63 6c 5f 4c 69 6e 6b  .+.+    Tcl_Link
0750: 56 61 72 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74  Var(interp, "::t
0760: 63 6c 3a 3a 75 73 65 45 72 72 6f 72 53 74 61 63  cl::useErrorStac
0770: 6b 22 2c 0a 2b 09 09 28 63 68 61 72 20 2a 29 20  k",.+..(char *) 
0780: 26 69 50 74 72 2d 3e 75 73 65 45 72 72 6f 72 53  &iPtr->useErrorS
0790: 74 61 63 6b 2c 0a 2b 09 09 54 43 4c 5f 4c 49 4e  tack,.+..TCL_LIN
07a0: 4b 5f 42 4f 4f 4c 45 41 4e 29 3b 0a 2b 0a 2b 20  K_BOOLEAN);.+.+ 
07b0: 20 20 20 54 63 6c 5f 54 72 61 63 65 56 61 72 28     Tcl_TraceVar(
07c0: 69 6e 74 65 72 70 2c 20 22 3a 3a 74 63 6c 3a 3a  interp, "::tcl::
07d0: 65 72 72 6f 72 53 74 61 63 6b 22 2c 20 54 43 4c  errorStack", TCL
07e0: 5f 54 52 41 43 45 5f 52 45 41 44 53 2c 20 45 72  _TRACE_READS, Er
07f0: 72 6f 72 53 74 61 63 6b 52 65 61 64 2c 20 4e 55  rorStackRead, NU
0800: 4c 4c 29 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 0a 20  LL);.+.+    /*. 
0810: 20 20 20 20 20 2a 20 43 72 65 61 74 65 20 74 68       * Create th
0820: 65 20 27 74 61 69 6c 63 61 6c 6c 27 20 63 6f 6d  e 'tailcall' com
0830: 6d 61 6e 64 0a 20 20 20 20 20 20 2a 2f 0a 20 0a  mand.      */. .
0840: 40 40 20 2d 31 34 37 30 2c 36 20 2b 31 35 32 31  @@ -1470,6 +1521
0850: 2c 38 20 40 40 0a 20 09 54 63 6c 5f 44 65 63 72  ,8 @@. .Tcl_Decr
0860: 52 65 66 43 6f 75 6e 74 28 69 50 74 72 2d 3e 65  RefCount(iPtr->e
0870: 72 72 6f 72 49 6e 66 6f 29 3b 0a 20 09 69 50 74  rrorInfo);. .iPt
0880: 72 2d 3e 65 72 72 6f 72 49 6e 66 6f 20 3d 20 4e  r->errorInfo = N
0890: 55 4c 4c 3b 0a 20 20 20 20 20 7d 0a 2b 20 20 20  ULL;.     }.+   
08a0: 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
08b0: 74 28 69 50 74 72 2d 3e 65 73 56 61 72 29 3b 0a  t(iPtr->esVar);.
08c0: 2b 20 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66  +    Tcl_DecrRef
08d0: 43 6f 75 6e 74 28 69 50 74 72 2d 3e 65 72 72 6f  Count(iPtr->erro
08e0: 72 53 74 61 63 6b 29 3b 0a 20 20 20 20 20 69 66  rStack);.     if
08f0: 20 28 69 50 74 72 2d 3e 72 65 74 75 72 6e 4f 70   (iPtr->returnOp
0900: 74 73 29 20 7b 0a 20 09 54 63 6c 5f 44 65 63 72  ts) {. .Tcl_Decr
0910: 52 65 66 43 6f 75 6e 74 28 69 50 74 72 2d 3e 72  RefCount(iPtr->r
0920: 65 74 75 72 6e 4f 70 74 73 29 3b 0a 20 20 20 20  eturnOpts);.    
0930: 20 7d 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69   }.Index: generi
0940: 63 2f 74 63 6c 49 6e 74 2e 68 0a 3d 3d 3d 3d 3d  c/tclInt.h.=====
0950: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0960: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0970: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0980: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52  ==============.R
0990: 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f  CS file: /cvsroo
09a0: 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69  t/tcl/tcl/generi
09b0: 63 2f 74 63 6c 49 6e 74 2e 68 2c 76 0a 72 65 74  c/tclInt.h,v.ret
09c0: 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e  rieving revision
09d0: 20 31 2e 34 34 35 0a 64 69 66 66 20 2d 75 20 2d   1.445.diff -u -
09e0: 72 31 2e 34 34 35 20 74 63 6c 49 6e 74 2e 68 0a  r1.445 tclInt.h.
09f0: 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 49  --- generic/tclI
0a00: 6e 74 2e 68 09 33 30 20 53 65 70 20 32 30 30 39  nt.h.30 Sep 2009
0a10: 20 30 33 3a 31 31 3a 32 36 20 2d 30 30 30 30 09   03:11:26 -0000.
0a20: 31 2e 34 34 35 0a 2b 2b 2b 20 67 65 6e 65 72 69  1.445.+++ generi
0a30: 63 2f 74 63 6c 49 6e 74 2e 68 09 37 20 4f 63 74  c/tclInt.h.7 Oct
0a40: 20 32 30 30 39 20 30 37 3a 30 31 3a 32 30 20 2d   2009 07:01:20 -
0a50: 30 30 30 30 0a 40 40 20 2d 31 38 39 35 2c 36 20  0000.@@ -1895,6 
0a60: 2b 31 38 39 35 2c 31 30 20 40 40 0a 20 20 20 20  +1895,10 @@.    
0a70: 20 54 63 6c 5f 4f 62 6a 20 2a 65 69 56 61 72 3b   Tcl_Obj *eiVar;
0a80: 09 09 2f 2a 20 63 61 63 68 65 64 20 72 65 66 20  ../* cached ref 
0a90: 74 6f 20 3a 3a 65 72 72 6f 72 49 6e 66 6f 20 76  to ::errorInfo v
0aa0: 61 72 69 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  ariable. */.    
0ab0: 20 54 63 6c 5f 4f 62 6a 20 2a 65 72 72 6f 72 43   Tcl_Obj *errorC
0ac0: 6f 64 65 3b 09 09 2f 2a 20 65 72 72 6f 72 43 6f  ode;../* errorCo
0ad0: 64 65 20 76 61 6c 75 65 20 28 6e 6f 77 20 61 73  de value (now as
0ae0: 20 61 20 54 63 6c 5f 4f 62 6a 29 2e 20 2a 2f 0a   a Tcl_Obj). */.
0af0: 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 65 63       Tcl_Obj *ec
0b00: 56 61 72 3b 09 09 2f 2a 20 63 61 63 68 65 64 20  Var;../* cached 
0b10: 72 65 66 20 74 6f 20 3a 3a 65 72 72 6f 72 49 6e  ref to ::errorIn
0b20: 66 6f 20 76 61 72 69 61 62 6c 65 2e 20 2a 2f 0a  fo variable. */.
0b30: 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 65 72  +    Tcl_Obj *er
0b40: 72 6f 72 53 74 61 63 6b 3b 09 2f 2a 20 3a 3a 74  rorStack;./* ::t
0b50: 63 6c 3a 3a 65 72 72 6f 72 53 74 61 63 6b 20 76  cl::errorStack v
0b60: 61 6c 75 65 20 28 61 73 20 61 20 54 63 6c 5f 4f  alue (as a Tcl_O
0b70: 62 6a 29 2e 20 2a 2f 0a 2b 20 20 20 20 54 63 6c  bj). */.+    Tcl
0b80: 5f 4f 62 6a 20 2a 65 73 56 61 72 3b 09 09 2f 2a  _Obj *esVar;../*
0b90: 20 63 61 63 68 65 64 20 72 65 66 20 74 6f 20 3a   cached ref to :
0ba0: 3a 65 72 72 6f 72 53 74 61 63 6b 20 76 61 72 69  :errorStack vari
0bb0: 61 62 6c 65 2e 20 2a 2f 0a 2b 20 20 20 20 69 6e  able. */.+    in
0bc0: 74 20 72 65 73 65 74 45 72 72 6f 72 53 74 61 63  t resetErrorStac
0bd0: 6b 3b 20 20 20 20 20 20 20 20 2f 2a 20 63 6f 6e  k;        /* con
0be0: 74 72 6f 6c 73 20 63 6c 65 61 6e 69 6e 67 20 75  trols cleaning u
0bf0: 70 20 6f 66 20 3a 3a 65 72 72 6f 72 53 74 61 63  p of ::errorStac
0c00: 6b 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 20 75 73  k */.+    int us
0c10: 65 45 72 72 6f 72 53 74 61 63 6b 3b 20 20 20 20  eErrorStack;    
0c20: 20 20 20 20 20 20 2f 2a 20 6c 69 6e 6b 65 64 20        /* linked 
0c30: 76 61 72 20 67 61 74 69 6e 67 20 3a 3a 65 72 72  var gating ::err
0c40: 6f 72 53 74 61 63 6b 20 6f 76 65 72 68 65 61 64  orStack overhead
0c50: 20 2a 2f 0a 20 20 20 20 20 69 6e 74 20 72 65 74   */.     int ret
0c60: 75 72 6e 4c 65 76 65 6c 3b 09 09 2f 2a 20 5b 72  urnLevel;../* [r
0c70: 65 74 75 72 6e 20 2d 6c 65 76 65 6c 5d 20 70 61  eturn -level] pa
0c80: 72 61 6d 65 74 65 72 2e 20 2a 2f 0a 20 0a 20 20  rameter. */. .  
0c90: 20 20 20 2f 2a 0a 49 6e 64 65 78 3a 20 67 65 6e     /*.Index: gen
0ca0: 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73 70 2e 63  eric/tclNamesp.c
0cb0: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .===============
0cc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0cd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0ce0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0cf0: 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f  ====.RCS file: /
0d00: 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f  cvsroot/tcl/tcl/
0d10: 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73  generic/tclNames
0d20: 70 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67  p.c,v.retrieving
0d30: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 39 33 0a   revision 1.193.
0d40: 64 69 66 66 20 2d 75 20 2d 72 31 2e 31 39 33 20  diff -u -r1.193 
0d50: 74 63 6c 4e 61 6d 65 73 70 2e 63 0a 2d 2d 2d 20  tclNamesp.c.--- 
0d60: 67 65 6e 65 72 69 63 2f 74 63 6c 4e 61 6d 65 73  generic/tclNames
0d70: 70 2e 63 09 33 30 20 53 65 70 20 32 30 30 39 20  p.c.30 Sep 2009 
0d80: 30 33 3a 31 31 3a 32 36 20 2d 30 30 30 30 09 31  03:11:26 -0000.1
0d90: 2e 31 39 33 0a 2b 2b 2b 20 67 65 6e 65 72 69 63  .193.+++ generic
0da0: 2f 74 63 6c 4e 61 6d 65 73 70 2e 63 09 37 20 4f  /tclNamesp.c.7 O
0db0: 63 74 20 32 30 30 39 20 30 37 3a 30 31 3a 32 32  ct 2009 07:01:22
0dc0: 20 2d 30 30 30 30 0a 40 40 20 2d 37 36 33 33 2c   -0000.@@ -7633,
0dd0: 36 20 2b 37 36 33 33 2c 34 31 20 40 40 0a 20 09  6 +7633,41 @@. .
0de0: 09 20 20 20 20 54 43 4c 5f 47 4c 4f 42 41 4c 5f  .    TCL_GLOBAL_
0df0: 4f 4e 4c 59 29 3b 0a 20 09 7d 0a 20 20 20 20 20  ONLY);. .}.     
0e00: 7d 0a 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20  }.+.+    /*.+   
0e10: 20 20 2a 20 54 49 50 20 23 33 34 38 0a 2b 20 20    * TIP #348.+  
0e20: 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 69 66 20     */.+.+    if 
0e30: 28 69 50 74 72 2d 3e 75 73 65 45 72 72 6f 72 53  (iPtr->useErrorS
0e40: 74 61 63 6b 29 20 7b 0a 2b 09 69 6e 74 20 6c 65  tack) {.+.int le
0e50: 6e 3b 0a 2b 20 20 20 20 20 20 20 20 0a 2b 09 69  n;.+        .+.i
0e60: 66 20 28 54 63 6c 5f 49 73 53 68 61 72 65 64 28  f (Tcl_IsShared(
0e70: 69 50 74 72 2d 3e 65 72 72 6f 72 53 74 61 63 6b  iPtr->errorStack
0e80: 29 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c 5f 4f  )) {.+.    Tcl_O
0e90: 62 6a 20 2a 6e 65 77 4f 62 6a 3b 0a 2b 20 20 20  bj *newObj;.+   
0ea0: 20 20 20 20 20 20 20 20 20 0a 2b 09 20 20 20 20           .+.    
0eb0: 6e 65 77 4f 62 6a 20 3d 20 54 63 6c 5f 44 75 70  newObj = Tcl_Dup
0ec0: 6c 69 63 61 74 65 4f 62 6a 28 69 50 74 72 2d 3e  licateObj(iPtr->
0ed0: 65 72 72 6f 72 53 74 61 63 6b 29 3b 0a 2b 09 20  errorStack);.+. 
0ee0: 20 20 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f     Tcl_DecrRefCo
0ef0: 75 6e 74 28 69 50 74 72 2d 3e 65 72 72 6f 72 53  unt(iPtr->errorS
0f00: 74 61 63 6b 29 3b 0a 2b 09 20 20 20 20 54 63 6c  tack);.+.    Tcl
0f10: 5f 49 6e 63 72 52 65 66 43 6f 75 6e 74 28 6e 65  _IncrRefCount(ne
0f20: 77 4f 62 6a 29 3b 0a 2b 09 20 20 20 20 69 50 74  wObj);.+.    iPt
0f30: 72 2d 3e 65 72 72 6f 72 53 74 61 63 6b 20 3d 20  r->errorStack = 
0f40: 6e 65 77 4f 62 6a 3b 0a 2b 09 7d 0a 2b 09 54 63  newObj;.+.}.+.Tc
0f50: 6c 5f 4c 69 73 74 4f 62 6a 4c 65 6e 67 74 68 28  l_ListObjLength(
0f60: 69 6e 74 65 72 70 2c 20 69 50 74 72 2d 3e 65 72  interp, iPtr->er
0f70: 72 6f 72 53 74 61 63 6b 2c 20 26 6c 65 6e 29 3b  rorStack, &len);
0f80: 0a 2b 09 69 66 20 28 69 50 74 72 2d 3e 72 65 73  .+.if (iPtr->res
0f90: 65 74 45 72 72 6f 72 53 74 61 63 6b 29 20 7b 0a  etErrorStack) {.
0fa0: 2b 09 20 20 20 20 69 50 74 72 2d 3e 72 65 73 65  +.    iPtr->rese
0fb0: 74 45 72 72 6f 72 53 74 61 63 6b 20 3d 20 30 3b  tErrorStack = 0;
0fc0: 0a 2b 09 20 20 20 20 2f 2a 20 72 65 73 65 74 20  .+.    /* reset 
0fd0: 77 68 69 6c 65 20 6b 65 65 70 69 6e 67 20 74 68  while keeping th
0fe0: 65 20 6c 69 73 74 20 69 6e 74 72 65 70 20 61 73  e list intrep as
0ff0: 20 6d 75 63 68 20 61 73 20 70 6f 73 73 69 62 6c   much as possibl
1000: 65 20 2a 2f 0a 2b 09 20 20 20 20 54 63 6c 5f 4c  e */.+.    Tcl_L
1010: 69 73 74 4f 62 6a 52 65 70 6c 61 63 65 28 69 6e  istObjReplace(in
1020: 74 65 72 70 2c 20 69 50 74 72 2d 3e 65 72 72 6f  terp, iPtr->erro
1030: 72 53 74 61 63 6b 2c 20 30 2c 20 6c 65 6e 2c 20  rStack, 0, len, 
1040: 30 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 20 20 20 20  0, NULL);.+.    
1050: 6c 65 6e 3d 30 3b 0a 2b 09 7d 20 0a 2b 09 69 66  len=0;.+.} .+.if
1060: 20 28 69 50 74 72 2d 3e 76 61 72 46 72 61 6d 65   (iPtr->varFrame
1070: 50 74 72 20 21 3d 20 69 50 74 72 2d 3e 72 6f 6f  Ptr != iPtr->roo
1080: 74 46 72 61 6d 65 50 74 72 29 20 7b 0a 2b 09 20  tFramePtr) {.+. 
1090: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 6c 69 73 74     Tcl_Obj *list
10a0: 50 74 72 3b 0a 2b 09 20 20 20 20 69 6e 74 20 72  Ptr;.+.    int r
10b0: 65 73 75 6c 74 3b 0a 2b 20 20 20 20 20 20 20 20  esult;.+        
10c0: 20 20 20 20 0a 2b 09 20 20 20 20 6c 69 73 74 50      .+.    listP
10d0: 74 72 3d 54 63 6c 5f 4e 65 77 4c 69 73 74 4f 62  tr=Tcl_NewListOb
10e0: 6a 28 69 50 74 72 2d 3e 76 61 72 46 72 61 6d 65  j(iPtr->varFrame
10f0: 50 74 72 2d 3e 6f 62 6a 63 2c 0a 2b 09 09 09 09  Ptr->objc,.+....
1100: 20 20 20 69 50 74 72 2d 3e 76 61 72 46 72 61 6d     iPtr->varFram
1110: 65 50 74 72 2d 3e 6f 62 6a 76 29 3b 0a 2b 09 20  ePtr->objv);.+. 
1120: 20 20 20 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f     result = Tcl_
1130: 4c 69 73 74 4f 62 6a 52 65 70 6c 61 63 65 28 69  ListObjReplace(i
1140: 6e 74 65 72 70 2c 20 69 50 74 72 2d 3e 65 72 72  nterp, iPtr->err
1150: 6f 72 53 74 61 63 6b 2c 20 6c 65 6e 2c 20 31 2c  orStack, len, 1,
1160: 20 31 2c 20 26 6c 69 73 74 50 74 72 29 3b 0a 2b   1, &listPtr);.+
1170: 09 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 20  .    if (result 
1180: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 09  != TCL_OK) {.+..
1190: 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e 74  Tcl_DecrRefCount
11a0: 28 6c 69 73 74 50 74 72 29 3b 0a 2b 09 20 20 20  (listPtr);.+.   
11b0: 20 7d 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a 20 7d   }.+.}.+    }. }
11c0: 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d 37 36 34 30  . .. /*.@@ -7640
11d0: 2c 35 20 2b 37 36 37 35 2c 37 20 40 40 0a 20 20  ,5 +7675,7 @@.  
11e0: 2a 20 6d 6f 64 65 3a 20 63 0a 20 20 2a 20 63 2d  * mode: c.  * c-
11f0: 62 61 73 69 63 2d 6f 66 66 73 65 74 3a 20 34 0a  basic-offset: 4.
1200: 20 20 2a 20 66 69 6c 6c 2d 63 6f 6c 75 6d 6e 3a    * fill-column:
1210: 20 37 38 0a 2b 20 2a 20 74 61 62 2d 77 69 64 74   78.+ * tab-widt
1220: 68 3a 20 38 0a 2b 20 2a 20 69 6e 64 65 6e 74 2d  h: 8.+ * indent-
1230: 74 61 62 73 2d 6d 6f 64 65 3a 20 6e 69 6c 0a 20  tabs-mode: nil. 
1240: 20 2a 20 45 6e 64 3a 0a 20 20 2a 2f 0a 49 6e 64   * End:.  */.Ind
1250: 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 52  ex: generic/tclR
1260: 65 73 75 6c 74 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d  esult.c.========
1270: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1280: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1290: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
12a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20  ===========.RCS 
12b0: 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74  file: /cvsroot/t
12c0: 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74  cl/tcl/generic/t
12d0: 63 6c 52 65 73 75 6c 74 2e 63 2c 76 0a 72 65 74  clResult.c,v.ret
12e0: 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e  rieving revision
12f0: 20 31 2e 35 34 0a 64 69 66 66 20 2d 75 20 2d 72   1.54.diff -u -r
1300: 31 2e 35 34 20 74 63 6c 52 65 73 75 6c 74 2e 63  1.54 tclResult.c
1310: 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c  .--- generic/tcl
1320: 52 65 73 75 6c 74 2e 63 09 31 37 20 44 65 63 20  Result.c.17 Dec 
1330: 32 30 30 38 20 31 36 3a 34 37 3a 33 38 20 2d 30  2008 16:47:38 -0
1340: 30 30 30 09 31 2e 35 34 0a 2b 2b 2b 20 67 65 6e  000.1.54.+++ gen
1350: 65 72 69 63 2f 74 63 6c 52 65 73 75 6c 74 2e 63  eric/tclResult.c
1360: 09 37 20 4f 63 74 20 32 30 30 39 20 30 37 3a 30  .7 Oct 2009 07:0
1370: 31 3a 32 32 20 2d 30 30 30 30 0a 40 40 20 2d 39  1:22 -0000.@@ -9
1380: 32 32 2c 36 20 2b 39 32 32 2c 37 20 40 40 0a 20  22,6 +922,7 @@. 
1390: 09 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e  .Tcl_DecrRefCoun
13a0: 74 28 69 50 74 72 2d 3e 65 72 72 6f 72 49 6e 66  t(iPtr->errorInf
13b0: 6f 29 3b 0a 20 09 69 50 74 72 2d 3e 65 72 72 6f  o);. .iPtr->erro
13c0: 72 49 6e 66 6f 20 3d 20 4e 55 4c 4c 3b 0a 20 20  rInfo = NULL;.  
13d0: 20 20 20 7d 0a 2b 20 20 20 20 69 50 74 72 2d 3e     }.+    iPtr->
13e0: 72 65 73 65 74 45 72 72 6f 72 53 74 61 63 6b 20  resetErrorStack 
13f0: 3d 20 31 3b 0a 20 20 20 20 20 69 50 74 72 2d 3e  = 1;.     iPtr->
1400: 72 65 74 75 72 6e 4c 65 76 65 6c 20 3d 20 31 3b  returnLevel = 1;
1410: 0a 20 20 20 20 20 69 50 74 72 2d 3e 72 65 74 75  .     iPtr->retu
1420: 72 6e 43 6f 64 65 20 3d 20 54 43 4c 5f 4f 4b 3b  rnCode = TCL_OK;
1430: 0a 20 20 20 20 20 69 66 20 28 69 50 74 72 2d 3e  .     if (iPtr->
1440: 72 65 74 75 72 6e 4f 70 74 73 29 20 7b 0a 49 6e  returnOpts) {.In
1450: 64 65 78 3a 20 74 65 73 74 73 2f 65 72 72 6f 72  dex: tests/error
1460: 2e 74 65 73 74 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .test.==========
1470: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1480: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1490: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
14a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69  =========.RCS fi
14b0: 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c  le: /cvsroot/tcl
14c0: 2f 74 63 6c 2f 74 65 73 74 73 2f 65 72 72 6f 72  /tcl/tests/error
14d0: 2e 74 65 73 74 2c 76 0a 72 65 74 72 69 65 76 69  .test,v.retrievi
14e0: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 32  ng revision 1.22
14f0: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 32 32 20  .diff -u -r1.22 
1500: 65 72 72 6f 72 2e 74 65 73 74 0a 2d 2d 2d 20 74  error.test.--- t
1510: 65 73 74 73 2f 65 72 72 6f 72 2e 74 65 73 74 09  ests/error.test.
1520: 32 38 20 53 65 70 20 32 30 30 39 20 31 38 3a 30  28 Sep 2009 18:0
1530: 32 3a 32 30 20 2d 30 30 30 30 09 31 2e 32 32 0a  2:20 -0000.1.22.
1540: 2b 2b 2b 20 74 65 73 74 73 2f 65 72 72 6f 72 2e  +++ tests/error.
1550: 74 65 73 74 09 37 20 4f 63 74 20 32 30 30 39 20  test.7 Oct 2009 
1560: 30 37 3a 30 31 3a 32 32 20 2d 30 30 30 30 0a 40  07:01:22 -0000.@
1570: 40 20 2d 31 35 32 2c 36 20 2b 31 35 32 2c 32 39  @ -152,6 +152,29
1580: 20 40 40 0a 20 20 20 20 20 73 65 74 20 3a 3a 65   @@.     set ::e
1590: 72 72 6f 72 43 6f 64 65 20 62 6f 67 75 73 0a 20  rrorCode bogus. 
15a0: 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20      list [catch 
15b0: 7b 65 72 72 6f 72 20 6d 73 67 31 20 6d 73 67 32  {error msg1 msg2
15c0: 20 7b 7d 7d 20 6d 73 67 5d 20 24 6d 73 67 20 24   {}} msg] $msg $
15d0: 3a 3a 65 72 72 6f 72 49 6e 66 6f 20 24 3a 3a 65  ::errorInfo $::e
15e0: 72 72 6f 72 43 6f 64 65 0a 20 7d 20 7b 31 20 6d  rrorCode. } {1 m
15f0: 73 67 31 20 6d 73 67 32 20 7b 7d 7d 0a 2b 74 65  sg1 msg2 {}}.+te
1600: 73 74 20 65 72 72 6f 72 2d 34 2e 36 20 7b 65 72  st error-4.6 {er
1610: 72 6f 72 53 74 61 63 6b 20 64 69 73 61 62 6c 65  rorStack disable
1620: 64 20 62 79 20 64 65 66 61 75 6c 74 7d 20 7b 0a  d by default} {.
1630: 2b 09 73 65 74 20 3a 3a 74 63 6c 3a 3a 65 72 72  +.set ::tcl::err
1640: 6f 72 53 74 61 63 6b 20 4e 4f 50 45 0a 2b 09 70  orStack NOPE.+.p
1650: 72 6f 63 20 66 20 78 20 7b 67 20 24 78 24 78 7d  roc f x {g $x$x}
1660: 0a 2b 09 70 72 6f 63 20 67 20 78 20 7b 65 72 72  .+.proc g x {err
1670: 6f 72 20 47 3a 24 78 7d 0a 2b 09 63 61 74 63 68  or G:$x}.+.catch
1680: 20 7b 66 20 31 32 7d 0a 2b 20 20 20 20 73 65 74   {f 12}.+    set
1690: 20 3a 3a 74 63 6c 3a 3a 65 72 72 6f 72 53 74 61   ::tcl::errorSta
16a0: 63 6b 0a 2b 7d 20 4e 4f 50 45 0a 2b 74 65 73 74  ck.+} NOPE.+test
16b0: 20 65 72 72 6f 72 2d 34 2e 37 20 7b 65 72 72 6f   error-4.7 {erro
16c0: 72 53 74 61 63 6b 20 64 69 73 61 62 6c 65 64 20  rStack disabled 
16d0: 62 79 20 75 73 65 45 72 72 6f 72 53 74 61 63 6b  by useErrorStack
16e0: 7d 20 7b 0a 2b 09 73 65 74 20 3a 3a 74 63 6c 3a  } {.+.set ::tcl:
16f0: 3a 75 73 65 45 72 72 6f 72 53 74 61 63 6b 20 30  :useErrorStack 0
1700: 0a 2b 09 73 65 74 20 3a 3a 74 63 6c 3a 3a 65 72  .+.set ::tcl::er
1710: 72 6f 72 53 74 61 63 6b 20 4e 4f 50 45 0a 2b 09  rorStack NOPE.+.
1720: 70 72 6f 63 20 66 20 78 20 7b 67 20 24 78 24 78  proc f x {g $x$x
1730: 7d 0a 2b 09 70 72 6f 63 20 67 20 78 20 7b 65 72  }.+.proc g x {er
1740: 72 6f 72 20 47 3a 24 78 7d 0a 2b 09 63 61 74 63  ror G:$x}.+.catc
1750: 68 20 7b 66 20 31 32 7d 0a 2b 20 20 20 20 73 65  h {f 12}.+    se
1760: 74 20 3a 3a 74 63 6c 3a 3a 65 72 72 6f 72 53 74  t ::tcl::errorSt
1770: 61 63 6b 0a 2b 7d 20 4e 4f 50 45 0a 2b 74 65 73  ack.+} NOPE.+tes
1780: 74 20 65 72 72 6f 72 2d 34 2e 38 20 7b 65 72 72  t error-4.8 {err
1790: 6f 72 53 74 61 63 6b 20 65 6e 61 62 6c 65 64 20  orStack enabled 
17a0: 62 79 20 75 73 65 45 72 72 6f 72 53 74 61 63 6b  by useErrorStack
17b0: 7d 20 2d 62 6f 64 79 20 7b 0a 2b 09 73 65 74 20  } -body {.+.set 
17c0: 3a 3a 74 63 6c 3a 3a 75 73 65 45 72 72 6f 72 53  ::tcl::useErrorS
17d0: 74 61 63 6b 20 31 0a 2b 09 73 65 74 20 3a 3a 74  tack 1.+.set ::t
17e0: 63 6c 3a 3a 65 72 72 6f 72 53 74 61 63 6b 20 4e  cl::errorStack N
17f0: 4f 50 45 0a 2b 09 70 72 6f 63 20 66 20 78 20 7b  OPE.+.proc f x {
1800: 67 20 24 78 24 78 7d 0a 2b 09 70 72 6f 63 20 67  g $x$x}.+.proc g
1810: 20 78 20 7b 65 72 72 6f 72 20 47 3a 24 78 7d 0a   x {error G:$x}.
1820: 2b 09 63 61 74 63 68 20 7b 66 20 31 32 7d 0a 2b  +.catch {f 12}.+
1830: 20 20 20 20 73 65 74 20 3a 3a 74 63 6c 3a 3a 65      set ::tcl::e
1840: 72 72 6f 72 53 74 61 63 6b 0a 2b 7d 20 2d 6d 61  rrorStack.+} -ma
1850: 74 63 68 20 67 6c 6f 62 20 2d 72 65 73 75 6c 74  tch glob -result
1860: 20 7b 7b 67 20 31 32 31 32 7d 20 7b 66 20 31 32   {{g 1212} {f 12
1870: 7d 20 7b 6e 61 6d 65 73 70 61 63 65 20 65 76 61  } {namespace eva
1880: 6c 20 2a 7d 7d 0a 20 0a 20 23 20 45 72 72 6f 72  l *}}. . # Error
1890: 73 20 69 6e 20 65 72 72 6f 72 20 63 6f 6d 6d 61  s in error comma
18a0: 6e 64 20 69 74 73 65 6c 66 0a 20 0a 40 40 20 2d  nd itself. .@@ -
18b0: 32 30 37 2c 36 20 2b 32 33 30 2c 31 36 20 40 40  207,6 +230,16 @@
18c0: 0a 20 20 20 20 20 63 61 74 63 68 20 66 6f 6f 0a  .     catch foo.
18d0: 20 20 20 20 20 6c 69 73 74 20 24 3a 3a 65 72 72       list $::err
18e0: 6f 72 43 6f 64 65 0a 20 7d 20 7b 4e 4f 4e 45 7d  orCode. } {NONE}
18f0: 0a 2b 74 65 73 74 20 65 72 72 6f 72 2d 36 2e 31  .+test error-6.1
1900: 30 20 7b 63 61 74 63 68 20 6d 75 73 74 20 72 65  0 {catch must re
1910: 73 65 74 20 65 72 72 6f 72 53 74 61 63 6b 7d 20  set errorStack} 
1920: 2d 62 6f 64 79 20 7b 0a 2b 09 73 65 74 20 3a 3a  -body {.+.set ::
1930: 74 63 6c 3a 3a 75 73 65 45 72 72 6f 72 53 74 61  tcl::useErrorSta
1940: 63 6b 20 31 0a 2b 09 70 72 6f 63 20 66 20 78 20  ck 1.+.proc f x 
1950: 7b 67 20 24 78 24 78 7d 0a 2b 09 70 72 6f 63 20  {g $x$x}.+.proc 
1960: 67 20 78 20 7b 65 72 72 6f 72 20 47 3a 24 78 7d  g x {error G:$x}
1970: 0a 2b 09 63 61 74 63 68 20 7b 66 20 31 32 7d 0a  .+.catch {f 12}.
1980: 2b 09 73 65 74 20 65 31 20 24 3a 3a 74 63 6c 3a  +.set e1 $::tcl:
1990: 3a 65 72 72 6f 72 53 74 61 63 6b 0a 2b 09 63 61  :errorStack.+.ca
19a0: 74 63 68 20 7b 66 20 31 33 7d 0a 2b 09 73 65 74  tch {f 13}.+.set
19b0: 20 65 32 20 24 3a 3a 74 63 6c 3a 3a 65 72 72 6f   e2 $::tcl::erro
19c0: 72 53 74 61 63 6b 0a 2b 09 6c 69 73 74 20 24 65  rStack.+.list $e
19d0: 31 20 24 65 32 0a 2b 7d 20 2d 6d 61 74 63 68 20  1 $e2.+} -match 
19e0: 67 6c 6f 62 20 2d 72 65 73 75 6c 74 20 7b 7b 7b  glob -result {{{
19f0: 67 20 31 32 31 32 7d 20 7b 66 20 31 32 7d 20 7b  g 1212} {f 12} {
1a00: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 2a  namespace eval *
1a10: 7d 7d 20 7b 7b 67 20 31 33 31 33 7d 20 7b 66 20  }} {{g 1313} {f 
1a20: 31 33 7d 20 7b 6e 61 6d 65 73 70 61 63 65 20 65  13} {namespace e
1a30: 76 61 6c 20 2a 7d 7d 7d 0a 20 0a 20 74 65 73 74  val *}}}. . test
1a40: 20 65 72 72 6f 72 2d 37 2e 31 20 7b 42 75 67 20   error-7.1 {Bug 
1a50: 31 33 39 37 38 34 33 7d 20 2d 62 6f 64 79 20 7b  1397843} -body {
1a60: 0a 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 63  .     variable c
1a70: 6d 64 73 0a                                      mds.