Tcl Source Code

Hex Artifact Content
Login

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) \.