Tcl Source Code

Hex Artifact Content
Login

Artifact 0ceb2d447240eec34781042ee09d4beb29a5c42e:

Attachment "msrange.patch" to ticket [1052584fff] added by msofer 2004-10-24 20:50:11.
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 31 33 32 0a 64 69 66 66 20 2d 75 20  n 1.132.diff -u 
00b0: 2d 72 31 2e 31 33 32 20 74 63 6c 42 61 73 69 63  -r1.132 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 32 31 20 4f 63 74  clBasic.c.21 Oct
00e0: 20 32 30 30 34 20 31 37 3a 30 37 3a 33 31 20 2d   2004 17:07:31 -
00f0: 30 30 30 30 09 31 2e 31 33 32 0a 2b 2b 2b 20 67  0000.1.132.+++ g
0100: 65 6e 65 72 69 63 2f 74 63 6c 42 61 73 69 63 2e  eneric/tclBasic.
0110: 63 09 32 34 20 4f 63 74 20 32 30 30 34 20 31 33  c.24 Oct 2004 13
0120: 3a 34 34 3a 34 35 20 2d 30 30 30 30 0a 40 40 20  :44:45 -0000.@@ 
0130: 2d 39 34 2c 36 20 2b 39 34 2c 37 20 40 40 0a 20  -94,6 +94,7 @@. 
0140: 20 20 20 20 7b 22 6e 61 6d 65 73 70 61 63 65 22      {"namespace"
0150: 2c 09 54 63 6c 5f 4e 61 6d 65 73 70 61 63 65 4f  ,.Tcl_NamespaceO
0160: 62 6a 43 6d 64 2c 09 28 43 6f 6d 70 69 6c 65 50  bjCmd,.(CompileP
0170: 72 6f 63 20 2a 29 20 4e 55 4c 4c 2c 09 31 7d 2c  roc *) NULL,.1},
0180: 0a 20 20 20 20 20 7b 22 70 61 63 6b 61 67 65 22  .     {"package"
0190: 2c 09 09 54 63 6c 5f 50 61 63 6b 61 67 65 4f 62  ,..Tcl_PackageOb
01a0: 6a 43 6d 64 2c 09 28 43 6f 6d 70 69 6c 65 50 72  jCmd,.(CompilePr
01b0: 6f 63 20 2a 29 20 4e 55 4c 4c 2c 09 31 7d 2c 0a  oc *) NULL,.1},.
01c0: 20 20 20 20 20 7b 22 70 72 6f 63 22 2c 09 09 54       {"proc",..T
01d0: 63 6c 5f 50 72 6f 63 4f 62 6a 43 6d 64 2c 09 09  cl_ProcObjCmd,..
01e0: 28 43 6f 6d 70 69 6c 65 50 72 6f 63 20 2a 29 20  (CompileProc *) 
01f0: 4e 55 4c 4c 2c 09 31 7d 2c 0a 2b 20 20 20 20 7b  NULL,.1},.+    {
0200: 22 72 61 6e 67 65 22 2c 09 09 54 63 6c 5f 52 61  "range",..Tcl_Ra
0210: 6e 67 65 4f 62 6a 43 6d 64 2c 09 28 43 6f 6d 70  ngeObjCmd,.(Comp
0220: 69 6c 65 50 72 6f 63 20 2a 29 20 4e 55 4c 4c 2c  ileProc *) NULL,
0230: 09 31 7d 2c 0a 20 20 20 20 20 7b 22 72 65 67 65  .1},.     {"rege
0240: 78 70 22 2c 09 09 54 63 6c 5f 52 65 67 65 78 70  xp",..Tcl_Regexp
0250: 4f 62 6a 43 6d 64 2c 09 54 63 6c 43 6f 6d 70 69  ObjCmd,.TclCompi
0260: 6c 65 52 65 67 65 78 70 43 6d 64 2c 09 31 7d 2c  leRegexpCmd,.1},
0270: 0a 20 20 20 20 20 7b 22 72 65 67 73 75 62 22 2c  .     {"regsub",
0280: 09 09 54 63 6c 5f 52 65 67 73 75 62 4f 62 6a 43  ..Tcl_RegsubObjC
0290: 6d 64 2c 09 28 43 6f 6d 70 69 6c 65 50 72 6f 63  md,.(CompileProc
02a0: 20 2a 29 20 4e 55 4c 4c 2c 09 31 7d 2c 0a 20 20   *) NULL,.1},.  
02b0: 20 20 20 7b 22 72 65 6e 61 6d 65 22 2c 09 09 54     {"rename",..T
02c0: 63 6c 5f 52 65 6e 61 6d 65 4f 62 6a 43 6d 64 2c  cl_RenameObjCmd,
02d0: 09 28 43 6f 6d 70 69 6c 65 50 72 6f 63 20 2a 29  .(CompileProc *)
02e0: 20 4e 55 4c 4c 2c 09 31 7d 2c 0a 49 6e 64 65 78   NULL,.1},.Index
02f0: 3a 20 67 65 6e 65 72 69 63 2f 74 63 6c 43 6d 64  : generic/tclCmd
0300: 41 48 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  AH.c.===========
0310: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0320: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0330: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0340: 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c  ========.RCS fil
0350: 65 3a 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f  e: /cvsroot/tcl/
0360: 74 63 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 43  tcl/generic/tclC
0370: 6d 64 41 48 2e 63 2c 76 0a 72 65 74 72 69 65 76  mdAH.c,v.retriev
0380: 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 35  ing revision 1.5
0390: 36 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 35 36  6.diff -u -r1.56
03a0: 20 74 63 6c 43 6d 64 41 48 2e 63 0a 2d 2d 2d 20   tclCmdAH.c.--- 
03b0: 67 65 6e 65 72 69 63 2f 74 63 6c 43 6d 64 41 48  generic/tclCmdAH
03c0: 2e 63 09 32 31 20 4f 63 74 20 32 30 30 34 20 31  .c.21 Oct 2004 1
03d0: 35 3a 31 39 3a 34 36 20 2d 30 30 30 30 09 31 2e  5:19:46 -0000.1.
03e0: 35 36 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74  56.+++ generic/t
03f0: 63 6c 43 6d 64 41 48 2e 63 09 32 34 20 4f 63 74  clCmdAH.c.24 Oct
0400: 20 32 30 30 34 20 31 33 3a 34 34 3a 34 36 20 2d   2004 13:44:46 -
0410: 30 30 30 30 0a 40 40 20 2d 31 37 36 37 2c 38 20  0000.@@ -1767,8 
0420: 2b 31 37 36 37 2c 37 20 40 40 0a 20 09 20 20 20  +1767,7 @@. .   
0430: 20 67 6f 74 6f 20 64 6f 6e 65 3b 0a 20 09 7d 0a   goto done;. .}.
0440: 20 0a 2d 09 72 65 73 75 6c 74 20 3d 20 54 63 6c   .-.result = Tcl
0450: 5f 4c 69 73 74 4f 62 6a 47 65 74 45 6c 65 6d 65  _ListObjGetEleme
0460: 6e 74 73 28 69 6e 74 65 72 70 2c 20 61 72 67 4f  nts(interp, argO
0470: 62 6a 76 5b 32 2b 69 2a 32 5d 2c 0a 2d 09 20 20  bjv[2+i*2],.-.  
0480: 20 20 20 20 20 20 26 61 72 67 63 4c 69 73 74 5b        &argcList[
0490: 69 5d 2c 20 26 61 72 67 76 4c 69 73 74 5b 69 5d  i], &argvList[i]
04a0: 29 3b 0a 2b 09 72 65 73 75 6c 74 20 3d 20 28 69  );.+.result = (i
04b0: 6e 74 29 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 4c  nt) Tcl_ListObjL
04c0: 65 6e 67 74 68 28 69 6e 74 65 72 70 2c 20 61 72  ength(interp, ar
04d0: 67 4f 62 6a 76 5b 32 2b 69 2a 32 5d 2c 20 26 61  gObjv[2+i*2], &a
04e0: 72 67 63 4c 69 73 74 5b 69 5d 20 29 3b 0a 20 09  rgcList[i] );. .
04f0: 69 66 20 28 72 65 73 75 6c 74 20 21 3d 20 54 43  if (result != TC
0500: 4c 5f 4f 4b 29 20 7b 0a 20 09 20 20 20 20 67 6f  L_OK) {. .    go
0510: 74 6f 20 64 6f 6e 65 3b 0a 20 09 7d 0a 40 40 20  to done;. .}.@@ 
0520: 2d 31 38 30 34 2c 31 30 20 2b 31 38 30 33 2c 31  -1804,10 +1803,1
0530: 32 20 40 40 0a 20 09 20 20 20 20 69 66 20 28 72  2 @@. .    if (r
0540: 65 73 75 6c 74 20 21 3d 20 54 43 4c 5f 4f 4b 29  esult != TCL_OK)
0550: 20 7b 0a 20 09 09 54 63 6c 5f 50 61 6e 69 63 28   {. ..Tcl_Panic(
0560: 22 54 63 6c 5f 46 6f 72 65 61 63 68 4f 62 6a 43  "Tcl_ForeachObjC
0570: 6d 64 3a 20 63 6f 75 6c 64 20 6e 6f 74 20 72 65  md: could not re
0580: 63 6f 6e 76 65 72 74 20 76 61 72 69 61 62 6c 65  convert variable
0590: 20 6c 69 73 74 20 25 64 20 74 6f 20 61 20 6c 69   list %d to a li
05a0: 73 74 20 6f 62 6a 65 63 74 5c 6e 22 2c 20 69 29  st object\n", i)
05b0: 3b 0a 20 09 20 20 20 20 7d 0a 2d 09 20 20 20 20  ;. .    }.-.    
05c0: 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 4c 69 73  result = Tcl_Lis
05d0: 74 4f 62 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28  tObjGetElements(
05e0: 69 6e 74 65 72 70 2c 20 61 72 67 4f 62 6a 76 5b  interp, argObjv[
05f0: 32 2b 69 2a 32 5d 2c 0a 2d 09 09 20 20 20 20 26  2+i*2],.-..    &
0600: 61 72 67 63 4c 69 73 74 5b 69 5d 2c 20 26 61 72  argcList[i], &ar
0610: 67 76 4c 69 73 74 5b 69 5d 29 3b 0a 2d 09 20 20  gvList[i]);.-.  
0620: 20 20 69 66 20 28 72 65 73 75 6c 74 20 21 3d 20    if (result != 
0630: 54 43 4c 5f 4f 4b 29 20 7b 0a 2d 09 09 54 63 6c  TCL_OK) {.-..Tcl
0640: 5f 50 61 6e 69 63 28 22 54 63 6c 5f 46 6f 72 65  _Panic("Tcl_Fore
0650: 61 63 68 4f 62 6a 43 6d 64 3a 20 63 6f 75 6c 64  achObjCmd: could
0660: 20 6e 6f 74 20 72 65 63 6f 6e 76 65 72 74 20 76   not reconvert v
0670: 61 6c 75 65 20 6c 69 73 74 20 25 64 20 74 6f 20  alue list %d to 
0680: 61 20 6c 69 73 74 20 6f 62 6a 65 63 74 5c 6e 22  a list object\n"
0690: 2c 20 69 29 3b 0a 2b 09 20 20 20 20 69 66 20 28  , i);.+.    if (
06a0: 61 72 67 4f 62 6a 76 5b 32 2b 69 2a 32 5d 2d 3e  argObjv[2+i*2]->
06b0: 74 79 70 65 50 74 72 20 21 3d 20 26 74 63 6c 41  typePtr != &tclA
06c0: 72 69 74 68 53 65 72 69 65 73 54 79 70 65 29 20  rithSeriesType) 
06d0: 7b 0a 2b 09 20 20 20 20 20 20 20 20 72 65 73 75  {.+.        resu
06e0: 6c 74 20 3d 20 54 63 6c 5f 4c 69 73 74 4f 62 6a  lt = Tcl_ListObj
06f0: 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65  GetElements(inte
0700: 72 70 2c 20 61 72 67 4f 62 6a 76 5b 32 2b 69 2a  rp, argObjv[2+i*
0710: 32 5d 2c 0a 2b 09 09 20 20 20 20 20 20 20 20 26  2],.+..        &
0720: 61 72 67 63 4c 69 73 74 5b 69 5d 2c 20 26 61 72  argcList[i], &ar
0730: 67 76 4c 69 73 74 5b 69 5d 29 3b 0a 2b 09 20 20  gvList[i]);.+.  
0740: 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74        if (result
0750: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09   != TCL_OK) {.+.
0760: 09 20 20 20 20 54 63 6c 5f 50 61 6e 69 63 28 22  .    Tcl_Panic("
0770: 54 63 6c 5f 46 6f 72 65 61 63 68 4f 62 6a 43 6d  Tcl_ForeachObjCm
0780: 64 3a 20 63 6f 75 6c 64 20 6e 6f 74 20 72 65 63  d: could not rec
0790: 6f 6e 76 65 72 74 20 76 61 6c 75 65 20 6c 69 73  onvert value lis
07a0: 74 20 25 64 20 74 6f 20 61 20 6c 69 73 74 20 6f  t %d to a list o
07b0: 62 6a 65 63 74 5c 6e 22 2c 20 69 29 3b 0a 2b 09  bject\n", i);.+.
07c0: 20 20 20 20 20 20 20 20 7d 0a 20 09 20 20 20 20          }. .    
07d0: 7d 0a 20 0a 20 09 20 20 20 20 66 6f 72 20 28 76  }. . .    for (v
07e0: 20 3d 20 30 3b 20 20 76 20 3c 20 76 61 72 63 4c   = 0;  v < varcL
07f0: 69 73 74 5b 69 5d 3b 20 20 76 2b 2b 29 20 7b 0a  ist[i];  v++) {.
0800: 40 40 20 2d 31 38 31 36 2c 37 20 2b 31 38 31 37  @@ -1816,7 +1817
0810: 2c 31 31 20 40 40 0a 20 09 09 69 6e 74 20 69 73  ,11 @@. ..int is
0820: 45 6d 70 74 79 4f 62 6a 20 3d 20 30 3b 0a 20 0a  EmptyObj = 0;. .
0830: 20 09 09 69 66 20 28 6b 20 3c 20 61 72 67 63 4c   ..if (k < argcL
0840: 69 73 74 5b 69 5d 29 20 7b 0a 2d 09 09 20 20 20  ist[i]) {.-..   
0850: 20 76 61 6c 75 65 50 74 72 20 3d 20 61 72 67 76   valuePtr = argv
0860: 4c 69 73 74 5b 69 5d 5b 6b 5d 3b 0a 2b 09 09 20  List[i][k];.+.. 
0870: 20 20 20 69 66 20 28 61 72 67 4f 62 6a 76 5b 32     if (argObjv[2
0880: 2b 69 2a 32 5d 2d 3e 74 79 70 65 50 74 72 20 21  +i*2]->typePtr !
0890: 3d 20 26 74 63 6c 41 72 69 74 68 53 65 72 69 65  = &tclArithSerie
08a0: 73 54 79 70 65 29 20 7b 0a 2b 09 09 20 20 20 20  sType) {.+..    
08b0: 09 76 61 6c 75 65 50 74 72 20 3d 20 61 72 67 76  .valuePtr = argv
08c0: 4c 69 73 74 5b 69 5d 5b 6b 5d 3b 0a 2b 09 09 20  List[i][k];.+.. 
08d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 09 09     } else {.+...
08e0: 54 63 6c 5f 4c 69 73 74 4f 62 6a 49 6e 64 65 78  Tcl_ListObjIndex
08f0: 28 69 6e 74 65 72 70 2c 20 61 72 67 4f 62 6a 76  (interp, argObjv
0900: 5b 32 2b 69 2a 32 5d 2c 20 6b 2c 20 26 76 61 6c  [2+i*2], k, &val
0910: 75 65 50 74 72 29 3b 0a 2b 09 09 20 20 20 20 7d  uePtr);.+..    }
0920: 0a 20 09 09 7d 20 65 6c 73 65 20 7b 0a 20 09 09  . ..} else {. ..
0930: 20 20 20 20 76 61 6c 75 65 50 74 72 20 3d 20 54      valuePtr = T
0940: 63 6c 5f 4e 65 77 4f 62 6a 28 29 3b 20 2f 2a 20  cl_NewObj(); /* 
0950: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 2a 2f 0a  empty string */.
0960: 20 09 09 20 20 20 20 69 73 45 6d 70 74 79 4f 62   ..    isEmptyOb
0970: 6a 20 3d 20 31 3b 0a 40 40 20 2d 31 38 33 33 2c  j = 1;.@@ -1833,
0980: 37 20 2b 31 38 33 38 2c 36 20 40 40 0a 20 09 09  7 +1838,6 @@. ..
0990: 20 20 20 20 72 65 73 75 6c 74 20 3d 20 54 43 4c      result = TCL
09a0: 5f 45 52 52 4f 52 3b 0a 20 09 09 20 20 20 20 67  _ERROR;. ..    g
09b0: 6f 74 6f 20 64 6f 6e 65 3b 0a 20 09 09 7d 0a 2d  oto done;. ..}.-
09c0: 0a 20 09 20 20 20 20 7d 0a 20 09 7d 0a 20 0a 49  . .    }. .}. .I
09d0: 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74 63  ndex: generic/tc
09e0: 6c 43 6d 64 49 4c 2e 63 0a 3d 3d 3d 3d 3d 3d 3d  lCmdIL.c.=======
09f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 52 43 53  ============.RCS
0a30: 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f 6f 74 2f   file: /cvsroot/
0a40: 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72 69 63 2f  tcl/tcl/generic/
0a50: 74 63 6c 43 6d 64 49 4c 2e 63 2c 76 0a 72 65 74  tclCmdIL.c,v.ret
0a60: 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f 6e  rieving revision
0a70: 20 31 2e 36 36 0a 64 69 66 66 20 2d 75 20 2d 72   1.66.diff -u -r
0a80: 31 2e 36 36 20 74 63 6c 43 6d 64 49 4c 2e 63 0a  1.66 tclCmdIL.c.
0a90: 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 43  --- generic/tclC
0aa0: 6d 64 49 4c 2e 63 09 31 34 20 4f 63 74 20 32 30  mdIL.c.14 Oct 20
0ab0: 30 34 20 31 37 3a 32 30 3a 31 31 20 2d 30 30 30  04 17:20:11 -000
0ac0: 30 09 31 2e 36 36 0a 2b 2b 2b 20 67 65 6e 65 72  0.1.66.+++ gener
0ad0: 69 63 2f 74 63 6c 43 6d 64 49 4c 2e 63 09 32 34  ic/tclCmdIL.c.24
0ae0: 20 4f 63 74 20 32 30 30 34 20 31 33 3a 34 34 3a   Oct 2004 13:44:
0af0: 34 38 20 2d 30 30 30 30 0a 40 40 20 2d 32 33 33  48 -0000.@@ -233
0b00: 35 2c 37 20 2b 32 33 33 35 2c 37 20 40 40 0a 20  5,7 +2335,7 @@. 
0b10: 20 20 20 20 69 6e 74 20 69 6e 64 65 78 43 6f 75      int indexCou
0b20: 6e 74 3b 09 09 2f 2a 20 53 69 7a 65 20 6f 66 20  nt;../* Size of 
0b30: 74 68 65 20 61 72 72 61 79 20 6f 66 20 6c 69 73  the array of lis
0b40: 74 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 20  t indices */.   
0b50: 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 6c 64 4c 69    Tcl_Obj *oldLi
0b60: 73 74 50 74 72 3b 09 2f 2a 20 54 65 6d 70 20 6c  stPtr;./* Temp l
0b70: 6f 63 61 74 69 6f 6e 20 74 6f 20 70 72 65 73 65  ocation to prese
0b80: 72 76 65 20 74 68 65 20 6c 69 73 74 0a 20 09 09  rve the list. ..
0b90: 09 09 20 2a 20 70 6f 69 6e 74 65 72 20 77 68 65  .. * pointer whe
0ba0: 6e 20 72 65 70 6c 61 63 69 6e 67 20 69 74 20 77  n replacing it w
0bb0: 69 74 68 20 61 20 73 75 62 6c 69 73 74 20 2a 2f  ith a sublist */
0bc0: 0a 2d 0a 2b 20 20 20 20 0a 20 20 20 20 20 2f 2a  .-.+    .     /*
0bd0: 0a 20 20 20 20 20 20 2a 20 44 65 74 65 72 6d 69  .      * Determi
0be0: 6e 65 20 77 68 65 74 68 65 72 20 61 72 67 50 74  ne whether argPt
0bf0: 72 20 64 65 73 69 67 6e 61 74 65 73 20 61 20 6c  r designates a l
0c00: 69 73 74 20 6f 72 20 61 20 73 69 6e 67 6c 65 20  ist or a single 
0c10: 69 6e 64 65 78 2e 0a 20 20 20 20 20 20 2a 20 57  index..      * W
0c20: 65 20 68 61 76 65 20 74 6f 20 62 65 20 63 61 72  e have to be car
0c30: 65 66 75 6c 20 61 62 6f 75 74 20 74 68 65 20 6f  eful about the o
0c40: 72 64 65 72 20 6f 66 20 74 68 65 20 63 68 65 63  rder of the chec
0c50: 6b 73 20 74 6f 20 61 76 6f 69 64 0a 40 40 20 2d  ks to avoid.@@ -
0c60: 32 33 34 39 2c 38 20 2b 32 33 34 39 2c 38 20 40  2349,8 +2349,8 @
0c70: 40 0a 20 09 20 2a 2f 0a 20 0a 20 09 72 65 74 75  @. . */. . .retu
0c80: 72 6e 20 54 63 6c 4c 69 6e 64 65 78 46 6c 61 74  rn TclLindexFlat
0c90: 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 50 74 72  (interp, listPtr
0ca0: 2c 20 31 2c 20 26 61 72 67 50 74 72 29 3b 0a 2d  , 1, &argPtr);.-
0cb0: 0a 20 20 20 20 20 7d 0a 2b 0a 20 20 20 20 20 69  .     }.+.     i
0cc0: 66 20 28 54 63 6c 5f 4c 69 73 74 4f 62 6a 47 65  f (Tcl_ListObjGe
0cd0: 74 45 6c 65 6d 65 6e 74 73 28 4e 55 4c 4c 2c 20  tElements(NULL, 
0ce0: 61 72 67 50 74 72 2c 20 26 69 6e 64 65 78 43 6f  argPtr, &indexCo
0cf0: 75 6e 74 2c 20 26 69 6e 64 69 63 65 73 29 20 21  unt, &indices) !
0d00: 3d 20 54 43 4c 5f 4f 4b 29 7b 0a 20 09 2f 2a 0a  = TCL_OK){. ./*.
0d10: 20 09 20 2a 20 61 72 67 50 74 72 20 64 65 73 69   . * argPtr desi
0d20: 67 6e 61 74 65 73 20 73 6f 6d 65 74 68 69 6e 67  gnates something
0d30: 20 74 68 61 74 20 69 73 20 6e 65 69 74 68 65 72   that is neither
0d40: 20 61 6e 20 69 6e 64 65 78 20 6e 6f 72 20 61 0a   an index nor a.
0d50: 40 40 20 2d 32 33 36 30 2c 36 20 2b 32 33 36 30  @@ -2360,6 +2360
0d60: 2c 31 30 20 40 40 0a 20 09 72 65 74 75 72 6e 20  ,10 @@. .return 
0d70: 54 63 6c 4c 69 6e 64 65 78 46 6c 61 74 28 20 69  TclLindexFlat( i
0d80: 6e 74 65 72 70 2c 20 6c 69 73 74 50 74 72 2c 20  nterp, listPtr, 
0d90: 31 2c 20 26 61 72 67 50 74 72 20 29 3b 0a 20 20  1, &argPtr );.  
0da0: 20 20 20 7d 0a 20 0a 2b 20 20 20 20 69 66 20 28     }. .+    if (
0db0: 69 6e 64 65 78 43 6f 75 6e 74 20 3d 3d 20 31 29  indexCount == 1)
0dc0: 20 7b 0a 2b 09 72 65 74 75 72 6e 20 54 63 6c 4c   {.+.return TclL
0dd0: 69 6e 64 65 78 46 6c 61 74 28 20 69 6e 74 65 72  indexFlat( inter
0de0: 70 2c 20 6c 69 73 74 50 74 72 2c 20 31 2c 20 26  p, listPtr, 1, &
0df0: 61 72 67 50 74 72 20 29 3b 0a 2b 20 20 20 20 7d  argPtr );.+    }
0e00: 0a 2b 0a 20 20 20 20 20 2f 2a 0a 20 20 20 20 20  .+.     /*.     
0e10: 20 2a 20 52 65 63 6f 72 64 20 74 68 65 20 72 65   * Record the re
0e20: 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 6c  ference to the l
0e30: 69 73 74 20 74 68 61 74 20 77 65 20 61 72 65 20  ist that we are 
0e40: 6d 61 69 6e 74 61 69 6e 69 6e 67 20 69 6e 0a 20  maintaining in. 
0e50: 20 20 20 20 20 2a 20 74 68 65 20 61 63 74 69 76       * the activ
0e60: 61 74 69 6f 6e 20 72 65 63 6f 72 64 2e 0a 40 40  ation record..@@
0e70: 20 2d 32 34 37 33 2c 37 20 2b 32 34 37 37 2c 37   -2473,7 +2477,7
0e80: 20 40 40 0a 20 20 2a 09 54 63 6c 5f 4c 69 6e 64   @@.  *.Tcl_Lind
0e90: 65 78 4f 62 6a 43 6d 64 20 77 68 65 6e 65 76 65  exObjCmd wheneve
0ea0: 72 20 65 69 74 68 65 72 20 69 73 20 70 72 65 73  r either is pres
0eb0: 65 6e 74 65 64 20 77 69 74 68 20 6f 62 6a 63 3d  ented with objc=
0ec0: 3d 32 20 6f 72 0a 20 20 2a 09 6f 62 6a 63 3e 3d  =2 or.  *.objc>=
0ed0: 34 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 20 63  4.  It is also c
0ee0: 61 6c 6c 65 64 20 66 72 6f 6d 20 54 63 6c 4c 69  alled from TclLi
0ef0: 6e 64 65 78 4c 69 73 74 20 66 6f 72 20 74 68 65  ndexList for the
0f00: 20 6f 62 6a 63 3d 3d 33 0a 20 20 2a 09 63 61 73   objc==3.  *.cas
0f10: 65 20 6f 6e 63 65 20 69 74 20 69 73 20 64 65 74  e once it is det
0f20: 65 72 6d 69 6e 65 64 20 74 68 61 74 20 6f 62 6a  ermined that obj
0f30: 76 5b 32 5d 20 63 61 6e 6e 6f 74 20 62 65 20 70  v[2] cannot be p
0f40: 61 72 73 65 64 20 61 73 20 61 0a 2d 20 2a 09 6c  arsed as a.- *.l
0f50: 69 73 74 2e 0a 2b 20 2a 09 6c 69 73 74 2c 20 6f  ist..+ *.list, o
0f60: 72 20 77 68 65 6e 20 6f 62 6a 76 5b 32 5d 20 68  r when objv[2] h
0f70: 61 73 20 6c 65 6e 67 74 68 20 31 2e 0a 20 20 2a  as length 1..  *
0f80: 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .  *------------
0f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2f 0a  ----------.  */.
0fd0: 40 40 20 2d 32 34 39 39 2c 36 20 2b 32 35 30 33  @@ -2499,6 +2503
0fe0: 2c 33 31 20 40 40 0a 20 20 20 20 20 54 63 6c 5f  ,31 @@.     Tcl_
0ff0: 4f 62 6a 2a 20 6f 6c 64 4c 69 73 74 50 74 72 3b  Obj* oldListPtr;
1000: 09 2f 2a 20 54 65 6d 70 6f 72 61 72 79 20 74 6f  ./* Temporary to
1010: 20 68 6f 6c 64 20 6c 69 73 74 50 74 72 20 73 6f   hold listPtr so
1020: 20 74 68 61 74 0a 20 09 09 09 09 20 2a 20 69 74   that. .... * it
1030: 73 20 72 65 66 20 63 6f 75 6e 74 20 63 61 6e 20  s ref count can 
1040: 62 65 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20  be decremented. 
1050: 2a 2f 0a 20 0a 2b 0a 2b 20 20 20 20 69 66 20 28  */. .+.+    if (
1060: 28 69 6e 64 65 78 43 6f 75 6e 74 20 3d 3d 20 31  (indexCount == 1
1070: 29 20 26 26 20 28 6c 69 73 74 50 74 72 2d 3e 74  ) && (listPtr->t
1080: 79 70 65 50 74 72 20 3d 3d 20 26 74 63 6c 41 72  ypePtr == &tclAr
1090: 69 74 68 53 65 72 69 65 73 54 79 70 65 29 29 20  ithSeriesType)) 
10a0: 7b 0a 2b 09 54 63 6c 5f 4f 62 6a 20 2a 72 65 73  {.+.Tcl_Obj *res
10b0: 50 74 72 3b 0a 2b 0a 2b 09 54 63 6c 5f 4c 69 73  Ptr;.+.+.Tcl_Lis
10c0: 74 4f 62 6a 4c 65 6e 67 74 68 28 69 6e 74 65 72  tObjLength(inter
10d0: 70 2c 20 6c 69 73 74 50 74 72 2c 20 26 6c 69 73  p, listPtr, &lis
10e0: 74 4c 65 6e 29 3b 0a 2b 09 72 65 73 75 6c 74 20  tLen);.+.result 
10f0: 3d 20 54 63 6c 47 65 74 49 6e 74 46 6f 72 49 6e  = TclGetIntForIn
1100: 64 65 78 28 69 6e 74 65 72 70 2c 20 69 6e 64 65  dex(interp, inde
1110: 78 41 72 72 61 79 5b 30 5d 2c 0a 2b 09 09 2f 2a  xArray[0],.+../*
1120: 65 6e 64 56 61 6c 75 65 2a 2f 20 6c 69 73 74 4c  endValue*/ listL
1130: 65 6e 2d 31 2c 20 26 69 6e 64 65 78 29 3b 0a 2b  en-1, &index);.+
1140: 09 69 66 20 28 72 65 73 75 6c 74 20 21 3d 20 54  .if (result != T
1150: 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 20 20 20 20 2f  CL_OK) {.+.    /
1160: 2a 0a 2b 09 20 20 20 20 20 2a 20 49 6e 64 65 78  *.+.     * Index
1170: 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 70 61   could not be pa
1180: 72 73 65 64 0a 2b 09 20 20 20 20 20 2a 2f 0a 2b  rsed.+.     */.+
1190: 0a 2b 09 20 20 20 20 54 63 6c 5f 44 65 63 72 52  .+.    Tcl_DecrR
11a0: 65 66 43 6f 75 6e 74 28 6c 69 73 74 50 74 72 29  efCount(listPtr)
11b0: 3b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 4e  ;.+.    return N
11c0: 55 4c 4c 3b 0a 2b 09 7d 0a 2b 09 72 65 73 75 6c  ULL;.+.}.+.resul
11d0: 74 20 3d 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 49  t = Tcl_ListObjI
11e0: 6e 64 65 78 28 69 6e 74 65 72 70 2c 20 6c 69 73  ndex(interp, lis
11f0: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 26 72 65  tPtr, index, &re
1200: 73 50 74 72 29 3b 0a 2b 09 69 66 20 28 72 65 73  sPtr);.+.if (res
1210: 75 6c 74 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  ult!= TCL_OK) {.
1220: 2b 09 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c  +.    return NUL
1230: 4c 3b 0a 2b 09 7d 20 65 6c 73 65 20 69 66 20 28  L;.+.} else if (
1240: 72 65 73 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20  resPtr == NULL) 
1250: 7b 0a 2b 09 20 20 20 20 54 63 6c 4e 65 77 4f 62  {.+.    TclNewOb
1260: 6a 28 72 65 73 50 74 72 29 3b 0a 2b 09 7d 0a 2b  j(resPtr);.+.}.+
1270: 09 54 63 6c 5f 49 6e 63 72 52 65 66 43 6f 75 6e  .Tcl_IncrRefCoun
1280: 74 28 72 65 73 50 74 72 29 3b 0a 2b 09 72 65 74  t(resPtr);.+.ret
1290: 75 72 6e 20 72 65 73 50 74 72 3b 0a 2b 20 20 20  urn resPtr;.+   
12a0: 20 7d 0a 2b 0a 20 20 20 20 20 2f 2a 0a 20 20 20   }.+.     /*.   
12b0: 20 20 20 2a 20 52 65 63 6f 72 64 20 74 68 65 20     * Record the 
12c0: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65  reference to the
12d0: 20 27 6c 69 73 74 50 74 72 27 20 6f 62 6a 65 63   'listPtr' objec
12e0: 74 20 74 68 61 74 20 77 65 20 61 72 65 0a 20 20  t that we are.  
12f0: 20 20 20 20 2a 20 6d 61 69 6e 74 61 69 6e 69 6e      * maintainin
1300: 67 20 69 6e 20 74 68 65 20 43 20 61 63 74 69 76  g in the C activ
1310: 61 74 69 6f 6e 20 72 65 63 6f 72 64 2e 0a 40 40  ation record..@@
1320: 20 2d 33 36 34 36 2c 37 20 2b 33 36 37 35 2c 36   -3646,7 +3675,6
1330: 20 40 40 0a 20 20 20 20 20 7d 0a 20 20 20 20 20   @@.     }.     
1340: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20  return TCL_OK;. 
1350: 7d 0a 2d 0c 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d  }.-.. /*.  *----
1360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13a0: 2d 2d 0a 20 20 2a 0a 49 6e 64 65 78 3a 20 67 65  --.  *.Index: ge
13b0: 6e 65 72 69 63 2f 74 63 6c 45 78 65 63 75 74 65  neric/tclExecute
13c0: 2e 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .c.=============
13d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
13e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
13f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1400: 3d 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a  ======.RCS file:
1410: 20 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63   /cvsroot/tcl/tc
1420: 6c 2f 67 65 6e 65 72 69 63 2f 74 63 6c 45 78 65  l/generic/tclExe
1430: 63 75 74 65 2e 63 2c 76 0a 72 65 74 72 69 65 76  cute.c,v.retriev
1440: 69 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31  ing revision 1.1
1450: 36 30 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 31  60.diff -u -r1.1
1460: 36 30 20 74 63 6c 45 78 65 63 75 74 65 2e 63 0a  60 tclExecute.c.
1470: 2d 2d 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 45  --- generic/tclE
1480: 78 65 63 75 74 65 2e 63 09 32 32 20 4f 63 74 20  xecute.c.22 Oct 
1490: 32 30 30 34 20 31 34 3a 30 31 3a 30 30 20 2d 30  2004 14:01:00 -0
14a0: 30 30 30 09 31 2e 31 36 30 0a 2b 2b 2b 20 67 65  000.1.160.+++ ge
14b0: 6e 65 72 69 63 2f 74 63 6c 45 78 65 63 75 74 65  neric/tclExecute
14c0: 2e 63 09 32 34 20 4f 63 74 20 32 30 30 34 20 31  .c.24 Oct 2004 1
14d0: 33 3a 34 34 3a 35 33 20 2d 30 30 30 30 0a 40 40  3:44:53 -0000.@@
14e0: 20 2d 32 36 35 39 2c 36 20 2b 32 36 35 39 2c 37   -2659,6 +2659,7
14f0: 20 40 40 0a 20 09 69 6e 74 20 6c 69 73 74 63 2c   @@. .int listc,
1500: 20 69 64 78 2c 20 6f 70 6e 64 3b 0a 20 09 54 63   idx, opnd;. .Tc
1510: 6c 5f 4f 62 6a 20 2a 2a 6c 69 73 74 76 3b 0a 20  l_Obj **listv;. 
1520: 09 54 63 6c 5f 4f 62 6a 20 2a 76 61 6c 75 65 50  .Tcl_Obj *valueP
1530: 74 72 3b 0a 2b 09 41 72 69 74 68 53 65 72 69 65  tr;.+.ArithSerie
1540: 73 20 2a 61 72 69 74 68 53 65 72 69 65 73 52 65  s *arithSeriesRe
1550: 70 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 20 09 0a  pPtr = NULL;. ..
1560: 20 09 2f 2a 0a 20 09 20 2a 20 50 6f 70 20 74 68   ./*. . * Pop th
1570: 65 20 6c 69 73 74 20 61 6e 64 20 67 65 74 20 74  e list and get t
1580: 68 65 20 69 6e 64 65 78 0a 40 40 20 2d 32 36 36  he index.@@ -266
1590: 38 2c 31 33 20 2b 32 36 36 39 2c 32 30 20 40 40  8,13 +2669,20 @@
15a0: 0a 20 0a 20 09 2f 2a 0a 20 09 20 2a 20 47 65 74  . . ./*. . * Get
15b0: 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66   the contents of
15c0: 20 74 68 65 20 6c 69 73 74 2c 20 6d 61 6b 69 6e   the list, makin
15d0: 67 20 73 75 72 65 20 74 68 61 74 20 69 74 0a 2d  g sure that it.-
15e0: 09 20 2a 20 72 65 61 6c 6c 79 20 69 73 20 61 20  . * really is a 
15f0: 6c 69 73 74 20 69 6e 20 74 68 65 20 70 72 6f 63  list in the proc
1600: 65 73 73 2e 0a 2b 09 20 2a 20 72 65 61 6c 6c 79  ess..+. * really
1610: 20 69 73 20 61 20 6c 69 73 74 20 69 6e 20 74 68   is a list in th
1620: 65 20 70 72 6f 63 65 73 73 2e 20 53 70 65 63 69  e process. Speci
1630: 61 6c 20 63 61 73 65 20 66 6f 72 20 61 72 69 74  al case for arit
1640: 68 6d 65 74 69 63 0a 2b 09 20 2a 20 73 65 72 69  hmetic.+. * seri
1650: 65 73 2e 20 0a 20 09 20 2a 2f 0a 2d 09 72 65 73  es. . . */.-.res
1660: 75 6c 74 20 3d 20 54 63 6c 5f 4c 69 73 74 4f 62  ult = Tcl_ListOb
1670: 6a 47 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74  jGetElements(int
1680: 65 72 70 2c 20 76 61 6c 75 65 50 74 72 2c 20 26  erp, valuePtr, &
1690: 6c 69 73 74 63 2c 20 26 6c 69 73 74 76 29 3b 0a  listc, &listv);.
16a0: 2d 09 69 66 20 28 72 65 73 75 6c 74 20 21 3d 20  -.if (result != 
16b0: 54 43 4c 5f 4f 4b 29 20 7b 0a 2d 09 20 20 20 20  TCL_OK) {.-.    
16c0: 54 52 41 43 45 5f 57 49 54 48 5f 4f 42 4a 28 28  TRACE_WITH_OBJ((
16d0: 22 5c 22 25 2e 33 30 73 5c 22 20 25 64 20 3d 3e  "\"%.30s\" %d =>
16e0: 20 45 52 52 4f 52 3a 20 22 2c 20 4f 32 53 28 76   ERROR: ", O2S(v
16f0: 61 6c 75 65 50 74 72 29 2c 20 6f 70 6e 64 29 2c  aluePtr), opnd),
1700: 0a 2d 09 09 20 20 20 20 54 63 6c 5f 47 65 74 4f  .-..    Tcl_GetO
1710: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29  bjResult(interp)
1720: 29 3b 0a 2d 09 20 20 20 20 67 6f 74 6f 20 63 68  );.-.    goto ch
1730: 65 63 6b 46 6f 72 43 61 74 63 68 3b 0a 2b 09 69  eckForCatch;.+.i
1740: 66 20 28 76 61 6c 75 65 50 74 72 2d 3e 74 79 70  f (valuePtr->typ
1750: 65 50 74 72 20 3d 3d 20 26 74 63 6c 41 72 69 74  ePtr == &tclArit
1760: 68 53 65 72 69 65 73 54 79 70 65 29 20 7b 0a 2b  hSeriesType) {.+
1770: 09 20 20 20 20 61 72 69 74 68 53 65 72 69 65 73  .    arithSeries
1780: 52 65 70 50 74 72 20 3d 20 28 41 72 69 74 68 53  RepPtr = (ArithS
1790: 65 72 69 65 73 2a 29 0a 2b 09 09 76 61 6c 75 65  eries*).+..value
17a0: 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c 52 65 70  Ptr->internalRep
17b0: 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e 70 74 72  .twoPtrValue.ptr
17c0: 31 3b 0a 2b 09 20 20 20 20 6c 69 73 74 63 20 3d  1;.+.    listc =
17d0: 20 61 72 69 74 68 53 65 72 69 65 73 52 65 70 50   arithSeriesRepP
17e0: 74 72 2d 3e 6c 65 6e 3b 0a 2b 09 7d 20 65 6c 73  tr->len;.+.} els
17f0: 65 20 7b 09 0a 2b 09 20 20 20 20 72 65 73 75 6c  e {..+.    resul
1800: 74 20 3d 20 54 63 6c 5f 4c 69 73 74 4f 62 6a 47  t = Tcl_ListObjG
1810: 65 74 45 6c 65 6d 65 6e 74 73 28 69 6e 74 65 72  etElements(inter
1820: 70 2c 20 76 61 6c 75 65 50 74 72 2c 20 26 6c 69  p, valuePtr, &li
1830: 73 74 63 2c 20 26 6c 69 73 74 76 29 3b 0a 2b 09  stc, &listv);.+.
1840: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 21      if (result !
1850: 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 09 54  = TCL_OK) {.+..T
1860: 52 41 43 45 5f 57 49 54 48 5f 4f 42 4a 28 28 22  RACE_WITH_OBJ(("
1870: 5c 22 25 2e 33 30 73 5c 22 20 25 64 20 3d 3e 20  \"%.30s\" %d => 
1880: 45 52 52 4f 52 3a 20 22 2c 20 4f 32 53 28 76 61  ERROR: ", O2S(va
1890: 6c 75 65 50 74 72 29 2c 20 6f 70 6e 64 29 2c 0a  luePtr), opnd),.
18a0: 2b 09 09 09 54 63 6c 5f 47 65 74 4f 62 6a 52 65  +...Tcl_GetObjRe
18b0: 73 75 6c 74 28 69 6e 74 65 72 70 29 29 3b 0a 2b  sult(interp));.+
18c0: 09 09 67 6f 74 6f 20 63 68 65 63 6b 46 6f 72 43  ..goto checkForC
18d0: 61 74 63 68 3b 0a 2b 09 20 20 20 20 7d 0a 20 09  atch;.+.    }. .
18e0: 7d 0a 20 0a 20 09 2f 2a 0a 40 40 20 2d 32 36 38  }. . ./*.@@ -268
18f0: 37 2c 37 20 2b 32 36 39 35 2c 31 37 20 40 40 0a  7,7 +2695,17 @@.
1900: 20 09 20 20 20 20 69 64 78 20 3d 20 6f 70 6e 64   .    idx = opnd
1910: 3b 0a 20 09 7d 0a 20 09 69 66 20 28 69 64 78 20  ;. .}. .if (idx 
1920: 3e 3d 20 30 20 26 26 20 69 64 78 20 3c 20 6c 69  >= 0 && idx < li
1930: 73 74 63 29 20 7b 0a 2d 09 20 20 20 20 6f 62 6a  stc) {.-.    obj
1940: 52 65 73 75 6c 74 50 74 72 20 3d 20 6c 69 73 74  ResultPtr = list
1950: 76 5b 69 64 78 5d 3b 0a 2b 09 20 20 20 20 69 66  v[idx];.+.    if
1960: 20 28 61 72 69 74 68 53 65 72 69 65 73 52 65 70   (arithSeriesRep
1970: 50 74 72 29 20 7b 0a 2b 09 09 69 66 20 28 61 72  Ptr) {.+..if (ar
1980: 69 74 68 53 65 72 69 65 73 52 65 70 50 74 72 2d  ithSeriesRepPtr-
1990: 3e 66 6c 61 67 73 20 26 20 54 43 4c 5f 52 41 4e  >flags & TCL_RAN
19a0: 47 45 5f 49 53 5f 57 49 44 45 29 20 7b 0a 2b 09  GE_IS_WIDE) {.+.
19b0: 09 20 20 20 20 6f 62 6a 52 65 73 75 6c 74 50 74  .    objResultPt
19c0: 72 20 3d 20 54 63 6c 5f 4e 65 77 57 69 64 65 49  r = Tcl_NewWideI
19d0: 6e 74 4f 62 6a 28 61 72 69 74 68 53 65 72 69 65  ntObj(arithSerie
19e0: 73 52 65 70 50 74 72 2d 3e 73 74 61 72 74 2e 77  sRepPtr->start.w
19f0: 2b 0a 2b 09 09 09 20 20 20 20 28 69 64 78 2a 61  +.+...    (idx*a
1a00: 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74 72  rithSeriesRepPtr
1a10: 2d 3e 73 74 65 70 2e 77 29 29 3b 0a 2b 09 09 7d  ->step.w));.+..}
1a20: 20 65 6c 73 65 20 7b 0a 2b 09 09 20 20 20 20 6f   else {.+..    o
1a30: 62 6a 52 65 73 75 6c 74 50 74 72 20 3d 20 54 63  bjResultPtr = Tc
1a40: 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 61 72 69 74  l_NewIntObj(arit
1a50: 68 53 65 72 69 65 73 52 65 70 50 74 72 2d 3e 73  hSeriesRepPtr->s
1a60: 74 61 72 74 2e 69 2b 0a 2b 09 09 09 20 20 20 20  tart.i+.+...    
1a70: 28 69 64 78 2a 61 72 69 74 68 53 65 72 69 65 73  (idx*arithSeries
1a80: 52 65 70 50 74 72 2d 3e 73 74 65 70 2e 69 29 29  RepPtr->step.i))
1a90: 3b 0a 2b 09 09 7d 0a 2b 09 20 20 20 20 7d 20 65  ;.+..}.+.    } e
1aa0: 6c 73 65 20 7b 0a 2b 09 09 6f 62 6a 52 65 73 75  lse {.+..objResu
1ab0: 6c 74 50 74 72 20 3d 20 6c 69 73 74 76 5b 69 64  ltPtr = listv[id
1ac0: 78 5d 3b 0a 2b 09 20 20 20 20 7d 0a 20 09 7d 20  x];.+.    }. .} 
1ad0: 65 6c 73 65 20 7b 0a 20 09 20 20 20 20 54 63 6c  else {. .    Tcl
1ae0: 4e 65 77 4f 62 6a 28 6f 62 6a 52 65 73 75 6c 74  NewObj(objResult
1af0: 50 74 72 29 3b 0a 20 09 7d 0a 40 40 20 2d 34 35  Ptr);. .}.@@ -45
1b00: 36 32 2c 36 20 2b 34 35 38 30 2c 37 20 40 40 0a  62,6 +4580,7 @@.
1b10: 20 09 20 20 20 20 69 6e 74 20 6e 75 6d 4c 69 73   .    int numLis
1b20: 74 73 3b 0a 20 09 20 20 20 20 54 63 6c 5f 4f 62  ts;. .    Tcl_Ob
1b30: 6a 20 2a 6c 69 73 74 50 74 72 2c 2a 76 61 6c 75  j *listPtr,*valu
1b40: 65 50 74 72 2c 20 2a 76 61 6c 75 65 32 50 74 72  ePtr, *value2Ptr
1b50: 3b 0a 20 09 20 20 20 20 4c 69 73 74 20 2a 6c 69  ;. .    List *li
1b60: 73 74 52 65 70 50 74 72 3b 0a 2b 09 20 20 20 20  stRepPtr;.+.    
1b70: 41 72 69 74 68 53 65 72 69 65 73 20 2a 61 72 69  ArithSeries *ari
1b80: 74 68 53 65 72 69 65 73 52 65 70 50 74 72 3b 0a  thSeriesRepPtr;.
1b90: 20 09 20 20 20 20 56 61 72 20 2a 69 74 65 72 56   .    Var *iterV
1ba0: 61 72 50 74 72 2c 20 2a 6c 69 73 74 56 61 72 50  arPtr, *listVarP
1bb0: 74 72 3b 0a 20 09 20 20 20 20 69 6e 74 20 69 74  tr;. .    int it
1bc0: 65 72 4e 75 6d 2c 20 6c 69 73 74 54 6d 70 49 6e  erNum, listTmpIn
1bd0: 64 65 78 2c 20 6c 69 73 74 4c 65 6e 2c 20 6e 75  dex, listLen, nu
1be0: 6d 56 61 72 73 3b 0a 20 09 20 20 20 20 69 6e 74  mVars;. .    int
1bf0: 20 76 61 72 49 6e 64 65 78 2c 20 76 61 6c 49 6e   varIndex, valIn
1c00: 64 65 78 2c 20 63 6f 6e 74 69 6e 75 65 4c 6f 6f  dex, continueLoo
1c10: 70 2c 20 6a 3b 0a 40 40 20 2d 34 36 31 32 2c 37  p, j;.@@ -4612,7
1c20: 20 2b 34 36 33 31 2c 37 20 40 40 0a 20 09 20 20   +4631,7 @@. .  
1c30: 20 20 20 2a 20 49 66 20 73 6f 6d 65 20 76 61 72     * If some var
1c40: 20 69 6e 20 73 6f 6d 65 20 76 61 72 20 6c 69 73   in some var lis
1c50: 74 20 73 74 69 6c 6c 20 68 61 73 20 61 20 72 65  t still has a re
1c60: 6d 61 69 6e 69 6e 67 20 6c 69 73 74 0a 20 09 20  maining list. . 
1c70: 20 20 20 20 2a 20 65 6c 65 6d 65 6e 74 20 69 74      * element it
1c80: 65 72 61 74 65 20 6f 6e 65 20 6d 6f 72 65 20 74  erate one more t
1c90: 69 6d 65 2e 20 41 73 73 69 67 6e 20 74 6f 20 76  ime. Assign to v
1ca0: 61 72 20 74 68 65 20 6e 65 78 74 0a 20 09 20 20  ar the next. .  
1cb0: 20 20 20 2a 20 65 6c 65 6d 65 6e 74 20 66 72 6f     * element fro
1cc0: 6d 20 69 74 73 20 76 61 6c 75 65 20 6c 69 73 74  m its value list
1cd0: 2e 20 57 65 20 61 6c 72 65 61 64 79 20 63 68 65  . We already che
1ce0: 63 6b 65 64 20 61 62 6f 76 65 0a 2d 09 20 20 20  cked above.-.   
1cf0: 20 20 2a 20 74 68 61 74 20 65 61 63 68 20 6c 69    * that each li
1d00: 73 74 20 74 65 6d 70 20 68 6f 6c 64 73 20 61 20  st temp holds a 
1d10: 76 61 6c 69 64 20 6c 69 73 74 20 6f 62 6a 65 63  valid list objec
1d20: 74 2e 0a 2b 09 20 20 20 20 20 2a 20 74 68 61 74  t..+.     * that
1d30: 20 65 61 63 68 20 6c 69 73 74 20 74 65 6d 70 20   each list temp 
1d40: 68 6f 6c 64 73 20 61 20 76 61 6c 69 64 20 6c 69  holds a valid li
1d50: 73 74 20 6f 72 20 72 61 6e 67 65 20 6f 62 6a 65  st or range obje
1d60: 63 74 2e 0a 20 09 20 20 20 20 20 2a 2f 0a 20 09  ct.. .     */. .
1d70: 09 0a 20 09 20 20 20 20 69 66 20 28 63 6f 6e 74  .. .    if (cont
1d80: 69 6e 75 65 4c 6f 6f 70 29 20 7b 0a 40 40 20 2d  inueLoop) {.@@ -
1d90: 34 36 32 34 2c 32 37 20 2b 34 36 34 33 2c 36 35  4624,27 +4643,65
1da0: 20 40 40 0a 20 09 09 20 20 20 20 6c 69 73 74 56   @@. ..    listV
1db0: 61 72 50 74 72 20 3d 20 26 28 63 6f 6d 70 69 6c  arPtr = &(compil
1dc0: 65 64 4c 6f 63 61 6c 73 5b 6c 69 73 74 54 6d 70  edLocals[listTmp
1dd0: 49 6e 64 65 78 5d 29 3b 0a 20 09 09 20 20 20 20  Index]);. ..    
1de0: 6c 69 73 74 50 74 72 20 3d 20 6c 69 73 74 56 61  listPtr = listVa
1df0: 72 50 74 72 2d 3e 76 61 6c 75 65 2e 6f 62 6a 50  rPtr->value.objP
1e00: 74 72 3b 0a 20 09 09 20 20 20 20 6c 69 73 74 52  tr;. ..    listR
1e10: 65 70 50 74 72 20 3d 20 28 4c 69 73 74 20 2a 29  epPtr = (List *)
1e20: 20 6c 69 73 74 50 74 72 2d 3e 69 6e 74 65 72 6e   listPtr->intern
1e30: 61 6c 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75  alRep.twoPtrValu
1e40: 65 2e 70 74 72 31 3b 0a 2d 09 09 20 20 20 20 6c  e.ptr1;.-..    l
1e50: 69 73 74 4c 65 6e 20 3d 20 6c 69 73 74 52 65 70  istLen = listRep
1e60: 50 74 72 2d 3e 65 6c 65 6d 43 6f 75 6e 74 3b 0a  Ptr->elemCount;.
1e70: 2b 09 09 20 20 20 20 61 72 69 74 68 53 65 72 69  +..    arithSeri
1e80: 65 73 52 65 70 50 74 72 20 3d 20 28 41 72 69 74  esRepPtr = (Arit
1e90: 68 53 65 72 69 65 73 20 2a 29 20 6c 69 73 74 52  hSeries *) listR
1ea0: 65 70 50 74 72 3b 0a 2b 09 09 20 20 20 20 69 66  epPtr;.+..    if
1eb0: 20 28 6c 69 73 74 50 74 72 2d 3e 74 79 70 65 50   (listPtr->typeP
1ec0: 74 72 20 3d 3d 20 26 74 63 6c 4c 69 73 74 54 79  tr == &tclListTy
1ed0: 70 65 29 20 7b 0a 2b 09 09 20 20 20 20 09 6c 69  pe) {.+..    .li
1ee0: 73 74 4c 65 6e 20 3d 20 6c 69 73 74 52 65 70 50  stLen = listRepP
1ef0: 74 72 2d 3e 65 6c 65 6d 43 6f 75 6e 74 3b 0a 2b  tr->elemCount;.+
1f00: 09 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b  ..    } else {.+
1f10: 09 09 09 6c 69 73 74 4c 65 6e 20 3d 20 61 72 69  ...listLen = ari
1f20: 74 68 53 65 72 69 65 73 52 65 70 50 74 72 2d 3e  thSeriesRepPtr->
1f30: 6c 65 6e 3b 0a 2b 09 09 20 20 20 20 7d 0a 20 09  len;.+..    }. .
1f40: 09 09 0a 20 09 09 20 20 20 20 76 61 6c 49 6e 64  ... ..    valInd
1f50: 65 78 20 3d 20 28 69 74 65 72 4e 75 6d 20 2a 20  ex = (iterNum * 
1f60: 6e 75 6d 56 61 72 73 29 3b 0a 20 09 09 20 20 20  numVars);. ..   
1f70: 20 66 6f 72 20 28 6a 20 3d 20 30 3b 20 20 6a 20   for (j = 0;  j 
1f80: 3c 20 6e 75 6d 56 61 72 73 3b 20 20 6a 2b 2b 29  < numVars;  j++)
1f90: 20 7b 0a 2d 09 09 09 69 6e 74 20 73 65 74 45 6d   {.-...int setEm
1fa0: 70 74 79 53 74 72 20 3d 20 30 3b 0a 2d 09 09 09  ptyStr = 0;.-...
1fb0: 69 66 20 28 76 61 6c 49 6e 64 65 78 20 3e 3d 20  if (valIndex >= 
1fc0: 6c 69 73 74 4c 65 6e 29 20 7b 0a 2d 09 09 09 20  listLen) {.-... 
1fd0: 20 20 20 73 65 74 45 6d 70 74 79 53 74 72 20 3d     setEmptyStr =
1fe0: 20 31 3b 0a 2d 09 09 09 20 20 20 20 54 63 6c 4e   1;.-...    TclN
1ff0: 65 77 4f 62 6a 28 76 61 6c 75 65 50 74 72 29 3b  ewObj(valuePtr);
2000: 0a 2d 09 09 09 7d 20 65 6c 73 65 20 7b 0a 2d 09  .-...} else {.-.
2010: 09 09 20 20 20 20 76 61 6c 75 65 50 74 72 20 3d  ..    valuePtr =
2020: 20 6c 69 73 74 52 65 70 50 74 72 2d 3e 65 6c 65   listRepPtr->ele
2030: 6d 65 6e 74 73 5b 76 61 6c 49 6e 64 65 78 5d 3b  ments[valIndex];
2040: 0a 2d 09 09 09 7d 0a 2d 09 09 09 20 20 20 20 0a  .-...}.-...    .
2050: 2b 09 09 09 69 6e 74 20 73 65 74 45 6d 70 74 79  +...int setEmpty
2060: 53 74 72 20 3d 20 30 2c 20 69 6e 6c 69 6e 65 56  Str = 0, inlineV
2070: 61 72 41 63 63 65 73 73 20 3d 20 30 3b 0a 2b 0a  arAccess = 0;.+.
2080: 20 09 09 09 76 61 72 49 6e 64 65 78 20 3d 20 76   ...varIndex = v
2090: 61 72 4c 69 73 74 50 74 72 2d 3e 76 61 72 49 6e  arListPtr->varIn
20a0: 64 65 78 65 73 5b 6a 5d 3b 0a 20 09 09 09 76 61  dexes[j];. ...va
20b0: 72 50 74 72 20 3d 20 26 28 63 6f 6d 70 69 6c 65  rPtr = &(compile
20c0: 64 4c 6f 63 61 6c 73 5b 76 61 72 49 6e 64 65 78  dLocals[varIndex
20d0: 5d 29 3b 0a 20 09 09 09 70 61 72 74 31 20 3d 20  ]);. ...part1 = 
20e0: 76 61 72 50 74 72 2d 3e 6e 61 6d 65 3b 0a 20 09  varPtr->name;. .
20f0: 09 09 77 68 69 6c 65 20 28 54 63 6c 49 73 56 61  ..while (TclIsVa
2100: 72 4c 69 6e 6b 28 76 61 72 50 74 72 29 29 20 7b  rLink(varPtr)) {
2110: 0a 20 09 09 09 20 20 20 20 76 61 72 50 74 72 20  . ...    varPtr 
2120: 3d 20 76 61 72 50 74 72 2d 3e 76 61 6c 75 65 2e  = varPtr->value.
2130: 6c 69 6e 6b 50 74 72 3b 0a 20 09 09 09 7d 0a 2d  linkPtr;. ...}.-
2140: 09 09 09 69 66 20 28 21 28 28 76 61 72 50 74 72  ...if (!((varPtr
2150: 2d 3e 66 6c 61 67 73 20 26 20 56 41 52 5f 49 4e  ->flags & VAR_IN
2160: 5f 48 41 53 48 54 41 42 4c 45 29 20 26 26 20 28  _HASHTABLE) && (
2170: 76 61 72 50 74 72 2d 3e 68 50 74 72 20 3d 3d 20  varPtr->hPtr == 
2180: 4e 55 4c 4c 29 29 0a 2d 09 09 09 20 20 20 20 20  NULL)).-...     
2190: 20 20 20 26 26 20 28 76 61 72 50 74 72 2d 3e 74     && (varPtr->t
21a0: 72 61 63 65 50 74 72 20 3d 3d 20 4e 55 4c 4c 29  racePtr == NULL)
21b0: 0a 2d 09 09 09 20 20 20 20 20 20 20 20 26 26 20  .-...        && 
21c0: 28 54 63 6c 49 73 56 61 72 53 63 61 6c 61 72 28  (TclIsVarScalar(
21d0: 76 61 72 50 74 72 29 20 7c 7c 20 54 63 6c 49 73  varPtr) || TclIs
21e0: 56 61 72 55 6e 64 65 66 69 6e 65 64 28 76 61 72  VarUndefined(var
21f0: 50 74 72 29 29 29 20 7b 0a 2b 09 09 09 69 66 20  Ptr))) {.+...if 
2200: 28 21 28 28 76 61 72 50 74 72 2d 3e 66 6c 61 67  (!((varPtr->flag
2210: 73 20 26 20 56 41 52 5f 49 4e 5f 48 41 53 48 54  s & VAR_IN_HASHT
2220: 41 42 4c 45 29 20 26 26 0a 2b 09 09 09 09 28 76  ABLE) &&.+....(v
2230: 61 72 50 74 72 2d 3e 68 50 74 72 20 3d 3d 20 4e  arPtr->hPtr == N
2240: 55 4c 4c 29 29 0a 2b 09 09 09 09 26 26 20 28 76  ULL)).+....&& (v
2250: 61 72 50 74 72 2d 3e 74 72 61 63 65 50 74 72 20  arPtr->tracePtr 
2260: 3d 3d 20 4e 55 4c 4c 29 0a 2b 09 09 09 09 26 26  == NULL).+....&&
2270: 20 28 54 63 6c 49 73 56 61 72 53 63 61 6c 61 72   (TclIsVarScalar
2280: 28 76 61 72 50 74 72 29 20 7c 7c 0a 2b 09 09 09  (varPtr) ||.+...
2290: 09 09 54 63 6c 49 73 56 61 72 55 6e 64 65 66 69  ..TclIsVarUndefi
22a0: 6e 65 64 28 76 61 72 50 74 72 29 29 29 0a 2b 09  ned(varPtr))).+.
22b0: 09 09 7b 0a 2b 09 09 09 20 20 20 20 69 6e 6c 69  ..{.+...    inli
22c0: 6e 65 56 61 72 41 63 63 65 73 73 20 3d 20 31 3b  neVarAccess = 1;
22d0: 0a 2b 09 09 09 7d 0a 2b 0a 2b 09 09 09 69 66 20  .+...}.+.+...if 
22e0: 28 76 61 6c 49 6e 64 65 78 20 3e 3d 20 6c 69 73  (valIndex >= lis
22f0: 74 4c 65 6e 29 20 7b 0a 2b 09 09 09 20 20 20 20  tLen) {.+...    
2300: 73 65 74 45 6d 70 74 79 53 74 72 20 3d 20 31 3b  setEmptyStr = 1;
2310: 0a 2b 09 09 09 20 20 20 20 54 63 6c 4e 65 77 4f  .+...    TclNewO
2320: 62 6a 28 76 61 6c 75 65 50 74 72 29 3b 0a 2b 09  bj(valuePtr);.+.
2330: 09 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 09 09 20  ..} else {.+... 
2340: 20 20 20 69 66 28 6c 69 73 74 50 74 72 2d 3e 74     if(listPtr->t
2350: 79 70 65 50 74 72 20 3d 3d 20 26 74 63 6c 4c 69  ypePtr == &tclLi
2360: 73 74 54 79 70 65 29 20 7b 0a 2b 09 09 09 20 20  stType) {.+...  
2370: 20 20 20 20 20 20 76 61 6c 75 65 50 74 72 20 3d        valuePtr =
2380: 20 6c 69 73 74 52 65 70 50 74 72 2d 3e 65 6c 65   listRepPtr->ele
2390: 6d 65 6e 74 73 5b 76 61 6c 49 6e 64 65 78 5d 3b  ments[valIndex];
23a0: 0a 2b 09 09 09 20 20 20 20 7d 20 65 6c 73 65 20  .+...    } else 
23b0: 7b 0a 2b 09 09 09 09 2f 2a 0a 2b 09 09 09 09 20  {.+..../*.+.... 
23c0: 2a 20 49 74 20 69 73 20 61 20 72 61 6e 67 65 54  * It is a rangeT
23d0: 79 70 65 20 54 63 6c 5f 4f 62 6a 21 0a 2b 09 09  ype Tcl_Obj!.+..
23e0: 09 09 20 2a 0a 2b 09 09 09 09 20 2a 20 49 66 20  .. *.+.... * If 
23f0: 74 68 65 20 76 61 72 69 61 62 6c 65 20 63 61 6e  the variable can
2400: 20 62 65 20 61 63 63 65 73 73 65 64 20 69 6e 6c   be accessed inl
2410: 69 6e 65 20 61 6e 64 0a 2b 09 09 09 09 20 2a 20  ine and.+.... * 
2420: 69 74 73 20 76 61 6c 75 65 20 69 73 20 75 6e 73  its value is uns
2430: 68 61 72 65 64 20 77 65 20 6d 6f 64 69 66 79 20  hared we modify 
2440: 69 74 20 69 6e 0a 2b 09 09 09 09 20 2a 20 70 6c  it in.+.... * pl
2450: 61 63 65 3b 20 6f 74 68 65 72 77 69 73 65 20 77  ace; otherwise w
2460: 65 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 54  e create a new T
2470: 63 6c 5f 4f 62 6a 2e 0a 2b 09 09 09 09 20 2a 2f  cl_Obj..+.... */
2480: 0a 2b 09 09 09 09 0a 2b 09 09 09 09 76 61 6c 75  .+.....+....valu
2490: 65 50 74 72 20 3d 20 76 61 72 50 74 72 2d 3e 76  ePtr = varPtr->v
24a0: 61 6c 75 65 2e 6f 62 6a 50 74 72 3b 0a 2b 09 09  alue.objPtr;.+..
24b0: 09 09 69 66 20 28 21 69 6e 6c 69 6e 65 56 61 72  ..if (!inlineVar
24c0: 41 63 63 65 73 73 20 7c 7c 20 21 76 61 6c 75 65  Access || !value
24d0: 50 74 72 20 7c 7c 20 54 63 6c 5f 49 73 53 68 61  Ptr || Tcl_IsSha
24e0: 72 65 64 28 76 61 6c 75 65 50 74 72 29 29 20 7b  red(valuePtr)) {
24f0: 0a 2b 09 09 09 09 20 20 20 20 54 63 6c 4e 65 77  .+....    TclNew
2500: 4f 62 6a 28 76 61 6c 75 65 50 74 72 29 3b 0a 2b  Obj(valuePtr);.+
2510: 09 09 09 09 7d 0a 2b 09 09 09 09 20 20 20 20 0a  ....}.+....    .
2520: 2b 09 09 09 09 69 66 20 28 61 72 69 74 68 53 65  +....if (arithSe
2530: 72 69 65 73 52 65 70 50 74 72 2d 3e 66 6c 61 67  riesRepPtr->flag
2540: 73 20 26 20 54 43 4c 5f 52 41 4e 47 45 5f 49 53  s & TCL_RANGE_IS
2550: 5f 57 49 44 45 29 20 7b 0a 2b 09 09 09 09 20 20  _WIDE) {.+....  
2560: 20 20 54 63 6c 5f 53 65 74 57 69 64 65 49 6e 74    Tcl_SetWideInt
2570: 4f 62 6a 28 76 61 6c 75 65 50 74 72 2c 20 0a 2b  Obj(valuePtr, .+
2580: 09 09 09 09 09 20 20 20 20 61 72 69 74 68 53 65  .....    arithSe
2590: 72 69 65 73 52 65 70 50 74 72 2d 3e 73 74 61 72  riesRepPtr->star
25a0: 74 2e 77 20 2b 0a 2b 09 09 09 09 09 20 20 20 20  t.w +.+.....    
25b0: 28 76 61 6c 49 6e 64 65 78 2a 61 72 69 74 68 53  (valIndex*arithS
25c0: 65 72 69 65 73 52 65 70 50 74 72 2d 3e 73 74 65  eriesRepPtr->ste
25d0: 70 2e 77 29 29 3b 0a 2b 09 09 09 09 7d 20 65 6c  p.w));.+....} el
25e0: 73 65 20 7b 0a 2b 09 09 09 09 20 20 20 20 54 63  se {.+....    Tc
25f0: 6c 5f 53 65 74 49 6e 74 4f 62 6a 28 76 61 6c 75  l_SetIntObj(valu
2600: 65 50 74 72 2c 20 0a 2b 09 09 09 09 09 20 20 20  ePtr, .+.....   
2610: 20 61 72 69 74 68 53 65 72 69 65 73 52 65 70 50   arithSeriesRepP
2620: 74 72 2d 3e 73 74 61 72 74 2e 69 20 2b 0a 2b 09  tr->start.i +.+.
2630: 09 09 09 09 20 20 20 20 28 76 61 6c 49 6e 64 65  ....    (valInde
2640: 78 2a 61 72 69 74 68 53 65 72 69 65 73 52 65 70  x*arithSeriesRep
2650: 50 74 72 2d 3e 73 74 65 70 2e 69 29 29 3b 0a 2b  Ptr->step.i));.+
2660: 09 09 09 09 7d 0a 2b 09 09 09 20 20 20 20 7d 0a  ....}.+...    }.
2670: 2b 09 09 09 7d 0a 2b 09 09 09 20 20 20 20 0a 2b  +...}.+...    .+
2680: 09 09 09 69 66 20 28 69 6e 6c 69 6e 65 56 61 72  ...if (inlineVar
2690: 41 63 63 65 73 73 29 20 7b 0a 20 09 09 09 20 20  Access) {. ...  
26a0: 20 20 76 61 6c 75 65 32 50 74 72 20 3d 20 76 61    value2Ptr = va
26b0: 72 50 74 72 2d 3e 76 61 6c 75 65 2e 6f 62 6a 50  rPtr->value.objP
26c0: 74 72 3b 0a 20 09 09 09 20 20 20 20 69 66 20 28  tr;. ...    if (
26d0: 76 61 6c 75 65 50 74 72 20 21 3d 20 76 61 6c 75  valuePtr != valu
26e0: 65 32 50 74 72 29 20 7b 0a 20 09 09 09 09 69 66  e2Ptr) {. ....if
26f0: 20 28 76 61 6c 75 65 32 50 74 72 20 21 3d 20 4e   (value2Ptr != N
2700: 55 4c 4c 29 20 7b 0a 49 6e 64 65 78 3a 20 67 65  ULL) {.Index: ge
2710: 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 0a 3d  neric/tclInt.h.=
2720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2740: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2750: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2760: 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76  ==.RCS file: /cv
2770: 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65  sroot/tcl/tcl/ge
2780: 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 2c 76  neric/tclInt.h,v
2790: 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76 69  .retrieving revi
27a0: 73 69 6f 6e 20 31 2e 31 38 36 0a 64 69 66 66 20  sion 1.186.diff 
27b0: 2d 75 20 2d 72 31 2e 31 38 36 20 74 63 6c 49 6e  -u -r1.186 tclIn
27c0: 74 2e 68 0a 2d 2d 2d 20 67 65 6e 65 72 69 63 2f  t.h.--- generic/
27d0: 74 63 6c 49 6e 74 2e 68 09 32 31 20 4f 63 74 20  tclInt.h.21 Oct 
27e0: 32 30 30 34 20 31 37 3a 30 37 3a 33 31 20 2d 30  2004 17:07:31 -0
27f0: 30 30 30 09 31 2e 31 38 36 0a 2b 2b 2b 20 67 65  000.1.186.+++ ge
2800: 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 09 32  neric/tclInt.h.2
2810: 34 20 4f 63 74 20 32 30 30 34 20 31 33 3a 34 34  4 Oct 2004 13:44
2820: 3a 35 35 20 2d 30 30 30 30 0a 40 40 20 2d 31 35  :55 -0000.@@ -15
2830: 33 37 2c 36 20 2b 31 35 33 37 2c 33 31 20 40 40  37,6 +1537,31 @@
2840: 0a 20 7d 20 4c 69 73 74 3b 0a 20 0a 20 2f 2a 0a  . } List;. . /*.
2850: 2b 20 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  + * The structur
2860: 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 41  e used for the A
2870: 69 72 74 68 53 65 72 69 65 73 20 69 6e 74 65 72  irthSeries inter
2880: 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2890: 6f 6e 2e 0a 2b 20 2a 20 4e 6f 74 65 20 74 68 61  on..+ * Note tha
28a0: 74 20 74 68 65 20 6c 65 6e 20 63 61 6e 20 69 6e  t the len can in
28b0: 20 74 68 65 6f 72 79 20 62 65 20 61 6c 77 61 79   theory be alway
28c0: 73 20 63 6f 6d 70 75 74 65 64 20 62 79 20 73 74  s computed by st
28d0: 61 72 74 2c 65 6e 64 2c 73 74 65 70 0a 2b 20 2a  art,end,step.+ *
28e0: 20 62 75 74 20 69 74 27 73 20 66 61 73 74 65 72   but it's faster
28f0: 20 74 6f 20 63 61 63 68 65 20 69 74 20 69 6e 73   to cache it ins
2900: 69 64 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ide the internal
2910: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2920: 0a 2b 20 2a 2f 0a 2b 0a 2b 23 64 65 66 69 6e 65  .+ */.+.+#define
2930: 20 54 43 4c 5f 52 41 4e 47 45 5f 49 53 5f 57 49   TCL_RANGE_IS_WI
2940: 44 45 20 31 0a 2b 74 79 70 65 64 65 66 20 73 74  DE 1.+typedef st
2950: 72 75 63 74 20 41 72 69 74 68 53 65 72 69 65 73  ruct ArithSeries
2960: 20 7b 0a 2b 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   {.+    union {.
2970: 2b 09 54 63 6c 5f 57 69 64 65 49 6e 74 20 77 3b  +.Tcl_WideInt w;
2980: 0a 2b 09 6c 6f 6e 67 20 69 3b 0a 2b 20 20 20 20  .+.long i;.+    
2990: 7d 20 73 74 61 72 74 3b 0a 2b 20 20 20 20 75 6e  } start;.+    un
29a0: 69 6f 6e 20 7b 0a 2b 09 54 63 6c 5f 57 69 64 65  ion {.+.Tcl_Wide
29b0: 49 6e 74 20 77 3b 0a 2b 09 6c 6f 6e 67 20 69 3b  Int w;.+.long i;
29c0: 0a 2b 20 20 20 20 7d 20 65 6e 64 3b 0a 2b 20 20  .+    } end;.+  
29d0: 20 20 75 6e 69 6f 6e 20 7b 0a 2b 09 54 63 6c 5f    union {.+.Tcl_
29e0: 57 69 64 65 49 6e 74 20 77 3b 0a 2b 09 6c 6f 6e  WideInt w;.+.lon
29f0: 67 20 69 3b 0a 2b 20 20 20 20 7d 20 73 74 65 70  g i;.+    } step
2a00: 3b 0a 2b 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0a  ;.+    int len;.
2a10: 2b 20 20 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a  +    int flags;.
2a20: 2b 20 20 20 20 69 6e 74 20 72 65 66 43 6f 75 6e  +    int refCoun
2a30: 74 3b 0a 2b 7d 20 41 72 69 74 68 53 65 72 69 65  t;.+} ArithSerie
2a40: 73 3b 0a 2b 0a 2b 2f 2a 0a 20 20 2a 2d 2d 2d 2d  s;.+.+/*.  *----
2a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a  ------------.  *
2a90: 20 44 61 74 61 20 73 74 72 75 63 74 75 72 65 73   Data structures
2aa0: 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20   related to the 
2ab0: 66 69 6c 65 73 79 73 74 65 6d 20 69 6e 74 65 72  filesystem inter
2ac0: 6e 61 6c 73 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d  nals.  *--------
2ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b00: 2d 2d 2d 2d 2d 2d 2d 2d 0a 40 40 20 2d 31 36 34  --------.@@ -164
2b10: 32 2c 36 20 2b 31 36 36 37 2c 37 20 40 40 0a 20  2,6 +1667,7 @@. 
2b20: 65 78 74 65 72 6e 20 54 63 6c 5f 4f 62 6a 54 79  extern Tcl_ObjTy
2b30: 70 65 09 74 63 6c 45 6e 64 4f 66 66 73 65 74 54  pe.tclEndOffsetT
2b40: 79 70 65 3b 0a 20 65 78 74 65 72 6e 20 54 63 6c  ype;. extern Tcl
2b50: 5f 4f 62 6a 54 79 70 65 09 74 63 6c 49 6e 74 54  _ObjType.tclIntT
2b60: 79 70 65 3b 0a 20 65 78 74 65 72 6e 20 54 63 6c  ype;. extern Tcl
2b70: 5f 4f 62 6a 54 79 70 65 09 74 63 6c 4c 69 73 74  _ObjType.tclList
2b80: 54 79 70 65 3b 0a 2b 65 78 74 65 72 6e 20 54 63  Type;.+extern Tc
2b90: 6c 5f 4f 62 6a 54 79 70 65 09 74 63 6c 41 72 69  l_ObjType.tclAri
2ba0: 74 68 53 65 72 69 65 73 54 79 70 65 3b 0a 20 65  thSeriesType;. e
2bb0: 78 74 65 72 6e 20 54 63 6c 5f 4f 62 6a 54 79 70  xtern Tcl_ObjTyp
2bc0: 65 09 74 63 6c 44 69 63 74 54 79 70 65 3b 0a 20  e.tclDictType;. 
2bd0: 65 78 74 65 72 6e 20 54 63 6c 5f 4f 62 6a 54 79  extern Tcl_ObjTy
2be0: 70 65 09 74 63 6c 50 72 6f 63 42 6f 64 79 54 79  pe.tclProcBodyTy
2bf0: 70 65 3b 0a 20 65 78 74 65 72 6e 20 54 63 6c 5f  pe;. extern Tcl_
2c00: 4f 62 6a 54 79 70 65 09 74 63 6c 53 74 72 69 6e  ObjType.tclStrin
2c10: 67 54 79 70 65 3b 0a 40 40 20 2d 32 30 36 32 2c  gType;.@@ -2062,
2c20: 36 20 2b 32 30 38 38 2c 38 20 40 40 0a 20 09 09  6 +2088,8 @@. ..
2c30: 20 20 20 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a      Tcl_Interp *
2c40: 69 6e 74 65 72 70 2c 20 69 6e 74 20 6f 62 6a 63  interp, int objc
2c50: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54  , Tcl_Obj *CONST
2c60: 20 6f 62 6a 76 5b 5d 29 29 3b 0a 20 45 58 54 45   objv[]));. EXTE
2c70: 52 4e 20 69 6e 74 09 54 63 6c 5f 50 77 64 4f 62  RN int.Tcl_PwdOb
2c80: 6a 43 6d 64 20 5f 41 4e 53 49 5f 41 52 47 53 5f  jCmd _ANSI_ARGS_
2c90: 28 28 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69  ((ClientData cli
2ca0: 65 6e 74 44 61 74 61 2c 0a 20 09 09 20 20 20 20  entData,. ..    
2cb0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
2cc0: 72 70 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63  rp, int objc, Tc
2cd0: 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a  l_Obj *CONST obj
2ce0: 76 5b 5d 29 29 3b 0a 2b 45 58 54 45 52 4e 20 69  v[]));.+EXTERN i
2cf0: 6e 74 09 54 63 6c 5f 52 61 6e 67 65 4f 62 6a 43  nt.Tcl_RangeObjC
2d00: 6d 64 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28  md _ANSI_ARGS_((
2d10: 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69 65 6e  ClientData clien
2d20: 74 44 61 74 61 2c 0a 2b 09 09 20 20 20 20 54 63  tData,.+..    Tc
2d30: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
2d40: 2c 20 69 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f  , int objc, Tcl_
2d50: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
2d60: 5d 29 29 3b 0a 20 45 58 54 45 52 4e 20 69 6e 74  ]));. EXTERN int
2d70: 09 54 63 6c 5f 52 65 61 64 4f 62 6a 43 6d 64 20  .Tcl_ReadObjCmd 
2d80: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69  _ANSI_ARGS_((Cli
2d90: 65 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61  entData clientDa
2da0: 74 61 2c 0a 20 09 09 20 20 20 20 54 63 6c 5f 49  ta,. ..    Tcl_I
2db0: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 69  nterp *interp, i
2dc0: 6e 74 20 6f 62 6a 63 2c 20 54 63 6c 5f 4f 62 6a  nt objc, Tcl_Obj
2dd0: 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b 5d 29 29   *CONST objv[]))
2de0: 3b 0a 20 45 58 54 45 52 4e 20 69 6e 74 09 54 63  ;. EXTERN int.Tc
2df0: 6c 5f 52 65 67 65 78 70 4f 62 6a 43 6d 64 20 5f  l_RegexpObjCmd _
2e00: 41 4e 53 49 5f 41 52 47 53 5f 28 28 43 6c 69 65  ANSI_ARGS_((Clie
2e10: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74  ntData clientDat
2e20: 61 2c 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69  a,.Index: generi
2e30: 63 2f 74 63 6c 4c 69 73 74 4f 62 6a 2e 63 0a 3d  c/tclListObj.c.=
2e40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2e50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2e60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2e70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2e80: 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76  ==.RCS file: /cv
2e90: 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65  sroot/tcl/tcl/ge
2ea0: 6e 65 72 69 63 2f 74 63 6c 4c 69 73 74 4f 62 6a  neric/tclListObj
2eb0: 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20  .c,v.retrieving 
2ec0: 72 65 76 69 73 69 6f 6e 20 31 2e 31 39 0a 64 69  revision 1.19.di
2ed0: 66 66 20 2d 75 20 2d 72 31 2e 31 39 20 74 63 6c  ff -u -r1.19 tcl
2ee0: 4c 69 73 74 4f 62 6a 2e 63 0a 2d 2d 2d 20 67 65  ListObj.c.--- ge
2ef0: 6e 65 72 69 63 2f 74 63 6c 4c 69 73 74 4f 62 6a  neric/tclListObj
2f00: 2e 63 09 32 39 20 53 65 70 20 32 30 30 34 20 32  .c.29 Sep 2004 2
2f10: 32 3a 31 37 3a 33 30 20 2d 30 30 30 30 09 31 2e  2:17:30 -0000.1.
2f20: 31 39 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74  19.+++ generic/t
2f30: 63 6c 4c 69 73 74 4f 62 6a 2e 63 09 32 34 20 4f  clListObj.c.24 O
2f40: 63 74 20 32 30 30 34 20 31 33 3a 34 34 3a 35 37  ct 2004 13:44:57
2f50: 20 2d 30 30 30 30 0a 40 40 20 2d 36 33 32 2c 36   -0000.@@ -632,6
2f60: 20 2b 36 33 32 2c 32 36 20 40 40 0a 20 7b 0a 20   +632,26 @@. {. 
2f70: 20 20 20 20 72 65 67 69 73 74 65 72 20 4c 69 73      register Lis
2f80: 74 20 2a 6c 69 73 74 52 65 70 50 74 72 3b 0a 20  t *listRepPtr;. 
2f90: 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a  .+    /*.+     *
2fa0: 20 49 66 20 6f 62 6a 50 74 72 20 69 73 20 6f 66   If objPtr is of
2fb0: 20 61 72 69 74 68 53 65 72 69 65 73 54 79 70 65   arithSeriesType
2fc0: 2c 20 64 6f 20 6e 6f 74 20 73 68 69 6d 6d 65 72  , do not shimmer
2fd0: 20 69 74 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b 20   it..+     */.+ 
2fe0: 20 20 20 0a 2b 20 20 20 20 69 66 20 28 6c 69 73     .+    if (lis
2ff0: 74 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d  tPtr->typePtr ==
3000: 20 26 74 63 6c 41 72 69 74 68 53 65 72 69 65 73   &tclArithSeries
3010: 54 79 70 65 29 20 7b 0a 2b 09 41 72 69 74 68 53  Type) {.+.ArithS
3020: 65 72 69 65 73 20 2a 61 72 69 74 68 53 65 72 69  eries *arithSeri
3030: 65 73 52 65 70 50 74 72 20 3d 20 28 41 72 69 74  esRepPtr = (Arit
3040: 68 53 65 72 69 65 73 2a 29 0a 2b 09 20 20 20 20  hSeries*).+.    
3050: 6c 69 73 74 50 74 72 2d 3e 69 6e 74 65 72 6e 61  listPtr->interna
3060: 6c 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65  lRep.twoPtrValue
3070: 2e 70 74 72 31 3b 0a 2b 0a 2b 09 69 66 20 28 28  .ptr1;.+.+.if ((
3080: 69 6e 64 65 78 20 3c 20 30 29 20 7c 7c 20 28 69  index < 0) || (i
3090: 6e 64 65 78 20 3e 3d 20 61 72 69 74 68 53 65 72  ndex >= arithSer
30a0: 69 65 73 52 65 70 50 74 72 2d 3e 6c 65 6e 29 29  iesRepPtr->len))
30b0: 20 7b 0a 2b 09 20 20 20 20 2a 6f 62 6a 50 74 72   {.+.    *objPtr
30c0: 50 74 72 20 3d 20 4e 55 4c 4c 3b 0a 2b 09 7d 20  Ptr = NULL;.+.} 
30d0: 65 6c 73 65 20 69 66 20 28 61 72 69 74 68 53 65  else if (arithSe
30e0: 72 69 65 73 52 65 70 50 74 72 2d 3e 66 6c 61 67  riesRepPtr->flag
30f0: 73 20 26 20 54 43 4c 5f 52 41 4e 47 45 5f 49 53  s & TCL_RANGE_IS
3100: 5f 57 49 44 45 29 20 7b 0a 2b 09 20 20 20 20 2a  _WIDE) {.+.    *
3110: 6f 62 6a 50 74 72 50 74 72 20 3d 20 54 63 6c 5f  objPtrPtr = Tcl_
3120: 4e 65 77 57 69 64 65 49 6e 74 4f 62 6a 28 61 72  NewWideIntObj(ar
3130: 69 74 68 53 65 72 69 65 73 52 65 70 50 74 72 2d  ithSeriesRepPtr-
3140: 3e 73 74 61 72 74 2e 77 2b 0a 2b 09 09 20 20 20  >start.w+.+..   
3150: 20 28 69 6e 64 65 78 2a 61 72 69 74 68 53 65 72   (index*arithSer
3160: 69 65 73 52 65 70 50 74 72 2d 3e 73 74 65 70 2e  iesRepPtr->step.
3170: 77 29 29 3b 0a 2b 09 7d 20 65 6c 73 65 20 7b 0a  w));.+.} else {.
3180: 2b 09 20 20 20 20 2a 6f 62 6a 50 74 72 50 74 72  +.    *objPtrPtr
3190: 20 3d 20 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a   = Tcl_NewIntObj
31a0: 28 61 72 69 74 68 53 65 72 69 65 73 52 65 70 50  (arithSeriesRepP
31b0: 74 72 2d 3e 73 74 61 72 74 2e 69 2b 0a 2b 09 09  tr->start.i+.+..
31c0: 20 20 20 20 28 69 6e 64 65 78 2a 61 72 69 74 68      (index*arith
31d0: 53 65 72 69 65 73 52 65 70 50 74 72 2d 3e 73 74  SeriesRepPtr->st
31e0: 65 70 2e 69 29 29 3b 0a 2b 09 7d 0a 2b 09 72 65  ep.i));.+.}.+.re
31f0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 20  turn TCL_OK;.+  
3200: 20 20 7d 09 0a 2b 0a 20 20 20 20 20 69 66 20 28    }..+.     if (
3210: 6c 69 73 74 50 74 72 2d 3e 74 79 70 65 50 74 72  listPtr->typePtr
3220: 20 21 3d 20 26 74 63 6c 4c 69 73 74 54 79 70 65   != &tclListType
3230: 29 20 7b 0a 20 09 69 6e 74 20 72 65 73 75 6c 74  ) {. .int result
3240: 20 3d 20 53 65 74 4c 69 73 74 46 72 6f 6d 41 6e   = SetListFromAn
3250: 79 28 69 6e 74 65 72 70 2c 20 6c 69 73 74 50 74  y(interp, listPt
3260: 72 29 3b 0a 20 09 69 66 20 28 72 65 73 75 6c 74  r);. .if (result
3270: 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 40 40   != TCL_OK) {.@@
3280: 20 2d 36 34 35 2c 37 20 2b 36 36 35 2c 36 20 40   -645,7 +665,6 @
3290: 40 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  @.     } else {.
32a0: 20 09 2a 6f 62 6a 50 74 72 50 74 72 20 3d 20 6c   .*objPtrPtr = l
32b0: 69 73 74 52 65 70 50 74 72 2d 3e 65 6c 65 6d 65  istRepPtr->eleme
32c0: 6e 74 73 5b 69 6e 64 65 78 5d 3b 0a 20 20 20 20  nts[index];.    
32d0: 20 7d 0a 2d 0a 20 20 20 20 20 72 65 74 75 72 6e   }.-.     return
32e0: 20 54 43 4c 5f 4f 4b 3b 0a 20 7d 0a 20 0c 0a 40   TCL_OK;. }. ..@
32f0: 40 20 2d 36 37 39 2c 36 20 2b 36 39 38 2c 31 37  @ -679,6 +698,17
3300: 20 40 40 0a 20 7b 0a 20 20 20 20 20 72 65 67 69   @@. {.     regi
3310: 73 74 65 72 20 4c 69 73 74 20 2a 6c 69 73 74 52  ster List *listR
3320: 65 70 50 74 72 3b 0a 20 0a 2b 20 20 20 20 2f 2a  epPtr;. .+    /*
3330: 0a 2b 20 20 20 20 20 2a 20 49 66 20 6f 62 6a 50  .+     * If objP
3340: 74 72 20 69 73 20 6f 66 20 61 72 69 74 68 53 65  tr is of arithSe
3350: 72 69 65 73 54 79 70 65 2c 20 64 6f 20 6e 6f 74  riesType, do not
3360: 20 73 68 69 6d 6d 65 72 20 69 74 2e 0a 2b 20 20   shimmer it..+  
3370: 20 20 20 2a 2f 0a 2b 20 20 20 20 0a 2b 20 20 20     */.+    .+   
3380: 20 69 66 20 28 6c 69 73 74 50 74 72 2d 3e 74 79   if (listPtr->ty
3390: 70 65 50 74 72 20 3d 3d 20 26 74 63 6c 41 72 69  pePtr == &tclAri
33a0: 74 68 53 65 72 69 65 73 54 79 70 65 29 20 7b 0a  thSeriesType) {.
33b0: 2b 09 41 72 69 74 68 53 65 72 69 65 73 20 2a 61  +.ArithSeries *a
33c0: 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74 72  rithSeriesRepPtr
33d0: 20 3d 20 28 41 72 69 74 68 53 65 72 69 65 73 2a   = (ArithSeries*
33e0: 29 0a 2b 09 20 20 20 20 6c 69 73 74 50 74 72 2d  ).+.    listPtr-
33f0: 3e 69 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f  >internalRep.two
3400: 50 74 72 56 61 6c 75 65 2e 70 74 72 31 3b 0a 2b  PtrValue.ptr1;.+
3410: 09 2a 69 6e 74 50 74 72 20 3d 20 61 72 69 74 68  .*intPtr = arith
3420: 53 65 72 69 65 73 52 65 70 50 74 72 2d 3e 6c 65  SeriesRepPtr->le
3430: 6e 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f  n;.+.return TCL_
3440: 4f 4b 3b 0a 2b 20 20 20 20 7d 09 0a 2b 20 20 20  OK;.+    }..+   
3450: 20 0a 20 20 20 20 20 69 66 20 28 6c 69 73 74 50   .     if (listP
3460: 74 72 2d 3e 74 79 70 65 50 74 72 20 21 3d 20 26  tr->typePtr != &
3470: 74 63 6c 4c 69 73 74 54 79 70 65 29 20 7b 0a 20  tclListType) {. 
3480: 09 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 53 65  .int result = Se
3490: 74 4c 69 73 74 46 72 6f 6d 41 6e 79 28 69 6e 74  tListFromAny(int
34a0: 65 72 70 2c 20 6c 69 73 74 50 74 72 29 3b 0a 20  erp, listPtr);. 
34b0: 09 69 66 20 28 72 65 73 75 6c 74 20 21 3d 20 54  .if (result != T
34c0: 43 4c 5f 4f 4b 29 20 7b 0a 40 40 20 2d 31 35 36  CL_OK) {.@@ -156
34d0: 36 2c 39 20 2b 31 35 39 36 2c 34 37 20 40 40 0a  6,9 +1596,47 @@.
34e0: 20 20 20 20 20 4c 69 73 74 20 2a 6c 69 73 74 52       List *listR
34f0: 65 70 50 74 72 3b 0a 20 0a 20 20 20 20 20 2f 2a  epPtr;. .     /*
3500: 0a 2b 20 20 20 20 20 2a 20 43 6f 6e 76 65 72 73  .+     * Convers
3510: 69 6f 6e 20 66 72 6f 6d 20 41 72 69 74 68 6d 65  ion from Arithme
3520: 74 69 63 20 53 65 72 69 65 73 20 69 73 20 61 20  tic Series is a 
3530: 73 70 65 63 69 61 6c 20 63 61 73 65 0a 2b 20 20  special case.+  
3540: 20 20 20 2a 20 62 65 63 61 75 73 65 20 69 74 20     * because it 
3550: 63 61 6e 20 62 65 20 64 6f 6e 65 20 61 6e 20 6f  can be done an o
3560: 72 64 65 72 20 6f 66 20 6d 61 67 6e 69 74 75 64  rder of magnitud
3570: 65 20 66 61 73 74 65 72 0a 2b 20 20 20 20 20 2a  e faster.+     *
3580: 20 61 6e 64 20 6d 61 79 20 6f 63 63 75 72 20 66   and may occur f
3590: 72 65 71 75 65 6e 74 6c 79 2e 0a 2b 20 20 20 20  requently..+    
35a0: 20 2a 2f 0a 2b 20 20 20 20 69 66 20 28 6f 62 6a   */.+    if (obj
35b0: 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20  Ptr->typePtr == 
35c0: 26 74 63 6c 41 72 69 74 68 53 65 72 69 65 73 54  &tclArithSeriesT
35d0: 79 70 65 29 20 7b 0a 2b 09 69 6e 74 20 6c 65 6e  ype) {.+.int len
35e0: 3b 0a 2b 20 20 20 20 20 20 20 20 54 63 6c 5f 57  ;.+        Tcl_W
35f0: 69 64 65 49 6e 74 20 6a 3b 0a 2b 20 20 20 20 20  ideInt j;.+     
3600: 20 20 20 41 72 69 74 68 53 65 72 69 65 73 20 2a     ArithSeries *
3610: 61 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74  arithSeriesRepPt
3620: 72 20 3d 20 28 41 72 69 74 68 53 65 72 69 65 73  r = (ArithSeries
3630: 2a 29 0a 2b 09 20 20 20 20 6f 62 6a 50 74 72 2d  *).+.    objPtr-
3640: 3e 69 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f  >internalRep.two
3650: 50 74 72 56 61 6c 75 65 2e 70 74 72 31 3b 0a 2b  PtrValue.ptr1;.+
3660: 09 0a 2b 09 6c 65 6e 20 3d 20 61 72 69 74 68 53  ..+.len = arithS
3670: 65 72 69 65 73 52 65 70 50 74 72 2d 3e 6c 65 6e  eriesRepPtr->len
3680: 3b 0a 2b 09 65 6c 65 6d 50 74 72 73 20 3d 20 28  ;.+.elemPtrs = (
3690: 54 63 6c 5f 4f 62 6a 2a 2a 29 20 63 6b 61 6c 6c  Tcl_Obj**) ckall
36a0: 6f 63 28 73 69 7a 65 6f 66 28 54 63 6c 5f 4f 62  oc(sizeof(Tcl_Ob
36b0: 6a 2a 29 2a 6c 65 6e 29 3b 0a 2b 09 69 66 20 28  j*)*len);.+.if (
36c0: 61 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74  arithSeriesRepPt
36d0: 72 2d 3e 66 6c 61 67 73 20 26 20 54 43 4c 5f 52  r->flags & TCL_R
36e0: 41 4e 47 45 5f 49 53 5f 57 49 44 45 29 20 7b 0a  ANGE_IS_WIDE) {.
36f0: 2b 09 20 20 20 20 66 6f 72 20 28 6a 20 3d 20 30  +.    for (j = 0
3700: 3b 20 6a 20 3c 20 6c 65 6e 3b 20 6a 2b 2b 29 20  ; j < len; j++) 
3710: 7b 0a 2b 09 09 65 6c 65 6d 50 74 72 73 5b 6a 5d  {.+..elemPtrs[j]
3720: 20 3d 20 54 63 6c 5f 4e 65 77 57 69 64 65 49 6e   = Tcl_NewWideIn
3730: 74 4f 62 6a 28 0a 2b 09 09 20 20 20 20 61 72 69  tObj(.+..    ari
3740: 74 68 53 65 72 69 65 73 52 65 70 50 74 72 2d 3e  thSeriesRepPtr->
3750: 73 74 61 72 74 2e 77 2b 28 6a 2a 61 72 69 74 68  start.w+(j*arith
3760: 53 65 72 69 65 73 52 65 70 50 74 72 2d 3e 73 74  SeriesRepPtr->st
3770: 65 70 2e 77 29 29 3b 0a 2b 09 09 54 63 6c 5f 49  ep.w));.+..Tcl_I
3780: 6e 63 72 52 65 66 43 6f 75 6e 74 28 65 6c 65 6d  ncrRefCount(elem
3790: 50 74 72 73 5b 6a 5d 29 3b 0a 2b 09 20 20 20 20  Ptrs[j]);.+.    
37a0: 7d 0a 2b 09 7d 20 65 6c 73 65 20 7b 0a 2b 09 20  }.+.} else {.+. 
37b0: 20 20 20 66 6f 72 20 28 6a 20 3d 20 30 3b 20 6a     for (j = 0; j
37c0: 20 3c 20 6c 65 6e 3b 20 6a 2b 2b 29 20 7b 0a 2b   < len; j++) {.+
37d0: 09 09 65 6c 65 6d 50 74 72 73 5b 6a 5d 20 3d 20  ..elemPtrs[j] = 
37e0: 54 63 6c 5f 4e 65 77 49 6e 74 4f 62 6a 28 0a 2b  Tcl_NewIntObj(.+
37f0: 09 09 20 20 20 20 61 72 69 74 68 53 65 72 69 65  ..    arithSerie
3800: 73 52 65 70 50 74 72 2d 3e 73 74 61 72 74 2e 69  sRepPtr->start.i
3810: 2b 28 6a 2a 61 72 69 74 68 53 65 72 69 65 73 52  +(j*arithSeriesR
3820: 65 70 50 74 72 2d 3e 73 74 65 70 2e 69 29 29 3b  epPtr->step.i));
3830: 0a 2b 09 09 54 63 6c 5f 49 6e 63 72 52 65 66 43  .+..Tcl_IncrRefC
3840: 6f 75 6e 74 28 65 6c 65 6d 50 74 72 73 5b 6a 5d  ount(elemPtrs[j]
3850: 29 3b 0a 2b 09 20 20 20 20 7d 0a 2b 09 7d 0a 2b  );.+.    }.+.}.+
3860: 20 20 20 20 20 20 20 20 6c 69 73 74 52 65 70 50          listRepP
3870: 74 72 20 3d 20 28 4c 69 73 74 20 2a 29 20 63 6b  tr = (List *) ck
3880: 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 28 4c 69 73  alloc(sizeof(Lis
3890: 74 29 29 3b 0a 2b 20 20 20 20 20 20 20 20 6c 69  t));.+        li
38a0: 73 74 52 65 70 50 74 72 2d 3e 6d 61 78 45 6c 65  stRepPtr->maxEle
38b0: 6d 43 6f 75 6e 74 20 3d 20 6c 65 6e 3b 0a 2b 20  mCount = len;.+ 
38c0: 20 20 20 20 20 20 20 6c 69 73 74 52 65 70 50 74         listRepPt
38d0: 72 2d 3e 65 6c 65 6d 43 6f 75 6e 74 20 20 20 20  r->elemCount    
38e0: 3d 20 6c 65 6e 3b 0a 2b 20 20 20 20 20 20 20 20  = len;.+        
38f0: 6c 69 73 74 52 65 70 50 74 72 2d 3e 65 6c 65 6d  listRepPtr->elem
3900: 65 6e 74 73 20 20 20 20 20 3d 20 65 6c 65 6d 50  ents     = elemP
3910: 74 72 73 3b 0a 2b 09 0a 2b 20 20 20 20 20 20 20  trs;.+..+       
3920: 20 54 63 6c 46 72 65 65 49 6e 74 52 65 70 28 6f   TclFreeIntRep(o
3930: 62 6a 50 74 72 29 3b 0a 2b 20 20 20 20 20 20 20  bjPtr);.+       
3940: 20 6f 62 6a 50 74 72 2d 3e 69 6e 74 65 72 6e 61   objPtr->interna
3950: 6c 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65  lRep.twoPtrValue
3960: 2e 70 74 72 31 20 3d 20 28 56 4f 49 44 20 2a 29  .ptr1 = (VOID *)
3970: 20 6c 69 73 74 52 65 70 50 74 72 3b 0a 2b 20 20   listRepPtr;.+  
3980: 20 20 20 20 20 20 6f 62 6a 50 74 72 2d 3e 69 6e        objPtr->in
3990: 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74 72  ternalRep.twoPtr
39a0: 56 61 6c 75 65 2e 70 74 72 32 20 3d 20 4e 55 4c  Value.ptr2 = NUL
39b0: 4c 3b 0a 2b 20 20 20 20 20 20 20 20 6f 62 6a 50  L;.+        objP
39c0: 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 20 26 74  tr->typePtr = &t
39d0: 63 6c 4c 69 73 74 54 79 70 65 3b 0a 2b 09 72 65  clListType;.+.re
39e0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 20  turn TCL_OK;.+  
39f0: 20 20 7d 0a 2b 20 20 20 20 0a 2b 20 20 20 20 2f    }.+    .+    /
3a00: 2a 0a 20 20 20 20 20 20 2a 20 47 65 74 20 74 68  *.      * Get th
3a10: 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  e string represe
3a20: 6e 74 61 74 69 6f 6e 2e 20 4d 61 6b 65 20 69 74  ntation. Make it
3a30: 20 75 70 2d 74 6f 2d 64 61 74 65 20 69 66 20 6e   up-to-date if n
3a40: 65 63 65 73 73 61 72 79 2e 0a 20 20 20 20 20 20  ecessary..      
3a50: 2a 2f 0a 2d 0a 2b 20 20 20 20 0a 20 20 20 20 20  */.-.+    .     
3a60: 73 74 72 69 6e 67 20 3d 20 54 63 6c 5f 47 65 74  string = Tcl_Get
3a70: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62  StringFromObj(ob
3a80: 6a 50 74 72 2c 20 26 6c 65 6e 67 74 68 29 3b 0a  jPtr, &length);.
3a90: 20 0a 20 20 20 20 20 2f 2a 0a 40 40 20 2d 31 37   .     /*.@@ -17
3aa0: 33 33 2c 33 20 2b 31 38 30 31 2c 34 30 33 20 40  33,3 +1801,403 @
3ab0: 40 0a 20 20 20 20 20 7d 0a 20 20 20 20 20 6c 69  @.     }.     li
3ac0: 73 74 50 74 72 2d 3e 6c 65 6e 67 74 68 20 3d 20  stPtr->length = 
3ad0: 64 73 74 20 2d 20 6c 69 73 74 50 74 72 2d 3e 62  dst - listPtr->b
3ae0: 79 74 65 73 3b 0a 20 7d 0a 2b 0a 2b 0c 0a 2b 2f  ytes;. }.+.+..+/
3af0: 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
3b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 41 72 69  ------------ Ari
3b10: 74 68 53 65 72 69 65 73 20 6f 62 6a 65 63 74 20  thSeries object 
3b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 20 2a 2f 0a  ------------ */.
3b40: 2b 0a 2b 2f 2a 0a 2b 20 2a 20 50 72 6f 74 6f 74  +.+/*.+ * Protot
3b50: 79 70 65 73 20 66 6f 72 20 70 72 6f 63 65 64 75  ypes for procedu
3b60: 72 65 73 20 64 65 66 69 6e 65 64 20 6c 61 74 65  res defined late
3b70: 72 20 69 6e 20 74 68 69 73 20 66 69 6c 65 3a 0a  r in this file:.
3b80: 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 76  + */.+.+static v
3b90: 6f 69 64 09 09 44 75 70 41 72 69 74 68 53 65 72  oid..DupArithSer
3ba0: 69 65 73 49 6e 74 65 72 6e 61 6c 52 65 70 20 5f  iesInternalRep _
3bb0: 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c 5f  ANSI_ARGS_((Tcl_
3bc0: 4f 62 6a 20 2a 73 72 63 50 74 72 2c 0a 2b 09 09  Obj *srcPtr,.+..
3bd0: 09 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f  .    Tcl_Obj *co
3be0: 70 79 50 74 72 29 29 3b 0a 2b 73 74 61 74 69 63  pyPtr));.+static
3bf0: 20 76 6f 69 64 09 09 46 72 65 65 41 72 69 74 68   void..FreeArith
3c00: 53 65 72 69 65 73 49 6e 74 65 72 6e 61 6c 52 65  SeriesInternalRe
3c10: 70 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54  p _ANSI_ARGS_((T
3c20: 63 6c 5f 4f 62 6a 20 2a 6c 69 73 74 50 74 72 29  cl_Obj *listPtr)
3c30: 29 3b 0a 2b 73 74 61 74 69 63 20 69 6e 74 09 09  );.+static int..
3c40: 53 65 74 41 72 69 74 68 53 65 72 69 65 73 46 72  SetArithSeriesFr
3c50: 6f 6d 41 6e 79 20 5f 41 4e 53 49 5f 41 52 47 53  omAny _ANSI_ARGS
3c60: 5f 28 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69  _((Tcl_Interp *i
3c70: 6e 74 65 72 70 2c 0a 2b 09 09 09 20 20 20 20 54  nterp,.+...    T
3c80: 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74 72 29 29  cl_Obj *objPtr))
3c90: 3b 0a 2b 73 74 61 74 69 63 20 76 6f 69 64 09 09  ;.+static void..
3ca0: 55 70 64 61 74 65 53 74 72 69 6e 67 4f 66 41 72  UpdateStringOfAr
3cb0: 69 74 68 53 65 72 69 65 73 20 5f 41 4e 53 49 5f  ithSeries _ANSI_
3cc0: 41 52 47 53 5f 28 28 54 63 6c 5f 4f 62 6a 20 2a  ARGS_((Tcl_Obj *
3cd0: 6c 69 73 74 50 74 72 29 29 3b 0a 2b 73 74 61 74  listPtr));.+stat
3ce0: 69 63 20 54 63 6c 5f 4f 62 6a 20 2a 20 20 20 20  ic Tcl_Obj *    
3cf0: 20 20 20 20 4e 65 77 57 69 64 65 41 72 69 74 68      NewWideArith
3d00: 53 65 72 69 65 73 4f 62 6a 20 5f 41 4e 53 49 5f  SeriesObj _ANSI_
3d10: 41 52 47 53 5f 28 28 54 63 6c 5f 57 69 64 65 49  ARGS_((Tcl_WideI
3d20: 6e 74 20 73 74 61 72 74 2c 0a 2b 09 09 09 20 20  nt start,.+...  
3d30: 20 20 54 63 6c 5f 57 69 64 65 49 6e 74 20 65 6e    Tcl_WideInt en
3d40: 64 2c 20 54 63 6c 5f 57 69 64 65 49 6e 74 20 73  d, Tcl_WideInt s
3d50: 74 65 70 29 29 3b 0a 2b 73 74 61 74 69 63 20 54  tep));.+static T
3d60: 63 6c 5f 4f 62 6a 20 2a 20 20 20 20 20 20 20 20  cl_Obj *        
3d70: 4e 65 77 41 72 69 74 68 53 65 72 69 65 73 4f 62  NewArithSeriesOb
3d80: 6a 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 6c  j _ANSI_ARGS_((l
3d90: 6f 6e 67 20 73 74 61 72 74 2c 6c 6f 6e 67 20 65  ong start,long e
3da0: 6e 64 2c 0a 2b 09 09 09 20 20 20 20 6c 6f 6e 67  nd,.+...    long
3db0: 20 73 74 65 70 29 29 3b 0a 2b 0a 2b 0a 2b 2f 2a   step));.+.+.+/*
3dc0: 0a 2b 20 2a 20 54 68 65 20 73 74 72 75 63 74 75  .+ * The structu
3dd0: 72 65 20 62 65 6c 6f 77 20 64 65 66 69 6e 65 73  re below defines
3de0: 20 74 68 65 20 61 72 69 74 68 6d 65 74 69 63 20   the arithmetic 
3df0: 73 65 72 69 65 73 20 54 63 6c 20 6f 62 6a 65 63  series Tcl objec
3e00: 74 20 74 79 70 65 20 62 79 0a 2b 20 2a 20 6d 65  t type by.+ * me
3e10: 61 6e 73 20 6f 66 20 70 72 6f 63 65 64 75 72 65  ans of procedure
3e20: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 69 6e  s that can be in
3e30: 76 6f 6b 65 64 20 62 79 20 67 65 6e 65 72 69 63  voked by generic
3e40: 20 6f 62 6a 65 63 74 20 63 6f 64 65 2e 0a 2b 20   object code..+ 
3e50: 2a 0a 2b 20 2a 20 54 68 65 20 61 72 69 74 68 6d  *.+ * The arithm
3e60: 65 74 69 63 20 73 65 72 69 65 73 20 6f 62 6a 65  etic series obje
3e70: 63 74 20 69 73 20 61 20 73 70 65 63 69 61 6c 20  ct is a special 
3e80: 63 61 73 65 20 6f 66 20 54 63 6c 20 6c 69 73 74  case of Tcl list
3e90: 20 72 65 70 72 65 73 65 6e 74 69 6e 67 0a 2b 20   representing.+ 
3ea0: 2a 20 61 6e 20 69 6e 74 65 72 76 61 6c 20 6f 66  * an interval of
3eb0: 20 61 6e 20 61 72 69 74 68 6d 65 74 69 63 20 73   an arithmetic s
3ec0: 65 72 69 65 73 20 69 6e 20 63 6f 6e 73 74 61 6e  eries in constan
3ed0: 74 20 73 70 61 63 65 2e 0a 2b 20 2a 20 0a 2b 20  t space..+ * .+ 
3ee0: 2a 20 54 68 65 20 61 72 69 74 68 6d 65 74 69 63  * The arithmetic
3ef0: 20 73 65 72 69 65 73 20 69 73 20 69 6e 74 65 72   series is inter
3f00: 6e 61 6c 6c 79 20 72 65 70 72 65 73 65 6e 74 65  nally represente
3f10: 64 20 77 69 74 68 20 74 68 72 65 65 20 69 6e 74  d with three int
3f20: 65 67 65 72 73 2c 0a 2b 20 2a 20 2a 73 74 61 72  egers,.+ * *star
3f30: 74 2a 2c 20 2a 65 6e 64 2a 2c 20 61 6e 64 20 2a  t*, *end*, and *
3f40: 73 74 65 70 2a 2c 20 57 68 65 72 65 20 74 68 65  step*, Where the
3f50: 20 6c 65 6e 67 74 68 20 69 73 20 63 61 6c 63 75   length is calcu
3f60: 6c 61 74 65 64 20 77 69 74 68 0a 2b 20 2a 20 74  lated with.+ * t
3f70: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6c 67  he following alg
3f80: 6f 72 69 74 68 6d 3a 0a 2b 20 2a 0a 2b 20 2a 20  orithm:.+ *.+ * 
3f90: 69 66 20 52 41 4e 47 45 20 3d 3d 20 30 20 54 48  if RANGE == 0 TH
3fa0: 45 4e 0a 2b 20 2a 20 20 20 45 52 52 4f 52 0a 2b  EN.+ *   ERROR.+
3fb0: 20 2a 20 69 66 20 52 41 4e 47 45 20 3e 20 30 0a   * if RANGE > 0.
3fc0: 2b 20 2a 20 20 20 4c 45 4e 20 69 73 20 28 28 28  + *   LEN is (((
3fd0: 45 4e 44 2d 53 54 41 52 54 29 2d 31 29 2f 53 54  END-START)-1)/ST
3fe0: 45 50 29 20 2b 20 31 0a 2b 20 2a 20 65 6c 73 65  EP) + 1.+ * else
3ff0: 20 69 66 20 52 41 4e 47 45 20 3c 20 30 0a 2b 20   if RANGE < 0.+ 
4000: 2a 20 20 20 4c 45 4e 20 69 73 20 28 28 28 45 4e  *   LEN is (((EN
4010: 44 2d 53 54 41 52 54 29 2d 31 29 2f 53 54 45 50  D-START)-1)/STEP
4020: 29 20 2d 20 31 0a 2b 20 2a 0a 2b 20 2a 20 41 6e  ) - 1.+ *.+ * An
4030: 64 20 77 68 65 72 65 20 74 68 65 20 65 71 75 69  d where the equi
4040: 76 61 6c 65 6e 74 27 73 20 6c 69 73 74 20 49 2d  valent's list I-
4050: 74 68 20 65 6c 65 6d 65 6e 74 20 69 73 20 63 61  th element is ca
4060: 6c 63 75 6c 61 74 65 64 0a 2b 20 2a 20 61 73 3a  lculated.+ * as:
4070: 0a 2b 20 2a 0a 2b 20 2a 20 4c 49 53 54 5b 69 5d  .+ *.+ * LIST[i]
4080: 20 3d 20 53 54 41 52 54 2b 28 53 54 45 50 2a 69   = START+(STEP*i
4090: 29 0a 2b 20 2a 0a 2b 20 2a 20 5a 65 72 6f 20 65  ).+ *.+ * Zero e
40a0: 6c 65 6d 65 6e 74 73 20 72 61 6e 67 65 73 2c 20  lements ranges, 
40b0: 6c 69 6b 65 20 69 6e 20 74 68 65 20 63 61 73 65  like in the case
40c0: 20 6f 66 20 53 54 41 52 54 3d 31 30 20 45 4e 44   of START=10 END
40d0: 3d 31 30 20 53 54 45 50 3d 31 0a 2b 20 2a 20 61  =10 STEP=1.+ * a
40e0: 72 65 20 76 61 6c 69 64 20 61 6e 64 20 77 69 6c  re valid and wil
40f0: 6c 20 62 65 20 65 71 75 69 76 61 6c 65 6e 74 20  l be equivalent 
4100: 74 6f 20 74 68 65 20 65 6d 70 74 79 20 6c 69 73  to the empty lis
4110: 74 2e 0a 2b 20 2a 2f 0a 2b 0a 2b 54 63 6c 5f 4f  t..+ */.+.+Tcl_O
4120: 62 6a 54 79 70 65 20 74 63 6c 41 72 69 74 68 53  bjType tclArithS
4130: 65 72 69 65 73 54 79 70 65 20 3d 20 7b 0a 2b 20  eriesType = {.+ 
4140: 20 20 20 22 61 72 69 74 68 73 65 72 69 65 73 22     "arithseries"
4150: 2c 09 09 09 2f 2a 20 6e 61 6d 65 20 2a 2f 0a 2b  ,.../* name */.+
4160: 20 20 20 20 46 72 65 65 41 72 69 74 68 53 65 72      FreeArithSer
4170: 69 65 73 49 6e 74 65 72 6e 61 6c 52 65 70 2c 09  iesInternalRep,.
4180: 09 2f 2a 20 66 72 65 65 49 6e 74 52 65 70 50 72  ./* freeIntRepPr
4190: 6f 63 20 2a 2f 0a 2b 20 20 20 20 44 75 70 41 72  oc */.+    DupAr
41a0: 69 74 68 53 65 72 69 65 73 49 6e 74 65 72 6e 61  ithSeriesInterna
41b0: 6c 52 65 70 2c 09 09 2f 2a 20 64 75 70 49 6e 74  lRep,../* dupInt
41c0: 52 65 70 50 72 6f 63 20 2a 2f 0a 2b 20 20 20 20  RepProc */.+    
41d0: 55 70 64 61 74 65 53 74 72 69 6e 67 4f 66 41 72  UpdateStringOfAr
41e0: 69 74 68 53 65 72 69 65 73 2c 09 09 2f 2a 20 75  ithSeries,../* u
41f0: 70 64 61 74 65 53 74 72 69 6e 67 50 72 6f 63 20  pdateStringProc 
4200: 2a 2f 0a 2b 20 20 20 20 53 65 74 41 72 69 74 68  */.+    SetArith
4210: 53 65 72 69 65 73 46 72 6f 6d 41 6e 79 09 09 2f  SeriesFromAny../
4220: 2a 20 73 65 74 46 72 6f 6d 41 6e 79 50 72 6f 63  * setFromAnyProc
4230: 20 2a 2f 0a 2b 7d 3b 0a 2b 0a 2b 0a 2b 0c 0a 2b   */.+};.+.+.+..+
4240: 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*.+ *----------
4250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a  ------------.+ *
4290: 0a 2b 20 2a 20 46 72 65 65 41 72 69 74 68 53 65  .+ * FreeArithSe
42a0: 72 69 65 73 49 6e 74 65 72 6e 61 6c 52 65 70 20  riesInternalRep 
42b0: 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 44 65 61 6c 6c  --.+ *.+ *.Deall
42c0: 6f 63 61 74 65 20 74 68 65 20 73 74 6f 72 61 67  ocate the storag
42d0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
42e0: 68 20 61 6e 20 61 72 69 74 68 73 65 72 69 65 73  h an arithseries
42f0: 20 6f 62 6a 65 63 74 27 73 0a 2b 20 2a 09 69 6e   object's.+ *.in
4300: 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74  ternal represent
4310: 61 74 69 6f 6e 2e 0a 2b 20 2a 0a 2b 20 2a 20 52  ation..+ *.+ * R
4320: 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65  esults:.+ *.None
4330: 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65  ..+ *.+ * Side e
4340: 66 66 65 63 74 73 3a 0a 2b 20 2a 09 46 72 65 65  ffects:.+ *.Free
4350: 73 20 61 72 69 74 68 53 65 72 69 65 73 50 74 72  s arithSeriesPtr
4360: 27 73 20 41 72 69 74 68 53 65 72 69 65 73 2a 20  's ArithSeries* 
4370: 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
4380: 6e 74 61 74 69 6f 6e 20 61 6e 64 0a 2b 20 2a 09  ntation and.+ *.
4390: 73 65 74 73 20 6c 69 73 74 50 74 72 27 73 09 69  sets listPtr's.i
43a0: 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74  nternalRep.twoPt
43b0: 72 56 61 6c 75 65 2e 70 74 72 31 20 74 6f 20 4e  rValue.ptr1 to N
43c0: 55 4c 4c 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d  ULL..+ *.+ *----
43d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
43f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4410: 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69  --.+ */.+.+stati
4420: 63 20 76 6f 69 64 0a 2b 46 72 65 65 41 72 69 74  c void.+FreeArit
4430: 68 53 65 72 69 65 73 49 6e 74 65 72 6e 61 6c 52  hSeriesInternalR
4440: 65 70 28 61 72 69 74 68 53 65 72 69 65 73 50 74  ep(arithSeriesPt
4450: 72 29 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20  r).+    Tcl_Obj 
4460: 2a 61 72 69 74 68 53 65 72 69 65 73 50 74 72 3b  *arithSeriesPtr;
4470: 0a 2b 7b 0a 2b 20 20 20 20 41 72 69 74 68 53 65  .+{.+    ArithSe
4480: 72 69 65 73 20 2a 61 72 69 74 68 53 65 72 69 65  ries *arithSerie
4490: 73 52 65 70 50 74 72 20 3d 0a 2b 09 20 20 20 20  sRepPtr =.+.    
44a0: 28 41 72 69 74 68 53 65 72 69 65 73 20 2a 29 20  (ArithSeries *) 
44b0: 61 72 69 74 68 53 65 72 69 65 73 50 74 72 2d 3e  arithSeriesPtr->
44c0: 69 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50  internalRep.twoP
44d0: 74 72 56 61 6c 75 65 2e 70 74 72 31 3b 0a 2b 20  trValue.ptr1;.+ 
44e0: 20 20 20 69 66 20 28 2d 2d 61 72 69 74 68 53 65     if (--arithSe
44f0: 72 69 65 73 52 65 70 50 74 72 2d 3e 72 65 66 43  riesRepPtr->refC
4500: 6f 75 6e 74 20 3c 3d 20 30 29 20 7b 0a 2b 09 63  ount <= 0) {.+.c
4510: 6b 66 72 65 65 28 28 63 68 61 72 20 2a 29 20 61  kfree((char *) a
4520: 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74 72  rithSeriesRepPtr
4530: 29 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 61  );.+    }.+    a
4540: 72 69 74 68 53 65 72 69 65 73 50 74 72 2d 3e 69  rithSeriesPtr->i
4550: 6e 74 65 72 6e 61 6c 52 65 70 2e 74 77 6f 50 74  nternalRep.twoPt
4560: 72 56 61 6c 75 65 2e 70 74 72 31 20 3d 20 4e 55  rValue.ptr1 = NU
4570: 4c 4c 3b 0a 2b 7d 0a 2b 0a 2b 0c 0a 2b 2f 2a 0a  LL;.+}.+.+..+/*.
4580: 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  + *-------------
4590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20  ---------.+ *.+ 
45d0: 2a 20 44 75 70 41 72 69 74 68 53 65 72 69 65 73  * DupArithSeries
45e0: 49 6e 74 65 72 6e 61 6c 52 65 70 20 2d 2d 0a 2b  InternalRep --.+
45f0: 20 2a 0a 2b 20 2a 09 49 6e 69 74 69 61 6c 69 7a   *.+ *.Initializ
4600: 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  e the internal r
4610: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
4620: 20 61 20 61 72 69 74 68 73 65 72 69 65 73 20 54   a arithseries T
4630: 63 6c 5f 4f 62 6a 20 74 6f 20 61 0a 2b 20 2a 09  cl_Obj to a.+ *.
4640: 63 6f 70 79 20 6f 66 20 74 68 65 20 69 6e 74 65  copy of the inte
4650: 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
4660: 69 6f 6e 20 6f 66 20 61 6e 20 65 78 69 73 74 69  ion of an existi
4670: 6e 67 20 61 72 69 74 68 73 65 72 69 65 73 20 6f  ng arithseries o
4680: 62 6a 65 63 74 2e 20 0a 2b 20 2a 0a 2b 20 2a 20  bject. .+ *.+ * 
4690: 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 4e 6f 6e  Results:.+ *.Non
46a0: 65 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 20  e..+ *.+ * Side 
46b0: 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09 57 65 20  effects:.+ *.We 
46c0: 73 65 74 20 22 63 6f 70 79 50 74 72 22 73 20 69  set "copyPtr"s i
46d0: 6e 74 65 72 6e 61 6c 20 72 65 70 20 74 6f 20 61  nternal rep to a
46e0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 0a 2b 20   pointer to a.+ 
46f0: 2a 09 6e 65 77 6c 79 20 61 6c 6c 6f 63 61 74 65  *.newly allocate
4700: 64 20 41 72 69 74 68 53 65 72 69 65 73 20 73 74  d ArithSeries st
4710: 72 75 63 74 75 72 65 2e 0a 2b 20 2a 2d 2d 2d 2d  ructure..+ *----
4720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4760: 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69  --.+ */.+.+stati
4770: 63 20 76 6f 69 64 0a 2b 44 75 70 41 72 69 74 68  c void.+DupArith
4780: 53 65 72 69 65 73 49 6e 74 65 72 6e 61 6c 52 65  SeriesInternalRe
4790: 70 28 73 72 63 50 74 72 2c 20 63 6f 70 79 50 74  p(srcPtr, copyPt
47a0: 72 29 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20  r).+    Tcl_Obj 
47b0: 2a 73 72 63 50 74 72 3b 09 09 2f 2a 20 4f 62 6a  *srcPtr;../* Obj
47c0: 65 63 74 20 77 69 74 68 20 69 6e 74 65 72 6e 61  ect with interna
47d0: 6c 20 72 65 70 20 74 6f 20 63 6f 70 79 2e 20 2a  l rep to copy. *
47e0: 2f 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a  /.+    Tcl_Obj *
47f0: 63 6f 70 79 50 74 72 3b 09 09 2f 2a 20 4f 62 6a  copyPtr;../* Obj
4800: 65 63 74 20 77 69 74 68 20 69 6e 74 65 72 6e 61  ect with interna
4810: 6c 20 72 65 70 20 74 6f 20 73 65 74 2e 20 2a 2f  l rep to set. */
4820: 0a 2b 7b 0a 2b 20 20 20 20 41 72 69 74 68 53 65  .+{.+    ArithSe
4830: 72 69 65 73 20 2a 61 72 69 74 68 53 65 72 69 65  ries *arithSerie
4840: 73 52 65 70 50 74 72 20 3d 0a 2b 09 20 20 20 20  sRepPtr =.+.    
4850: 28 41 72 69 74 68 53 65 72 69 65 73 20 2a 29 20  (ArithSeries *) 
4860: 73 72 63 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c  srcPtr->internal
4870: 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e  Rep.twoPtrValue.
4880: 70 74 72 31 3b 0a 2b 0a 2b 20 20 20 20 61 72 69  ptr1;.+.+    ari
4890: 74 68 53 65 72 69 65 73 52 65 70 50 74 72 2d 3e  thSeriesRepPtr->
48a0: 72 65 66 43 6f 75 6e 74 2b 2b 3b 0a 2b 20 20 20  refCount++;.+   
48b0: 20 63 6f 70 79 50 74 72 2d 3e 69 6e 74 65 72 6e   copyPtr->intern
48c0: 61 6c 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75  alRep.twoPtrValu
48d0: 65 2e 70 74 72 31 20 3d 20 28 56 4f 49 44 20 2a  e.ptr1 = (VOID *
48e0: 29 20 61 72 69 74 68 53 65 72 69 65 73 52 65 70  ) arithSeriesRep
48f0: 50 74 72 3b 0a 2b 20 20 20 20 63 6f 70 79 50 74  Ptr;.+    copyPt
4900: 72 2d 3e 69 6e 74 65 72 6e 61 6c 52 65 70 2e 74  r->internalRep.t
4910: 77 6f 50 74 72 56 61 6c 75 65 2e 70 74 72 32 20  woPtrValue.ptr2 
4920: 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20 63 6f 70  = NULL;.+    cop
4930: 79 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 20  yPtr->typePtr = 
4940: 26 74 63 6c 41 72 69 74 68 53 65 72 69 65 73 54  &tclArithSeriesT
4950: 79 70 65 3b 0a 2b 7d 0a 2b 0a 2b 0c 0a 2b 2f 2a  ype;.+}.+.+..+/*
4960: 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .+ *------------
4970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
49a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b  ----------.+ *.+
49b0: 20 2a 20 55 70 64 61 74 65 53 74 72 69 6e 67 4f   * UpdateStringO
49c0: 66 41 72 69 74 68 53 65 72 69 65 73 20 2d 2d 0a  fArithSeries --.
49d0: 2b 20 2a 0a 2b 20 2a 09 55 70 64 61 74 65 20 74  + *.+ *.Update t
49e0: 68 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  he string repres
49f0: 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 6e 20  entation for an 
4a00: 61 72 69 74 68 73 65 72 69 65 73 20 6f 62 6a 65  arithseries obje
4a10: 63 74 2e 0a 2b 20 2a 09 4e 6f 74 65 3a 20 54 68  ct..+ *.Note: Th
4a20: 69 73 20 70 72 6f 63 65 64 75 72 65 20 64 6f 65  is procedure doe
4a30: 73 20 6e 6f 74 20 69 6e 76 61 6c 69 64 61 74 65  s not invalidate
4a40: 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6f 6c 64   an existing old
4a50: 20 73 74 72 69 6e 67 20 72 65 70 0a 2b 20 2a 09   string rep.+ *.
4a60: 73 6f 20 73 74 6f 72 61 67 65 20 77 69 6c 6c 20  so storage will 
4a70: 62 65 20 6c 6f 73 74 20 69 66 20 74 68 69 73 20  be lost if this 
4a80: 68 61 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  has not already 
4a90: 62 65 65 6e 20 64 6f 6e 65 2e 20 0a 2b 20 2a 0a  been done. .+ *.
4aa0: 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a  + * Results:.+ *
4ab0: 09 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 20 53  .None..+ *.+ * S
4ac0: 69 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a  ide effects:.+ *
4ad0: 09 54 68 65 20 6f 62 6a 65 63 74 27 73 20 73 74  .The object's st
4ae0: 72 69 6e 67 20 69 73 20 73 65 74 20 74 6f 20 61  ring is set to a
4af0: 20 76 61 6c 69 64 20 73 74 72 69 6e 67 20 74 68   valid string th
4b00: 61 74 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 0a  at results from.
4b10: 2b 20 2a 09 74 68 65 20 6c 69 73 74 2d 74 6f 2d  + *.the list-to-
4b20: 73 74 72 69 6e 67 20 63 6f 6e 76 65 72 73 69 6f  string conversio
4b30: 6e 2e 20 54 68 69 73 20 73 74 72 69 6e 67 20 77  n. This string w
4b40: 69 6c 6c 20 62 65 20 65 6d 70 74 79 20 69 66 20  ill be empty if 
4b50: 74 68 65 0a 2b 20 2a 09 6c 69 73 74 20 68 61 73  the.+ *.list has
4b60: 20 6e 6f 20 65 6c 65 6d 65 6e 74 73 2e 20 54 68   no elements. Th
4b70: 65 20 6c 69 73 74 20 69 6e 74 65 72 6e 61 6c 20  e list internal 
4b80: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2b  representation.+
4b90: 20 2a 09 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65   *.should not be
4ba0: 20 4e 55 4c 4c 20 61 6e 64 20 77 65 20 61 73 73   NULL and we ass
4bb0: 75 6d 65 20 69 74 20 69 73 20 6e 6f 74 20 4e 55  ume it is not NU
4bc0: 4c 4c 2e 0a 2b 20 2a 0a 2b 20 2a 20 4e 6f 74 65  LL..+ *.+ * Note
4bd0: 73 3a 0a 2b 20 2a 20 09 41 74 20 74 68 65 20 63  s:.+ * .At the c
4be0: 6f 73 74 20 6f 66 20 6f 76 65 72 61 6c 6c 6f 63  ost of overalloc
4bf0: 61 74 69 6f 6e 20 69 74 27 73 20 70 6f 73 73 69  ation it's possi
4c00: 62 6c 65 20 74 6f 20 65 73 74 69 6d 61 74 65 0a  ble to estimate.
4c10: 2b 20 2a 20 09 74 68 65 20 6c 65 6e 67 74 68 20  + * .the length 
4c20: 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 72 65  of the string re
4c30: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 61 6e 64  presentation and
4c40: 20 6d 61 6b 65 20 74 68 69 73 20 70 72 6f 63 65   make this proce
4c50: 64 75 72 65 0a 2b 20 2a 20 09 6d 75 63 68 20 66  dure.+ * .much f
4c60: 61 73 74 65 72 2e 20 42 65 63 61 75 73 65 20 74  aster. Because t
4c70: 68 65 20 70 72 6f 67 72 61 6d 6d 65 72 20 73 68  he programmer sh
4c80: 6f 75 6c 64 6e 27 74 20 65 78 70 65 63 74 20 74  ouldn't expect t
4c90: 68 65 0a 2b 20 2a 20 09 73 74 72 69 6e 67 20 63  he.+ * .string c
4ca0: 6f 6e 76 65 72 73 69 6f 6e 20 6f 66 20 61 20 62  onversion of a b
4cb0: 69 67 20 61 72 69 74 68 6d 65 74 69 63 20 73 65  ig arithmetic se
4cc0: 71 75 65 6e 63 65 20 74 6f 20 62 65 20 66 61 73  quence to be fas
4cd0: 74 0a 2b 20 2a 20 09 74 68 69 73 20 76 65 72 73  t.+ * .this vers
4ce0: 69 6f 6e 20 74 61 6b 65 73 20 6d 6f 72 65 20 63  ion takes more c
4cf0: 61 72 65 20 6f 66 20 73 70 61 63 65 20 74 68 61  are of space tha
4d00: 6e 20 74 69 6d 65 2e 0a 2b 20 2a 0a 2b 20 2a 2d  n time..+ *.+ *-
4d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d50: 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74  -----.+ */.+.+st
4d60: 61 74 69 63 20 76 6f 69 64 0a 2b 55 70 64 61 74  atic void.+Updat
4d70: 65 53 74 72 69 6e 67 4f 66 41 72 69 74 68 53 65  eStringOfArithSe
4d80: 72 69 65 73 28 6f 62 6a 50 74 72 29 0a 2b 20 20  ries(objPtr).+  
4d90: 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 50 74    Tcl_Obj *objPt
4da0: 72 3b 0a 2b 7b 0a 2b 20 20 20 20 2f 2a 0a 2b 20  r;.+{.+    /*.+ 
4db0: 20 20 20 20 2a 20 52 65 6c 79 20 6f 6e 20 74 68      * Rely on th
4dc0: 65 20 6c 69 73 74 54 79 70 65 20 66 75 6e 63 74  e listType funct
4dd0: 69 6f 6e 73 20 66 6f 72 20 6e 6f 77 3a 20 66 69  ions for now: fi
4de0: 72 73 74 20 73 68 69 6d 6d 65 72 20 74 6f 0a 2b  rst shimmer to.+
4df0: 20 20 20 20 20 2a 20 6c 69 73 74 20 74 79 70 65       * list type
4e00: 2c 20 74 68 65 6e 20 63 6f 6d 70 75 74 65 20 74  , then compute t
4e10: 68 65 20 73 74 72 69 6e 67 20 72 65 70 2e 0a 2b  he string rep..+
4e20: 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 53       */.+.+    S
4e30: 65 74 4c 69 73 74 46 72 6f 6d 41 6e 79 28 4e 55  etListFromAny(NU
4e40: 4c 4c 2c 20 6f 62 6a 50 74 72 29 3b 0a 2b 20 20  LL, objPtr);.+  
4e50: 20 20 54 63 6c 47 65 74 53 74 72 69 6e 67 28 6f    TclGetString(o
4e60: 62 6a 50 74 72 29 3b 0a 2b 7d 0a 2b 0a 2b 0c 0a  bjPtr);.+}.+.+..
4e70: 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  +/*.+ *---------
4e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4e90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ea0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20  -------------.+ 
4ec0: 2a 0a 2b 20 2a 20 53 65 74 41 72 69 74 68 53 65  *.+ * SetArithSe
4ed0: 72 69 65 73 46 72 6f 6d 41 6e 79 20 2d 2d 0a 2b  riesFromAny --.+
4ee0: 20 2a 0a 2b 20 2a 20 09 54 68 65 20 41 72 69 74   *.+ * .The Arit
4ef0: 68 6d 65 74 69 63 20 53 65 72 69 65 73 20 6f 62  hmetic Series ob
4f00: 6a 65 63 74 20 69 73 20 6a 75 73 74 20 61 6e 20  ject is just an 
4f10: 77 61 79 20 74 6f 20 6f 70 74 69 6d 69 7a 65 0a  way to optimize.
4f20: 2b 20 2a 20 09 4c 69 73 74 73 20 73 70 61 63 65  + * .Lists space
4f30: 20 63 6f 6d 70 6c 65 78 69 74 79 2c 20 73 6f 20   complexity, so 
4f40: 6e 6f 20 6f 6e 65 20 73 68 6f 75 6c 64 20 74 72  no one should tr
4f50: 79 20 74 6f 20 63 6f 6e 76 65 72 74 0a 2b 20 2a  y to convert.+ *
4f60: 20 09 61 20 73 74 72 69 6e 67 20 74 6f 20 61 6e   .a string to an
4f70: 20 41 72 69 74 68 6d 65 74 69 63 20 53 65 72 69   Arithmetic Seri
4f80: 65 73 20 6f 62 6a 65 63 74 2e 0a 2b 20 2a 0a 2b  es object..+ *.+
4f90: 20 2a 20 09 54 68 69 73 20 66 75 6e 63 74 69 6f   * .This functio
4fa0: 6e 20 69 73 20 68 65 72 65 20 6a 75 73 74 20 74  n is here just t
4fb0: 6f 20 70 6f 70 75 6c 61 74 65 20 74 68 65 20 54  o populate the T
4fc0: 79 70 65 20 73 74 72 75 63 74 75 72 65 2e 0a 2b  ype structure..+
4fd0: 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a   *.+ * Results:.
4fe0: 2b 20 2a 0a 2b 20 2a 20 09 54 68 65 20 72 65 73  + *.+ * .The res
4ff0: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 54 43  ult is always TC
5000: 4c 5f 45 52 52 4f 52 2e 20 42 75 74 20 73 65 65  L_ERROR. But see
5010: 20 53 69 64 65 20 45 66 66 65 63 74 73 2e 0a 2b   Side Effects..+
5020: 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65   *.+ * Side effe
5030: 63 74 73 3a 0a 2b 20 2a 0a 2b 20 2a 20 09 54 63  cts:.+ *.+ * .Tc
5040: 6c 20 50 61 6e 69 63 20 69 66 20 63 61 6c 6c 65  l Panic if calle
5050: 64 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d  d..+ *.+ *------
5060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
50a0: 0a 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 20  .+ */.+.+static 
50b0: 69 6e 74 0a 2b 53 65 74 41 72 69 74 68 53 65 72  int.+SetArithSer
50c0: 69 65 73 46 72 6f 6d 41 6e 79 28 69 6e 74 65 72  iesFromAny(inter
50d0: 70 2c 20 6f 62 6a 50 74 72 29 0a 2b 20 20 20 20  p, objPtr).+    
50e0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65  Tcl_Interp *inte
50f0: 72 70 3b 09 09 2f 2a 20 55 73 65 64 20 66 6f 72  rp;../* Used for
5100: 20 65 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67   error reporting
5110: 20 69 66 20 6e 6f 74 20 4e 55 4c 4c 2e 20 2a 2f   if not NULL. */
5120: 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 6f  .+    Tcl_Obj *o
5130: 62 6a 50 74 72 3b 09 09 2f 2a 20 54 68 65 20 6f  bjPtr;../* The o
5140: 62 6a 65 63 74 20 74 6f 20 63 6f 6e 76 65 72 74  bject to convert
5150: 2e 20 2a 2f 0a 2b 7b 0a 2b 20 20 20 20 54 63 6c  . */.+{.+    Tcl
5160: 5f 50 61 6e 69 63 28 22 53 65 74 41 72 69 74 68  _Panic("SetArith
5170: 53 65 72 69 65 73 46 72 6f 6d 41 6e 79 3a 20 73  SeriesFromAny: s
5180: 68 6f 75 6c 64 20 6e 65 76 65 72 20 62 65 20 63  hould never be c
5190: 61 6c 6c 65 64 22 29 3b 0a 2b 20 20 20 20 72 65  alled");.+    re
51a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
51b0: 2b 7d 0a 2b 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d  +}.+.+..+/*.+ *-
51c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
51d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
51e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
51f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5200: 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 54 63  -----.+ *.+ * Tc
5210: 6c 5f 4e 65 77 28 57 69 64 65 29 41 72 69 74 68  l_New(Wide)Arith
5220: 53 65 72 69 65 73 4f 62 6a 20 2d 2d 0a 2b 20 2a  SeriesObj --.+ *
5230: 0a 2b 20 2a 09 43 72 65 61 74 65 73 20 61 20 6e  .+ *.Creates a n
5240: 65 77 20 41 72 69 74 68 53 65 72 69 65 73 20 6f  ew ArithSeries o
5250: 62 6a 65 63 74 2e 20 54 68 65 20 72 65 74 75 72  bject. The retur
5260: 6e 65 64 20 6f 62 6a 65 63 74 20 68 61 73 0a 2b  ned object has.+
5270: 20 2a 09 72 65 66 63 6f 75 6e 74 20 3d 20 30 2e   *.refcount = 0.
5280: 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73  .+ *.+ * Results
5290: 3a 0a 2b 20 2a 0a 2b 20 2a 20 09 41 20 54 63 6c  :.+ *.+ * .A Tcl
52a0: 5f 4f 62 6a 20 70 6f 69 6e 74 65 72 20 74 6f 20  _Obj pointer to 
52b0: 74 68 65 20 63 72 65 61 74 65 64 20 41 72 69 74  the created Arit
52c0: 68 53 65 72 69 65 73 20 6f 62 6a 65 63 74 2e 0a  hSeries object..
52d0: 2b 20 2a 20 09 41 20 4e 55 4c 4c 20 70 6f 69 6e  + * .A NULL poin
52e0: 74 65 72 20 6f 66 20 74 68 65 20 72 61 6e 67 65  ter of the range
52f0: 20 69 73 20 69 6e 76 61 6c 69 64 2e 0a 2b 20 2a   is invalid..+ *
5300: 0a 2b 20 2a 20 53 69 64 65 20 45 66 66 65 63 74  .+ * Side Effect
5310: 73 3a 0a 2b 20 2a 0a 2b 20 2a 20 09 4e 6f 6e 65  s:.+ *.+ * .None
5320: 2e 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..+ *-----------
5330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f  -----------.+ */
5370: 0a 2b 0a 2b 73 74 61 74 69 63 20 54 63 6c 5f 4f  .+.+static Tcl_O
5380: 62 6a 20 2a 0a 2b 4e 65 77 57 69 64 65 41 72 69  bj *.+NewWideAri
5390: 74 68 53 65 72 69 65 73 4f 62 6a 28 73 74 61 72  thSeriesObj(star
53a0: 74 2c 20 65 6e 64 2c 20 73 74 65 70 29 0a 2b 20  t, end, step).+ 
53b0: 20 20 20 54 63 6c 5f 57 69 64 65 49 6e 74 20 73     Tcl_WideInt s
53c0: 74 61 72 74 2c 20 65 6e 64 2c 20 73 74 65 70 3b  tart, end, step;
53d0: 0a 2b 7b 0a 2b 20 20 20 20 69 6e 74 20 6c 65 6e  .+{.+    int len
53e0: 3b 0a 2b 20 20 20 20 54 63 6c 5f 57 69 64 65 49  ;.+    Tcl_WideI
53f0: 6e 74 20 77 69 64 65 4c 65 6e 3b 0a 2b 20 20 20  nt wideLen;.+   
5400: 20 54 63 6c 5f 4f 62 6a 20 2a 61 72 69 74 68 53   Tcl_Obj *arithS
5410: 65 72 69 65 73 50 74 72 3b 0a 2b 20 20 20 20 41  eriesPtr;.+    A
5420: 72 69 74 68 53 65 72 69 65 73 20 2a 61 72 69 74  rithSeries *arit
5430: 68 53 65 72 69 65 73 52 65 70 50 74 72 3b 0a 2b  hSeriesRepPtr;.+
5440: 0a 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a  .+    /*.+     *
5450: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 6c 65 6e   Compute the len
5460: 67 74 68 20 6f 66 20 74 68 65 20 61 72 69 74 68  gth of the arith
5470: 53 65 72 69 65 73 2e 0a 2b 20 20 20 20 20 2a 2f  Series..+     */
5480: 0a 2b 0a 2b 20 20 20 20 69 66 20 28 28 73 74 65  .+.+    if ((ste
5490: 70 20 3d 3d 20 30 29 0a 2b 09 20 20 20 20 7c 7c  p == 0).+.    ||
54a0: 20 28 73 74 65 70 20 3e 20 30 20 26 26 20 73 74   (step > 0 && st
54b0: 61 72 74 20 3e 20 65 6e 64 29 0a 2b 09 20 20 20  art > end).+.   
54c0: 20 7c 7c 20 28 73 74 65 70 20 3c 20 30 20 26 26   || (step < 0 &&
54d0: 20 65 6e 64 20 3e 20 73 74 61 72 74 29 29 20 7b   end > start)) {
54e0: 0a 2b 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 20  .+.return NULL; 
54f0: 2f 2a 20 49 6e 76 61 6c 69 64 20 72 61 6e 67 65  /* Invalid range
5500: 20 65 72 72 6f 72 20 2a 2f 0a 2b 20 20 20 20 7d   error */.+    }
5510: 20 65 6c 73 65 20 7b 0a 2b 09 77 69 64 65 4c 65   else {.+.wideLe
5520: 6e 20 3d 20 28 28 73 74 65 70 20 3e 20 30 29 20  n = ((step > 0) 
5530: 3f 20 31 20 3a 20 2d 31 29 20 2b 20 28 28 28 65  ? 1 : -1) + (((e
5540: 6e 64 2d 73 74 61 72 74 29 2d 31 29 2f 73 74 65  nd-start)-1)/ste
5550: 70 29 3b 0a 2b 09 6c 65 6e 20 3d 20 28 69 6e 74  p);.+.len = (int
5560: 29 20 77 69 64 65 4c 65 6e 3b 0a 2b 09 69 66 20  ) wideLen;.+.if 
5570: 28 28 77 69 64 65 4c 65 6e 20 3c 20 30 29 20 7c  ((wideLen < 0) |
5580: 7c 20 28 28 54 63 6c 5f 57 69 64 65 49 6e 74 29  | ((Tcl_WideInt)
5590: 20 6c 65 6e 20 21 3d 20 77 69 64 65 4c 65 6e 29   len != wideLen)
55a0: 29 20 7b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e  ) {.+.    return
55b0: 20 4e 55 4c 4c 3b 20 2f 2a 20 4c 69 73 74 20 74   NULL; /* List t
55c0: 6f 6f 20 6c 6f 6e 67 2e 20 2a 2f 0a 2b 09 7d 0a  oo long. */.+.}.
55d0: 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 54 63  +    }.+.+    Tc
55e0: 6c 4e 65 77 4f 62 6a 28 61 72 69 74 68 53 65 72  lNewObj(arithSer
55f0: 69 65 73 50 74 72 29 3b 0a 2b 0a 2b 20 20 20 20  iesPtr);.+.+    
5600: 61 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74  arithSeriesRepPt
5610: 72 20 3d 20 28 41 72 69 74 68 53 65 72 69 65 73  r = (ArithSeries
5620: 2a 29 20 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f  *) ckalloc(sizeo
5630: 66 20 28 41 72 69 74 68 53 65 72 69 65 73 29 29  f (ArithSeries))
5640: 3b 0a 2b 20 20 20 20 61 72 69 74 68 53 65 72 69  ;.+    arithSeri
5650: 65 73 52 65 70 50 74 72 2d 3e 73 74 61 72 74 2e  esRepPtr->start.
5660: 77 20 3d 20 73 74 61 72 74 3b 0a 2b 20 20 20 20  w = start;.+    
5670: 61 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74  arithSeriesRepPt
5680: 72 2d 3e 65 6e 64 2e 77 20 3d 20 65 6e 64 3b 0a  r->end.w = end;.
5690: 2b 20 20 20 20 61 72 69 74 68 53 65 72 69 65 73  +    arithSeries
56a0: 52 65 70 50 74 72 2d 3e 73 74 65 70 2e 77 20 3d  RepPtr->step.w =
56b0: 20 73 74 65 70 3b 0a 2b 20 20 20 20 61 72 69 74   step;.+    arit
56c0: 68 53 65 72 69 65 73 52 65 70 50 74 72 2d 3e 6c  hSeriesRepPtr->l
56d0: 65 6e 20 3d 20 6c 65 6e 3b 0a 2b 20 20 20 20 61  en = len;.+    a
56e0: 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74 72  rithSeriesRepPtr
56f0: 2d 3e 66 6c 61 67 73 20 3d 20 54 43 4c 5f 52 41  ->flags = TCL_RA
5700: 4e 47 45 5f 49 53 5f 57 49 44 45 3b 0a 2b 20 20  NGE_IS_WIDE;.+  
5710: 20 20 61 72 69 74 68 53 65 72 69 65 73 52 65 70    arithSeriesRep
5720: 50 74 72 2d 3e 72 65 66 43 6f 75 6e 74 20 3d 20  Ptr->refCount = 
5730: 31 3b 0a 2b 20 20 20 20 61 72 69 74 68 53 65 72  1;.+    arithSer
5740: 69 65 73 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c  iesPtr->internal
5750: 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e  Rep.twoPtrValue.
5760: 70 74 72 31 20 3d 20 28 56 4f 49 44 20 2a 29 20  ptr1 = (VOID *) 
5770: 61 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74  arithSeriesRepPt
5780: 72 3b 0a 2b 20 20 20 20 61 72 69 74 68 53 65 72  r;.+    arithSer
5790: 69 65 73 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c  iesPtr->internal
57a0: 52 65 70 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e  Rep.twoPtrValue.
57b0: 70 74 72 32 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20  ptr2 = NULL;.+  
57c0: 20 20 61 72 69 74 68 53 65 72 69 65 73 50 74 72    arithSeriesPtr
57d0: 2d 3e 74 79 70 65 50 74 72 20 3d 20 26 74 63 6c  ->typePtr = &tcl
57e0: 41 72 69 74 68 53 65 72 69 65 73 54 79 70 65 3b  ArithSeriesType;
57f0: 0a 2b 20 20 20 20 69 66 20 28 6c 65 6e 20 3e 20  .+    if (len > 
5800: 30 29 0a 2b 20 20 20 20 09 54 63 6c 5f 49 6e 76  0).+    .Tcl_Inv
5810: 61 6c 69 64 61 74 65 53 74 72 69 6e 67 52 65 70  alidateStringRep
5820: 28 61 72 69 74 68 53 65 72 69 65 73 50 74 72 29  (arithSeriesPtr)
5830: 3b 0a 2b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20  ;.+.+    return 
5840: 61 72 69 74 68 53 65 72 69 65 73 50 74 72 3b 0a  arithSeriesPtr;.
5850: 2b 7d 0a 2b 0a 2b 73 74 61 74 69 63 20 54 63 6c  +}.+.+static Tcl
5860: 5f 4f 62 6a 20 2a 0a 2b 4e 65 77 41 72 69 74 68  _Obj *.+NewArith
5870: 53 65 72 69 65 73 4f 62 6a 28 73 74 61 72 74 2c  SeriesObj(start,
5880: 20 65 6e 64 2c 20 73 74 65 70 29 0a 2b 20 20 20   end, step).+   
5890: 20 6c 6f 6e 67 20 73 74 61 72 74 2c 20 65 6e 64   long start, end
58a0: 2c 20 73 74 65 70 3b 0a 2b 7b 0a 2b 20 20 20 20  , step;.+{.+    
58b0: 69 6e 74 20 6c 65 6e 3b 0a 2b 20 20 20 20 54 63  int len;.+    Tc
58c0: 6c 5f 4f 62 6a 20 2a 61 72 69 74 68 53 65 72 69  l_Obj *arithSeri
58d0: 65 73 50 74 72 3b 0a 2b 20 20 20 20 41 72 69 74  esPtr;.+    Arit
58e0: 68 53 65 72 69 65 73 20 2a 61 72 69 74 68 53 65  hSeries *arithSe
58f0: 72 69 65 73 52 65 70 50 74 72 3b 0a 2b 0a 2b 20  riesRepPtr;.+.+ 
5900: 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 43 6f     /*.+     * Co
5910: 6d 70 75 74 65 20 74 68 65 20 6c 65 6e 67 74 68  mpute the length
5920: 20 6f 66 20 74 68 65 20 61 72 69 74 68 53 65 72   of the arithSer
5930: 69 65 73 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a  ies..+     */.+.
5940: 2b 20 20 20 20 69 66 20 28 28 73 74 65 70 20 3d  +    if ((step =
5950: 3d 20 30 29 20 7c 7c 20 28 73 74 65 70 20 3e 20  = 0) || (step > 
5960: 30 20 26 26 20 73 74 61 72 74 20 3e 20 65 6e 64  0 && start > end
5970: 29 20 7c 7c 20 28 73 74 65 70 20 3c 20 30 20 26  ) || (step < 0 &
5980: 26 20 65 6e 64 20 3e 20 73 74 61 72 74 29 29 20  & end > start)) 
5990: 7b 0a 2b 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b  {.+.return NULL;
59a0: 20 2f 2a 20 49 6e 76 61 6c 69 64 20 72 61 6e 67   /* Invalid rang
59b0: 65 20 65 72 72 6f 72 20 2a 2f 0a 2b 20 20 20 20  e error */.+    
59c0: 7d 20 65 6c 73 65 20 7b 0a 2b 09 6c 65 6e 20 3d  } else {.+.len =
59d0: 20 28 28 73 74 65 70 20 3e 20 30 29 20 3f 20 31   ((step > 0) ? 1
59e0: 20 3a 20 2d 31 29 20 2b 20 28 28 28 65 6e 64 2d   : -1) + (((end-
59f0: 73 74 61 72 74 29 2d 31 29 2f 73 74 65 70 29 3b  start)-1)/step);
5a00: 0a 2b 09 69 66 20 28 6c 65 6e 20 3c 20 30 29 20  .+.if (len < 0) 
5a10: 7b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 4e  {.+.    return N
5a20: 55 4c 4c 3b 20 2f 2a 20 6c 69 73 74 20 74 6f 6f  ULL; /* list too
5a30: 20 6c 6f 6e 67 2e 20 2a 2f 0a 2b 09 7d 0a 2b 20   long. */.+.}.+ 
5a40: 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 54 63 6c 4e     }.+.+    TclN
5a50: 65 77 4f 62 6a 28 61 72 69 74 68 53 65 72 69 65  ewObj(arithSerie
5a60: 73 50 74 72 29 3b 0a 2b 0a 2b 20 20 20 20 61 72  sPtr);.+.+    ar
5a70: 69 74 68 53 65 72 69 65 73 52 65 70 50 74 72 20  ithSeriesRepPtr 
5a80: 3d 20 28 41 72 69 74 68 53 65 72 69 65 73 2a 29  = (ArithSeries*)
5a90: 20 63 6b 61 6c 6c 6f 63 28 73 69 7a 65 6f 66 20   ckalloc(sizeof 
5aa0: 28 41 72 69 74 68 53 65 72 69 65 73 29 29 3b 0a  (ArithSeries));.
5ab0: 2b 20 20 20 20 61 72 69 74 68 53 65 72 69 65 73  +    arithSeries
5ac0: 52 65 70 50 74 72 2d 3e 73 74 61 72 74 2e 69 20  RepPtr->start.i 
5ad0: 3d 20 73 74 61 72 74 3b 0a 2b 20 20 20 20 61 72  = start;.+    ar
5ae0: 69 74 68 53 65 72 69 65 73 52 65 70 50 74 72 2d  ithSeriesRepPtr-
5af0: 3e 65 6e 64 2e 69 20 3d 20 65 6e 64 3b 0a 2b 20  >end.i = end;.+ 
5b00: 20 20 20 61 72 69 74 68 53 65 72 69 65 73 52 65     arithSeriesRe
5b10: 70 50 74 72 2d 3e 73 74 65 70 2e 69 20 3d 20 73  pPtr->step.i = s
5b20: 74 65 70 3b 0a 2b 20 20 20 20 61 72 69 74 68 53  tep;.+    arithS
5b30: 65 72 69 65 73 52 65 70 50 74 72 2d 3e 6c 65 6e  eriesRepPtr->len
5b40: 20 3d 20 6c 65 6e 3b 0a 2b 20 20 20 20 61 72 69   = len;.+    ari
5b50: 74 68 53 65 72 69 65 73 52 65 70 50 74 72 2d 3e  thSeriesRepPtr->
5b60: 66 6c 61 67 73 20 3d 20 30 3b 0a 2b 20 20 20 20  flags = 0;.+    
5b70: 61 72 69 74 68 53 65 72 69 65 73 52 65 70 50 74  arithSeriesRepPt
5b80: 72 2d 3e 72 65 66 43 6f 75 6e 74 20 3d 20 31 3b  r->refCount = 1;
5b90: 0a 2b 20 20 20 20 61 72 69 74 68 53 65 72 69 65  .+    arithSerie
5ba0: 73 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c 52 65  sPtr->internalRe
5bb0: 70 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e 70 74  p.twoPtrValue.pt
5bc0: 72 31 20 3d 20 28 56 4f 49 44 20 2a 29 20 61 72  r1 = (VOID *) ar
5bd0: 69 74 68 53 65 72 69 65 73 52 65 70 50 74 72 3b  ithSeriesRepPtr;
5be0: 0a 2b 20 20 20 20 61 72 69 74 68 53 65 72 69 65  .+    arithSerie
5bf0: 73 50 74 72 2d 3e 69 6e 74 65 72 6e 61 6c 52 65  sPtr->internalRe
5c00: 70 2e 74 77 6f 50 74 72 56 61 6c 75 65 2e 70 74  p.twoPtrValue.pt
5c10: 72 32 20 3d 20 4e 55 4c 4c 3b 0a 2b 20 20 20 20  r2 = NULL;.+    
5c20: 61 72 69 74 68 53 65 72 69 65 73 50 74 72 2d 3e  arithSeriesPtr->
5c30: 74 79 70 65 50 74 72 20 3d 20 26 74 63 6c 41 72  typePtr = &tclAr
5c40: 69 74 68 53 65 72 69 65 73 54 79 70 65 3b 0a 2b  ithSeriesType;.+
5c50: 20 20 20 20 69 66 20 28 6c 65 6e 20 3e 20 30 29      if (len > 0)
5c60: 0a 2b 20 20 20 20 09 54 63 6c 5f 49 6e 76 61 6c  .+    .Tcl_Inval
5c70: 69 64 61 74 65 53 74 72 69 6e 67 52 65 70 28 61  idateStringRep(a
5c80: 72 69 74 68 53 65 72 69 65 73 50 74 72 29 3b 0a  rithSeriesPtr);.
5c90: 2b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 61 72  +.+    return ar
5ca0: 69 74 68 53 65 72 69 65 73 50 74 72 3b 0a 2b 7d  ithSeriesPtr;.+}
5cb0: 0a 2b 0a 2b 0c 0a 2b 0a 2b 2f 2a 0a 2b 20 2a 2d  .+.+..+.+/*.+ *-
5cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5d00: 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20 54 63  -----.+ *.+ * Tc
5d10: 6c 5f 52 61 6e 67 65 4f 62 6a 43 6d 64 20 2d 2d  l_RangeObjCmd --
5d20: 0a 2b 20 2a 0a 2b 20 2a 20 09 54 68 69 73 20 70  .+ *.+ * .This p
5d30: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73  rocedure returns
5d40: 20 61 20 6c 69 73 74 20 77 68 65 72 65 20 65 76   a list where ev
5d50: 65 72 79 20 65 6c 65 6d 65 6e 74 20 69 73 0a 2b  ery element is.+
5d60: 20 2a 20 09 70 61 72 74 20 6f 66 20 61 6e 20 61   * .part of an a
5d70: 72 69 74 68 6d 65 74 69 63 20 73 65 71 75 65 6e  rithmetic sequen
5d80: 63 65 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  ce starting with
5d90: 20 74 68 65 20 6e 75 6d 62 65 72 20 53 54 41 52   the number STAR
5da0: 54 2c 0a 2b 20 2a 20 09 69 6e 63 72 65 6d 65 6e  T,.+ * .incremen
5db0: 74 69 6e 67 20 74 68 65 20 6e 65 78 74 20 65 6c  ting the next el
5dc0: 65 6d 65 6e 74 73 20 6f 66 20 53 54 45 50 2c 20  ements of STEP, 
5dd0: 61 6e 64 20 69 6e 63 6c 75 64 69 6e 67 0a 2b 20  and including.+ 
5de0: 2a 20 09 61 6c 6c 20 74 68 65 20 65 6c 65 6d 65  * .all the eleme
5df0: 6e 74 73 20 3c 20 45 4e 44 20 28 6f 72 20 3e 20  nts < END (or > 
5e00: 45 4e 44 20 66 6f 72 20 6e 65 67 61 74 69 76 65  END for negative
5e10: 20 73 74 65 70 73 29 2e 0a 2b 20 2a 20 09 54 68   steps)..+ * .Th
5e20: 65 20 63 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e  e command return
5e30: 73 20 61 20 73 70 65 63 69 61 6c 69 7a 65 64 20  s a specialized 
5e40: 6f 62 6a 65 63 74 20 61 62 6c 65 20 74 6f 20 72  object able to r
5e50: 65 70 72 65 73 65 6e 74 0a 2b 20 2a 20 09 74 68  epresent.+ * .th
5e60: 69 73 20 6c 69 73 74 73 20 69 6e 20 63 6f 6e 73  is lists in cons
5e70: 74 61 6e 74 20 73 70 61 63 65 20 28 74 68 65 20  tant space (the 
5e80: 41 72 69 74 68 6d 65 74 69 63 20 53 65 71 75 65  Arithmetic Seque
5e90: 6e 63 65 20 6f 62 6a 65 63 74 20 74 79 70 65 29  nce object type)
5ea0: 2e 0a 2b 20 2a 20 09 53 65 65 20 54 63 6c 5f 4c  ..+ * .See Tcl_L
5eb0: 69 73 74 4f 62 6a 2e 63 20 66 6f 72 20 6d 6f 72  istObj.c for mor
5ec0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e  e information on
5ed0: 20 74 68 69 73 20 6f 62 6a 65 63 74 2e 0a 2b 20   this object..+ 
5ee0: 2a 0a 2b 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b  *.+ * Results:.+
5ef0: 20 2a 09 41 20 73 74 61 6e 64 61 72 64 20 54 63   *.A standard Tc
5f00: 6c 20 72 65 73 75 6c 74 2e 0a 2b 20 2a 0a 2b 20  l result..+ *.+ 
5f10: 2a 20 53 69 64 65 20 65 66 66 65 63 74 73 3a 0a  * Side effects:.
5f20: 2b 20 2a 09 53 65 65 20 74 68 65 20 75 73 65 72  + *.See the user
5f30: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 2e 0a   documentation..
5f40: 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d  + *.+ *---------
5f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20  -------------.+ 
5f90: 2a 2f 0a 2b 0a 2b 69 6e 74 0a 2b 54 63 6c 5f 52  */.+.+int.+Tcl_R
5fa0: 61 6e 67 65 4f 62 6a 43 6d 64 28 20 63 6c 69 65  angeObjCmd( clie
5fb0: 6e 74 44 61 74 61 2c 20 69 6e 74 65 72 70 2c 20  ntData, interp, 
5fc0: 6f 62 6a 63 2c 20 6f 62 6a 76 20 29 0a 2b 20 20  objc, objv ).+  
5fd0: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 63 6c 69    ClientData cli
5fe0: 65 6e 74 44 61 74 61 3b 09 2f 2a 20 4e 6f 74 20  entData;./* Not 
5ff0: 75 73 65 64 2e 20 2a 2f 0a 2b 20 20 20 20 54 63  used. */.+    Tc
6000: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70  l_Interp *interp
6010: 3b 09 09 2f 2a 20 43 75 72 72 65 6e 74 20 69 6e  ;../* Current in
6020: 74 65 72 70 72 65 74 65 72 2e 20 2a 2f 0a 2b 20  terpreter. */.+ 
6030: 20 20 20 69 6e 74 20 6f 62 6a 63 3b 09 09 09 2f     int objc;.../
6040: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
6050: 6d 65 6e 74 73 2e 20 2a 2f 0a 2b 20 20 20 20 54  ments. */.+    T
6060: 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62  cl_Obj *CONST ob
6070: 6a 76 5b 5d 3b 09 2f 2a 20 41 72 67 75 6d 65 6e  jv[];./* Argumen
6080: 74 20 76 61 6c 75 65 73 2e 20 2a 2f 0a 2b 7b 0a  t values. */.+{.
6090: 2b 0a 2b 20 20 20 20 54 63 6c 5f 57 69 64 65 49  +.+    Tcl_WideI
60a0: 6e 74 20 73 74 61 72 74 20 3d 20 30 2c 20 65 6e  nt start = 0, en
60b0: 64 2c 20 73 74 65 70 20 3d 20 31 3b 0a 2b 20 20  d, step = 1;.+  
60c0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 61 72 69 74 68    Tcl_Obj *arith
60d0: 53 65 72 69 65 73 50 74 72 3b 0a 2b 20 20 20 20  SeriesPtr;.+    
60e0: 69 6e 74 20 69 73 57 69 64 65 20 3d 20 30 2c 74  int isWide = 0,t
60f0: 6d 70 2c 20 6c 65 6e 3b 0a 2b 0a 2b 20 20 20 20  mp, len;.+.+    
6100: 2f 2a 20 43 68 65 63 6b 20 70 61 72 61 6d 65 74  /* Check paramet
6110: 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 2b 0a 2b 20  er count */.+.+ 
6120: 20 20 20 69 66 20 28 6f 62 6a 63 20 3c 20 32 20     if (objc < 2 
6130: 7c 7c 20 6f 62 6a 63 20 3e 20 34 29 20 7b 0a 2b  || objc > 4) {.+
6140: 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67  .Tcl_WrongNumArg
6150: 73 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a  s(interp, 1, obj
6160: 76 2c 20 22 3f 73 74 61 72 74 3f 20 65 6e 64 20  v, "?start? end 
6170: 3f 73 74 65 70 3f 22 29 3b 0a 2b 09 72 65 74 75  ?step?");.+.retu
6180: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20  rn TCL_ERROR;.+ 
6190: 20 20 20 7d 0a 2b 0a 2b 20 20 20 2f 2a 0a 2b 20     }.+.+   /*.+ 
61a0: 20 20 20 2a 20 47 65 74 20 74 68 65 20 73 74 61     * Get the sta
61b0: 72 74 2c 20 65 6e 64 2c 20 73 74 65 70 20 70 61  rt, end, step pa
61c0: 72 61 6d 65 74 65 72 73 20 66 72 6f 6d 20 61 72  rameters from ar
61d0: 67 75 6d 65 6e 74 73 20 77 68 69 6c 65 20 64 65  guments while de
61e0: 74 65 72 6d 69 6e 69 6e 67 20 69 66 0a 2b 20 20  termining if.+  
61f0: 20 20 2a 20 77 65 20 6e 65 65 64 20 61 20 77 69    * we need a wi
6200: 64 65 20 72 61 6e 67 65 20 6f 72 20 6e 6f 74 2e  de range or not.
6210: 0a 2b 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20  .+    */.+.+    
6220: 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 46 72  if (Tcl_GetIntFr
6230: 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62  omObj(interp, ob
6240: 6a 76 5b 31 5d 2c 20 26 74 6d 70 29 20 3d 3d 20  jv[1], &tmp) == 
6250: 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 65 6e 64 20  TCL_OK) {.+.end 
6260: 3d 20 74 6d 70 3b 0a 2b 20 20 20 20 7d 20 65 6c  = tmp;.+    } el
6270: 73 65 20 69 66 20 28 54 63 6c 5f 47 65 74 57 69  se if (Tcl_GetWi
6280: 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74  deIntFromObj(int
6290: 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 65  erp, objv[1], &e
62a0: 6e 64 29 20 3d 3d 20 54 43 4c 5f 4f 4b 29 20 7b  nd) == TCL_OK) {
62b0: 0a 2b 09 69 73 57 69 64 65 20 3d 20 31 3b 0a 2b  .+.isWide = 1;.+
62c0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 72      } else {.+.r
62d0: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b  eturn TCL_ERROR;
62e0: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 69  .+    }.+.+    i
62f0: 66 20 28 6f 62 6a 63 20 3e 3d 20 33 29 20 7b 0a  f (objc >= 3) {.
6300: 2b 09 73 74 61 72 74 20 3d 20 65 6e 64 3b 0a 2b  +.start = end;.+
6310: 09 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 46  .if (Tcl_GetIntF
6320: 72 6f 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f  romObj(interp, o
6330: 62 6a 76 5b 32 5d 2c 20 26 74 6d 70 29 20 3d 3d  bjv[2], &tmp) ==
6340: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 20 20 20   TCL_OK) {.+.   
6350: 20 65 6e 64 20 3d 20 74 6d 70 3b 0a 2b 09 7d 20   end = tmp;.+.} 
6360: 65 6c 73 65 20 69 66 20 28 54 63 6c 5f 47 65 74  else if (Tcl_Get
6370: 57 69 64 65 49 6e 74 46 72 6f 6d 4f 62 6a 28 69  WideIntFromObj(i
6380: 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 32 5d 2c 20  nterp, objv[2], 
6390: 26 65 6e 64 29 20 3d 3d 20 54 43 4c 5f 4f 4b 29  &end) == TCL_OK)
63a0: 20 7b 0a 2b 09 20 20 20 20 69 73 57 69 64 65 20   {.+.    isWide 
63b0: 3d 20 31 3b 0a 2b 09 7d 20 65 6c 73 65 20 7b 0a  = 1;.+.} else {.
63c0: 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c  +.    return TCL
63d0: 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a 2b 09 69 66  _ERROR;.+.}.+.if
63e0: 20 28 6f 62 6a 63 20 3d 3d 20 34 29 20 7b 0a 2b   (objc == 4) {.+
63f0: 09 20 20 20 20 69 66 20 28 54 63 6c 5f 47 65 74  .    if (Tcl_Get
6400: 49 6e 74 46 72 6f 6d 4f 62 6a 28 69 6e 74 65 72  IntFromObj(inter
6410: 70 2c 20 6f 62 6a 76 5b 33 5d 2c 20 26 74 6d 70  p, objv[3], &tmp
6420: 29 20 3d 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b  ) == TCL_OK) {.+
6430: 09 09 73 74 65 70 20 3d 20 74 6d 70 3b 0a 2b 09  ..step = tmp;.+.
6440: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 54      } else if (T
6450: 63 6c 5f 47 65 74 57 69 64 65 49 6e 74 46 72 6f  cl_GetWideIntFro
6460: 6d 4f 62 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a  mObj(interp, obj
6470: 76 5b 33 5d 2c 20 26 73 74 65 70 29 20 3d 3d 20  v[3], &step) == 
6480: 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 09 69 73 57  TCL_OK) {.+..isW
6490: 69 64 65 20 3d 20 31 3b 0a 2b 09 20 20 20 20 7d  ide = 1;.+.    }
64a0: 20 65 6c 73 65 20 7b 0a 2b 09 09 72 65 74 75 72   else {.+..retur
64b0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 20  n TCL_ERROR;.+. 
64c0: 20 20 20 7d 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a     }.+.}.+    }.
64d0: 2b 09 0a 2b 20 20 20 20 2f 2a 20 43 72 65 61 74  +..+    /* Creat
64e0: 65 20 74 68 65 20 61 72 69 74 68 6d 65 74 69 63  e the arithmetic
64f0: 20 73 65 72 69 65 73 20 6f 62 6a 65 63 74 2c 20   series object, 
6500: 63 68 65 63 6b 69 6e 67 20 69 66 20 74 68 65 0a  checking if the.
6510: 2b 20 20 20 20 20 2a 20 70 61 72 61 6d 65 74 65  +     * paramete
6520: 72 73 20 61 72 65 20 69 6e 76 61 6c 69 64 2e 20  rs are invalid. 
6530: 2a 2f 0a 2b 0a 2b 20 20 20 20 69 66 20 28 69 73  */.+.+    if (is
6540: 57 69 64 65 29 20 7b 09 0a 2b 09 61 72 69 74 68  Wide) {..+.arith
6550: 53 65 72 69 65 73 50 74 72 20 3d 20 4e 65 77 57  SeriesPtr = NewW
6560: 69 64 65 41 72 69 74 68 53 65 72 69 65 73 4f 62  ideArithSeriesOb
6570: 6a 28 73 74 61 72 74 2c 20 65 6e 64 2c 20 73 74  j(start, end, st
6580: 65 70 29 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65  ep);.+    } else
6590: 20 7b 0a 2b 09 61 72 69 74 68 53 65 72 69 65 73   {.+.arithSeries
65a0: 50 74 72 20 3d 20 4e 65 77 41 72 69 74 68 53 65  Ptr = NewArithSe
65b0: 72 69 65 73 4f 62 6a 28 28 6c 6f 6e 67 29 20 73  riesObj((long) s
65c0: 74 61 72 74 2c 20 28 6c 6f 6e 67 29 20 65 6e 64  tart, (long) end
65d0: 2c 20 28 6c 6f 6e 67 29 20 73 74 65 70 29 3b 0a  , (long) step);.
65e0: 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69 66 20 28  +    }.+    if (
65f0: 61 72 69 74 68 53 65 72 69 65 73 50 74 72 20 3d  arithSeriesPtr =
6600: 3d 20 4e 55 4c 4c 29 20 7b 0a 2b 09 54 63 6c 5f  = NULL) {.+.Tcl_
6610: 41 70 70 65 6e 64 52 65 73 75 6c 74 28 69 6e 74  AppendResult(int
6620: 65 72 70 2c 0a 2b 09 09 22 49 6e 76 61 6c 69 64  erp,.+.."Invalid
6630: 20 28 69 6e 66 69 6e 69 74 65 3f 29 20 61 72 69   (infinite?) ari
6640: 74 68 6d 65 74 69 63 20 73 65 71 75 65 6e 63 65  thmetic sequence
6650: 20 73 70 65 63 69 66 69 65 64 22 2c 20 4e 55 4c   specified", NUL
6660: 4c 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c  L);.+.return TCL
6670: 5f 45 52 52 4f 52 3b 0a 2b 20 20 20 20 7d 0a 2b  _ERROR;.+    }.+
6680: 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 63 72 52 65  .+    Tcl_IncrRe
6690: 66 43 6f 75 6e 74 28 61 72 69 74 68 53 65 72 69  fCount(arithSeri
66a0: 65 73 50 74 72 29 3b 20 2f 2a 20 77 65 20 6d 61  esPtr); /* we ma
66b0: 79 20 75 73 65 20 44 65 63 72 52 65 66 43 6f 75  y use DecrRefCou
66c0: 6e 74 20 74 6f 20 66 72 65 65 20 69 74 20 2a 2f  nt to free it */
66d0: 0a 2b 20 20 20 20 54 63 6c 5f 4c 69 73 74 4f 62  .+    Tcl_ListOb
66e0: 6a 4c 65 6e 67 74 68 28 69 6e 74 65 72 70 2c 20  jLength(interp, 
66f0: 61 72 69 74 68 53 65 72 69 65 73 50 74 72 2c 20  arithSeriesPtr, 
6700: 26 6c 65 6e 29 3b 0a 2b 20 20 20 20 69 66 20 28  &len);.+    if (
6710: 6c 65 6e 20 3e 20 49 4e 54 5f 4d 41 58 2f 73 69  len > INT_MAX/si
6720: 7a 65 6f 66 28 54 63 6c 5f 4f 62 6a 20 2a 29 29  zeof(Tcl_Obj *))
6730: 20 7b 0a 2b 09 54 63 6c 5f 44 65 63 72 52 65 66   {.+.Tcl_DecrRef
6740: 43 6f 75 6e 74 28 61 72 69 74 68 53 65 72 69 65  Count(arithSerie
6750: 73 50 74 72 29 3b 0a 2b 09 54 63 6c 5f 41 70 70  sPtr);.+.Tcl_App
6760: 65 6e 64 52 65 73 75 6c 74 28 69 6e 74 65 72 70  endResult(interp
6770: 2c 20 22 6f 76 65 72 66 6c 6f 77 20 6f 66 20 6d  , "overflow of m
6780: 61 78 69 6d 75 6d 20 6c 69 73 74 20 6c 65 6e 67  aximum list leng
6790: 74 68 22 2c 20 4e 55 4c 4c 29 3b 0a 2b 09 72 65  th", NULL);.+.re
67a0: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  turn TCL_ERROR;.
67b0: 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 2f 2a  +    }.+.+    /*
67c0: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 65 77 20   Return the new 
67d0: 6f 62 6a 65 63 74 2e 20 2a 2f 0a 2b 0a 2b 20 20  object. */.+.+  
67e0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75    Tcl_SetObjResu
67f0: 6c 74 28 69 6e 74 65 72 70 2c 20 61 72 69 74 68  lt(interp, arith
6800: 53 65 72 69 65 73 50 74 72 29 3b 0a 2b 20 20 20  SeriesPtr);.+   
6810: 20 54 63 6c 5f 44 65 63 72 52 65 66 43 6f 75 6e   Tcl_DecrRefCoun
6820: 74 28 61 72 69 74 68 53 65 72 69 65 73 50 74 72  t(arithSeriesPtr
6830: 29 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 54  );.+    return T
6840: 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0a              CL_OK;.+}.+.