Artifact
00954b22f04523e7d011acf9252e6861f9361419:
Attachment "errorstackloop.patch" to
ticket [3386417fff]
added by
ferrieux
2011-08-09 06:13:20.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 Index: generic/t
0010: 63 6c 43 6f 6d 70 43 6d 64 73 2e 63 0a 3d 3d 3d clCompCmds.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 3d 3d ================
0060: 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c .--- generic/tcl
0070: 43 6f 6d 70 43 6d 64 73 2e 63 0a 2b 2b 2b 20 67 CompCmds.c.+++ g
0080: 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70 43 6d eneric/tclCompCm
0090: 64 73 2e 63 0a 40 40 20 2d 33 36 34 32 2c 31 31 ds.c.@@ -3642,11
00a0: 20 2b 33 36 34 32 2c 31 31 20 40 40 0a 20 20 20 +3642,11 @@.
00b0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 62 79 const char *by
00c0: 74 65 73 20 3d 20 54 63 6c 47 65 74 53 74 72 69 tes = TclGetStri
00d0: 6e 67 46 72 6f 6d 4f 62 6a 28 6d 73 67 2c 20 26 ngFromObj(msg, &
00e0: 6e 75 6d 42 79 74 65 73 29 3b 0a 20 0a 20 20 20 numBytes);. .
00f0: 20 20 54 63 6c 45 72 72 6f 72 53 74 61 63 6b 52 TclErrorStackR
0100: 65 73 65 74 49 66 28 69 6e 74 65 72 70 2c 20 62 esetIf(interp, b
0110: 79 74 65 73 2c 20 6e 75 6d 42 79 74 65 73 29 3b ytes, numBytes);
0120: 0a 20 20 20 20 20 54 63 6c 45 6d 69 74 50 75 73 . TclEmitPus
0130: 68 28 54 63 6c 52 65 67 69 73 74 65 72 4e 65 77 h(TclRegisterNew
0140: 4c 69 74 65 72 61 6c 28 65 6e 76 50 74 72 2c 20 Literal(envPtr,
0150: 62 79 74 65 73 2c 20 6e 75 6d 42 79 74 65 73 29 bytes, numBytes)
0160: 2c 20 65 6e 76 50 74 72 29 3b 0a 20 20 20 20 20 , envPtr);.
0170: 43 6f 6d 70 69 6c 65 52 65 74 75 72 6e 49 6e 74 CompileReturnInt
0180: 65 72 6e 61 6c 28 65 6e 76 50 74 72 2c 20 49 4e ernal(envPtr, IN
0190: 53 54 5f 53 59 4e 54 41 58 2c 20 54 43 4c 5f 45 ST_SYNTAX, TCL_E
01a0: 52 52 4f 52 2c 20 30 2c 0a 2d 09 20 20 20 20 54 RROR, 0,.-. T
01b0: 63 6c 5f 47 65 74 52 65 74 75 72 6e 4f 70 74 69 cl_GetReturnOpti
01c0: 6f 6e 73 28 69 6e 74 65 72 70 2c 20 54 43 4c 5f ons(interp, TCL_
01d0: 45 52 52 4f 52 29 29 3b 0a 2b 09 09 09 20 20 54 ERROR));.+... T
01e0: 63 6c 4e 6f 45 72 72 6f 72 53 74 61 63 6b 28 69 clNoErrorStack(i
01f0: 6e 74 65 72 70 2c 20 54 63 6c 5f 47 65 74 52 65 nterp, Tcl_GetRe
0200: 74 75 72 6e 4f 70 74 69 6f 6e 73 28 69 6e 74 65 turnOptions(inte
0210: 72 70 2c 20 54 43 4c 5f 45 52 52 4f 52 29 29 29 rp, TCL_ERROR)))
0220: 3b 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 20 20 2a 2d ;. }. .. /*. *-
0230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0270: 2d 2d 2d 2d 2d 0a 20 20 2a 0a 0a 49 6e 64 65 78 -----. *..Index
0280: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 : generic/tclInt
0290: 2e 68 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .h.=============
02a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
02d0: 3d 3d 3d 3d 3d 3d 0a 2d 2d 2d 20 67 65 6e 65 72 ======.--- gener
02e0: 69 63 2f 74 63 6c 49 6e 74 2e 68 0a 2b 2b 2b 20 ic/tclInt.h.+++
02f0: 67 65 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 generic/tclInt.h
0300: 0a 40 40 20 2d 33 30 31 34 2c 31 30 20 2b 33 30 .@@ -3014,10 +30
0310: 31 34 2c 31 31 20 40 40 0a 20 4d 4f 44 55 4c 45 14,11 @@. MODULE
0320: 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c 4d 61 _SCOPE int.TclMa
0330: 78 4c 69 73 74 4c 65 6e 67 74 68 28 63 6f 6e 73 xListLength(cons
0340: 74 20 63 68 61 72 20 2a 62 79 74 65 73 2c 20 69 t char *bytes, i
0350: 6e 74 20 6e 75 6d 42 79 74 65 73 2c 0a 20 09 09 nt numBytes,. ..
0360: 09 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 . const char
0370: 2a 2a 65 6e 64 50 74 72 29 3b 0a 20 4d 4f 44 55 **endPtr);. MODU
0380: 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c LE_SCOPE int.Tcl
0390: 4d 65 72 67 65 52 65 74 75 72 6e 4f 70 74 69 6f MergeReturnOptio
03a0: 6e 73 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 ns(Tcl_Interp *i
03b0: 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c nterp, int objc,
03c0: 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a . ... Tcl_Obj
03d0: 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 2c 20 *const objv[],
03e0: 54 63 6c 5f 4f 62 6a 20 2a 2a 6f 70 74 69 6f 6e Tcl_Obj **option
03f0: 73 50 74 72 50 74 72 2c 0a 20 09 09 09 20 20 20 sPtrPtr,. ...
0400: 20 69 6e 74 20 2a 63 6f 64 65 50 74 72 2c 20 69 int *codePtr, i
0410: 6e 74 20 2a 6c 65 76 65 6c 50 74 72 29 3b 0a 2b nt *levelPtr);.+
0420: 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 54 63 6c MODULE_SCOPE Tcl
0430: 5f 4f 62 6a 20 2a 20 20 54 63 6c 4e 6f 45 72 72 _Obj * TclNoErr
0440: 6f 72 53 74 61 63 6b 28 54 63 6c 5f 49 6e 74 65 orStack(Tcl_Inte
0450: 72 70 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f rp *interp, Tcl_
0460: 4f 62 6a 20 2a 6f 70 74 69 6f 6e 73 29 3b 0a 20 Obj *options);.
0470: 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 MODULE_SCOPE int
0480: 09 54 63 6c 4e 6f 6b 69 61 37 37 30 44 6f 75 62 .TclNokia770Doub
0490: 6c 65 73 28 76 6f 69 64 29 3b 0a 20 4d 4f 44 55 les(void);. MODU
04a0: 4c 45 5f 53 43 4f 50 45 20 76 6f 69 64 09 54 63 LE_SCOPE void.Tc
04b0: 6c 4e 73 44 65 63 72 52 65 66 43 6f 75 6e 74 28 lNsDecrRefCount(
04c0: 4e 61 6d 65 73 70 61 63 65 20 2a 6e 73 50 74 72 Namespace *nsPtr
04d0: 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 );. MODULE_SCOPE
04e0: 20 76 6f 69 64 09 54 63 6c 4f 62 6a 56 61 72 45 void.TclObjVarE
04f0: 72 72 4d 73 67 28 54 63 6c 5f 49 6e 74 65 72 70 rrMsg(Tcl_Interp
0500: 20 2a 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 *interp, Tcl_Ob
0510: 6a 20 2a 70 61 72 74 31 50 74 72 2c 0a 20 09 09 j *part1Ptr,. ..
0520: 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 70 61 . Tcl_Obj *pa
0530: 72 74 32 50 74 72 2c 20 63 6f 6e 73 74 20 63 68 rt2Ptr, const ch
0540: 61 72 20 2a 6f 70 65 72 61 74 69 6f 6e 2c 0a 20 ar *operation,.
0550: 09 09 09 20 20 20 20 63 6f 6e 73 74 20 63 68 61 ... const cha
0560: 72 20 2a 72 65 61 73 6f 6e 2c 20 69 6e 74 20 69 r *reason, int i
0570: 6e 64 65 78 29 3b 0a 0a 49 6e 64 65 78 3a 20 67 ndex);..Index: g
0580: 65 6e 65 72 69 63 2f 74 63 6c 52 65 73 75 6c 74 eneric/tclResult
0590: 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .c.=============
05a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
05b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
05c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
05d0: 3d 3d 3d 3d 3d 3d 0a 2d 2d 2d 20 67 65 6e 65 72 ======.--- gener
05e0: 69 63 2f 74 63 6c 52 65 73 75 6c 74 2e 63 0a 2b ic/tclResult.c.+
05f0: 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63 6c 52 65 ++ generic/tclRe
0600: 73 75 6c 74 2e 63 0a 40 40 20 2d 31 35 39 31 2c sult.c.@@ -1591,
0610: 31 30 20 2b 31 35 39 31 2c 33 33 20 40 40 0a 20 10 +1591,33 @@.
0620: 20 20 20 20 69 66 20 28 69 50 74 72 2d 3e 65 72 if (iPtr->er
0630: 72 6f 72 49 6e 66 6f 29 20 7b 0a 20 09 54 63 6c rorInfo) {. .Tcl
0640: 5f 44 69 63 74 4f 62 6a 50 75 74 28 4e 55 4c 4c _DictObjPut(NULL
0650: 2c 20 6f 70 74 69 6f 6e 73 2c 20 6b 65 79 73 5b , options, keys[
0660: 4b 45 59 5f 45 52 52 4f 52 49 4e 46 4f 5d 2c 20 KEY_ERRORINFO],
0670: 69 50 74 72 2d 3e 65 72 72 6f 72 49 6e 66 6f 29 iPtr->errorInfo)
0680: 3b 0a 20 09 54 63 6c 5f 44 69 63 74 4f 62 6a 50 ;. .Tcl_DictObjP
0690: 75 74 28 4e 55 4c 4c 2c 20 6f 70 74 69 6f 6e 73 ut(NULL, options
06a0: 2c 20 6b 65 79 73 5b 4b 45 59 5f 45 52 52 4f 52 , keys[KEY_ERROR
06b0: 4c 49 4e 45 5d 2c 0a 20 09 09 54 63 6c 5f 4e 65 LINE],. ..Tcl_Ne
06c0: 77 49 6e 74 4f 62 6a 28 69 50 74 72 2d 3e 65 72 wIntObj(iPtr->er
06d0: 72 6f 72 4c 69 6e 65 29 29 3b 0a 20 20 20 20 20 rorLine));.
06e0: 7d 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 6f 70 }.+ return op
06f0: 74 69 6f 6e 73 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a tions;.+}.+..+/*
0700: 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .+ *------------
0710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 -------------.+
0750: 2a 0a 2b 20 2a 20 54 63 6c 4e 6f 45 72 72 6f 72 *.+ * TclNoError
0760: 53 74 61 63 6b 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a Stack --.+ *.+ *
0770: 09 52 65 6d 6f 76 65 73 20 74 68 65 20 2d 65 72 .Removes the -er
0780: 72 6f 72 73 74 61 63 6b 20 65 6e 74 72 79 20 66 rorstack entry f
0790: 72 6f 6d 20 61 6e 20 6f 70 74 69 6f 6e 73 20 64 rom an options d
07a0: 69 63 74 20 74 6f 20 61 76 6f 69 64 20 72 65 66 ict to avoid ref
07b0: 65 72 65 6e 63 65 20 63 79 63 6c 65 73 0a 2b 20 erence cycles.+
07c0: 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b *.+ * Results:.+
07d0: 20 2a 09 54 68 65 20 28 75 6e 73 68 61 72 65 64 *.The (unshared
07e0: 29 20 61 72 67 75 6d 65 6e 74 20 6f 70 74 69 6f ) argument optio
07f0: 6e 73 20 64 69 63 74 2c 20 6d 6f 64 69 66 69 65 ns dict, modifie
0800: 64 20 69 6e 20 2d 70 6c 61 63 65 2e 0a 2b 20 2a d in -place..+ *
0810: 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .+ *------------
0820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 -------------.+
0860: 2a 2f 0a 2b 0a 2b 54 63 6c 5f 4f 62 6a 20 2a 0a */.+.+Tcl_Obj *.
0870: 2b 54 63 6c 4e 6f 45 72 72 6f 72 53 74 61 63 6b +TclNoErrorStack
0880: 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 (Tcl_Interp *int
0890: 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 20 2a 6f 70 erp, Tcl_Obj *op
08a0: 74 69 6f 6e 73 29 0a 2b 7b 0a 2b 20 20 20 20 54 tions).+{.+ T
08b0: 63 6c 5f 4f 62 6a 20 2a 2a 6b 65 79 73 20 3d 20 cl_Obj **keys =
08c0: 47 65 74 4b 65 79 73 28 29 3b 0a 2b 20 20 20 20 GetKeys();.+
08d0: 0a 2b 20 20 20 20 54 63 6c 5f 44 69 63 74 4f 62 .+ Tcl_DictOb
08e0: 6a 52 65 6d 6f 76 65 28 69 6e 74 65 72 70 2c 20 jRemove(interp,
08f0: 6f 70 74 69 6f 6e 73 2c 20 6b 65 79 73 5b 4b 45 options, keys[KE
0900: 59 5f 45 52 52 4f 52 53 54 41 43 4b 5d 29 3b 0a Y_ERRORSTACK]);.
0910: 2b 0a 20 20 20 20 20 72 65 74 75 72 6e 20 6f 70 +. return op
0920: 74 69 6f 6e 73 3b 0a 20 7d 0a 20 0c 0a 20 2f 2a tions;. }. .. /*
0930: 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d . *------------
0940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0950: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a -------------..