Artifact
5b69f49d6ac9253e2d299b3c5975c9945e74ef41:
Attachment "exceptDiff4" to
ticket [1698093fff]
added by
msofer
2007-04-11 10:34:17.
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 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 .RCS file: /cvsr
0070: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 oot/tcl/tcl/gene
0080: 72 69 63 2f 74 63 6c 43 6f 6d 70 43 6d 64 73 2e ric/tclCompCmds.
0090: 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 c,v.retrieving r
00a0: 65 76 69 73 69 6f 6e 20 31 2e 31 30 37 0a 64 69 evision 1.107.di
00b0: 66 66 20 2d 75 20 2d 72 31 2e 31 30 37 20 74 63 ff -u -r1.107 tc
00c0: 6c 43 6f 6d 70 43 6d 64 73 2e 63 0a 2d 2d 2d 20 lCompCmds.c.---
00d0: 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70 43 generic/tclCompC
00e0: 6d 64 73 2e 63 09 31 31 20 41 70 72 20 32 30 30 mds.c.11 Apr 200
00f0: 37 20 30 33 3a 31 38 3a 33 36 20 2d 30 30 30 30 7 03:18:36 -0000
0100: 09 31 2e 31 30 37 0a 2b 2b 2b 20 67 65 6e 65 72 .1.107.+++ gener
0110: 69 63 2f 74 63 6c 43 6f 6d 70 43 6d 64 73 2e 63 ic/tclCompCmds.c
0120: 09 31 31 20 41 70 72 20 32 30 30 37 20 30 33 3a .11 Apr 2007 03:
0130: 33 33 3a 31 31 20 2d 30 30 30 30 0a 40 40 20 2d 33:11 -0000.@@ -
0140: 31 30 37 2c 39 20 2b 31 30 37 2c 39 20 40 40 0a 107,9 +107,9 @@.
0150: 20 2f 2a 0a 20 20 2a 20 4e 6f 74 65 3a 20 74 68 /*. * Note: th
0160: 65 20 65 78 63 65 70 74 44 65 70 74 68 20 69 73 e exceptDepth is
0170: 20 61 20 62 69 74 20 6f 66 20 61 20 6d 69 73 6e a bit of a misn
0180: 6f 6d 65 72 3a 20 54 45 42 43 20 6f 6e 6c 79 20 omer: TEBC only
0190: 6e 65 65 64 73 20 74 68 65 0a 20 20 2a 20 6d 61 needs the. * ma
01a0: 78 69 6d 61 6c 20 64 65 70 74 68 20 6f 66 20 6e ximal depth of n
01b0: 65 73 74 65 64 20 43 41 54 43 48 20 72 61 6e 67 ested CATCH rang
01c0: 65 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 61 es in order to a
01d0: 6c 6c 6f 63 20 72 75 6e 74 69 6d 65 0a 2d 20 2a lloc runtime.- *
01e0: 20 6d 65 6d 6f 72 79 2e 20 54 68 65 73 65 20 6d memory. These m
01f0: 61 63 72 6f 73 20 73 68 6f 75 6c 64 20 63 6f 6d acros should com
0200: 70 75 74 65 20 70 72 65 63 69 73 65 6c 79 20 74 pute precisely t
0210: 68 61 74 3f 20 4f 54 4f 48 2c 20 74 68 65 20 6e hat? OTOH, the n
0220: 65 73 74 69 6e 67 20 64 65 70 74 68 0a 2d 20 2a esting depth.- *
0230: 20 6f 66 20 4c 4f 4f 50 20 72 61 6e 67 65 73 20 of LOOP ranges
0240: 69 73 20 61 6e 20 69 6e 74 65 72 65 73 74 69 6e is an interestin
0250: 67 20 64 61 74 75 6d 20 66 6f 72 20 64 65 62 75 g datum for debu
0260: 67 67 69 6e 67 20 70 75 72 70 6f 73 65 73 2c 20 gging purposes,
0270: 61 6e 64 20 74 68 61 74 20 69 73 0a 2d 20 2a 20 and that is.- *
0280: 77 68 61 74 20 77 65 20 63 6f 6d 70 75 74 65 20 what we compute
0290: 6e 6f 77 2e 0a 2b 20 2a 20 6d 65 6d 6f 72 79 2e now..+ * memory.
02a0: 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 73 68 These macros sh
02b0: 6f 75 6c 64 20 63 6f 6d 70 75 74 65 20 70 72 65 ould compute pre
02c0: 63 69 73 65 6c 79 20 74 68 61 74 2e 0a 2b 20 2a cisely that..+ *
02d0: 20 4f 54 4f 48 2c 20 74 68 65 20 6e 65 73 74 69 OTOH, the nesti
02e0: 6e 67 20 64 65 70 74 68 20 6f 66 20 4c 4f 4f 50 ng depth of LOOP
02f0: 20 72 61 6e 67 65 73 20 69 73 20 61 6e 20 69 6e ranges is an in
0300: 74 65 72 65 73 74 69 6e 67 20 64 61 74 75 6d 20 teresting datum
0310: 66 6f 72 0a 2b 20 2a 20 64 65 62 75 67 67 69 6e for.+ * debuggin
0320: 67 20 70 75 72 70 6f 73 65 73 2c 20 61 6e 64 20 g purposes, and
0330: 74 68 61 74 20 69 73 20 6e 6f 74 20 63 6f 6d 70 that is not comp
0340: 75 74 65 64 20 6e 6f 77 2e 0a 20 20 2a 0a 20 20 uted now.. *.
0350: 2a 20 73 74 61 74 69 63 20 69 6e 74 09 44 65 63 * static int.Dec
0360: 6c 61 72 65 45 78 63 65 70 74 69 6f 6e 52 61 6e lareExceptionRan
0370: 67 65 28 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65 ge(CompileEnv *e
0380: 6e 76 50 74 72 2c 20 69 6e 74 20 74 79 70 65 29 nvPtr, int type)
0390: 3b 0a 20 20 2a 20 73 74 61 74 69 63 20 69 6e 74 ;. * static int
03a0: 09 45 78 63 65 70 74 69 6f 6e 52 61 6e 67 65 53 .ExceptionRangeS
03b0: 74 61 72 74 73 28 43 6f 6d 70 69 6c 65 45 6e 76 tarts(CompileEnv
03c0: 20 2a 65 6e 76 50 74 72 2c 20 69 6e 74 20 69 6e *envPtr, int in
03d0: 64 65 78 29 3b 0a 40 40 20 2d 31 32 30 2c 31 32 dex);.@@ -120,12
03e0: 20 2b 31 32 30 2c 31 34 20 40 40 0a 20 23 64 65 +120,14 @@. #de
03f0: 66 69 6e 65 20 44 65 63 6c 61 72 65 45 78 63 65 fine DeclareExce
0400: 70 74 69 6f 6e 52 61 6e 67 65 28 65 6e 76 50 74 ptionRange(envPt
0410: 72 2c 20 74 79 70 65 29 20 5c 0a 20 20 20 20 20 r, type) \.
0420: 28 54 63 6c 43 72 65 61 74 65 45 78 63 65 70 74 (TclCreateExcept
0430: 52 61 6e 67 65 28 28 74 79 70 65 29 2c 20 28 65 Range((type), (e
0440: 6e 76 50 74 72 29 29 29 0a 20 23 64 65 66 69 6e nvPtr))). #defin
0450: 65 20 45 78 63 65 70 74 69 6f 6e 52 61 6e 67 65 e ExceptionRange
0460: 53 74 61 72 74 73 28 65 6e 76 50 74 72 2c 20 69 Starts(envPtr, i
0470: 6e 64 65 78 29 20 5c 0a 2d 20 20 20 20 28 28 28 ndex) \.- (((
0480: 65 6e 76 50 74 72 29 2d 3e 65 78 63 65 70 74 44 envPtr)->exceptD
0490: 65 70 74 68 2b 2b 29 2c 20 5c 0a 2b 20 20 20 20 epth++), \.+
04a0: 28 28 28 65 6e 76 50 74 72 29 2d 3e 65 78 63 65 (((envPtr)->exce
04b0: 70 74 44 65 70 74 68 20 2b 3d 20 5c 0a 2b 20 20 ptDepth += \.+
04c0: 20 20 20 20 20 20 28 28 65 6e 76 50 74 72 29 2d ((envPtr)-
04d0: 3e 65 78 63 65 70 74 41 72 72 61 79 50 74 72 5b >exceptArrayPtr[
04e0: 28 69 6e 64 65 78 29 5d 2e 74 79 70 65 20 3d 3d (index)].type ==
04f0: 20 43 41 54 43 48 5f 45 58 43 45 50 54 49 4f 4e CATCH_EXCEPTION
0500: 5f 52 41 4e 47 45 29 29 2c 20 5c 0a 20 20 20 20 _RANGE)), \.
0510: 20 28 28 65 6e 76 50 74 72 29 2d 3e 6d 61 78 45 ((envPtr)->maxE
0520: 78 63 65 70 74 44 65 70 74 68 20 3d 20 5c 0a 20 xceptDepth = \.
0530: 09 20 20 20 20 54 63 6c 4d 61 78 28 28 65 6e 76 . TclMax((env
0540: 50 74 72 29 2d 3e 65 78 63 65 70 74 44 65 70 74 Ptr)->exceptDept
0550: 68 2c 20 28 65 6e 76 50 74 72 29 2d 3e 6d 61 78 h, (envPtr)->max
0560: 45 78 63 65 70 74 44 65 70 74 68 29 29 2c 20 5c ExceptDepth)), \
0570: 0a 20 20 20 20 20 28 28 65 6e 76 50 74 72 29 2d . ((envPtr)-
0580: 3e 65 78 63 65 70 74 41 72 72 61 79 50 74 72 5b >exceptArrayPtr[
0590: 28 69 6e 64 65 78 29 5d 2e 63 6f 64 65 4f 66 66 (index)].codeOff
05a0: 73 65 74 20 3d 20 43 75 72 72 65 6e 74 4f 66 66 set = CurrentOff
05b0: 73 65 74 28 65 6e 76 50 74 72 29 29 29 0a 20 23 set(envPtr))). #
05c0: 64 65 66 69 6e 65 20 45 78 63 65 70 74 69 6f 6e define Exception
05d0: 52 61 6e 67 65 45 6e 64 73 28 65 6e 76 50 74 72 RangeEnds(envPtr
05e0: 2c 20 69 6e 64 65 78 29 20 5c 0a 2d 20 20 20 20 , index) \.-
05f0: 28 28 28 65 6e 76 50 74 72 29 2d 3e 65 78 63 65 (((envPtr)->exce
0600: 70 74 44 65 70 74 68 2d 2d 29 2c 20 5c 0a 2b 20 ptDepth--), \.+
0610: 20 20 20 28 28 28 65 6e 76 50 74 72 29 2d 3e 65 (((envPtr)->e
0620: 78 63 65 70 74 44 65 70 74 68 20 2d 3d 20 5c 0a xceptDepth -= \.
0630: 2b 20 20 20 20 20 20 20 20 28 28 65 6e 76 50 74 + ((envPt
0640: 72 29 2d 3e 65 78 63 65 70 74 41 72 72 61 79 50 r)->exceptArrayP
0650: 74 72 5b 28 69 6e 64 65 78 29 5d 2e 74 79 70 65 tr[(index)].type
0660: 20 3d 3d 20 43 41 54 43 48 5f 45 58 43 45 50 54 == CATCH_EXCEPT
0670: 49 4f 4e 5f 52 41 4e 47 45 29 29 2c 20 5c 0a 20 ION_RANGE)), \.
0680: 20 20 20 20 28 28 65 6e 76 50 74 72 29 2d 3e 65 ((envPtr)->e
0690: 78 63 65 70 74 41 72 72 61 79 50 74 72 5b 28 69 xceptArrayPtr[(i
06a0: 6e 64 65 78 29 5d 2e 6e 75 6d 43 6f 64 65 42 79 ndex)].numCodeBy
06b0: 74 65 73 20 3d 20 5c 0a 20 09 43 75 72 72 65 6e tes = \. .Curren
06c0: 74 4f 66 66 73 65 74 28 65 6e 76 50 74 72 29 20 tOffset(envPtr)
06d0: 2d 20 28 65 6e 76 50 74 72 29 2d 3e 65 78 63 65 - (envPtr)->exce
06e0: 70 74 41 72 72 61 79 50 74 72 5b 28 69 6e 64 65 ptArrayPtr[(inde
06f0: 78 29 5d 2e 63 6f 64 65 4f 66 66 73 65 74 29 29 x)].codeOffset))
0700: 0a 20 23 64 65 66 69 6e 65 20 45 78 63 65 70 74 . #define Except
0710: 69 6f 6e 52 61 6e 67 65 54 61 72 67 65 74 28 65 ionRangeTarget(e
0720: 6e 76 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 61 nvPtr, index, ta
0730: 72 67 65 74 54 79 70 65 29 20 5c 0a rgetType) \.