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.