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;.+}.+.