Attachment "tip174.patch" to
ticket [1578137fff]
added by
pspjuth
2006-12-07 21:22:06.
0000: 64 69 66 66 20 2d 72 75 20 2e 2e 2f 74 63 6c 2d diff -ru ../tcl-
0010: 32 30 30 36 31 32 30 36 2f 67 65 6e 65 72 69 63 20061206/generic
0020: 2f 74 63 6c 42 61 73 69 63 2e 63 20 2e 2f 67 65 /tclBasic.c ./ge
0030: 6e 65 72 69 63 2f 74 63 6c 42 61 73 69 63 2e 63 neric/tclBasic.c
0040: 0a 2d 2d 2d 20 2e 2e 2f 74 63 6c 2d 32 30 30 36 .--- ../tcl-2006
0050: 31 32 30 36 2f 67 65 6e 65 72 69 63 2f 74 63 6c 1206/generic/tcl
0060: 42 61 73 69 63 2e 63 09 32 30 30 36 2d 31 32 2d Basic.c.2006-12-
0070: 30 36 20 30 38 3a 30 32 3a 35 36 2e 30 30 30 30 06 08:02:56.0000
0080: 30 30 30 30 30 20 2b 30 31 30 30 0a 2b 2b 2b 20 00000 +0100.+++
0090: 2e 2f 67 65 6e 65 72 69 63 2f 74 63 6c 42 61 73 ./generic/tclBas
00a0: 69 63 2e 63 09 32 30 30 36 2d 31 32 2d 30 37 20 ic.c.2006-12-07
00b0: 31 34 3a 33 32 3a 31 33 2e 30 30 30 30 30 30 30 14:32:13.0000000
00c0: 30 30 20 2b 30 31 30 30 0a 40 40 20 2d 32 37 31 00 +0100.@@ -271
00d0: 2c 33 30 20 2b 32 37 31 2c 33 30 20 40 40 0a 20 ,30 +271,30 @@.
00e0: 20 2a 2f 0a 20 0a 20 73 74 61 74 69 63 20 63 6f */. . static co
00f0: 6e 73 74 20 43 6d 64 49 6e 66 6f 20 6d 61 74 68 nst CmdInfo math
0100: 4f 70 43 6d 64 73 5b 5d 20 3d 20 7b 0a 2d 20 20 OpCmds[] = {.-
0110: 20 20 7b 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 { "::tcl::math
0120: 6f 70 3a 3a 7e 22 2c 20 20 54 63 6c 49 6e 76 65 op::~", TclInve
0130: 72 74 4f 70 43 6d 64 2c 20 54 63 6c 43 6f 6d 70 rtOpCmd, TclComp
0140: 69 6c 65 49 6e 76 65 72 74 4f 70 43 6d 64 2c 20 ileInvertOpCmd,
0150: 31 20 7d 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 1 },.- { "::t
0160: 63 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 21 22 2c 20 cl::mathop::!",
0170: 20 54 63 6c 4e 6f 74 4f 70 43 6d 64 2c 09 20 20 TclNotOpCmd,.
0180: 20 54 63 6c 43 6f 6d 70 69 6c 65 4e 6f 74 4f 70 TclCompileNotOp
0190: 43 6d 64 2c 09 20 20 31 20 7d 2c 0a 2d 20 20 20 Cmd,. 1 },.-
01a0: 20 7b 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f { "::tcl::matho
01b0: 70 3a 3a 2b 22 2c 20 20 54 63 6c 41 64 64 4f 70 p::+", TclAddOp
01c0: 43 6d 64 2c 09 20 20 20 54 63 6c 43 6f 6d 70 69 Cmd,. TclCompi
01d0: 6c 65 41 64 64 4f 70 43 6d 64 2c 09 20 20 31 20 leAddOpCmd,. 1
01e0: 7d 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 63 6c },.- { "::tcl
01f0: 3a 3a 6d 61 74 68 6f 70 3a 3a 2a 22 2c 20 20 54 ::mathop::*", T
0200: 63 6c 4d 75 6c 4f 70 43 6d 64 2c 09 20 20 20 54 clMulOpCmd,. T
0210: 63 6c 43 6f 6d 70 69 6c 65 4d 75 6c 4f 70 43 6d clCompileMulOpCm
0220: 64 2c 09 20 20 31 20 7d 2c 0a 2d 20 20 20 20 7b d,. 1 },.- {
0230: 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f 70 3a "::tcl::mathop:
0240: 3a 26 22 2c 20 20 54 63 6c 41 6e 64 4f 70 43 6d :&", TclAndOpCm
0250: 64 2c 09 20 20 20 54 63 6c 43 6f 6d 70 69 6c 65 d,. TclCompile
0260: 41 6e 64 4f 70 43 6d 64 2c 09 20 20 31 20 7d 2c AndOpCmd,. 1 },
0270: 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 63 6c 3a 3a .- { "::tcl::
0280: 6d 61 74 68 6f 70 3a 3a 7c 22 2c 20 20 54 63 6c mathop::|", Tcl
0290: 4f 72 4f 70 43 6d 64 2c 09 20 20 20 54 63 6c 43 OrOpCmd,. TclC
02a0: 6f 6d 70 69 6c 65 4f 72 4f 70 43 6d 64 2c 09 20 ompileOrOpCmd,.
02b0: 20 31 20 7d 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 1 },.- { "::
02c0: 74 63 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 5e 22 2c tcl::mathop::^",
02d0: 20 20 54 63 6c 58 6f 72 4f 70 43 6d 64 2c 09 20 TclXorOpCmd,.
02e0: 20 20 54 63 6c 43 6f 6d 70 69 6c 65 58 6f 72 4f TclCompileXorO
02f0: 70 43 6d 64 2c 09 20 20 31 20 7d 2c 0a 2d 20 20 pCmd,. 1 },.-
0300: 20 20 7b 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 { "::tcl::math
0310: 6f 70 3a 3a 2a 2a 22 2c 20 54 63 6c 50 6f 77 4f op::**", TclPowO
0320: 70 43 6d 64 2c 09 20 20 20 54 63 6c 43 6f 6d 70 pCmd,. TclComp
0330: 69 6c 65 50 6f 77 4f 70 43 6d 64 2c 09 20 20 31 ilePowOpCmd,. 1
0340: 20 7d 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 63 },.- { "::tc
0350: 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 3c 3c 22 2c 20 l::mathop::<<",
0360: 54 63 6c 4c 73 68 69 66 74 4f 70 43 6d 64 2c 20 TclLshiftOpCmd,
0370: 54 63 6c 43 6f 6d 70 69 6c 65 4c 73 68 69 66 74 TclCompileLshift
0380: 4f 70 43 6d 64 2c 20 31 20 7d 2c 0a 2d 20 20 20 OpCmd, 1 },.-
0390: 20 7b 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f { "::tcl::matho
03a0: 70 3a 3a 3e 3e 22 2c 20 54 63 6c 52 73 68 69 66 p::>>", TclRshif
03b0: 74 4f 70 43 6d 64 2c 20 54 63 6c 43 6f 6d 70 69 tOpCmd, TclCompi
03c0: 6c 65 52 73 68 69 66 74 4f 70 43 6d 64 2c 20 31 leRshiftOpCmd, 1
03d0: 20 7d 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 63 },.- { "::tc
03e0: 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 25 22 2c 20 20 l::mathop::%",
03f0: 54 63 6c 4d 6f 64 4f 70 43 6d 64 2c 09 20 20 20 TclModOpCmd,.
0400: 54 63 6c 43 6f 6d 70 69 6c 65 4d 6f 64 4f 70 43 TclCompileModOpC
0410: 6d 64 2c 09 20 20 31 20 7d 2c 0a 2d 20 20 20 20 md,. 1 },.-
0420: 7b 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f 70 { "::tcl::mathop
0430: 3a 3a 21 3d 22 2c 20 54 63 6c 4e 65 71 4f 70 43 ::!=", TclNeqOpC
0440: 6d 64 2c 09 20 20 20 54 63 6c 43 6f 6d 70 69 6c md,. TclCompil
0450: 65 4e 65 71 4f 70 43 6d 64 2c 09 20 20 31 20 7d eNeqOpCmd,. 1 }
0460: 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 63 6c 3a ,.- { "::tcl:
0470: 3a 6d 61 74 68 6f 70 3a 3a 6e 65 22 2c 20 54 63 :mathop::ne", Tc
0480: 6c 53 74 72 6e 65 71 4f 70 43 6d 64 2c 20 54 63 lStrneqOpCmd, Tc
0490: 6c 43 6f 6d 70 69 6c 65 53 74 72 6e 65 71 4f 70 lCompileStrneqOp
04a0: 43 6d 64 2c 20 31 20 7d 2c 0a 2d 20 20 20 20 7b Cmd, 1 },.- {
04b0: 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f 70 3a "::tcl::mathop:
04c0: 3a 69 6e 22 2c 20 54 63 6c 49 6e 4f 70 43 6d 64 :in", TclInOpCmd
04d0: 2c 09 20 20 20 54 63 6c 43 6f 6d 70 69 6c 65 49 ,. TclCompileI
04e0: 6e 4f 70 43 6d 64 2c 09 20 20 31 20 7d 2c 0a 2d nOpCmd,. 1 },.-
04f0: 20 20 20 20 7b 20 22 3a 3a 74 63 6c 3a 3a 6d 61 { "::tcl::ma
0500: 74 68 6f 70 3a 3a 6e 69 22 2c 20 54 63 6c 4e 69 thop::ni", TclNi
0510: 4f 70 43 6d 64 2c 09 20 20 20 54 63 6c 43 6f 6d OpCmd,. TclCom
0520: 70 69 6c 65 4e 69 4f 70 43 6d 64 2c 09 20 20 31 pileNiOpCmd,. 1
0530: 20 7d 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 63 },.- { "::tc
0540: 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 2d 22 2c 20 20 l::mathop::-",
0550: 54 63 6c 4d 69 6e 75 73 4f 70 43 6d 64 2c 20 20 TclMinusOpCmd,
0560: 54 63 6c 43 6f 6d 70 69 6c 65 4d 69 6e 75 73 4f TclCompileMinusO
0570: 70 43 6d 64 2c 20 20 31 20 7d 2c 0a 2d 20 20 20 pCmd, 1 },.-
0580: 20 7b 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f { "::tcl::matho
0590: 70 3a 3a 2f 22 2c 20 20 54 63 6c 44 69 76 4f 70 p::/", TclDivOp
05a0: 43 6d 64 2c 09 20 20 20 54 63 6c 43 6f 6d 70 69 Cmd,. TclCompi
05b0: 6c 65 44 69 76 4f 70 43 6d 64 2c 09 20 20 31 20 leDivOpCmd,. 1
05c0: 7d 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 63 6c },.- { "::tcl
05d0: 3a 3a 6d 61 74 68 6f 70 3a 3a 3c 22 2c 20 20 54 ::mathop::<", T
05e0: 63 6c 4c 65 73 73 4f 70 43 6d 64 2c 20 20 20 54 clLessOpCmd, T
05f0: 63 6c 43 6f 6d 70 69 6c 65 4c 65 73 73 4f 70 43 clCompileLessOpC
0600: 6d 64 2c 09 20 20 31 20 7d 2c 0a 2d 20 20 20 20 md,. 1 },.-
0610: 7b 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f 70 { "::tcl::mathop
0620: 3a 3a 3c 3d 22 2c 20 54 63 6c 4c 65 71 4f 70 43 ::<=", TclLeqOpC
0630: 6d 64 2c 09 20 20 20 54 63 6c 43 6f 6d 70 69 6c md,. TclCompil
0640: 65 4c 65 71 4f 70 43 6d 64 2c 09 20 20 31 20 7d eLeqOpCmd,. 1 }
0650: 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 63 6c 3a ,.- { "::tcl:
0660: 3a 6d 61 74 68 6f 70 3a 3a 3e 22 2c 20 20 54 63 :mathop::>", Tc
0670: 6c 47 72 65 61 74 65 72 4f 70 43 6d 64 2c 54 63 lGreaterOpCmd,Tc
0680: 6c 43 6f 6d 70 69 6c 65 47 72 65 61 74 65 72 4f lCompileGreaterO
0690: 70 43 6d 64 2c 31 20 7d 2c 0a 2d 20 20 20 20 7b pCmd,1 },.- {
06a0: 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f 70 3a "::tcl::mathop:
06b0: 3a 3e 3d 22 2c 20 54 63 6c 47 65 71 4f 70 43 6d :>=", TclGeqOpCm
06c0: 64 2c 09 20 20 20 54 63 6c 43 6f 6d 70 69 6c 65 d,. TclCompile
06d0: 47 65 71 4f 70 43 6d 64 2c 09 20 20 31 20 7d 2c GeqOpCmd,. 1 },
06e0: 0a 2d 20 20 20 20 7b 20 22 3a 3a 74 63 6c 3a 3a .- { "::tcl::
06f0: 6d 61 74 68 6f 70 3a 3a 3d 3d 22 2c 20 54 63 6c mathop::==", Tcl
0700: 45 71 4f 70 43 6d 64 2c 09 20 20 20 54 63 6c 43 EqOpCmd,. TclC
0710: 6f 6d 70 69 6c 65 45 71 4f 70 43 6d 64 2c 09 20 ompileEqOpCmd,.
0720: 20 31 20 7d 2c 0a 2d 20 20 20 20 7b 20 22 3a 3a 1 },.- { "::
0730: 74 63 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 65 71 22 tcl::mathop::eq"
0740: 2c 20 54 63 6c 53 74 72 65 71 4f 70 43 6d 64 2c , TclStreqOpCmd,
0750: 20 20 54 63 6c 43 6f 6d 70 69 6c 65 53 74 72 65 TclCompileStre
0760: 71 4f 70 43 6d 64 2c 20 20 31 20 7d 2c 0a 2d 20 qOpCmd, 1 },.-
0770: 20 20 20 7b 20 4e 55 4c 4c 2c 09 09 20 20 20 4e { NULL,.. N
0780: 55 4c 4c 2c 09 20 20 20 4e 55 4c 4c 2c 09 09 20 ULL,. NULL,..
0790: 20 30 20 7d 0a 2b 20 20 20 20 7b 20 22 7e 22 2c 0 }.+ { "~",
07a0: 20 20 54 63 6c 49 6e 76 65 72 74 4f 70 43 6d 64 TclInvertOpCmd
07b0: 2c 20 20 54 63 6c 43 6f 6d 70 69 6c 65 49 6e 76 , TclCompileInv
07c0: 65 72 74 4f 70 43 6d 64 2c 20 20 20 31 20 7d 2c ertOpCmd, 1 },
07d0: 0a 2b 20 20 20 20 7b 20 22 21 22 2c 20 20 54 63 .+ { "!", Tc
07e0: 6c 4e 6f 74 4f 70 43 6d 64 2c 20 20 20 20 20 54 lNotOpCmd, T
07f0: 63 6c 43 6f 6d 70 69 6c 65 4e 6f 74 4f 70 43 6d clCompileNotOpCm
0800: 64 2c 20 20 20 20 20 20 31 20 7d 2c 0a 2b 20 20 d, 1 },.+
0810: 20 20 7b 20 22 2b 22 2c 20 20 54 63 6c 41 64 64 { "+", TclAdd
0820: 4f 70 43 6d 64 2c 20 20 20 20 20 54 63 6c 43 6f OpCmd, TclCo
0830: 6d 70 69 6c 65 41 64 64 4f 70 43 6d 64 2c 20 20 mpileAddOpCmd,
0840: 20 20 20 20 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 1 },.+ {
0850: 22 2a 22 2c 20 20 54 63 6c 4d 75 6c 4f 70 43 6d "*", TclMulOpCm
0860: 64 2c 20 20 20 20 20 54 63 6c 43 6f 6d 70 69 6c d, TclCompil
0870: 65 4d 75 6c 4f 70 43 6d 64 2c 20 20 20 20 20 20 eMulOpCmd,
0880: 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 22 26 22 2c 1 },.+ { "&",
0890: 20 20 54 63 6c 41 6e 64 4f 70 43 6d 64 2c 20 20 TclAndOpCmd,
08a0: 20 20 20 54 63 6c 43 6f 6d 70 69 6c 65 41 6e 64 TclCompileAnd
08b0: 4f 70 43 6d 64 2c 20 20 20 20 20 20 31 20 7d 2c OpCmd, 1 },
08c0: 0a 2b 20 20 20 20 7b 20 22 7c 22 2c 20 20 54 63 .+ { "|", Tc
08d0: 6c 4f 72 4f 70 43 6d 64 2c 09 20 20 20 20 20 54 lOrOpCmd,. T
08e0: 63 6c 43 6f 6d 70 69 6c 65 4f 72 4f 70 43 6d 64 clCompileOrOpCmd
08f0: 2c 09 20 20 20 20 20 20 31 20 7d 2c 0a 2b 20 20 ,. 1 },.+
0900: 20 20 7b 20 22 5e 22 2c 20 20 54 63 6c 58 6f 72 { "^", TclXor
0910: 4f 70 43 6d 64 2c 20 20 20 20 20 54 63 6c 43 6f OpCmd, TclCo
0920: 6d 70 69 6c 65 58 6f 72 4f 70 43 6d 64 2c 20 20 mpileXorOpCmd,
0930: 20 20 20 20 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 1 },.+ {
0940: 22 2a 2a 22 2c 20 54 63 6c 50 6f 77 4f 70 43 6d "**", TclPowOpCm
0950: 64 2c 20 20 20 20 20 54 63 6c 43 6f 6d 70 69 6c d, TclCompil
0960: 65 50 6f 77 4f 70 43 6d 64 2c 20 20 20 20 20 20 ePowOpCmd,
0970: 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 22 3c 3c 22 1 },.+ { "<<"
0980: 2c 20 54 63 6c 4c 73 68 69 66 74 4f 70 43 6d 64 , TclLshiftOpCmd
0990: 2c 20 20 54 63 6c 43 6f 6d 70 69 6c 65 4c 73 68 , TclCompileLsh
09a0: 69 66 74 4f 70 43 6d 64 2c 20 20 20 31 20 7d 2c iftOpCmd, 1 },
09b0: 0a 2b 20 20 20 20 7b 20 22 3e 3e 22 2c 20 54 63 .+ { ">>", Tc
09c0: 6c 52 73 68 69 66 74 4f 70 43 6d 64 2c 20 20 54 lRshiftOpCmd, T
09d0: 63 6c 43 6f 6d 70 69 6c 65 52 73 68 69 66 74 4f clCompileRshiftO
09e0: 70 43 6d 64 2c 20 20 20 31 20 7d 2c 0a 2b 20 20 pCmd, 1 },.+
09f0: 20 20 7b 20 22 25 22 2c 20 20 54 63 6c 4d 6f 64 { "%", TclMod
0a00: 4f 70 43 6d 64 2c 20 20 20 20 20 54 63 6c 43 6f OpCmd, TclCo
0a10: 6d 70 69 6c 65 4d 6f 64 4f 70 43 6d 64 2c 20 20 mpileModOpCmd,
0a20: 20 20 20 20 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 1 },.+ {
0a30: 22 21 3d 22 2c 20 54 63 6c 4e 65 71 4f 70 43 6d "!=", TclNeqOpCm
0a40: 64 2c 20 20 20 20 20 54 63 6c 43 6f 6d 70 69 6c d, TclCompil
0a50: 65 4e 65 71 4f 70 43 6d 64 2c 20 20 20 20 20 20 eNeqOpCmd,
0a60: 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 22 6e 65 22 1 },.+ { "ne"
0a70: 2c 20 54 63 6c 53 74 72 6e 65 71 4f 70 43 6d 64 , TclStrneqOpCmd
0a80: 2c 20 20 54 63 6c 43 6f 6d 70 69 6c 65 53 74 72 , TclCompileStr
0a90: 6e 65 71 4f 70 43 6d 64 2c 20 20 20 31 20 7d 2c neqOpCmd, 1 },
0aa0: 0a 2b 20 20 20 20 7b 20 22 69 6e 22 2c 20 54 63 .+ { "in", Tc
0ab0: 6c 49 6e 4f 70 43 6d 64 2c 09 20 20 20 20 20 54 lInOpCmd,. T
0ac0: 63 6c 43 6f 6d 70 69 6c 65 49 6e 4f 70 43 6d 64 clCompileInOpCmd
0ad0: 2c 09 20 20 20 20 20 20 31 20 7d 2c 0a 2b 20 20 ,. 1 },.+
0ae0: 20 20 7b 20 22 6e 69 22 2c 20 54 63 6c 4e 69 4f { "ni", TclNiO
0af0: 70 43 6d 64 2c 09 20 20 20 20 20 54 63 6c 43 6f pCmd,. TclCo
0b00: 6d 70 69 6c 65 4e 69 4f 70 43 6d 64 2c 09 20 20 mpileNiOpCmd,.
0b10: 20 20 20 20 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 1 },.+ {
0b20: 22 2d 22 2c 20 20 54 63 6c 4d 69 6e 75 73 4f 70 "-", TclMinusOp
0b30: 43 6d 64 2c 20 20 20 54 63 6c 43 6f 6d 70 69 6c Cmd, TclCompil
0b40: 65 4d 69 6e 75 73 4f 70 43 6d 64 2c 20 20 20 20 eMinusOpCmd,
0b50: 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 22 2f 22 2c 1 },.+ { "/",
0b60: 20 20 54 63 6c 44 69 76 4f 70 43 6d 64 2c 20 20 TclDivOpCmd,
0b70: 20 20 20 54 63 6c 43 6f 6d 70 69 6c 65 44 69 76 TclCompileDiv
0b80: 4f 70 43 6d 64 2c 20 20 20 20 20 20 31 20 7d 2c OpCmd, 1 },
0b90: 0a 2b 20 20 20 20 7b 20 22 3c 22 2c 20 20 54 63 .+ { "<", Tc
0ba0: 6c 4c 65 73 73 4f 70 43 6d 64 2c 20 20 20 20 54 lLessOpCmd, T
0bb0: 63 6c 43 6f 6d 70 69 6c 65 4c 65 73 73 4f 70 43 clCompileLessOpC
0bc0: 6d 64 2c 20 20 20 20 20 31 20 7d 2c 0a 2b 20 20 md, 1 },.+
0bd0: 20 20 7b 20 22 3c 3d 22 2c 20 54 63 6c 4c 65 71 { "<=", TclLeq
0be0: 4f 70 43 6d 64 2c 20 20 20 20 20 54 63 6c 43 6f OpCmd, TclCo
0bf0: 6d 70 69 6c 65 4c 65 71 4f 70 43 6d 64 2c 20 20 mpileLeqOpCmd,
0c00: 20 20 20 20 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 1 },.+ {
0c10: 22 3e 22 2c 20 20 54 63 6c 47 72 65 61 74 65 72 ">", TclGreater
0c20: 4f 70 43 6d 64 2c 20 54 63 6c 43 6f 6d 70 69 6c OpCmd, TclCompil
0c30: 65 47 72 65 61 74 65 72 4f 70 43 6d 64 2c 20 20 eGreaterOpCmd,
0c40: 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 22 3e 3d 22 1 },.+ { ">="
0c50: 2c 20 54 63 6c 47 65 71 4f 70 43 6d 64 2c 20 20 , TclGeqOpCmd,
0c60: 20 20 20 54 63 6c 43 6f 6d 70 69 6c 65 47 65 71 TclCompileGeq
0c70: 4f 70 43 6d 64 2c 20 20 20 20 20 20 31 20 7d 2c OpCmd, 1 },
0c80: 0a 2b 20 20 20 20 7b 20 22 3d 3d 22 2c 20 54 63 .+ { "==", Tc
0c90: 6c 45 71 4f 70 43 6d 64 2c 09 20 20 20 20 20 54 lEqOpCmd,. T
0ca0: 63 6c 43 6f 6d 70 69 6c 65 45 71 4f 70 43 6d 64 clCompileEqOpCmd
0cb0: 2c 09 20 20 20 20 20 20 31 20 7d 2c 0a 2b 20 20 ,. 1 },.+
0cc0: 20 20 7b 20 22 65 71 22 2c 20 54 63 6c 53 74 72 { "eq", TclStr
0cd0: 65 71 4f 70 43 6d 64 2c 20 20 20 54 63 6c 43 6f eqOpCmd, TclCo
0ce0: 6d 70 69 6c 65 53 74 72 65 71 4f 70 43 6d 64 2c mpileStreqOpCmd,
0cf0: 20 20 20 20 31 20 7d 2c 0a 2b 20 20 20 20 7b 20 1 },.+ {
0d00: 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 09 20 20 20 20 NULL, NULL,.
0d10: 20 4e 55 4c 4c 2c 09 09 20 20 20 20 20 20 30 20 NULL,.. 0
0d20: 7d 0a 20 7d 3b 0a 20 0c 0a 20 2f 2a 0a 40 40 20 }. };. .. /*.@@
0d30: 2d 33 32 34 2c 37 20 2b 33 32 34 2c 37 20 40 40 -324,7 +324,7 @@
0d40: 0a 20 20 20 20 20 63 6f 6e 73 74 20 42 75 69 6c . const Buil
0d50: 74 69 6e 46 75 6e 63 44 65 66 20 2a 62 75 69 6c tinFuncDef *buil
0d60: 74 69 6e 46 75 6e 63 50 74 72 3b 0a 20 20 20 20 tinFuncPtr;.
0d70: 20 63 6f 6e 73 74 20 43 6d 64 49 6e 66 6f 20 2a const CmdInfo *
0d80: 63 6d 64 49 6e 66 6f 50 74 72 3b 0a 20 20 20 20 cmdInfoPtr;.
0d90: 20 63 6f 6e 73 74 20 43 6d 64 49 6e 66 6f 32 20 const CmdInfo2
0da0: 2a 63 6d 64 49 6e 66 6f 32 50 74 72 3b 0a 2d 20 *cmdInfo2Ptr;.-
0db0: 20 20 20 54 63 6c 5f 4e 61 6d 65 73 70 61 63 65 Tcl_Namespace
0dc0: 20 2a 6d 61 74 68 66 75 6e 63 4e 53 50 74 72 3b *mathfuncNSPtr;
0dd0: 0a 2b 20 20 20 20 54 63 6c 5f 4e 61 6d 65 73 70 .+ Tcl_Namesp
0de0: 61 63 65 20 2a 6d 61 74 68 66 75 6e 63 4e 53 50 ace *mathfuncNSP
0df0: 74 72 2c 20 2a 6d 61 74 68 6f 70 4e 53 50 74 72 tr, *mathopNSPtr
0e00: 3b 0a 20 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 ;. union {.
0e10: 09 63 68 61 72 20 63 5b 73 69 7a 65 6f 66 28 73 .char c[sizeof(s
0e20: 68 6f 72 74 29 5d 3b 0a 20 09 73 68 6f 72 74 20 hort)];. .short
0e30: 73 3b 0a 40 40 20 2d 36 32 36 2c 31 37 20 2b 36 s;.@@ -626,17 +6
0e40: 32 36 2c 32 32 20 40 40 0a 20 20 20 20 20 20 2a 26,22 @@. *
0e50: 20 52 65 67 69 73 74 65 72 20 74 68 65 20 6d 61 Register the ma
0e60: 74 68 65 6d 61 74 69 63 61 6c 20 22 6f 70 65 72 thematical "oper
0e70: 61 74 6f 72 22 20 63 6f 6d 6d 61 6e 64 73 2e 20 ator" commands.
0e80: 5b 54 49 50 20 23 31 37 34 5d 0a 20 20 20 20 20 [TIP #174].
0e90: 20 2a 2f 0a 20 0a 2d 20 20 20 20 69 66 20 28 54 */. .- if (T
0ea0: 63 6c 5f 43 72 65 61 74 65 4e 61 6d 65 73 70 61 cl_CreateNamespa
0eb0: 63 65 28 69 6e 74 65 72 70 2c 20 22 3a 3a 74 63 ce(interp, "::tc
0ec0: 6c 3a 3a 6d 61 74 68 6f 70 22 2c 20 4e 55 4c 4c l::mathop", NULL
0ed0: 2c 20 4e 55 4c 4c 29 20 3d 3d 20 4e 55 4c 4c 29 , NULL) == NULL)
0ee0: 20 7b 0a 2b 20 20 20 20 6d 61 74 68 6f 70 4e 53 {.+ mathopNS
0ef0: 50 74 72 20 3d 20 54 63 6c 5f 43 72 65 61 74 65 Ptr = Tcl_Create
0f00: 4e 61 6d 65 73 70 61 63 65 28 69 6e 74 65 72 70 Namespace(interp
0f10: 2c 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f 70 , "::tcl::mathop
0f20: 22 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a ", NULL, NULL);.
0f30: 2b 23 64 65 66 69 6e 65 20 4d 41 54 48 5f 4f 50 +#define MATH_OP
0f40: 5f 50 52 45 46 49 58 5f 4c 45 4e 20 31 35 20 2f _PREFIX_LEN 15 /
0f50: 2a 20 3d 3d 20 73 74 72 6c 65 6e 28 22 3a 3a 74 * == strlen("::t
0f60: 63 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 22 29 20 2a cl::mathop::") *
0f70: 2f 0a 2b 20 20 20 20 69 66 20 28 6d 61 74 68 6f /.+ if (matho
0f80: 70 4e 53 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 pNSPtr == NULL)
0f90: 7b 0a 20 09 54 63 6c 5f 50 61 6e 69 63 28 22 63 {. .Tcl_Panic("c
0fa0: 61 6e 27 74 20 63 72 65 61 74 65 20 6d 61 74 68 an't create math
0fb0: 20 6f 70 65 72 61 74 6f 72 20 6e 61 6d 65 73 70 operator namesp
0fc0: 61 63 65 22 29 3b 0a 20 20 20 20 20 7d 0a 2b 20 ace");. }.+
0fd0: 20 20 20 73 74 72 63 70 79 28 6d 61 74 68 46 75 strcpy(mathFu
0fe0: 6e 63 4e 61 6d 65 2c 20 22 3a 3a 74 63 6c 3a 3a ncName, "::tcl::
0ff0: 6d 61 74 68 6f 70 3a 3a 22 29 3b 0a 20 20 20 20 mathop::");.
1000: 20 66 6f 72 20 28 63 6d 64 49 6e 66 6f 50 74 72 for (cmdInfoPtr
1010: 3d 6d 61 74 68 4f 70 43 6d 64 73 20 3b 20 63 6d =mathOpCmds ; cm
1020: 64 49 6e 66 6f 50 74 72 2d 3e 6e 61 6d 65 21 3d dInfoPtr->name!=
1030: 4e 55 4c 4c 20 3b 20 63 6d 64 49 6e 66 6f 50 74 NULL ; cmdInfoPt
1040: 72 2b 2b 29 20 7b 0a 2d 09 63 6d 64 50 74 72 20 r++) {.-.cmdPtr
1050: 3d 20 28 43 6f 6d 6d 61 6e 64 20 2a 29 20 54 63 = (Command *) Tc
1060: 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f 6d 6d 61 l_CreateObjComma
1070: 6e 64 28 69 6e 74 65 72 70 2c 20 63 6d 64 49 6e nd(interp, cmdIn
1080: 66 6f 50 74 72 2d 3e 6e 61 6d 65 2c 0a 2b 09 73 foPtr->name,.+.s
1090: 74 72 63 70 79 28 6d 61 74 68 46 75 6e 63 4e 61 trcpy(mathFuncNa
10a0: 6d 65 20 2b 20 4d 41 54 48 5f 4f 50 5f 50 52 45 me + MATH_OP_PRE
10b0: 46 49 58 5f 4c 45 4e 2c 20 63 6d 64 49 6e 66 6f FIX_LEN, cmdInfo
10c0: 50 74 72 2d 3e 6e 61 6d 65 29 3b 0a 2b 09 63 6d Ptr->name);.+.cm
10d0: 64 50 74 72 20 3d 20 28 43 6f 6d 6d 61 6e 64 20 dPtr = (Command
10e0: 2a 29 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a *) Tcl_CreateObj
10f0: 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 Command(interp,
1100: 6d 61 74 68 46 75 6e 63 4e 61 6d 65 2c 0a 20 09 mathFuncName,. .
1110: 09 63 6d 64 49 6e 66 6f 50 74 72 2d 3e 6f 62 6a .cmdInfoPtr->obj
1120: 50 72 6f 63 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c Proc, NULL, NULL
1130: 29 3b 0a 20 09 69 66 20 28 63 6d 64 50 74 72 20 );. .if (cmdPtr
1140: 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 20 09 20 20 20 == NULL) {. .
1150: 20 54 63 6c 5f 50 61 6e 69 63 28 22 66 61 69 6c Tcl_Panic("fail
1160: 65 64 20 74 6f 20 63 72 65 61 74 65 20 6d 61 74 ed to create mat
1170: 68 20 6f 70 65 72 61 74 6f 72 20 25 73 22 2c 20 h operator %s",
1180: 63 6d 64 49 6e 66 6f 50 74 72 2d 3e 6e 61 6d 65 cmdInfoPtr->name
1190: 29 3b 0a 20 09 7d 20 65 6c 73 65 20 69 66 20 28 );. .} else if (
11a0: 63 6d 64 49 6e 66 6f 50 74 72 2d 3e 63 6f 6d 70 cmdInfoPtr->comp
11b0: 69 6c 65 50 72 6f 63 20 21 3d 20 4e 55 4c 4c 29 ileProc != NULL)
11c0: 20 7b 0a 20 09 20 20 20 20 63 6d 64 50 74 72 2d {. . cmdPtr-
11d0: 3e 63 6f 6d 70 69 6c 65 50 72 6f 63 20 3d 20 63 >compileProc = c
11e0: 6d 64 49 6e 66 6f 50 74 72 2d 3e 63 6f 6d 70 69 mdInfoPtr->compi
11f0: 6c 65 50 72 6f 63 3b 0a 20 09 7d 0a 2b 09 54 63 leProc;. .}.+.Tc
1200: 6c 5f 45 78 70 6f 72 74 28 69 6e 74 65 72 70 2c l_Export(interp,
1210: 20 6d 61 74 68 6f 70 4e 53 50 74 72 2c 20 63 6d mathopNSPtr, cm
1220: 64 49 6e 66 6f 50 74 72 2d 3e 6e 61 6d 65 2c 20 dInfoPtr->name,
1230: 30 29 3b 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 0);. }. .
1240: 20 20 2f 2a 0a 64 69 66 66 20 2d 72 75 20 2e 2e /*.diff -ru ..
1250: 2f 74 63 6c 2d 32 30 30 36 31 32 30 36 2f 67 65 /tcl-20061206/ge
1260: 6e 65 72 69 63 2f 74 63 6c 43 6d 64 4d 5a 2e 63 neric/tclCmdMZ.c
1270: 20 2e 2f 67 65 6e 65 72 69 63 2f 74 63 6c 43 6d ./generic/tclCm
1280: 64 4d 5a 2e 63 0a 2d 2d 2d 20 2e 2e 2f 74 63 6c dMZ.c.--- ../tcl
1290: 2d 32 30 30 36 31 32 30 36 2f 67 65 6e 65 72 69 -20061206/generi
12a0: 63 2f 74 63 6c 43 6d 64 4d 5a 2e 63 09 32 30 30 c/tclCmdMZ.c.200
12b0: 36 2d 31 31 2d 32 39 20 30 38 3a 30 32 3a 34 39 6-11-29 08:02:49
12c0: 2e 30 30 30 30 30 30 30 30 30 20 2b 30 31 30 30 .000000000 +0100
12d0: 0a 2b 2b 2b 20 2e 2f 67 65 6e 65 72 69 63 2f 74 .+++ ./generic/t
12e0: 63 6c 43 6d 64 4d 5a 2e 63 09 32 30 30 36 2d 31 clCmdMZ.c.2006-1
12f0: 32 2d 30 37 20 31 34 3a 33 32 3a 35 38 2e 30 30 2-07 14:32:58.00
1300: 30 30 30 30 30 30 30 20 2b 30 31 30 30 0a 40 40 0000000 +0100.@@
1310: 20 2d 31 31 36 36 2c 39 20 2b 31 31 36 36 2c 37 -1166,9 +1166,7
1320: 20 40 40 0a 20 09 20 2a 20 49 4e 53 54 5f 45 51 @@. . * INST_EQ
1330: 2f 49 4e 53 54 5f 4e 45 51 2f 49 4e 53 54 5f 4c /INST_NEQ/INST_L
1340: 54 2f 2e 2e 2e 29 2e 0a 20 09 20 2a 2f 0a 20 0a T/...).. . */. .
1350: 2d 09 69 6e 74 20 69 2c 20 6d 61 74 63 68 2c 20 -.int i, match,
1360: 6c 65 6e 67 74 68 2c 20 6e 6f 63 61 73 65 20 3d length, nocase =
1370: 20 30 2c 20 72 65 71 6c 65 6e 67 74 68 20 3d 20 0, reqlength =
1380: 2d 31 3b 0a 2d 09 74 79 70 65 64 65 66 20 69 6e -1;.-.typedef in
1390: 74 20 28 2a 73 74 72 43 6d 70 46 6e 5f 74 29 28 t (*strCmpFn_t)(
13a0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63 6f const char *, co
13b0: 6e 73 74 20 63 68 61 72 20 2a 2c 20 75 6e 73 69 nst char *, unsi
13c0: 67 6e 65 64 20 69 6e 74 29 3b 0a 2d 09 73 74 72 gned int);.-.str
13d0: 43 6d 70 46 6e 5f 74 20 73 74 72 43 6d 70 46 6e CmpFn_t strCmpFn
13e0: 3b 0a 2b 09 69 6e 74 20 69 2c 20 6d 61 74 63 68 ;.+.int i, match
13f0: 2c 20 6e 6f 63 61 73 65 20 3d 20 30 2c 20 72 65 , nocase = 0, re
1400: 71 6c 65 6e 67 74 68 20 3d 20 2d 31 3b 0a 20 0a qlength = -1;. .
1410: 20 09 69 66 20 28 6f 62 6a 63 20 3c 20 34 20 7c .if (objc < 4 |
1420: 7c 20 6f 62 6a 63 20 3e 20 37 29 20 7b 0a 20 09 | objc > 7) {. .
1430: 73 74 72 5f 63 6d 70 5f 61 72 67 73 3a 0a 40 40 str_cmp_args:.@@
1440: 20 2d 31 32 30 35 2c 38 37 20 2b 31 32 30 33 2c -1205,87 +1203,
1450: 31 33 20 40 40 0a 20 0a 20 09 6f 62 6a 76 20 2b 13 @@. . .objv +
1460: 3d 20 6f 62 6a 63 2d 32 3b 0a 20 0a 2d 09 69 66 = objc-2;. .-.if
1470: 20 28 28 72 65 71 6c 65 6e 67 74 68 20 3d 3d 20 ((reqlength ==
1480: 30 29 20 7c 7c 20 28 6f 62 6a 76 5b 30 5d 20 3d 0) || (objv[0] =
1490: 3d 20 6f 62 6a 76 5b 31 5d 29 29 20 7b 0a 2d 09 = objv[1])) {.-.
14a0: 20 20 20 20 2f 2a 0a 2d 09 20 20 20 20 20 2a 20 /*.-. *
14b0: 41 6c 77 61 79 73 20 6d 61 74 63 68 20 61 74 20 Always match at
14c0: 30 20 63 68 61 72 73 20 6f 66 20 69 66 20 69 74 0 chars of if it
14d0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 6f 62 6a is the same obj
14e0: 2e 0a 2d 09 20 20 20 20 20 2a 2f 0a 2d 0a 2d 09 ..-. */.-.-.
14f0: 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 Tcl_SetObjRe
1500: 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a 2d 09 09 sult(interp,.-..
1510: 20 20 20 20 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 Tcl_NewBoole
1520: 61 6e 4f 62 6a 28 28 65 6e 75 6d 20 6f 70 74 69 anObj((enum opti
1530: 6f 6e 73 29 20 69 6e 64 65 78 20 3d 3d 20 53 54 ons) index == ST
1540: 52 5f 45 51 55 41 4c 29 29 3b 0a 2d 09 20 20 20 R_EQUAL));.-.
1550: 20 62 72 65 61 6b 3b 0a 2d 09 7d 20 65 6c 73 65 break;.-.} else
1560: 20 69 66 20 28 21 6e 6f 63 61 73 65 20 26 26 20 if (!nocase &&
1570: 6f 62 6a 76 5b 30 5d 2d 3e 74 79 70 65 50 74 72 objv[0]->typePtr
1580: 20 3d 3d 20 26 74 63 6c 42 79 74 65 41 72 72 61 == &tclByteArra
1590: 79 54 79 70 65 20 26 26 0a 2d 09 09 6f 62 6a 76 yType &&.-..objv
15a0: 5b 31 5d 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 [1]->typePtr ==
15b0: 26 74 63 6c 42 79 74 65 41 72 72 61 79 54 79 70 &tclByteArrayTyp
15c0: 65 29 20 7b 0a 2d 09 20 20 20 20 2f 2a 0a 2d 09 e) {.-. /*.-.
15d0: 20 20 20 20 20 2a 20 55 73 65 20 62 69 6e 61 72 * Use binar
15e0: 79 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6f y versions of co
15f0: 6d 70 61 72 69 73 6f 6e 73 20 73 69 6e 63 65 20 mparisons since
1600: 74 68 61 74 20 77 6f 6e 27 74 20 63 61 75 73 65 that won't cause
1610: 20 75 6e 64 75 65 0a 2d 09 20 20 20 20 20 2a 20 undue.-. *
1620: 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f 6e 73 type conversions
1630: 20 61 6e 64 20 69 74 20 69 73 20 6d 75 63 68 20 and it is much
1640: 66 61 73 74 65 72 2e 20 4f 6e 6c 79 20 64 6f 20 faster. Only do
1650: 74 68 69 73 20 69 66 20 77 65 27 72 65 0a 2d 09 this if we're.-.
1660: 20 20 20 20 20 2a 20 63 61 73 65 2d 73 65 6e 73 * case-sens
1670: 69 74 69 76 65 20 28 77 68 69 63 68 20 69 73 20 itive (which is
1680: 61 6c 6c 20 74 68 61 74 20 72 65 61 6c 6c 79 20 all that really
1690: 6d 61 6b 65 73 20 73 65 6e 73 65 20 77 69 74 68 makes sense with
16a0: 20 62 79 74 65 0a 2d 09 20 20 20 20 20 2a 20 61 byte.-. * a
16b0: 72 72 61 79 73 20 61 6e 79 77 61 79 2c 20 61 6e rrays anyway, an
16c0: 64 20 77 65 20 68 61 76 65 20 6e 6f 20 6d 65 6d d we have no mem
16d0: 63 61 73 65 63 6d 70 28 29 20 66 6f 72 20 73 6f casecmp() for so
16e0: 6d 65 0a 2d 09 20 20 20 20 20 2a 20 72 65 61 73 me.-. * reas
16f0: 6f 6e 2e 2e 2e 20 3a 5e 29 0a 2d 09 20 20 20 20 on... :^).-.
1700: 20 2a 2f 0a 2d 0a 2d 09 20 20 20 20 73 74 72 69 */.-.-. stri
1710: 6e 67 31 20 3d 20 28 63 68 61 72 20 2a 29 20 54 ng1 = (char *) T
1720: 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 cl_GetByteArrayF
1730: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 romObj(objv[0],
1740: 26 6c 65 6e 67 74 68 31 29 3b 0a 2d 09 20 20 20 &length1);.-.
1750: 20 73 74 72 69 6e 67 32 20 3d 20 28 63 68 61 72 string2 = (char
1760: 20 2a 29 20 54 63 6c 5f 47 65 74 42 79 74 65 41 *) Tcl_GetByteA
1770: 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 rrayFromObj(objv
1780: 5b 31 5d 2c 20 26 6c 65 6e 67 74 68 32 29 3b 0a [1], &length2);.
1790: 2d 09 20 20 20 20 73 74 72 43 6d 70 46 6e 20 3d -. strCmpFn =
17a0: 20 28 73 74 72 43 6d 70 46 6e 5f 74 29 20 6d 65 (strCmpFn_t) me
17b0: 6d 63 6d 70 3b 0a 2d 09 7d 20 65 6c 73 65 20 69 mcmp;.-.} else i
17c0: 66 20 28 28 6f 62 6a 76 5b 30 5d 2d 3e 74 79 70 f ((objv[0]->typ
17d0: 65 50 74 72 20 3d 3d 20 26 74 63 6c 53 74 72 69 ePtr == &tclStri
17e0: 6e 67 54 79 70 65 29 0a 2d 09 09 26 26 20 28 6f ngType).-..&& (o
17f0: 62 6a 76 5b 31 5d 2d 3e 74 79 70 65 50 74 72 20 bjv[1]->typePtr
1800: 3d 3d 20 26 74 63 6c 53 74 72 69 6e 67 54 79 70 == &tclStringTyp
1810: 65 29 29 20 7b 0a 2d 09 20 20 20 20 2f 2a 0a 2d e)) {.-. /*.-
1820: 09 20 20 20 20 20 2a 20 44 6f 20 61 20 75 6e 69 . * Do a uni
1830: 63 6f 64 65 2d 73 70 65 63 69 66 69 63 20 63 6f code-specific co
1840: 6d 70 61 72 69 73 6f 6e 20 69 66 20 62 6f 74 68 mparison if both
1850: 20 6f 66 20 74 68 65 20 61 72 67 73 20 61 72 65 of the args are
1860: 20 6f 66 0a 2d 09 20 20 20 20 20 2a 20 53 74 72 of.-. * Str
1870: 69 6e 67 20 74 79 70 65 2e 20 49 6e 20 62 65 6e ing type. In ben
1880: 63 68 6d 61 72 6b 20 74 65 73 74 69 6e 67 20 74 chmark testing t
1890: 68 69 73 20 70 72 6f 76 65 64 20 74 68 65 20 6d his proved the m
18a0: 6f 73 74 0a 2d 09 20 20 20 20 20 2a 20 65 66 66 ost.-. * eff
18b0: 69 63 69 65 6e 74 20 63 68 65 63 6b 20 62 65 74 icient check bet
18c0: 77 65 65 6e 20 74 68 65 20 75 6e 69 63 6f 64 65 ween the unicode
18d0: 20 61 6e 64 20 73 74 72 69 6e 67 20 63 6f 6d 70 and string comp
18e0: 61 72 69 73 6f 6e 0a 2d 09 20 20 20 20 20 2a 20 arison.-. *
18f0: 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 2d 09 20 20 operations..-.
1900: 20 20 20 2a 2f 0a 2d 0a 2d 09 20 20 20 20 73 74 */.-.-. st
1910: 72 69 6e 67 31 20 3d 20 28 63 68 61 72 20 2a 29 ring1 = (char *)
1920: 20 54 63 6c 5f 47 65 74 55 6e 69 63 6f 64 65 46 Tcl_GetUnicodeF
1930: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 30 5d 2c 20 romObj(objv[0],
1940: 26 6c 65 6e 67 74 68 31 29 3b 0a 2d 09 20 20 20 &length1);.-.
1950: 20 73 74 72 69 6e 67 32 20 3d 20 28 63 68 61 72 string2 = (char
1960: 20 2a 29 20 54 63 6c 5f 47 65 74 55 6e 69 63 6f *) Tcl_GetUnico
1970: 64 65 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 deFromObj(objv[1
1980: 5d 2c 20 26 6c 65 6e 67 74 68 32 29 3b 0a 2d 09 ], &length2);.-.
1990: 20 20 20 20 73 74 72 43 6d 70 46 6e 20 3d 20 28 strCmpFn = (
19a0: 73 74 72 43 6d 70 46 6e 5f 74 29 0a 2d 09 09 20 strCmpFn_t).-..
19b0: 20 20 20 28 6e 6f 63 61 73 65 20 3f 20 54 63 6c (nocase ? Tcl
19c0: 5f 55 6e 69 43 68 61 72 4e 63 61 73 65 63 6d 70 _UniCharNcasecmp
19d0: 20 3a 20 54 63 6c 5f 55 6e 69 43 68 61 72 4e 63 : Tcl_UniCharNc
19e0: 6d 70 29 3b 0a 2d 09 7d 20 65 6c 73 65 20 7b 0a mp);.-.} else {.
19f0: 2d 09 20 20 20 20 2f 2a 0a 2d 09 20 20 20 20 20 -. /*.-.
1a00: 2a 20 41 73 20 61 20 63 61 74 63 68 2d 61 6c 6c * As a catch-all
1a10: 20 77 65 20 77 69 6c 6c 20 77 6f 72 6b 20 77 69 we will work wi
1a20: 74 68 20 55 54 46 2d 38 2e 20 57 65 20 63 61 6e th UTF-8. We can
1a30: 6e 6f 74 20 75 73 65 20 6d 65 6d 63 6d 70 28 29 not use memcmp()
1a40: 0a 2d 09 20 20 20 20 20 2a 20 61 73 20 74 68 61 .-. * as tha
1a50: 74 20 69 73 20 75 6e 73 61 66 65 20 77 69 74 68 t is unsafe with
1a60: 20 61 6e 79 20 73 74 72 69 6e 67 20 63 6f 6e 74 any string cont
1a70: 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 28 5c 78 43 aining NULL (\xC
1a80: 30 5c 78 38 30 20 69 6e 0a 2d 09 20 20 20 20 20 0\x80 in.-.
1a90: 2a 20 54 63 6c 27 73 20 75 74 66 20 72 65 70 29 * Tcl's utf rep)
1aa0: 2e 20 57 65 20 63 61 6e 20 75 73 65 20 74 68 65 . We can use the
1ab0: 20 6d 6f 72 65 20 65 66 66 69 63 69 65 6e 74 20 more efficient
1ac0: 54 63 6c 70 55 74 66 4e 63 6d 70 32 20 69 66 0a TclpUtfNcmp2 if.
1ad0: 2d 09 20 20 20 20 20 2a 20 77 65 20 61 72 65 20 -. * we are
1ae0: 63 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 61 case-sensitive a
1af0: 6e 64 20 6e 6f 20 73 70 65 63 69 66 69 63 20 6c nd no specific l
1b00: 65 6e 67 74 68 20 77 61 73 20 72 65 71 75 65 73 ength was reques
1b10: 74 65 64 2e 0a 2d 09 20 20 20 20 20 2a 2f 0a 2d ted..-. */.-
1b20: 0a 2d 09 20 20 20 20 73 74 72 69 6e 67 31 20 3d .-. string1 =
1b30: 20 28 63 68 61 72 20 2a 29 20 54 63 6c 5f 47 65 (char *) Tcl_Ge
1b40: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f tStringFromObj(o
1b50: 62 6a 76 5b 30 5d 2c 20 26 6c 65 6e 67 74 68 31 bjv[0], &length1
1b60: 29 3b 0a 2d 09 20 20 20 20 73 74 72 69 6e 67 32 );.-. string2
1b70: 20 3d 20 28 63 68 61 72 20 2a 29 20 54 63 6c 5f = (char *) Tcl_
1b80: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a GetStringFromObj
1b90: 28 6f 62 6a 76 5b 31 5d 2c 20 26 6c 65 6e 67 74 (objv[1], &lengt
1ba0: 68 32 29 3b 0a 2d 09 20 20 20 20 69 66 20 28 28 h2);.-. if ((
1bb0: 72 65 71 6c 65 6e 67 74 68 20 3c 20 30 29 20 26 reqlength < 0) &
1bc0: 26 20 21 6e 6f 63 61 73 65 29 20 7b 0a 2d 09 09 & !nocase) {.-..
1bd0: 73 74 72 43 6d 70 46 6e 20 3d 20 28 73 74 72 43 strCmpFn = (strC
1be0: 6d 70 46 6e 5f 74 29 20 54 63 6c 70 55 74 66 4e mpFn_t) TclpUtfN
1bf0: 63 6d 70 32 3b 0a 2d 09 20 20 20 20 7d 20 65 6c cmp2;.-. } el
1c00: 73 65 20 7b 0a 2d 09 09 6c 65 6e 67 74 68 31 20 se {.-..length1
1c10: 3d 20 54 63 6c 5f 4e 75 6d 55 74 66 43 68 61 72 = Tcl_NumUtfChar
1c20: 73 28 73 74 72 69 6e 67 31 2c 20 6c 65 6e 67 74 s(string1, lengt
1c30: 68 31 29 3b 0a 2d 09 09 6c 65 6e 67 74 68 32 20 h1);.-..length2
1c40: 3d 20 54 63 6c 5f 4e 75 6d 55 74 66 43 68 61 72 = Tcl_NumUtfChar
1c50: 73 28 73 74 72 69 6e 67 32 2c 20 6c 65 6e 67 74 s(string2, lengt
1c60: 68 32 29 3b 0a 2d 09 09 73 74 72 43 6d 70 46 6e h2);.-..strCmpFn
1c70: 20 3d 20 28 73 74 72 43 6d 70 46 6e 5f 74 29 0a = (strCmpFn_t).
1c80: 2d 09 09 09 28 6e 6f 63 61 73 65 20 3f 20 54 63 -...(nocase ? Tc
1c90: 6c 5f 55 74 66 4e 63 61 73 65 63 6d 70 20 3a 20 l_UtfNcasecmp :
1ca0: 54 63 6c 5f 55 74 66 4e 63 6d 70 29 3b 0a 2d 09 Tcl_UtfNcmp);.-.
1cb0: 20 20 20 20 7d 0a 2d 09 7d 0a 2d 0a 2d 09 69 66 }.-.}.-.-.if
1cc0: 20 28 28 28 65 6e 75 6d 20 6f 70 74 69 6f 6e 73 (((enum options
1cd0: 29 20 69 6e 64 65 78 20 3d 3d 20 53 54 52 5f 45 ) index == STR_E
1ce0: 51 55 41 4c 29 0a 2d 09 09 26 26 20 28 72 65 71 QUAL).-..&& (req
1cf0: 6c 65 6e 67 74 68 20 3c 20 30 29 20 26 26 20 28 length < 0) && (
1d00: 6c 65 6e 67 74 68 31 20 21 3d 20 6c 65 6e 67 74 length1 != lengt
1d10: 68 32 29 29 20 7b 0a 2d 09 20 20 20 20 6d 61 74 h2)) {.-. mat
1d20: 63 68 20 3d 20 31 3b 20 2f 2a 20 74 68 69 73 20 ch = 1; /* this
1d30: 77 69 6c 6c 20 62 65 20 72 65 76 65 72 73 65 64 will be reversed
1d40: 20 62 65 6c 6f 77 20 2a 2f 0a 2d 09 7d 20 65 6c below */.-.} el
1d50: 73 65 20 7b 0a 2d 09 20 20 20 20 6c 65 6e 67 74 se {.-. lengt
1d60: 68 20 3d 20 28 6c 65 6e 67 74 68 31 20 3c 20 6c h = (length1 < l
1d70: 65 6e 67 74 68 32 29 20 3f 20 6c 65 6e 67 74 68 ength2) ? length
1d80: 31 20 3a 20 6c 65 6e 67 74 68 32 3b 0a 2d 09 20 1 : length2;.-.
1d90: 20 20 20 69 66 20 28 72 65 71 6c 65 6e 67 74 68 if (reqlength
1da0: 20 3e 20 30 20 26 26 20 72 65 71 6c 65 6e 67 74 > 0 && reqlengt
1db0: 68 20 3c 20 6c 65 6e 67 74 68 29 20 7b 0a 2d 09 h < length) {.-.
1dc0: 09 6c 65 6e 67 74 68 20 3d 20 72 65 71 6c 65 6e .length = reqlen
1dd0: 67 74 68 3b 0a 2d 09 20 20 20 20 7d 20 65 6c 73 gth;.-. } els
1de0: 65 20 69 66 20 28 72 65 71 6c 65 6e 67 74 68 20 e if (reqlength
1df0: 3c 20 30 29 20 7b 0a 2d 09 09 2f 2a 0a 2d 09 09 < 0) {.-../*.-..
1e00: 20 2a 20 54 68 65 20 72 65 71 75 65 73 74 65 64 * The requested
1e10: 20 6c 65 6e 67 74 68 20 69 73 20 6e 65 67 61 74 length is negat
1e20: 69 76 65 2c 20 73 6f 20 77 65 20 69 67 6e 6f 72 ive, so we ignor
1e30: 65 20 69 74 20 62 79 0a 2d 09 09 20 2a 20 73 65 e it by.-.. * se
1e40: 74 74 69 6e 67 20 69 74 20 74 6f 20 6c 65 6e 67 tting it to leng
1e50: 74 68 20 2b 20 31 20 73 6f 20 77 65 20 63 6f 72 th + 1 so we cor
1e60: 72 65 63 74 20 74 68 65 20 6d 61 74 63 68 20 76 rect the match v
1e70: 61 72 2e 0a 2d 09 09 20 2a 2f 0a 2d 0a 2d 09 09 ar..-.. */.-.-..
1e80: 72 65 71 6c 65 6e 67 74 68 20 3d 20 6c 65 6e 67 reqlength = leng
1e90: 74 68 20 2b 20 31 3b 0a 2d 09 20 20 20 20 7d 0a th + 1;.-. }.
1ea0: 2d 0a 2d 09 20 20 20 20 6d 61 74 63 68 20 3d 20 -.-. match =
1eb0: 73 74 72 43 6d 70 46 6e 28 73 74 72 69 6e 67 31 strCmpFn(string1
1ec0: 2c 20 73 74 72 69 6e 67 32 2c 20 28 75 6e 73 69 , string2, (unsi
1ed0: 67 6e 65 64 29 20 6c 65 6e 67 74 68 29 3b 0a 2d gned) length);.-
1ee0: 09 20 20 20 20 69 66 20 28 28 6d 61 74 63 68 20 . if ((match
1ef0: 3d 3d 20 30 29 20 26 26 20 28 72 65 71 6c 65 6e == 0) && (reqlen
1f00: 67 74 68 20 3e 20 6c 65 6e 67 74 68 29 29 20 7b gth > length)) {
1f10: 0a 2d 09 09 6d 61 74 63 68 20 3d 20 6c 65 6e 67 .-..match = leng
1f20: 74 68 31 20 2d 20 6c 65 6e 67 74 68 32 3b 0a 2d th1 - length2;.-
1f30: 09 20 20 20 20 7d 0a 2d 09 7d 0a 2b 09 6d 61 74 . }.-.}.+.mat
1f40: 63 68 20 3d 20 54 63 6c 53 74 72 43 6f 6d 70 61 ch = TclStrCompa
1f50: 72 65 28 6f 62 6a 76 5b 30 5d 2c 20 6f 62 6a 76 re(objv[0], objv
1f60: 5b 31 5d 2c 20 6e 6f 63 61 73 65 2c 20 72 65 71 [1], nocase, req
1f70: 6c 65 6e 67 74 68 2c 0a 2b 09 09 28 65 6e 75 6d length,.+..(enum
1f80: 20 6f 70 74 69 6f 6e 73 29 20 69 6e 64 65 78 20 options) index
1f90: 3d 3d 20 53 54 52 5f 45 51 55 41 4c 29 3b 0a 20 == STR_EQUAL);.
1fa0: 0a 20 09 69 66 20 28 28 65 6e 75 6d 20 6f 70 74 . .if ((enum opt
1fb0: 69 6f 6e 73 29 20 69 6e 64 65 78 20 3d 3d 20 53 ions) index == S
1fc0: 54 52 5f 45 51 55 41 4c 29 20 7b 0a 20 09 20 20 TR_EQUAL) {. .
1fd0: 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 Tcl_SetObjResu
1fe0: 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e lt(interp, Tcl_N
1ff0: 65 77 42 6f 6f 6c 65 61 6e 4f 62 6a 28 6d 61 74 ewBooleanObj(mat
2000: 63 68 20 3f 20 30 20 3a 20 31 29 29 3b 0a 20 09 ch ? 0 : 1));. .
2010: 7d 20 65 6c 73 65 20 7b 0a 2d 09 20 20 20 20 54 } else {.-. T
2020: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 cl_SetObjResult(
2030: 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 interp, Tcl_NewI
2040: 6e 74 4f 62 6a 28 0a 2d 09 09 20 20 20 20 28 6d ntObj(.-.. (m
2050: 61 74 63 68 20 3e 20 30 29 20 3f 20 31 20 3a 20 atch > 0) ? 1 :
2060: 28 6d 61 74 63 68 20 3c 20 30 29 20 3f 20 2d 31 (match < 0) ? -1
2070: 20 3a 20 30 29 29 3b 0a 2b 09 20 20 20 20 54 63 : 0));.+. Tc
2080: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 l_SetObjResult(i
2090: 6e 74 65 72 70 2c 20 54 63 6c 5f 4e 65 77 49 6e nterp, Tcl_NewIn
20a0: 74 4f 62 6a 28 6d 61 74 63 68 29 29 3b 0a 20 09 tObj(match));. .
20b0: 7d 0a 20 09 62 72 65 61 6b 3b 0a 20 20 20 20 20 }. .break;.
20c0: 7d 0a 64 69 66 66 20 2d 72 75 20 2e 2e 2f 74 63 }.diff -ru ../tc
20d0: 6c 2d 32 30 30 36 31 32 30 36 2f 67 65 6e 65 72 l-20061206/gener
20e0: 69 63 2f 74 63 6c 43 6f 6d 70 43 6d 64 73 2e 63 ic/tclCompCmds.c
20f0: 20 2e 2f 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f ./generic/tclCo
2100: 6d 70 43 6d 64 73 2e 63 0a 2d 2d 2d 20 2e 2e 2f mpCmds.c.--- ../
2110: 74 63 6c 2d 32 30 30 36 31 32 30 36 2f 67 65 6e tcl-20061206/gen
2120: 65 72 69 63 2f 74 63 6c 43 6f 6d 70 43 6d 64 73 eric/tclCompCmds
2130: 2e 63 09 32 30 30 36 2d 31 32 2d 30 37 20 31 32 .c.2006-12-07 12
2140: 3a 35 39 3a 31 33 2e 30 30 30 30 30 30 30 30 30 :59:13.000000000
2150: 20 2b 30 31 30 30 0a 2b 2b 2b 20 2e 2f 67 65 6e +0100.+++ ./gen
2160: 65 72 69 63 2f 74 63 6c 43 6f 6d 70 43 6d 64 73 eric/tclCompCmds
2170: 2e 63 09 32 30 30 36 2d 31 32 2d 30 37 20 31 34 .c.2006-12-07 14
2180: 3a 32 39 3a 30 31 2e 30 30 30 30 30 30 30 30 30 :29:01.000000000
2190: 20 2b 30 31 30 30 0a 40 40 20 2d 31 33 38 2c 36 +0100.@@ -138,6
21a0: 20 2b 31 33 38 2c 31 32 20 40 40 0a 20 73 74 61 +138,12 @@. sta
21b0: 74 69 63 20 69 6e 74 09 09 43 6f 6d 70 69 6c 65 tic int..Compile
21c0: 41 73 73 6f 63 69 61 74 69 76 65 42 69 6e 61 72 AssociativeBinar
21d0: 79 4f 70 43 6d 64 28 54 63 6c 5f 49 6e 74 65 72 yOpCmd(Tcl_Inter
21e0: 70 20 2a 69 6e 74 65 72 70 2c 0a 20 09 09 09 20 p *interp,. ...
21f0: 20 20 20 54 63 6c 5f 50 61 72 73 65 20 2a 70 61 Tcl_Parse *pa
2200: 72 73 65 50 74 72 2c 20 43 4f 4e 53 54 20 63 68 rsePtr, CONST ch
2210: 61 72 20 2a 69 64 65 6e 74 69 74 79 2c 0a 20 09 ar *identity,. .
2220: 09 09 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 .. unsigned c
2230: 68 61 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c har instruction,
2240: 20 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76 CompileEnv *env
2250: 50 74 72 29 3b 0a 2b 73 74 61 74 69 63 20 69 6e Ptr);.+static in
2260: 74 09 09 43 6f 6d 70 69 6c 65 43 6f 6d 70 4f 70 t..CompileCompOp
2270: 43 6d 64 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a Cmd(Tcl_Interp *
2280: 69 6e 74 65 72 70 2c 0a 2b 09 09 09 20 20 20 20 interp,.+...
2290: 54 63 6c 5f 50 61 72 73 65 20 2a 70 61 72 73 65 Tcl_Parse *parse
22a0: 50 74 72 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 Ptr, unsigned ch
22b0: 61 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 0a ar instruction,.
22c0: 2b 09 09 09 20 20 20 20 43 6f 6d 70 69 6c 65 45 +... CompileE
22d0: 6e 76 20 2a 65 6e 76 50 74 72 29 3b 0a 2b 73 74 nv *envPtr);.+st
22e0: 61 74 69 63 20 69 6e 74 09 09 43 6f 6d 70 69 6c atic int..Compil
22f0: 65 53 74 72 69 63 74 6c 79 42 69 6e 61 72 79 4f eStrictlyBinaryO
2300: 70 43 6d 64 28 54 63 6c 5f 49 6e 74 65 72 70 20 pCmd(Tcl_Interp
2310: 2a 69 6e 74 65 72 70 2c 0a 2b 09 09 09 20 20 20 *interp,.+...
2320: 20 54 63 6c 5f 50 61 72 73 65 20 2a 70 61 72 73 Tcl_Parse *pars
2330: 65 50 74 72 2c 20 75 6e 73 69 67 6e 65 64 20 63 ePtr, unsigned c
2340: 68 61 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c har instruction,
2350: 0a 2b 09 09 09 20 20 20 20 43 6f 6d 70 69 6c 65 .+... Compile
2360: 45 6e 76 20 2a 65 6e 76 50 74 72 29 3b 0a 20 73 Env *envPtr);. s
2370: 74 61 74 69 63 20 69 6e 74 09 09 43 6f 6d 70 69 tatic int..Compi
2380: 6c 65 55 6e 61 72 79 4f 70 43 6d 64 28 54 63 6c leUnaryOpCmd(Tcl
2390: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
23a0: 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 50 61 72 . ... Tcl_Par
23b0: 73 65 20 2a 70 61 72 73 65 50 74 72 2c 20 75 6e se *parsePtr, un
23c0: 73 69 67 6e 65 64 20 63 68 61 72 20 69 6e 73 74 signed char inst
23d0: 72 75 63 74 69 6f 6e 2c 0a 20 09 09 09 20 20 20 ruction,. ...
23e0: 20 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76 CompileEnv *env
23f0: 50 74 72 29 3b 0a 40 40 20 2d 34 36 35 38 2c 36 Ptr);.@@ -4658,6
2400: 20 2b 34 36 36 34 2c 31 32 20 40 40 0a 20 20 20 +4664,12 @@.
2410: 20 20 69 66 20 28 70 61 72 73 65 50 74 72 2d 3e if (parsePtr->
2420: 6e 75 6d 57 6f 72 64 73 20 3d 3d 20 31 29 20 7b numWords == 1) {
2430: 0a 20 09 50 75 73 68 4c 69 74 65 72 61 6c 28 65 . .PushLiteral(e
2440: 6e 76 50 74 72 2c 20 69 64 65 6e 74 69 74 79 2c nvPtr, identity,
2450: 20 2d 31 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 -1);. .return T
2460: 43 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 7d 20 65 6c CL_OK;.+ } el
2470: 73 65 20 69 66 20 28 70 61 72 73 65 50 74 72 2d se if (parsePtr-
2480: 3e 6e 75 6d 57 6f 72 64 73 20 3d 3d 20 32 29 20 >numWords == 2)
2490: 7b 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 44 65 66 65 {.+./*.+. * Defe
24a0: 72 20 73 69 6e 67 6c 65 20 61 72 67 75 6d 65 6e r single argumen
24b0: 74 20 74 6f 20 72 75 6e 74 69 6d 65 20 66 6f 72 t to runtime for
24c0: 20 63 6f 6e 74 65 6e 74 20 63 68 65 63 6b 69 6e content checkin
24d0: 67 2e 0a 2b 09 20 2a 2f 0a 2b 0a 2b 09 72 65 74 g..+. */.+.+.ret
24e0: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 urn TCL_ERROR;.
24f0: 20 20 20 20 7d 0a 20 20 20 20 20 66 6f 72 20 28 }. for (
2500: 77 6f 72 64 73 3d 31 20 3b 20 77 6f 72 64 73 3c words=1 ; words<
2510: 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 parsePtr->numWor
2520: 64 73 20 3b 20 77 6f 72 64 73 2b 2b 29 20 7b 0a ds ; words++) {.
2530: 20 09 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b .tokenPtr = Tok
2540: 65 6e 41 66 74 65 72 28 74 6f 6b 65 6e 50 74 72 enAfter(tokenPtr
2550: 29 3b 0a 40 40 20 2d 34 37 30 35 2c 36 20 2b 34 );.@@ -4705,6 +4
2560: 37 31 37 2c 38 38 20 40 40 0a 20 2f 2a 0a 20 20 717,88 @@. /*.
2570: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
2580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
25a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
25b0: 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a 2b 20 2a 20 -------. *.+ *
25c0: 43 6f 6d 70 69 6c 65 43 6f 6d 70 4f 70 43 6d 64 CompileCompOpCmd
25d0: 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 48 65 6c 70 --.+ *.+ *.Help
25e0: 65 72 20 74 6f 20 63 6f 6d 70 69 6c 65 20 63 6f er to compile co
25f0: 6d 70 61 72 69 73 6f 6e 20 6d 61 74 68 20 6f 70 mparison math op
2600: 65 72 61 74 6f 72 73 0a 2b 20 2a 0a 2b 20 2a 20 erators.+ *.+ *
2610: 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 20 09 52 65 Results:.+ * .Re
2620: 74 75 72 6e 73 20 54 43 4c 5f 4f 4b 20 66 6f 72 turns TCL_OK for
2630: 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 63 6f a successful co
2640: 6d 70 69 6c 65 2e 20 52 65 74 75 72 6e 73 20 54 mpile. Returns T
2650: 43 4c 5f 45 52 52 4f 52 20 74 6f 20 64 65 66 65 CL_ERROR to defe
2660: 72 0a 2b 20 2a 20 09 65 76 61 6c 75 61 74 69 6f r.+ * .evaluatio
2670: 6e 20 74 6f 20 72 75 6e 74 69 6d 65 2e 0a 2b 20 n to runtime..+
2680: 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 *.+ * Side effec
2690: 74 73 3a 0a 2b 20 2a 09 49 6e 73 74 72 75 63 74 ts:.+ *.Instruct
26a0: 69 6f 6e 73 20 61 72 65 20 61 64 64 65 64 20 74 ions are added t
26b0: 6f 20 65 6e 76 50 74 72 20 74 6f 20 65 78 65 63 o envPtr to exec
26c0: 75 74 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 ute the command
26d0: 61 74 0a 2b 20 2a 09 72 75 6e 74 69 6d 65 2e 0a at.+ *.runtime..
26e0: 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d + *.+ *---------
26f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 -------------.+
2730: 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 69 6e 74 */.+.+static int
2740: 0a 2b 43 6f 6d 70 69 6c 65 43 6f 6d 70 4f 70 43 .+CompileCompOpC
2750: 6d 64 28 0a 2b 20 20 20 20 54 63 6c 5f 49 6e 74 md(.+ Tcl_Int
2760: 65 72 70 20 2a 69 6e 74 65 72 70 2c 09 09 2f 2a erp *interp,../*
2770: 20 55 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 Used for error
2780: 72 65 70 6f 72 74 69 6e 67 2e 20 2a 2f 0a 2b 20 reporting. */.+
2790: 20 20 20 54 63 6c 5f 50 61 72 73 65 20 2a 70 61 Tcl_Parse *pa
27a0: 72 73 65 50 74 72 2c 09 2f 2a 20 50 6f 69 6e 74 rsePtr,./* Point
27b0: 73 20 74 6f 20 61 20 70 61 72 73 65 20 73 74 72 s to a parse str
27c0: 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 63 ucture for the c
27d0: 6f 6d 6d 61 6e 64 0a 2b 09 09 09 09 20 2a 20 63 ommand.+.... * c
27e0: 72 65 61 74 65 64 20 62 79 20 54 63 6c 5f 50 61 reated by Tcl_Pa
27f0: 72 73 65 43 6f 6d 6d 61 6e 64 2e 20 2a 2f 0a 2b rseCommand. */.+
2800: 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 unsigned cha
2810: 72 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20 20 r instruction,
2820: 2f 2a 20 42 43 20 69 6e 73 74 72 75 63 74 69 6f /* BC instructio
2830: 6e 20 66 6f 72 20 6f 70 65 72 61 74 6f 72 20 2a n for operator *
2840: 2f 0a 2b 20 20 20 20 43 6f 6d 70 69 6c 65 45 6e /.+ CompileEn
2850: 76 20 2a 65 6e 76 50 74 72 29 09 09 2f 2a 20 48 v *envPtr)../* H
2860: 6f 6c 64 73 20 72 65 73 75 6c 74 69 6e 67 20 69 olds resulting i
2870: 6e 73 74 72 75 63 74 69 6f 6e 73 2e 20 2a 2f 0a nstructions. */.
2880: 2b 7b 0a 2b 20 20 20 20 54 63 6c 5f 54 6f 6b 65 +{.+ Tcl_Toke
2890: 6e 20 2a 74 6f 6b 65 6e 50 74 72 3b 0a 2b 20 20 n *tokenPtr;.+
28a0: 20 20 44 65 66 69 6e 65 4c 69 6e 65 49 6e 66 6f DefineLineInfo
28b0: 72 6d 61 74 69 6f 6e 3b 20 2f 2a 20 54 49 50 20 rmation; /* TIP
28c0: 23 32 38 30 20 2a 2f 0a 2b 0a 2b 20 20 20 20 69 #280 */.+.+ i
28d0: 66 20 28 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d f (parsePtr->num
28e0: 57 6f 72 64 73 20 3c 20 33 29 20 7b 0a 2b 09 2f Words < 3) {.+./
28f0: 2a 20 0a 2b 09 20 2a 20 5a 65 72 6f 20 6f 72 20 * .+. * Zero or
2900: 6f 6e 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 one argument is
2910: 61 6c 77 61 79 73 20 74 72 75 65 2e 0a 2b 09 20 always true..+.
2920: 2a 20 44 69 73 63 61 72 64 20 73 69 6e 67 6c 65 * Discard single
2930: 20 61 72 67 75 6d 65 6e 74 2e 0a 2b 09 20 2a 2f argument..+. */
2940: 0a 2b 0a 2b 20 20 20 20 20 20 20 20 69 66 20 28 .+.+ if (
2950: 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 parsePtr->numWor
2960: 64 73 20 3d 3d 20 32 29 20 7b 0a 2b 20 20 20 20 ds == 2) {.+
2970: 20 20 20 20 20 20 20 20 74 6f 6b 65 6e 50 74 72 tokenPtr
2980: 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 70 61 = TokenAfter(pa
2990: 72 73 65 50 74 72 2d 3e 74 6f 6b 65 6e 50 74 72 rsePtr->tokenPtr
29a0: 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 );.+
29b0: 43 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 CompileWord(envP
29c0: 74 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e tr, tokenPtr, in
29d0: 74 65 72 70 2c 20 31 29 3b 0a 2b 20 20 20 20 20 terp, 1);.+
29e0: 20 20 20 20 20 20 20 54 63 6c 45 6d 69 74 4f 70 TclEmitOp
29f0: 63 6f 64 65 28 49 4e 53 54 5f 50 4f 50 2c 20 65 code(INST_POP, e
2a00: 6e 76 50 74 72 29 3b 0a 2b 20 20 20 20 20 20 20 nvPtr);.+
2a10: 20 7d 0a 2b 20 20 20 20 20 20 20 20 50 75 73 68 }.+ Push
2a20: 4c 69 74 65 72 61 6c 28 65 6e 76 50 74 72 2c 20 Literal(envPtr,
2a30: 22 31 22 2c 20 31 29 3b 0a 2b 20 20 20 20 20 20 "1", 1);.+
2a40: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b return TCL_OK;
2a50: 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 .+ } else if
2a60: 28 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f (parsePtr->numWo
2a70: 72 64 73 20 3d 3d 20 33 29 20 7b 0a 2b 09 2f 2a rds == 3) {.+./*
2a80: 0a 2b 09 20 2a 20 54 77 6f 20 61 72 67 75 6d 65 .+. * Two argume
2a90: 6e 74 73 20 69 73 20 6a 75 73 74 20 6c 69 6b 65 nts is just like
2aa0: 20 61 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 a binary operat
2ab0: 6f 72 2e 0a 2b 09 20 2a 2f 0a 2b 0a 2b 09 72 65 or..+. */.+.+.re
2ac0: 74 75 72 6e 20 43 6f 6d 70 69 6c 65 41 73 73 6f turn CompileAsso
2ad0: 63 69 61 74 69 76 65 42 69 6e 61 72 79 4f 70 43 ciativeBinaryOpC
2ae0: 6d 64 28 69 6e 74 65 72 70 2c 20 70 61 72 73 65 md(interp, parse
2af0: 50 74 72 2c 0a 2b 09 09 4e 55 4c 4c 2c 20 69 6e Ptr,.+..NULL, in
2b00: 73 74 72 75 63 74 69 6f 6e 2c 20 65 6e 76 50 74 struction, envPt
2b10: 72 29 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 r);.+ } else
2b20: 69 66 20 28 65 6e 76 50 74 72 2d 3e 70 72 6f 63 if (envPtr->proc
2b30: 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2b Ptr == NULL) {.+
2b40: 09 2f 2a 0a 2b 09 20 2a 20 4e 6f 20 6c 6f 63 61 ./*.+. * No loca
2b50: 6c 20 76 61 72 69 61 62 6c 65 20 73 70 61 63 65 l variable space
2b60: 2c 20 77 68 69 63 68 20 69 73 20 6e 65 65 64 65 , which is neede
2b70: 64 20 66 6f 72 20 3e 3d 20 33 20 61 72 67 73 21 d for >= 3 args!
2b80: 0a 2b 09 20 2a 2f 0a 2b 0a 2b 09 72 65 74 75 72 .+. */.+.+.retur
2b90: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 20 20 n TCL_ERROR;.+
2ba0: 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 69 6e 74 } else {.+.int
2bb0: 20 74 6d 70 49 6e 64 65 78 20 3d 20 54 63 6c 46 tmpIndex = TclF
2bc0: 69 6e 64 43 6f 6d 70 69 6c 65 64 4c 6f 63 61 6c indCompiledLocal
2bd0: 28 4e 55 4c 4c 2c 20 30 2c 20 31 2c 20 56 41 52 (NULL, 0, 1, VAR
2be0: 5f 53 43 41 4c 41 52 2c 0a 2b 09 09 65 6e 76 50 _SCALAR,.+..envP
2bf0: 74 72 2d 3e 70 72 6f 63 50 74 72 29 3b 0a 2b 09 tr->procPtr);.+.
2c00: 69 6e 74 20 77 6f 72 64 73 3b 0a 2b 0a 2b 09 74 int words;.+.+.t
2c10: 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 6e 41 okenPtr = TokenA
2c20: 66 74 65 72 28 70 61 72 73 65 50 74 72 2d 3e 74 fter(parsePtr->t
2c30: 6f 6b 65 6e 50 74 72 29 3b 0a 2b 09 43 6f 6d 70 okenPtr);.+.Comp
2c40: 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 ileWord(envPtr,
2c50: 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 tokenPtr, interp
2c60: 2c 20 31 29 3b 0a 2b 09 74 6f 6b 65 6e 50 74 72 , 1);.+.tokenPtr
2c70: 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 74 6f = TokenAfter(to
2c80: 6b 65 6e 50 74 72 29 3b 0a 2b 09 43 6f 6d 70 69 kenPtr);.+.Compi
2c90: 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 leWord(envPtr, t
2ca0: 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c okenPtr, interp,
2cb0: 20 32 29 3b 0a 2b 09 54 63 6c 45 6d 69 74 49 6e 2);.+.TclEmitIn
2cc0: 73 74 49 6e 74 34 28 49 4e 53 54 5f 53 54 4f 52 stInt4(INST_STOR
2cd0: 45 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 6e E_SCALAR4, tmpIn
2ce0: 64 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2b 09 dex, envPtr);.+.
2cf0: 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28 69 6e TclEmitOpcode(in
2d00: 73 74 72 75 63 74 69 6f 6e 2c 20 65 6e 76 50 74 struction, envPt
2d10: 72 29 3b 0a 2b 09 66 6f 72 20 28 77 6f 72 64 73 r);.+.for (words
2d20: 3d 33 20 3b 20 77 6f 72 64 73 3c 70 61 72 73 65 =3 ; words<parse
2d30: 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 20 3b 29 Ptr->numWords ;)
2d40: 20 7b 0a 2b 09 20 20 20 20 54 63 6c 45 6d 69 74 {.+. TclEmit
2d50: 49 6e 73 74 49 6e 74 34 28 49 4e 53 54 5f 4c 4f InstInt4(INST_LO
2d60: 41 44 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 AD_SCALAR4, tmpI
2d70: 6e 64 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2b ndex, envPtr);.+
2d80: 09 20 20 20 20 74 6f 6b 65 6e 50 74 72 20 3d 20 . tokenPtr =
2d90: 54 6f 6b 65 6e 41 66 74 65 72 28 74 6f 6b 65 6e TokenAfter(token
2da0: 50 74 72 29 3b 0a 2b 09 20 20 20 20 43 6f 6d 70 Ptr);.+. Comp
2db0: 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 ileWord(envPtr,
2dc0: 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 tokenPtr, interp
2dd0: 2c 20 77 6f 72 64 73 29 3b 0a 2b 09 20 20 20 20 , words);.+.
2de0: 69 66 20 28 2b 2b 77 6f 72 64 73 20 3c 20 70 61 if (++words < pa
2df0: 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 rsePtr->numWords
2e00: 29 20 7b 0a 2b 09 09 54 63 6c 45 6d 69 74 49 6e ) {.+..TclEmitIn
2e10: 73 74 49 6e 74 34 28 49 4e 53 54 5f 53 54 4f 52 stInt4(INST_STOR
2e20: 45 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 6e E_SCALAR4, tmpIn
2e30: 64 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2b 09 dex, envPtr);.+.
2e40: 20 20 20 20 7d 0a 2b 09 20 20 20 20 54 63 6c 45 }.+. TclE
2e50: 6d 69 74 4f 70 63 6f 64 65 28 69 6e 73 74 72 75 mitOpcode(instru
2e60: 63 74 69 6f 6e 2c 20 65 6e 76 50 74 72 29 3b 0a ction, envPtr);.
2e70: 2b 09 7d 0a 2b 09 66 6f 72 20 28 3b 20 77 6f 72 +.}.+.for (; wor
2e80: 64 73 3e 33 20 3b 20 77 6f 72 64 73 2d 2d 29 20 ds>3 ; words--)
2e90: 7b 0a 2b 09 20 20 20 20 54 63 6c 45 6d 69 74 4f {.+. TclEmitO
2ea0: 70 63 6f 64 65 28 49 4e 53 54 5f 42 49 54 41 4e pcode(INST_BITAN
2eb0: 44 2c 20 65 6e 76 50 74 72 29 3b 0a 2b 09 7d 0a D, envPtr);.+.}.
2ec0: 2b 20 20 20 20 7d 0a 2b 20 20 20 20 72 65 74 75 + }.+ retu
2ed0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 7d 0a 2b 0c rn TCL_OK;.+}.+.
2ee0: 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d .+/*.+ *--------
2ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2f00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
2f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b --------------.+
2f30: 20 2a 0a 20 20 2a 20 54 63 6c 43 6f 6d 70 69 6c *. * TclCompil
2f40: 65 2a 4f 70 43 6d 64 20 2d 2d 0a 20 20 2a 0a 20 e*OpCmd --. *.
2f50: 20 2a 09 50 72 6f 63 65 64 75 72 65 73 20 63 61 *.Procedures ca
2f60: 6c 6c 65 64 20 74 6f 20 63 6f 6d 70 69 6c 65 20 lled to compile
2f70: 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e the correspondin
2f80: 67 0a 40 40 20 2d 34 38 32 33 2c 38 20 2b 34 39 g.@@ -4823,8 +49
2f90: 31 37 2c 36 20 40 40 0a 20 20 2a 20 69 6e 20 72 17,6 @@. * in r
2fa0: 65 76 65 72 73 65 20 6f 72 64 65 72 20 61 6e 64 everse order and
2fb0: 20 61 70 70 6c 79 20 61 20 64 69 66 66 65 72 65 apply a differe
2fc0: 6e 74 20 73 65 71 75 65 6e 63 65 20 6f 66 20 69 nt sequence of i
2fd0: 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 20 20 2a nstructions.. *
2fe0: 20 46 6f 72 20 4e 20 61 72 67 75 6d 65 6e 74 73 For N arguments
2ff0: 2c 20 77 65 20 61 70 70 6c 79 20 4e 2d 32 20 49 , we apply N-2 I
3000: 4e 53 54 5f 41 44 44 73 2c 20 74 68 65 6e 20 6f NST_ADDs, then o
3010: 6e 65 20 49 4e 53 54 5f 53 55 42 2e 0a 20 20 2a ne INST_SUB.. *
3020: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 69 73 20 Note that this
3030: 64 6f 65 73 20 74 68 65 20 72 69 67 68 74 20 74 does the right t
3040: 68 69 6e 67 20 66 6f 72 20 4e 3d 32 2c 20 61 20 hing for N=2, a
3050: 73 69 6e 67 6c 65 20 49 4e 53 54 5f 53 55 42 2e single INST_SUB.
3060: 0a 2d 20 2a 20 57 68 65 6e 20 4e 3d 31 2c 20 77 .- * When N=1, w
3070: 65 20 63 61 6e 20 61 64 64 20 61 20 70 68 6f 6e e can add a phon
3080: 79 20 6c 65 61 64 69 6e 67 20 22 30 22 20 61 72 y leading "0" ar
3090: 67 75 6d 65 6e 74 20 61 6e 64 20 67 65 74 20 74 gument and get t
30a0: 68 65 0a 2d 20 2a 20 72 69 67 68 74 20 72 65 73 he.- * right res
30b0: 75 6c 74 20 66 72 6f 6d 20 74 68 65 20 73 61 6d ult from the sam
30c0: 65 20 61 6c 67 6f 72 69 74 68 6d 20 61 73 20 77 e algorithm as w
30d0: 65 6c 6c 2e 0a 20 20 2a 2f 0a 20 0a 20 69 6e 74 ell.. */. . int
30e0: 0a 40 40 20 2d 34 38 34 31 2c 37 20 2b 34 39 33 .@@ -4841,7 +493
30f0: 33 2c 31 30 20 40 40 0a 20 09 72 65 74 75 72 6e 3,10 @@. .return
3100: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 TCL_ERROR;.
3110: 20 7d 0a 20 20 20 20 20 69 66 20 28 70 61 72 73 }. if (pars
3120: 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 20 3d ePtr->numWords =
3130: 3d 20 32 29 20 7b 0a 2d 09 50 75 73 68 4c 69 74 = 2) {.-.PushLit
3140: 65 72 61 6c 28 65 6e 76 50 74 72 2c 20 22 30 22 eral(envPtr, "0"
3150: 2c 20 2d 31 29 3b 0a 2b 09 74 6f 6b 65 6e 50 74 , -1);.+.tokenPt
3160: 72 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 74 r = TokenAfter(t
3170: 6f 6b 65 6e 50 74 72 29 3b 0a 2b 09 43 6f 6d 70 okenPtr);.+.Comp
3180: 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 ileWord(envPtr,
3190: 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 tokenPtr, interp
31a0: 2c 20 31 29 3b 0a 2b 09 54 63 6c 45 6d 69 74 4f , 1);.+.TclEmitO
31b0: 70 63 6f 64 65 28 49 4e 53 54 5f 55 4d 49 4e 55 pcode(INST_UMINU
31c0: 53 2c 20 65 6e 76 50 74 72 29 3b 0a 2b 09 72 65 S, envPtr);.+.re
31d0: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 turn TCL_OK;.
31e0: 20 20 7d 0a 20 20 20 20 20 66 6f 72 20 28 77 6f }. for (wo
31f0: 72 64 73 3d 31 20 3b 20 77 6f 72 64 73 3c 70 61 rds=1 ; words<pa
3200: 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 rsePtr->numWords
3210: 20 3b 20 77 6f 72 64 73 2b 2b 29 20 7b 0a 20 09 ; words++) {. .
3220: 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 6e tokenPtr = Token
3230: 41 66 74 65 72 28 74 6f 6b 65 6e 50 74 72 29 3b After(tokenPtr);
3240: 0a 40 40 20 2d 34 38 37 35 2c 36 20 2b 34 39 37 .@@ -4875,6 +497
3250: 30 2c 31 32 20 40 40 0a 20 09 43 6f 6d 70 69 6c 0,12 @@. .Compil
3260: 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 6f eWord(envPtr, to
3270: 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c 31 kenPtr, interp,1
3280: 29 3b 0a 20 09 54 63 6c 45 6d 69 74 4f 70 63 6f );. .TclEmitOpco
3290: 64 65 28 49 4e 53 54 5f 44 49 56 2c 20 65 6e 76 de(INST_DIV, env
32a0: 50 74 72 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 Ptr);. .return T
32b0: 43 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 7d 20 65 6c CL_OK;.+ } el
32c0: 73 65 20 69 66 20 28 70 61 72 73 65 50 74 72 2d se if (parsePtr-
32d0: 3e 6e 75 6d 57 6f 72 64 73 20 3e 20 33 29 20 7b >numWords > 3) {
32e0: 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 44 65 66 65 72 .+./*.+. * Defer
32f0: 20 6d 6f 72 65 20 74 68 61 6e 20 74 77 6f 20 61 more than two a
3300: 72 67 73 20 74 6f 20 72 75 6e 74 69 6d 65 20 74 rgs to runtime t
3310: 6f 20 67 65 74 20 63 6f 72 72 65 63 74 20 62 65 o get correct be
3320: 68 61 76 69 6f 75 72 2e 0a 2b 09 20 2a 2f 0a 2b haviour..+. */.+
3330: 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 .+.return TCL_ER
3340: 52 4f 52 3b 0a 20 20 20 20 20 7d 0a 20 20 20 20 ROR;. }.
3350: 20 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 tokenPtr = Toke
3360: 6e 41 66 74 65 72 28 70 61 72 73 65 50 74 72 2d nAfter(parsePtr-
3370: 3e 74 6f 6b 65 6e 50 74 72 29 3b 0a 20 20 20 20 >tokenPtr);.
3380: 20 43 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 CompileWord(env
3390: 50 74 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 Ptr, tokenPtr, i
33a0: 6e 74 65 72 70 2c 31 29 3b 0a 40 40 20 2d 34 39 nterp,1);.@@ -49
33b0: 35 36 2c 34 38 20 2b 35 30 35 37 2c 37 20 40 40 56,48 +5057,7 @@
33c0: 0a 20 20 20 20 20 54 63 6c 5f 50 61 72 73 65 20 . Tcl_Parse
33d0: 2a 70 61 72 73 65 50 74 72 2c 0a 20 20 20 20 20 *parsePtr,.
33e0: 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65 6e 76 50 CompileEnv *envP
33f0: 74 72 29 0a 20 7b 0a 2d 20 20 20 20 54 63 6c 5f tr). {.- Tcl_
3400: 54 6f 6b 65 6e 20 2a 74 6f 6b 65 6e 50 74 72 3b Token *tokenPtr;
3410: 0a 2d 20 20 20 20 44 65 66 69 6e 65 4c 69 6e 65 .- DefineLine
3420: 49 6e 66 6f 72 6d 61 74 69 6f 6e 3b 20 2f 2a 20 Information; /*
3430: 54 49 50 20 23 32 38 30 20 2a 2f 0a 2d 0a 2d 20 TIP #280 */.-.-
3440: 20 20 20 69 66 20 28 70 61 72 73 65 50 74 72 2d if (parsePtr-
3450: 3e 6e 75 6d 57 6f 72 64 73 20 3c 20 33 29 20 7b >numWords < 3) {
3460: 0a 2d 09 50 75 73 68 4c 69 74 65 72 61 6c 28 65 .-.PushLiteral(e
3470: 6e 76 50 74 72 2c 20 22 31 22 2c 20 31 29 3b 0a nvPtr, "1", 1);.
3480: 2d 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 - } else if (
3490: 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 parsePtr->numWor
34a0: 64 73 20 3d 3d 20 33 29 20 7b 0a 2d 09 74 6f 6b ds == 3) {.-.tok
34b0: 65 6e 50 74 72 20 3d 20 54 6f 6b 65 6e 41 66 74 enPtr = TokenAft
34c0: 65 72 28 70 61 72 73 65 50 74 72 2d 3e 74 6f 6b er(parsePtr->tok
34d0: 65 6e 50 74 72 29 3b 0a 2d 09 43 6f 6d 70 69 6c enPtr);.-.Compil
34e0: 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 6f eWord(envPtr, to
34f0: 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c 31 kenPtr, interp,1
3500: 29 3b 0a 2d 09 74 6f 6b 65 6e 50 74 72 20 3d 20 );.-.tokenPtr =
3510: 54 6f 6b 65 6e 41 66 74 65 72 28 74 6f 6b 65 6e TokenAfter(token
3520: 50 74 72 29 3b 0a 2d 09 43 6f 6d 70 69 6c 65 57 Ptr);.-.CompileW
3530: 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 6f 6b 65 ord(envPtr, toke
3540: 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c 32 29 3b nPtr, interp,2);
3550: 0a 2d 09 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 .-.TclEmitOpcode
3560: 28 49 4e 53 54 5f 4c 54 2c 20 65 6e 76 50 74 72 (INST_LT, envPtr
3570: 29 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 69 );.- } else i
3580: 66 20 28 65 6e 76 50 74 72 2d 3e 70 72 6f 63 50 f (envPtr->procP
3590: 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d 09 tr == NULL) {.-.
35a0: 2f 2a 0a 2d 09 20 2a 20 4e 6f 20 6c 6f 63 61 6c /*.-. * No local
35b0: 20 76 61 72 69 61 62 6c 65 20 73 70 61 63 65 21 variable space!
35c0: 0a 2d 09 20 2a 2f 0a 2d 0a 2d 09 72 65 74 75 72 .-. */.-.-.retur
35d0: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d 20 20 n TCL_ERROR;.-
35e0: 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 69 6e 74 } else {.-.int
35f0: 20 74 6d 70 49 6e 64 65 78 20 3d 20 54 63 6c 46 tmpIndex = TclF
3600: 69 6e 64 43 6f 6d 70 69 6c 65 64 4c 6f 63 61 6c indCompiledLocal
3610: 28 4e 55 4c 4c 2c 20 30 2c 20 31 2c 20 56 41 52 (NULL, 0, 1, VAR
3620: 5f 53 43 41 4c 41 52 2c 0a 2d 09 09 65 6e 76 50 _SCALAR,.-..envP
3630: 74 72 2d 3e 70 72 6f 63 50 74 72 29 3b 0a 2d 09 tr->procPtr);.-.
3640: 69 6e 74 20 77 6f 72 64 73 3b 0a 2d 0a 2d 09 74 int words;.-.-.t
3650: 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 6e 41 okenPtr = TokenA
3660: 66 74 65 72 28 70 61 72 73 65 50 74 72 2d 3e 74 fter(parsePtr->t
3670: 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 6f 6d 70 okenPtr);.-.Comp
3680: 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 ileWord(envPtr,
3690: 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 tokenPtr, interp
36a0: 2c 31 29 3b 0a 2d 09 74 6f 6b 65 6e 50 74 72 20 ,1);.-.tokenPtr
36b0: 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 74 6f 6b = TokenAfter(tok
36c0: 65 6e 50 74 72 29 3b 0a 2d 09 43 6f 6d 70 69 6c enPtr);.-.Compil
36d0: 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 6f eWord(envPtr, to
36e0: 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c 32 kenPtr, interp,2
36f0: 29 3b 0a 2d 09 54 63 6c 45 6d 69 74 49 6e 73 74 );.-.TclEmitInst
3700: 49 6e 74 34 28 49 4e 53 54 5f 53 54 4f 52 45 5f Int4(INST_STORE_
3710: 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 6e 64 65 SCALAR4, tmpInde
3720: 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 54 63 x, envPtr);.-.Tc
3730: 6c 45 6d 69 74 4f 70 63 6f 64 65 28 49 4e 53 54 lEmitOpcode(INST
3740: 5f 4c 54 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 _LT, envPtr);.-.
3750: 66 6f 72 20 28 77 6f 72 64 73 3d 33 20 3b 20 77 for (words=3 ; w
3760: 6f 72 64 73 3c 70 61 72 73 65 50 74 72 2d 3e 6e ords<parsePtr->n
3770: 75 6d 57 6f 72 64 73 20 3b 29 20 7b 0a 2d 09 20 umWords ;) {.-.
3780: 20 20 20 54 63 6c 45 6d 69 74 49 6e 73 74 49 6e TclEmitInstIn
3790: 74 34 28 49 4e 53 54 5f 4c 4f 41 44 5f 53 43 41 t4(INST_LOAD_SCA
37a0: 4c 41 52 34 2c 20 74 6d 70 49 6e 64 65 78 2c 20 LAR4, tmpIndex,
37b0: 65 6e 76 50 74 72 29 3b 0a 2d 09 20 20 20 20 74 envPtr);.-. t
37c0: 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 6e 41 okenPtr = TokenA
37d0: 66 74 65 72 28 74 6f 6b 65 6e 50 74 72 29 3b 0a fter(tokenPtr);.
37e0: 2d 09 20 20 20 20 43 6f 6d 70 69 6c 65 57 6f 72 -. CompileWor
37f0: 64 28 65 6e 76 50 74 72 2c 20 74 6f 6b 65 6e 50 d(envPtr, tokenP
3800: 74 72 2c 20 69 6e 74 65 72 70 2c 20 77 6f 72 64 tr, interp, word
3810: 73 29 3b 0a 2d 09 20 20 20 20 69 66 20 28 2b 2b s);.-. if (++
3820: 77 6f 72 64 73 20 3c 20 70 61 72 73 65 50 74 72 words < parsePtr
3830: 2d 3e 6e 75 6d 57 6f 72 64 73 29 20 7b 0a 2d 09 ->numWords) {.-.
3840: 09 54 63 6c 45 6d 69 74 49 6e 73 74 49 6e 74 34 .TclEmitInstInt4
3850: 28 49 4e 53 54 5f 53 54 4f 52 45 5f 53 43 41 4c (INST_STORE_SCAL
3860: 41 52 34 2c 20 74 6d 70 49 6e 64 65 78 2c 20 65 AR4, tmpIndex, e
3870: 6e 76 50 74 72 29 3b 0a 2d 09 20 20 20 20 7d 0a nvPtr);.-. }.
3880: 2d 09 20 20 20 20 54 63 6c 45 6d 69 74 4f 70 63 -. TclEmitOpc
3890: 6f 64 65 28 49 4e 53 54 5f 4c 54 2c 20 65 6e 76 ode(INST_LT, env
38a0: 50 74 72 29 3b 0a 2d 09 7d 0a 2d 09 66 6f 72 20 Ptr);.-.}.-.for
38b0: 28 3b 20 77 6f 72 64 73 3e 33 20 3b 20 77 6f 72 (; words>3 ; wor
38c0: 64 73 2d 2d 29 20 7b 0a 2d 09 20 20 20 20 54 63 ds--) {.-. Tc
38d0: 6c 45 6d 69 74 4f 70 63 6f 64 65 28 49 4e 53 54 lEmitOpcode(INST
38e0: 5f 42 49 54 41 4e 44 2c 20 65 6e 76 50 74 72 29 _BITAND, envPtr)
38f0: 3b 0a 2d 09 7d 0a 2d 20 20 20 20 7d 0a 2d 20 20 ;.-.}.- }.-
3900: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b return TCL_OK;
3910: 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6d .+ return Com
3920: 70 69 6c 65 43 6f 6d 70 4f 70 43 6d 64 28 69 6e pileCompOpCmd(in
3930: 74 65 72 70 2c 20 70 61 72 73 65 50 74 72 2c 20 terp, parsePtr,
3940: 49 4e 53 54 5f 4c 54 2c 20 65 6e 76 50 74 72 29 INST_LT, envPtr)
3950: 3b 0a 20 7d 0a 20 0c 0a 20 69 6e 74 0a 40 40 20 ;. }. .. int.@@
3960: 2d 35 30 30 36 2c 34 38 20 2b 35 30 36 36 2c 37 -5006,48 +5066,7
3970: 20 40 40 0a 20 20 20 20 20 54 63 6c 5f 50 61 72 @@. Tcl_Par
3980: 73 65 20 2a 70 61 72 73 65 50 74 72 2c 0a 20 20 se *parsePtr,.
3990: 20 20 20 43 6f 6d 70 69 6c 65 45 6e 76 20 2a 65 CompileEnv *e
39a0: 6e 76 50 74 72 29 0a 20 7b 0a 2d 20 20 20 20 54 nvPtr). {.- T
39b0: 63 6c 5f 54 6f 6b 65 6e 20 2a 74 6f 6b 65 6e 50 cl_Token *tokenP
39c0: 74 72 3b 0a 2d 20 20 20 20 44 65 66 69 6e 65 4c tr;.- DefineL
39d0: 69 6e 65 49 6e 66 6f 72 6d 61 74 69 6f 6e 3b 20 ineInformation;
39e0: 2f 2a 20 54 49 50 20 23 32 38 30 20 2a 2f 0a 2d /* TIP #280 */.-
39f0: 0a 2d 20 20 20 20 69 66 20 28 70 61 72 73 65 50 .- if (parseP
3a00: 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 20 3c 20 33 tr->numWords < 3
3a10: 29 20 7b 0a 2d 09 50 75 73 68 4c 69 74 65 72 61 ) {.-.PushLitera
3a20: 6c 28 65 6e 76 50 74 72 2c 20 22 31 22 2c 20 31 l(envPtr, "1", 1
3a30: 29 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 69 );.- } else i
3a40: 66 20 28 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d f (parsePtr->num
3a50: 57 6f 72 64 73 20 3d 3d 20 33 29 20 7b 0a 2d 09 Words == 3) {.-.
3a60: 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 6e tokenPtr = Token
3a70: 41 66 74 65 72 28 70 61 72 73 65 50 74 72 2d 3e After(parsePtr->
3a80: 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 6f 6d tokenPtr);.-.Com
3a90: 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c pileWord(envPtr,
3aa0: 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 tokenPtr, inter
3ab0: 70 2c 31 29 3b 0a 2d 09 74 6f 6b 65 6e 50 74 72 p,1);.-.tokenPtr
3ac0: 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 74 6f = TokenAfter(to
3ad0: 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 6f 6d 70 69 kenPtr);.-.Compi
3ae0: 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 leWord(envPtr, t
3af0: 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c okenPtr, interp,
3b00: 32 29 3b 0a 2d 09 54 63 6c 45 6d 69 74 4f 70 63 2);.-.TclEmitOpc
3b10: 6f 64 65 28 49 4e 53 54 5f 4c 45 2c 20 65 6e 76 ode(INST_LE, env
3b20: 50 74 72 29 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 Ptr);.- } els
3b30: 65 20 69 66 20 28 65 6e 76 50 74 72 2d 3e 70 72 e if (envPtr->pr
3b40: 6f 63 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b ocPtr == NULL) {
3b50: 0a 2d 09 2f 2a 0a 2d 09 20 2a 20 4e 6f 20 6c 6f .-./*.-. * No lo
3b60: 63 61 6c 20 76 61 72 69 61 62 6c 65 20 73 70 61 cal variable spa
3b70: 63 65 21 0a 2d 09 20 2a 2f 0a 2d 0a 2d 09 72 65 ce!.-. */.-.-.re
3b80: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
3b90: 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 - } else {.-.
3ba0: 69 6e 74 20 74 6d 70 49 6e 64 65 78 20 3d 20 54 int tmpIndex = T
3bb0: 63 6c 46 69 6e 64 43 6f 6d 70 69 6c 65 64 4c 6f clFindCompiledLo
3bc0: 63 61 6c 28 4e 55 4c 4c 2c 20 30 2c 20 31 2c 20 cal(NULL, 0, 1,
3bd0: 56 41 52 5f 53 43 41 4c 41 52 2c 0a 2d 09 09 65 VAR_SCALAR,.-..e
3be0: 6e 76 50 74 72 2d 3e 70 72 6f 63 50 74 72 29 3b nvPtr->procPtr);
3bf0: 0a 2d 09 69 6e 74 20 77 6f 72 64 73 3b 0a 2d 0a .-.int words;.-.
3c00: 2d 09 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b -.tokenPtr = Tok
3c10: 65 6e 41 66 74 65 72 28 70 61 72 73 65 50 74 72 enAfter(parsePtr
3c20: 2d 3e 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 ->tokenPtr);.-.C
3c30: 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 ompileWord(envPt
3c40: 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 r, tokenPtr, int
3c50: 65 72 70 2c 31 29 3b 0a 2d 09 74 6f 6b 65 6e 50 erp,1);.-.tokenP
3c60: 74 72 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 tr = TokenAfter(
3c70: 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 6f 6d tokenPtr);.-.Com
3c80: 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c pileWord(envPtr,
3c90: 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 tokenPtr, inter
3ca0: 70 2c 32 29 3b 0a 2d 09 54 63 6c 45 6d 69 74 49 p,2);.-.TclEmitI
3cb0: 6e 73 74 49 6e 74 34 28 49 4e 53 54 5f 53 54 4f nstInt4(INST_STO
3cc0: 52 45 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 RE_SCALAR4, tmpI
3cd0: 6e 64 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2d ndex, envPtr);.-
3ce0: 09 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28 49 .TclEmitOpcode(I
3cf0: 4e 53 54 5f 4c 45 2c 20 65 6e 76 50 74 72 29 3b NST_LE, envPtr);
3d00: 0a 2d 09 66 6f 72 20 28 77 6f 72 64 73 3d 33 20 .-.for (words=3
3d10: 3b 20 77 6f 72 64 73 3c 70 61 72 73 65 50 74 72 ; words<parsePtr
3d20: 2d 3e 6e 75 6d 57 6f 72 64 73 20 3b 29 20 7b 0a ->numWords ;) {.
3d30: 2d 09 20 20 20 20 54 63 6c 45 6d 69 74 49 6e 73 -. TclEmitIns
3d40: 74 49 6e 74 34 28 49 4e 53 54 5f 4c 4f 41 44 5f tInt4(INST_LOAD_
3d50: 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 6e 64 65 SCALAR4, tmpInde
3d60: 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 20 20 x, envPtr);.-.
3d70: 20 20 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b tokenPtr = Tok
3d80: 65 6e 41 66 74 65 72 28 74 6f 6b 65 6e 50 74 72 enAfter(tokenPtr
3d90: 29 3b 0a 2d 09 20 20 20 20 43 6f 6d 70 69 6c 65 );.-. Compile
3da0: 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 6f 6b Word(envPtr, tok
3db0: 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c 77 6f enPtr, interp,wo
3dc0: 72 64 73 29 3b 0a 2d 09 20 20 20 20 69 66 20 28 rds);.-. if (
3dd0: 2b 2b 77 6f 72 64 73 20 3c 20 70 61 72 73 65 50 ++words < parseP
3de0: 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 29 20 7b 0a tr->numWords) {.
3df0: 2d 09 09 54 63 6c 45 6d 69 74 49 6e 73 74 49 6e -..TclEmitInstIn
3e00: 74 34 28 49 4e 53 54 5f 53 54 4f 52 45 5f 53 43 t4(INST_STORE_SC
3e10: 41 4c 41 52 34 2c 20 74 6d 70 49 6e 64 65 78 2c ALAR4, tmpIndex,
3e20: 20 65 6e 76 50 74 72 29 3b 0a 2d 09 20 20 20 20 envPtr);.-.
3e30: 7d 0a 2d 09 20 20 20 20 54 63 6c 45 6d 69 74 4f }.-. TclEmitO
3e40: 70 63 6f 64 65 28 49 4e 53 54 5f 4c 45 2c 20 65 pcode(INST_LE, e
3e50: 6e 76 50 74 72 29 3b 0a 2d 09 7d 0a 2d 09 66 6f nvPtr);.-.}.-.fo
3e60: 72 20 28 3b 20 77 6f 72 64 73 3e 33 20 3b 20 77 r (; words>3 ; w
3e70: 6f 72 64 73 2d 2d 29 20 7b 0a 2d 09 20 20 20 20 ords--) {.-.
3e80: 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28 49 4e TclEmitOpcode(IN
3e90: 53 54 5f 42 49 54 41 4e 44 2c 20 65 6e 76 50 74 ST_BITAND, envPt
3ea0: 72 29 3b 0a 2d 09 7d 0a 2d 20 20 20 20 7d 0a 2d r);.-.}.- }.-
3eb0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f return TCL_O
3ec0: 4b 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e 20 43 K;.+ return C
3ed0: 6f 6d 70 69 6c 65 43 6f 6d 70 4f 70 43 6d 64 28 ompileCompOpCmd(
3ee0: 69 6e 74 65 72 70 2c 20 70 61 72 73 65 50 74 72 interp, parsePtr
3ef0: 2c 20 49 4e 53 54 5f 4c 45 2c 20 65 6e 76 50 74 , INST_LE, envPt
3f00: 72 29 3b 0a 20 7d 0a 20 0c 0a 20 69 6e 74 0a 40 r);. }. .. int.@
3f10: 40 20 2d 35 30 35 36 2c 34 38 20 2b 35 30 37 35 @ -5056,48 +5075
3f20: 2c 37 20 40 40 0a 20 20 20 20 20 54 63 6c 5f 50 ,7 @@. Tcl_P
3f30: 61 72 73 65 20 2a 70 61 72 73 65 50 74 72 2c 0a arse *parsePtr,.
3f40: 20 20 20 20 20 43 6f 6d 70 69 6c 65 45 6e 76 20 CompileEnv
3f50: 2a 65 6e 76 50 74 72 29 0a 20 7b 0a 2d 20 20 20 *envPtr). {.-
3f60: 20 54 63 6c 5f 54 6f 6b 65 6e 20 2a 74 6f 6b 65 Tcl_Token *toke
3f70: 6e 50 74 72 3b 0a 2d 20 20 20 20 44 65 66 69 6e nPtr;.- Defin
3f80: 65 4c 69 6e 65 49 6e 66 6f 72 6d 61 74 69 6f 6e eLineInformation
3f90: 3b 20 2f 2a 20 54 49 50 20 23 32 38 30 20 2a 2f ; /* TIP #280 */
3fa0: 0a 2d 0a 2d 20 20 20 20 69 66 20 28 70 61 72 73 .-.- if (pars
3fb0: 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 20 3c ePtr->numWords <
3fc0: 20 33 29 20 7b 0a 2d 09 50 75 73 68 4c 69 74 65 3) {.-.PushLite
3fd0: 72 61 6c 28 65 6e 76 50 74 72 2c 20 22 31 22 2c ral(envPtr, "1",
3fe0: 20 31 29 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 1);.- } else
3ff0: 20 69 66 20 28 70 61 72 73 65 50 74 72 2d 3e 6e if (parsePtr->n
4000: 75 6d 57 6f 72 64 73 20 3d 3d 20 33 29 20 7b 0a umWords == 3) {.
4010: 2d 09 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b -.tokenPtr = Tok
4020: 65 6e 41 66 74 65 72 28 70 61 72 73 65 50 74 72 enAfter(parsePtr
4030: 2d 3e 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 ->tokenPtr);.-.C
4040: 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 ompileWord(envPt
4050: 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 r, tokenPtr, int
4060: 65 72 70 2c 31 29 3b 0a 2d 09 74 6f 6b 65 6e 50 erp,1);.-.tokenP
4070: 74 72 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 tr = TokenAfter(
4080: 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 6f 6d tokenPtr);.-.Com
4090: 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c pileWord(envPtr,
40a0: 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 tokenPtr, inter
40b0: 70 2c 32 29 3b 0a 2d 09 54 63 6c 45 6d 69 74 4f p,2);.-.TclEmitO
40c0: 70 63 6f 64 65 28 49 4e 53 54 5f 47 54 2c 20 65 pcode(INST_GT, e
40d0: 6e 76 50 74 72 29 3b 0a 2d 20 20 20 20 7d 20 65 nvPtr);.- } e
40e0: 6c 73 65 20 69 66 20 28 65 6e 76 50 74 72 2d 3e lse if (envPtr->
40f0: 70 72 6f 63 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 procPtr == NULL)
4100: 20 7b 0a 2d 09 2f 2a 0a 2d 09 20 2a 20 4e 6f 20 {.-./*.-. * No
4110: 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 20 73 local variable s
4120: 70 61 63 65 21 0a 2d 09 20 2a 2f 0a 2d 0a 2d 09 pace!.-. */.-.-.
4130: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
4140: 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a ;.- } else {.
4150: 2d 09 69 6e 74 20 74 6d 70 49 6e 64 65 78 20 3d -.int tmpIndex =
4160: 20 54 63 6c 46 69 6e 64 43 6f 6d 70 69 6c 65 64 TclFindCompiled
4170: 4c 6f 63 61 6c 28 4e 55 4c 4c 2c 20 30 2c 20 31 Local(NULL, 0, 1
4180: 2c 20 56 41 52 5f 53 43 41 4c 41 52 2c 0a 2d 09 , VAR_SCALAR,.-.
4190: 09 65 6e 76 50 74 72 2d 3e 70 72 6f 63 50 74 72 .envPtr->procPtr
41a0: 29 3b 0a 2d 09 69 6e 74 20 77 6f 72 64 73 3b 0a );.-.int words;.
41b0: 2d 0a 2d 09 74 6f 6b 65 6e 50 74 72 20 3d 20 54 -.-.tokenPtr = T
41c0: 6f 6b 65 6e 41 66 74 65 72 28 70 61 72 73 65 50 okenAfter(parseP
41d0: 74 72 2d 3e 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d tr->tokenPtr);.-
41e0: 09 43 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 .CompileWord(env
41f0: 50 74 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 Ptr, tokenPtr, i
4200: 6e 74 65 72 70 2c 31 29 3b 0a 2d 09 74 6f 6b 65 nterp,1);.-.toke
4210: 6e 50 74 72 20 3d 20 54 6f 6b 65 6e 41 66 74 65 nPtr = TokenAfte
4220: 72 28 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 r(tokenPtr);.-.C
4230: 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 ompileWord(envPt
4240: 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 r, tokenPtr, int
4250: 65 72 70 2c 32 29 3b 0a 2d 09 54 63 6c 45 6d 69 erp,2);.-.TclEmi
4260: 74 49 6e 73 74 49 6e 74 34 28 49 4e 53 54 5f 53 tInstInt4(INST_S
4270: 54 4f 52 45 5f 53 43 41 4c 41 52 34 2c 20 74 6d TORE_SCALAR4, tm
4280: 70 49 6e 64 65 78 2c 20 65 6e 76 50 74 72 29 3b pIndex, envPtr);
4290: 0a 2d 09 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 .-.TclEmitOpcode
42a0: 28 49 4e 53 54 5f 47 54 2c 20 65 6e 76 50 74 72 (INST_GT, envPtr
42b0: 29 3b 0a 2d 09 66 6f 72 20 28 77 6f 72 64 73 3d );.-.for (words=
42c0: 33 20 3b 20 77 6f 72 64 73 3c 70 61 72 73 65 50 3 ; words<parseP
42d0: 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 20 3b 29 20 tr->numWords ;)
42e0: 7b 0a 2d 09 20 20 20 20 54 63 6c 45 6d 69 74 49 {.-. TclEmitI
42f0: 6e 73 74 49 6e 74 34 28 49 4e 53 54 5f 4c 4f 41 nstInt4(INST_LOA
4300: 44 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 6e D_SCALAR4, tmpIn
4310: 64 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 dex, envPtr);.-.
4320: 20 20 20 20 74 6f 6b 65 6e 50 74 72 20 3d 20 54 tokenPtr = T
4330: 6f 6b 65 6e 41 66 74 65 72 28 74 6f 6b 65 6e 50 okenAfter(tokenP
4340: 74 72 29 3b 0a 2d 09 20 20 20 20 43 6f 6d 70 69 tr);.-. Compi
4350: 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 leWord(envPtr, t
4360: 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c okenPtr, interp,
4370: 77 6f 72 64 73 29 3b 0a 2d 09 20 20 20 20 69 66 words);.-. if
4380: 20 28 2b 2b 77 6f 72 64 73 20 3c 20 70 61 72 73 (++words < pars
4390: 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 29 20 ePtr->numWords)
43a0: 7b 0a 2d 09 09 54 63 6c 45 6d 69 74 49 6e 73 74 {.-..TclEmitInst
43b0: 49 6e 74 34 28 49 4e 53 54 5f 53 54 4f 52 45 5f Int4(INST_STORE_
43c0: 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 6e 64 65 SCALAR4, tmpInde
43d0: 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 20 20 x, envPtr);.-.
43e0: 20 20 7d 0a 2d 09 20 20 20 20 54 63 6c 45 6d 69 }.-. TclEmi
43f0: 74 4f 70 63 6f 64 65 28 49 4e 53 54 5f 47 54 2c tOpcode(INST_GT,
4400: 20 65 6e 76 50 74 72 29 3b 0a 2d 09 7d 0a 2d 09 envPtr);.-.}.-.
4410: 66 6f 72 20 28 3b 20 77 6f 72 64 73 3e 33 20 3b for (; words>3 ;
4420: 20 77 6f 72 64 73 2d 2d 29 20 7b 0a 2d 09 20 20 words--) {.-.
4430: 20 20 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28 TclEmitOpcode(
4440: 49 4e 53 54 5f 42 49 54 41 4e 44 2c 20 65 6e 76 INST_BITAND, env
4450: 50 74 72 29 3b 0a 2d 09 7d 0a 2d 20 20 20 20 7d Ptr);.-.}.- }
4460: 0a 2d 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c .- return TCL
4470: 5f 4f 4b 3b 0a 2b 20 20 20 20 72 65 74 75 72 6e _OK;.+ return
4480: 20 43 6f 6d 70 69 6c 65 43 6f 6d 70 4f 70 43 6d CompileCompOpCm
4490: 64 28 69 6e 74 65 72 70 2c 20 70 61 72 73 65 50 d(interp, parseP
44a0: 74 72 2c 20 49 4e 53 54 5f 47 54 2c 20 65 6e 76 tr, INST_GT, env
44b0: 50 74 72 29 3b 0a 20 7d 0a 20 0c 0a 20 69 6e 74 Ptr);. }. .. int
44c0: 0a 40 40 20 2d 35 31 30 36 2c 34 38 20 2b 35 30 .@@ -5106,48 +50
44d0: 38 34 2c 37 20 40 40 0a 20 20 20 20 20 54 63 6c 84,7 @@. Tcl
44e0: 5f 50 61 72 73 65 20 2a 70 61 72 73 65 50 74 72 _Parse *parsePtr
44f0: 2c 0a 20 20 20 20 20 43 6f 6d 70 69 6c 65 45 6e ,. CompileEn
4500: 76 20 2a 65 6e 76 50 74 72 29 0a 20 7b 0a 2d 20 v *envPtr). {.-
4510: 20 20 20 54 63 6c 5f 54 6f 6b 65 6e 20 2a 74 6f Tcl_Token *to
4520: 6b 65 6e 50 74 72 3b 0a 2d 20 20 20 20 44 65 66 kenPtr;.- Def
4530: 69 6e 65 4c 69 6e 65 49 6e 66 6f 72 6d 61 74 69 ineLineInformati
4540: 6f 6e 3b 20 2f 2a 20 54 49 50 20 23 32 38 30 20 on; /* TIP #280
4550: 2a 2f 0a 2d 0a 2d 20 20 20 20 69 66 20 28 70 61 */.-.- if (pa
4560: 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 rsePtr->numWords
4570: 20 3c 20 33 29 20 7b 0a 2d 09 50 75 73 68 4c 69 < 3) {.-.PushLi
4580: 74 65 72 61 6c 28 65 6e 76 50 74 72 2c 20 22 31 teral(envPtr, "1
4590: 22 2c 20 31 29 3b 0a 2d 20 20 20 20 7d 20 65 6c ", 1);.- } el
45a0: 73 65 20 69 66 20 28 70 61 72 73 65 50 74 72 2d se if (parsePtr-
45b0: 3e 6e 75 6d 57 6f 72 64 73 20 3d 3d 20 33 29 20 >numWords == 3)
45c0: 7b 0a 2d 09 74 6f 6b 65 6e 50 74 72 20 3d 20 54 {.-.tokenPtr = T
45d0: 6f 6b 65 6e 41 66 74 65 72 28 70 61 72 73 65 50 okenAfter(parseP
45e0: 74 72 2d 3e 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d tr->tokenPtr);.-
45f0: 09 43 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 .CompileWord(env
4600: 50 74 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 Ptr, tokenPtr, i
4610: 6e 74 65 72 70 2c 31 29 3b 0a 2d 09 74 6f 6b 65 nterp,1);.-.toke
4620: 6e 50 74 72 20 3d 20 54 6f 6b 65 6e 41 66 74 65 nPtr = TokenAfte
4630: 72 28 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 r(tokenPtr);.-.C
4640: 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 ompileWord(envPt
4650: 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 r, tokenPtr, int
4660: 65 72 70 2c 32 29 3b 0a 2d 09 54 63 6c 45 6d 69 erp,2);.-.TclEmi
4670: 74 4f 70 63 6f 64 65 28 49 4e 53 54 5f 47 45 2c tOpcode(INST_GE,
4680: 20 65 6e 76 50 74 72 29 3b 0a 2d 20 20 20 20 7d envPtr);.- }
4690: 20 65 6c 73 65 20 69 66 20 28 65 6e 76 50 74 72 else if (envPtr
46a0: 2d 3e 70 72 6f 63 50 74 72 20 3d 3d 20 4e 55 4c ->procPtr == NUL
46b0: 4c 29 20 7b 0a 2d 09 2f 2a 0a 2d 09 20 2a 20 4e L) {.-./*.-. * N
46c0: 6f 20 6c 6f 63 61 6c 20 76 61 72 69 61 62 6c 65 o local variable
46d0: 20 73 70 61 63 65 21 0a 2d 09 20 2a 2f 0a 2d 0a space!.-. */.-.
46e0: 2d 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 -.return TCL_ERR
46f0: 4f 52 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 OR;.- } else
4700: 7b 0a 2d 09 69 6e 74 20 74 6d 70 49 6e 64 65 78 {.-.int tmpIndex
4710: 20 3d 20 54 63 6c 46 69 6e 64 43 6f 6d 70 69 6c = TclFindCompil
4720: 65 64 4c 6f 63 61 6c 28 4e 55 4c 4c 2c 20 30 2c edLocal(NULL, 0,
4730: 20 31 2c 20 56 41 52 5f 53 43 41 4c 41 52 2c 0a 1, VAR_SCALAR,.
4740: 2d 09 09 65 6e 76 50 74 72 2d 3e 70 72 6f 63 50 -..envPtr->procP
4750: 74 72 29 3b 0a 2d 09 69 6e 74 20 77 6f 72 64 73 tr);.-.int words
4760: 3b 0a 2d 0a 2d 09 74 6f 6b 65 6e 50 74 72 20 3d ;.-.-.tokenPtr =
4770: 20 54 6f 6b 65 6e 41 66 74 65 72 28 70 61 72 73 TokenAfter(pars
4780: 65 50 74 72 2d 3e 74 6f 6b 65 6e 50 74 72 29 3b ePtr->tokenPtr);
4790: 0a 2d 09 43 6f 6d 70 69 6c 65 57 6f 72 64 28 65 .-.CompileWord(e
47a0: 6e 76 50 74 72 2c 20 74 6f 6b 65 6e 50 74 72 2c nvPtr, tokenPtr,
47b0: 20 69 6e 74 65 72 70 2c 31 29 3b 0a 2d 09 74 6f interp,1);.-.to
47c0: 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 6e 41 66 kenPtr = TokenAf
47d0: 74 65 72 28 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d ter(tokenPtr);.-
47e0: 09 43 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 .CompileWord(env
47f0: 50 74 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 Ptr, tokenPtr, i
4800: 6e 74 65 72 70 2c 32 29 3b 0a 2d 09 54 63 6c 45 nterp,2);.-.TclE
4810: 6d 69 74 49 6e 73 74 49 6e 74 34 28 49 4e 53 54 mitInstInt4(INST
4820: 5f 53 54 4f 52 45 5f 53 43 41 4c 41 52 34 2c 20 _STORE_SCALAR4,
4830: 74 6d 70 49 6e 64 65 78 2c 20 65 6e 76 50 74 72 tmpIndex, envPtr
4840: 29 3b 0a 2d 09 54 63 6c 45 6d 69 74 4f 70 63 6f );.-.TclEmitOpco
4850: 64 65 28 49 4e 53 54 5f 47 45 2c 20 65 6e 76 50 de(INST_GE, envP
4860: 74 72 29 3b 0a 2d 09 66 6f 72 20 28 77 6f 72 64 tr);.-.for (word
4870: 73 3d 33 20 3b 20 77 6f 72 64 73 3c 70 61 72 73 s=3 ; words<pars
4880: 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 20 3b ePtr->numWords ;
4890: 29 20 7b 0a 2d 09 20 20 20 20 54 63 6c 45 6d 69 ) {.-. TclEmi
48a0: 74 49 6e 73 74 49 6e 74 34 28 49 4e 53 54 5f 4c tInstInt4(INST_L
48b0: 4f 41 44 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 OAD_SCALAR4, tmp
48c0: 49 6e 64 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a Index, envPtr);.
48d0: 2d 09 20 20 20 20 74 6f 6b 65 6e 50 74 72 20 3d -. tokenPtr =
48e0: 20 54 6f 6b 65 6e 41 66 74 65 72 28 74 6f 6b 65 TokenAfter(toke
48f0: 6e 50 74 72 29 3b 0a 2d 09 20 20 20 20 43 6f 6d nPtr);.-. Com
4900: 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c pileWord(envPtr,
4910: 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 tokenPtr, inter
4920: 70 2c 20 77 6f 72 64 73 29 3b 0a 2d 09 20 20 20 p, words);.-.
4930: 20 69 66 20 28 2b 2b 77 6f 72 64 73 20 3c 20 70 if (++words < p
4940: 61 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 arsePtr->numWord
4950: 73 29 20 7b 0a 2d 09 09 54 63 6c 45 6d 69 74 49 s) {.-..TclEmitI
4960: 6e 73 74 49 6e 74 34 28 49 4e 53 54 5f 53 54 4f nstInt4(INST_STO
4970: 52 45 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 RE_SCALAR4, tmpI
4980: 6e 64 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2d ndex, envPtr);.-
4990: 09 20 20 20 20 7d 0a 2d 09 20 20 20 20 54 63 6c . }.-. Tcl
49a0: 45 6d 69 74 4f 70 63 6f 64 65 28 49 4e 53 54 5f EmitOpcode(INST_
49b0: 47 45 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 7d GE, envPtr);.-.}
49c0: 0a 2d 09 66 6f 72 20 28 3b 20 77 6f 72 64 73 3e .-.for (; words>
49d0: 33 20 3b 20 77 6f 72 64 73 2d 2d 29 20 7b 0a 2d 3 ; words--) {.-
49e0: 09 20 20 20 20 54 63 6c 45 6d 69 74 4f 70 63 6f . TclEmitOpco
49f0: 64 65 28 49 4e 53 54 5f 42 49 54 41 4e 44 2c 20 de(INST_BITAND,
4a00: 65 6e 76 50 74 72 29 3b 0a 2d 09 7d 0a 2d 20 20 envPtr);.-.}.-
4a10: 20 20 7d 0a 2d 20 20 20 20 72 65 74 75 72 6e 20 }.- return
4a20: 54 43 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 72 65 74 TCL_OK;.+ ret
4a30: 75 72 6e 20 43 6f 6d 70 69 6c 65 43 6f 6d 70 4f urn CompileCompO
4a40: 70 43 6d 64 28 69 6e 74 65 72 70 2c 20 70 61 72 pCmd(interp, par
4a50: 73 65 50 74 72 2c 20 49 4e 53 54 5f 47 45 2c 20 sePtr, INST_GE,
4a60: 65 6e 76 50 74 72 29 3b 0a 20 7d 0a 20 0c 0a 20 envPtr);. }. ..
4a70: 69 6e 74 0a 40 40 20 2d 35 31 35 36 2c 34 38 20 int.@@ -5156,48
4a80: 2b 35 30 39 33 2c 37 20 40 40 0a 20 20 20 20 20 +5093,7 @@.
4a90: 54 63 6c 5f 50 61 72 73 65 20 2a 70 61 72 73 65 Tcl_Parse *parse
4aa0: 50 74 72 2c 0a 20 20 20 20 20 43 6f 6d 70 69 6c Ptr,. Compil
4ab0: 65 45 6e 76 20 2a 65 6e 76 50 74 72 29 0a 20 7b eEnv *envPtr). {
4ac0: 0a 2d 20 20 20 20 54 63 6c 5f 54 6f 6b 65 6e 20 .- Tcl_Token
4ad0: 2a 74 6f 6b 65 6e 50 74 72 3b 0a 2d 20 20 20 20 *tokenPtr;.-
4ae0: 44 65 66 69 6e 65 4c 69 6e 65 49 6e 66 6f 72 6d DefineLineInform
4af0: 61 74 69 6f 6e 3b 20 2f 2a 20 54 49 50 20 23 32 ation; /* TIP #2
4b00: 38 30 20 2a 2f 0a 2d 0a 2d 20 20 20 20 69 66 20 80 */.-.- if
4b10: 28 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f (parsePtr->numWo
4b20: 72 64 73 20 3c 20 33 29 20 7b 0a 2d 09 50 75 73 rds < 3) {.-.Pus
4b30: 68 4c 69 74 65 72 61 6c 28 65 6e 76 50 74 72 2c hLiteral(envPtr,
4b40: 20 22 31 22 2c 20 31 29 3b 0a 2d 20 20 20 20 7d "1", 1);.- }
4b50: 20 65 6c 73 65 20 69 66 20 28 70 61 72 73 65 50 else if (parseP
4b60: 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 20 3d 3d 20 tr->numWords ==
4b70: 33 29 20 7b 0a 2d 09 74 6f 6b 65 6e 50 74 72 20 3) {.-.tokenPtr
4b80: 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 70 61 72 = TokenAfter(par
4b90: 73 65 50 74 72 2d 3e 74 6f 6b 65 6e 50 74 72 29 sePtr->tokenPtr)
4ba0: 3b 0a 2d 09 43 6f 6d 70 69 6c 65 57 6f 72 64 28 ;.-.CompileWord(
4bb0: 65 6e 76 50 74 72 2c 20 74 6f 6b 65 6e 50 74 72 envPtr, tokenPtr
4bc0: 2c 20 69 6e 74 65 72 70 2c 31 29 3b 0a 2d 09 74 , interp,1);.-.t
4bd0: 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 6e 41 okenPtr = TokenA
4be0: 66 74 65 72 28 74 6f 6b 65 6e 50 74 72 29 3b 0a fter(tokenPtr);.
4bf0: 2d 09 43 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e -.CompileWord(en
4c00: 76 50 74 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 vPtr, tokenPtr,
4c10: 69 6e 74 65 72 70 2c 32 29 3b 0a 2d 09 54 63 6c interp,2);.-.Tcl
4c20: 45 6d 69 74 4f 70 63 6f 64 65 28 49 4e 53 54 5f EmitOpcode(INST_
4c30: 45 51 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 20 20 EQ, envPtr);.-
4c40: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 65 6e 76 } else if (env
4c50: 50 74 72 2d 3e 70 72 6f 63 50 74 72 20 3d 3d 20 Ptr->procPtr ==
4c60: 4e 55 4c 4c 29 20 7b 0a 2d 09 2f 2a 0a 2d 09 20 NULL) {.-./*.-.
4c70: 2a 20 4e 6f 20 6c 6f 63 61 6c 20 76 61 72 69 61 * No local varia
4c80: 62 6c 65 20 73 70 61 63 65 21 0a 2d 09 20 2a 2f ble space!.-. */
4c90: 0a 2d 0a 2d 09 72 65 74 75 72 6e 20 54 43 4c 5f .-.-.return TCL_
4ca0: 45 52 52 4f 52 3b 0a 2d 20 20 20 20 7d 20 65 6c ERROR;.- } el
4cb0: 73 65 20 7b 0a 2d 09 69 6e 74 20 74 6d 70 49 6e se {.-.int tmpIn
4cc0: 64 65 78 20 3d 20 54 63 6c 46 69 6e 64 43 6f 6d dex = TclFindCom
4cd0: 70 69 6c 65 64 4c 6f 63 61 6c 28 4e 55 4c 4c 2c piledLocal(NULL,
4ce0: 20 30 2c 20 31 2c 20 56 41 52 5f 53 43 41 4c 41 0, 1, VAR_SCALA
4cf0: 52 2c 0a 2d 09 09 65 6e 76 50 74 72 2d 3e 70 72 R,.-..envPtr->pr
4d00: 6f 63 50 74 72 29 3b 0a 2d 09 69 6e 74 20 77 6f ocPtr);.-.int wo
4d10: 72 64 73 3b 0a 2d 0a 2d 09 74 6f 6b 65 6e 50 74 rds;.-.-.tokenPt
4d20: 72 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 70 r = TokenAfter(p
4d30: 61 72 73 65 50 74 72 2d 3e 74 6f 6b 65 6e 50 74 arsePtr->tokenPt
4d40: 72 29 3b 0a 2d 09 43 6f 6d 70 69 6c 65 57 6f 72 r);.-.CompileWor
4d50: 64 28 65 6e 76 50 74 72 2c 20 74 6f 6b 65 6e 50 d(envPtr, tokenP
4d60: 74 72 2c 20 69 6e 74 65 72 70 2c 31 29 3b 0a 2d tr, interp,1);.-
4d70: 09 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 .tokenPtr = Toke
4d80: 6e 41 66 74 65 72 28 74 6f 6b 65 6e 50 74 72 29 nAfter(tokenPtr)
4d90: 3b 0a 2d 09 43 6f 6d 70 69 6c 65 57 6f 72 64 28 ;.-.CompileWord(
4da0: 65 6e 76 50 74 72 2c 20 74 6f 6b 65 6e 50 74 72 envPtr, tokenPtr
4db0: 2c 20 69 6e 74 65 72 70 2c 32 29 3b 0a 2d 09 54 , interp,2);.-.T
4dc0: 63 6c 45 6d 69 74 49 6e 73 74 49 6e 74 34 28 49 clEmitInstInt4(I
4dd0: 4e 53 54 5f 53 54 4f 52 45 5f 53 43 41 4c 41 52 NST_STORE_SCALAR
4de0: 34 2c 20 74 6d 70 49 6e 64 65 78 2c 20 65 6e 76 4, tmpIndex, env
4df0: 50 74 72 29 3b 0a 2d 09 54 63 6c 45 6d 69 74 4f Ptr);.-.TclEmitO
4e00: 70 63 6f 64 65 28 49 4e 53 54 5f 45 51 2c 20 65 pcode(INST_EQ, e
4e10: 6e 76 50 74 72 29 3b 0a 2d 09 66 6f 72 20 28 77 nvPtr);.-.for (w
4e20: 6f 72 64 73 3d 33 20 3b 20 77 6f 72 64 73 3c 70 ords=3 ; words<p
4e30: 61 72 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 arsePtr->numWord
4e40: 73 20 3b 29 20 7b 0a 2d 09 20 20 20 20 54 63 6c s ;) {.-. Tcl
4e50: 45 6d 69 74 49 6e 73 74 49 6e 74 34 28 49 4e 53 EmitInstInt4(INS
4e60: 54 5f 4c 4f 41 44 5f 53 43 41 4c 41 52 34 2c 20 T_LOAD_SCALAR4,
4e70: 74 6d 70 49 6e 64 65 78 2c 20 65 6e 76 50 74 72 tmpIndex, envPtr
4e80: 29 3b 0a 2d 09 20 20 20 20 74 6f 6b 65 6e 50 74 );.-. tokenPt
4e90: 72 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 74 r = TokenAfter(t
4ea0: 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 20 20 20 20 okenPtr);.-.
4eb0: 43 6f 6d 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 CompileWord(envP
4ec0: 74 72 2c 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e tr, tokenPtr, in
4ed0: 74 65 72 70 2c 20 77 6f 72 64 73 29 3b 0a 2d 09 terp, words);.-.
4ee0: 20 20 20 20 69 66 20 28 2b 2b 77 6f 72 64 73 20 if (++words
4ef0: 3c 20 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d 57 < parsePtr->numW
4f00: 6f 72 64 73 29 20 7b 0a 2d 09 09 54 63 6c 45 6d ords) {.-..TclEm
4f10: 69 74 49 6e 73 74 49 6e 74 34 28 49 4e 53 54 5f itInstInt4(INST_
4f20: 53 54 4f 52 45 5f 53 43 41 4c 41 52 34 2c 20 74 STORE_SCALAR4, t
4f30: 6d 70 49 6e 64 65 78 2c 20 65 6e 76 50 74 72 29 mpIndex, envPtr)
4f40: 3b 0a 2d 09 20 20 20 20 7d 0a 2d 09 20 20 20 20 ;.-. }.-.
4f50: 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28 49 4e TclEmitOpcode(IN
4f60: 53 54 5f 45 51 2c 20 65 6e 76 50 74 72 29 3b 0a ST_EQ, envPtr);.
4f70: 2d 09 7d 0a 2d 09 66 6f 72 20 28 3b 20 77 6f 72 -.}.-.for (; wor
4f80: 64 73 3e 33 20 3b 20 77 6f 72 64 73 2d 2d 29 20 ds>3 ; words--)
4f90: 7b 0a 2d 09 20 20 20 20 54 63 6c 45 6d 69 74 4f {.-. TclEmitO
4fa0: 70 63 6f 64 65 28 49 4e 53 54 5f 42 49 54 41 4e pcode(INST_BITAN
4fb0: 44 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 7d 0a D, envPtr);.-.}.
4fc0: 2d 20 20 20 20 7d 0a 2d 20 20 20 20 72 65 74 75 - }.- retu
4fd0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 rn TCL_OK;.+
4fe0: 72 65 74 75 72 6e 20 43 6f 6d 70 69 6c 65 43 6f return CompileCo
4ff0: 6d 70 4f 70 43 6d 64 28 69 6e 74 65 72 70 2c 20 mpOpCmd(interp,
5000: 70 61 72 73 65 50 74 72 2c 20 49 4e 53 54 5f 45 parsePtr, INST_E
5010: 51 2c 20 65 6e 76 50 74 72 29 3b 0a 20 7d 0a 20 Q, envPtr);. }.
5020: 0c 0a 20 69 6e 74 0a 40 40 20 2d 35 32 30 36 2c .. int.@@ -5206,
5030: 34 38 20 2b 35 31 30 32 2c 37 20 40 40 0a 20 20 48 +5102,7 @@.
5040: 20 20 20 54 63 6c 5f 50 61 72 73 65 20 2a 70 61 Tcl_Parse *pa
5050: 72 73 65 50 74 72 2c 0a 20 20 20 20 20 43 6f 6d rsePtr,. Com
5060: 70 69 6c 65 45 6e 76 20 2a 65 6e 76 50 74 72 29 pileEnv *envPtr)
5070: 0a 20 7b 0a 2d 20 20 20 20 54 63 6c 5f 54 6f 6b . {.- Tcl_Tok
5080: 65 6e 20 2a 74 6f 6b 65 6e 50 74 72 3b 0a 2d 20 en *tokenPtr;.-
5090: 20 20 20 44 65 66 69 6e 65 4c 69 6e 65 49 6e 66 DefineLineInf
50a0: 6f 72 6d 61 74 69 6f 6e 3b 20 2f 2a 20 54 49 50 ormation; /* TIP
50b0: 20 23 32 38 30 20 2a 2f 0a 2d 0a 2d 20 20 20 20 #280 */.-.-
50c0: 69 66 20 28 70 61 72 73 65 50 74 72 2d 3e 6e 75 if (parsePtr->nu
50d0: 6d 57 6f 72 64 73 20 3c 20 33 29 20 7b 0a 2d 09 mWords < 3) {.-.
50e0: 50 75 73 68 4c 69 74 65 72 61 6c 28 65 6e 76 50 PushLiteral(envP
50f0: 74 72 2c 20 22 31 22 2c 20 31 29 3b 0a 2d 20 20 tr, "1", 1);.-
5100: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 70 61 72 } else if (par
5110: 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 20 sePtr->numWords
5120: 3d 3d 20 33 29 20 7b 0a 2d 09 74 6f 6b 65 6e 50 == 3) {.-.tokenP
5130: 74 72 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 tr = TokenAfter(
5140: 70 61 72 73 65 50 74 72 2d 3e 74 6f 6b 65 6e 50 parsePtr->tokenP
5150: 74 72 29 3b 0a 2d 09 43 6f 6d 70 69 6c 65 57 6f tr);.-.CompileWo
5160: 72 64 28 65 6e 76 50 74 72 2c 20 74 6f 6b 65 6e rd(envPtr, token
5170: 50 74 72 2c 20 69 6e 74 65 72 70 2c 31 29 3b 0a Ptr, interp,1);.
5180: 2d 09 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b -.tokenPtr = Tok
5190: 65 6e 41 66 74 65 72 28 74 6f 6b 65 6e 50 74 72 enAfter(tokenPtr
51a0: 29 3b 0a 2d 09 43 6f 6d 70 69 6c 65 57 6f 72 64 );.-.CompileWord
51b0: 28 65 6e 76 50 74 72 2c 20 74 6f 6b 65 6e 50 74 (envPtr, tokenPt
51c0: 72 2c 20 69 6e 74 65 72 70 2c 32 29 3b 0a 2d 09 r, interp,2);.-.
51d0: 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28 49 4e TclEmitOpcode(IN
51e0: 53 54 5f 53 54 52 5f 45 51 2c 20 65 6e 76 50 74 ST_STR_EQ, envPt
51f0: 72 29 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 r);.- } else
5200: 69 66 20 28 65 6e 76 50 74 72 2d 3e 70 72 6f 63 if (envPtr->proc
5210: 50 74 72 20 3d 3d 20 4e 55 4c 4c 29 20 7b 0a 2d Ptr == NULL) {.-
5220: 09 2f 2a 0a 2d 09 20 2a 20 4e 6f 20 6c 6f 63 61 ./*.-. * No loca
5230: 6c 20 76 61 72 69 61 62 6c 65 20 73 70 61 63 65 l variable space
5240: 21 0a 2d 09 20 2a 2f 0a 2d 0a 2d 09 72 65 74 75 !.-. */.-.-.retu
5250: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2d 20 rn TCL_ERROR;.-
5260: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 69 6e } else {.-.in
5270: 74 20 74 6d 70 49 6e 64 65 78 20 3d 20 54 63 6c t tmpIndex = Tcl
5280: 46 69 6e 64 43 6f 6d 70 69 6c 65 64 4c 6f 63 61 FindCompiledLoca
5290: 6c 28 4e 55 4c 4c 2c 20 30 2c 20 31 2c 20 56 41 l(NULL, 0, 1, VA
52a0: 52 5f 53 43 41 4c 41 52 2c 0a 2d 09 09 65 6e 76 R_SCALAR,.-..env
52b0: 50 74 72 2d 3e 70 72 6f 63 50 74 72 29 3b 0a 2d Ptr->procPtr);.-
52c0: 09 69 6e 74 20 77 6f 72 64 73 3b 0a 2d 0a 2d 09 .int words;.-.-.
52d0: 74 6f 6b 65 6e 50 74 72 20 3d 20 54 6f 6b 65 6e tokenPtr = Token
52e0: 41 66 74 65 72 28 70 61 72 73 65 50 74 72 2d 3e After(parsePtr->
52f0: 74 6f 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 6f 6d tokenPtr);.-.Com
5300: 70 69 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c pileWord(envPtr,
5310: 20 74 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 tokenPtr, inter
5320: 70 2c 31 29 3b 0a 2d 09 74 6f 6b 65 6e 50 74 72 p,1);.-.tokenPtr
5330: 20 3d 20 54 6f 6b 65 6e 41 66 74 65 72 28 74 6f = TokenAfter(to
5340: 6b 65 6e 50 74 72 29 3b 0a 2d 09 43 6f 6d 70 69 kenPtr);.-.Compi
5350: 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 leWord(envPtr, t
5360: 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c okenPtr, interp,
5370: 32 29 3b 0a 2d 09 54 63 6c 45 6d 69 74 49 6e 73 2);.-.TclEmitIns
5380: 74 49 6e 74 34 28 49 4e 53 54 5f 53 54 4f 52 45 tInt4(INST_STORE
5390: 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 6e 64 _SCALAR4, tmpInd
53a0: 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 54 ex, envPtr);.-.T
53b0: 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28 49 4e 53 clEmitOpcode(INS
53c0: 54 5f 53 54 52 5f 45 51 2c 20 65 6e 76 50 74 72 T_STR_EQ, envPtr
53d0: 29 3b 0a 2d 09 66 6f 72 20 28 77 6f 72 64 73 3d );.-.for (words=
53e0: 33 20 3b 20 77 6f 72 64 73 3c 70 61 72 73 65 50 3 ; words<parseP
53f0: 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 20 3b 29 20 tr->numWords ;)
5400: 7b 0a 2d 09 20 20 20 20 54 63 6c 45 6d 69 74 49 {.-. TclEmitI
5410: 6e 73 74 49 6e 74 34 28 49 4e 53 54 5f 4c 4f 41 nstInt4(INST_LOA
5420: 44 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 6e D_SCALAR4, tmpIn
5430: 64 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 dex, envPtr);.-.
5440: 20 20 20 20 74 6f 6b 65 6e 50 74 72 20 3d 20 54 tokenPtr = T
5450: 6f 6b 65 6e 41 66 74 65 72 28 74 6f 6b 65 6e 50 okenAfter(tokenP
5460: 74 72 29 3b 0a 2d 09 20 20 20 20 43 6f 6d 70 69 tr);.-. Compi
5470: 6c 65 57 6f 72 64 28 65 6e 76 50 74 72 2c 20 74 leWord(envPtr, t
5480: 6f 6b 65 6e 50 74 72 2c 20 69 6e 74 65 72 70 2c okenPtr, interp,
5490: 20 77 6f 72 64 73 29 3b 0a 2d 09 20 20 20 20 69 words);.-. i
54a0: 66 20 28 2b 2b 77 6f 72 64 73 20 3c 20 70 61 72 f (++words < par
54b0: 73 65 50 74 72 2d 3e 6e 75 6d 57 6f 72 64 73 29 sePtr->numWords)
54c0: 20 7b 0a 2d 09 09 54 63 6c 45 6d 69 74 49 6e 73 {.-..TclEmitIns
54d0: 74 49 6e 74 34 28 49 4e 53 54 5f 53 54 4f 52 45 tInt4(INST_STORE
54e0: 5f 53 43 41 4c 41 52 34 2c 20 74 6d 70 49 6e 64 _SCALAR4, tmpInd
54f0: 65 78 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 20 ex, envPtr);.-.
5500: 20 20 20 7d 0a 2d 09 20 20 20 20 54 63 6c 45 6d }.-. TclEm
5510: 69 74 4f 70 63 6f 64 65 28 49 4e 53 54 5f 53 54 itOpcode(INST_ST
5520: 52 5f 45 51 2c 20 65 6e 76 50 74 72 29 3b 0a 2d R_EQ, envPtr);.-
5530: 09 7d 0a 2d 09 66 6f 72 20 28 3b 20 77 6f 72 64 .}.-.for (; word
5540: 73 3e 33 20 3b 20 77 6f 72 64 73 2d 2d 29 20 7b s>3 ; words--) {
5550: 0a 2d 09 20 20 20 20 54 63 6c 45 6d 69 74 4f 70 .-. TclEmitOp
5560: 63 6f 64 65 28 49 4e 53 54 5f 42 49 54 41 4e 44 code(INST_BITAND
5570: 2c 20 65 6e 76 50 74 72 29 3b 0a 2d 09 7d 0a 2d , envPtr);.-.}.-
5580: 20 20 20 20 7d 0a 2d 20 20 20 20 72 65 74 75 72 }.- retur
5590: 6e 20 54 43 4c 5f 4f 4b 3b 0a 2b 20 20 20 20 72 n TCL_OK;.+ r
55a0: 65 74 75 72 6e 20 43 6f 6d 70 69 6c 65 43 6f 6d eturn CompileCom
55b0: 70 4f 70 43 6d 64 28 69 6e 74 65 72 70 2c 20 70 pOpCmd(interp, p
55c0: 61 72 73 65 50 74 72 2c 20 49 4e 53 54 5f 53 54 arsePtr, INST_ST
55d0: 52 5f 45 51 2c 20 65 6e 76 50 74 72 29 3b 0a 20 R_EQ, envPtr);.
55e0: 7d 0a 20 0c 0a 20 2f 2a 0a 64 69 66 66 20 2d 72 }. .. /*.diff -r
55f0: 75 20 2e 2e 2f 74 63 6c 2d 32 30 30 36 31 32 30 u ../tcl-2006120
5600: 36 2f 67 65 6e 65 72 69 63 2f 74 63 6c 45 78 65 6/generic/tclExe
5610: 63 75 74 65 2e 63 20 2e 2f 67 65 6e 65 72 69 63 cute.c ./generic
5620: 2f 74 63 6c 45 78 65 63 75 74 65 2e 63 0a 2d 2d /tclExecute.c.--
5630: 2d 20 2e 2e 2f 74 63 6c 2d 32 30 30 36 31 32 30 - ../tcl-2006120
5640: 36 2f 67 65 6e 65 72 69 63 2f 74 63 6c 45 78 65 6/generic/tclExe
5650: 63 75 74 65 2e 63 09 32 30 30 36 2d 31 32 2d 30 cute.c.2006-12-0
5660: 32 20 30 38 3a 30 33 3a 31 31 2e 30 30 30 30 30 2 08:03:11.00000
5670: 30 30 30 30 20 2b 30 31 30 30 0a 2b 2b 2b 20 2e 0000 +0100.+++ .
5680: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 45 78 65 63 /generic/tclExec
5690: 75 74 65 2e 63 09 32 30 30 36 2d 31 32 2d 30 37 ute.c.2006-12-07
56a0: 20 31 33 3a 32 36 3a 34 34 2e 30 30 30 30 30 30 13:26:44.000000
56b0: 30 30 30 20 2b 30 31 30 30 0a 40 40 20 2d 33 31 000 +0100.@@ -31
56c0: 34 35 2c 33 36 20 2b 33 31 34 35 2c 31 30 20 40 45,36 +3145,10 @
56d0: 40 0a 20 09 76 61 6c 75 65 32 50 74 72 20 3d 20 @. .value2Ptr =
56e0: 2a 74 6f 73 50 74 72 3b 0a 20 09 76 61 6c 75 65 *tosPtr;. .value
56f0: 50 74 72 20 3d 20 2a 28 74 6f 73 50 74 72 20 2d Ptr = *(tosPtr -
5700: 20 31 29 3b 0a 20 0a 2d 09 69 66 20 28 76 61 6c 1);. .-.if (val
5710: 75 65 50 74 72 20 3d 3d 20 76 61 6c 75 65 32 50 uePtr == value2P
5720: 74 72 29 20 7b 0a 2d 09 20 20 20 20 2f 2a 0a 2d tr) {.-. /*.-
5730: 09 20 20 20 20 20 2a 20 4f 6e 20 74 68 65 20 6f . * On the o
5740: 66 66 2d 63 68 61 6e 63 65 20 74 68 61 74 20 74 ff-chance that t
5750: 68 65 20 6f 62 6a 65 63 74 73 20 61 72 65 20 74 he objects are t
5760: 68 65 20 73 61 6d 65 2c 20 77 65 20 64 6f 6e 27 he same, we don'
5770: 74 0a 2d 09 20 20 20 20 20 2a 20 72 65 61 6c 6c t.-. * reall
5780: 79 20 68 61 76 65 20 74 6f 20 74 68 69 6e 6b 20 y have to think
5790: 68 61 72 64 20 61 62 6f 75 74 20 65 71 75 61 6c hard about equal
57a0: 69 74 79 2e 0a 2d 09 20 20 20 20 20 2a 2f 0a 2d ity..-. */.-
57b0: 0a 2d 09 20 20 20 20 69 52 65 73 75 6c 74 20 3d .-. iResult =
57c0: 20 28 2a 70 63 20 3d 3d 20 49 4e 53 54 5f 53 54 (*pc == INST_ST
57d0: 52 5f 45 51 29 3b 0a 2d 09 7d 20 65 6c 73 65 20 R_EQ);.-.} else
57e0: 7b 0a 2d 09 20 20 20 20 63 68 61 72 20 2a 73 31 {.-. char *s1
57f0: 2c 20 2a 73 32 3b 0a 2d 09 20 20 20 20 69 6e 74 , *s2;.-. int
5800: 20 73 31 6c 65 6e 2c 20 73 32 6c 65 6e 3b 0a 2d s1len, s2len;.-
5810: 0a 2d 09 20 20 20 20 73 31 20 3d 20 54 63 6c 5f .-. s1 = Tcl_
5820: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a GetStringFromObj
5830: 28 76 61 6c 75 65 50 74 72 2c 20 26 73 31 6c 65 (valuePtr, &s1le
5840: 6e 29 3b 0a 2d 09 20 20 20 20 73 32 20 3d 20 54 n);.-. s2 = T
5850: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d cl_GetStringFrom
5860: 4f 62 6a 28 76 61 6c 75 65 32 50 74 72 2c 20 26 Obj(value2Ptr, &
5870: 73 32 6c 65 6e 29 3b 0a 2d 09 20 20 20 20 69 66 s2len);.-. if
5880: 20 28 73 31 6c 65 6e 20 3d 3d 20 73 32 6c 65 6e (s1len == s2len
5890: 29 20 7b 0a 2d 09 09 2f 2a 0a 2d 09 09 20 2a 20 ) {.-../*.-.. *
58a0: 57 65 20 6f 6e 6c 79 20 6e 65 65 64 20 74 6f 20 We only need to
58b0: 63 68 65 63 6b 20 28 69 6e 29 65 71 75 61 6c 69 check (in)equali
58c0: 74 79 20 77 68 65 6e 20 77 65 20 68 61 76 65 20 ty when we have
58d0: 65 71 75 61 6c 0a 2d 09 09 20 2a 20 6c 65 6e 67 equal.-.. * leng
58e0: 74 68 20 73 74 72 69 6e 67 73 2e 0a 2d 09 09 20 th strings..-..
58f0: 2a 2f 0a 2d 0a 2d 09 09 69 66 20 28 2a 70 63 20 */.-.-..if (*pc
5900: 3d 3d 20 49 4e 53 54 5f 53 54 52 5f 4e 45 51 29 == INST_STR_NEQ)
5910: 20 7b 0a 2d 09 09 20 20 20 20 69 52 65 73 75 6c {.-.. iResul
5920: 74 20 3d 20 28 73 74 72 63 6d 70 28 73 31 2c 20 t = (strcmp(s1,
5930: 73 32 29 20 21 3d 20 30 29 3b 0a 2d 09 09 7d 20 s2) != 0);.-..}
5940: 65 6c 73 65 20 7b 0a 2d 09 09 20 20 20 20 2f 2a else {.-.. /*
5950: 20 49 4e 53 54 5f 53 54 52 5f 45 51 20 2a 2f 0a INST_STR_EQ */.
5960: 2d 09 09 20 20 20 20 69 52 65 73 75 6c 74 20 3d -.. iResult =
5970: 20 28 73 74 72 63 6d 70 28 73 31 2c 20 73 32 29 (strcmp(s1, s2)
5980: 20 3d 3d 20 30 29 3b 0a 2d 09 09 7d 0a 2d 09 20 == 0);.-..}.-.
5990: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 09 69 } else {.-..i
59a0: 52 65 73 75 6c 74 20 3d 20 28 2a 70 63 20 3d 3d Result = (*pc ==
59b0: 20 49 4e 53 54 5f 53 54 52 5f 4e 45 51 29 3b 0a INST_STR_NEQ);.
59c0: 2d 09 20 20 20 20 7d 0a 2b 09 69 52 65 73 75 6c -. }.+.iResul
59d0: 74 20 3d 20 54 63 6c 53 74 72 43 6f 6d 70 61 72 t = TclStrCompar
59e0: 65 28 76 61 6c 75 65 50 74 72 2c 20 76 61 6c 75 e(valuePtr, valu
59f0: 65 32 50 74 72 2c 20 30 2c 20 2d 31 2c 20 31 29 e2Ptr, 0, -1, 1)
5a00: 3b 0a 2b 09 69 66 20 28 2a 70 63 20 3d 3d 20 49 ;.+.if (*pc == I
5a10: 4e 53 54 5f 53 54 52 5f 45 51 29 20 7b 0a 2b 09 NST_STR_EQ) {.+.
5a20: 20 20 20 20 69 52 65 73 75 6c 74 20 3d 20 21 69 iResult = !i
5a30: 52 65 73 75 6c 74 3b 0a 20 09 7d 0a 2d 0a 20 09 Result;. .}.-. .
5a40: 54 52 41 43 45 28 28 22 25 2e 32 30 73 20 25 2e TRACE(("%.20s %.
5a50: 32 30 73 20 3d 3e 20 25 64 5c 6e 22 2c 20 4f 32 20s => %d\n", O2
5a60: 53 28 76 61 6c 75 65 50 74 72 29 2c 20 4f 32 53 S(valuePtr), O2S
5a70: 28 76 61 6c 75 65 32 50 74 72 29 2c 20 69 52 65 (value2Ptr), iRe
5a80: 73 75 6c 74 29 29 3b 0a 20 0a 20 09 2f 2a 0a 40 sult));. . ./*.@
5a90: 40 20 2d 33 32 30 33 2c 36 39 20 2b 33 31 37 37 @ -3203,69 +3177
5aa0: 2c 31 34 20 40 40 0a 20 09 20 2a 20 53 74 72 69 ,14 @@. . * Stri
5ab0: 6e 67 20 63 6f 6d 70 61 72 65 0a 20 09 20 2a 2f ng compare. . */
5ac0: 0a 20 0a 2d 09 43 4f 4e 53 54 20 63 68 61 72 20 . .-.CONST char
5ad0: 2a 73 31 2c 20 2a 73 32 3b 0a 2d 09 69 6e 74 20 *s1, *s2;.-.int
5ae0: 73 31 6c 65 6e 2c 20 73 32 6c 65 6e 2c 20 69 52 s1len, s2len, iR
5af0: 65 73 75 6c 74 3b 0a 2b 09 69 6e 74 20 69 52 65 esult;.+.int iRe
5b00: 73 75 6c 74 3b 0a 20 09 54 63 6c 5f 4f 62 6a 20 sult;. .Tcl_Obj
5b10: 2a 76 61 6c 75 65 50 74 72 2c 20 2a 76 61 6c 75 *valuePtr, *valu
5b20: 65 32 50 74 72 3b 0a 20 0a 20 20 20 20 20 73 74 e2Ptr;. . st
5b30: 72 69 6e 67 43 6f 6d 70 61 72 65 3a 0a 20 09 76 ringCompare:. .v
5b40: 61 6c 75 65 32 50 74 72 20 3d 20 2a 74 6f 73 50 alue2Ptr = *tosP
5b50: 74 72 3b 0a 20 09 76 61 6c 75 65 50 74 72 20 3d tr;. .valuePtr =
5b60: 20 2a 28 74 6f 73 50 74 72 20 2d 20 31 29 3b 0a *(tosPtr - 1);.
5b70: 20 0a 2d 09 2f 2a 0a 2d 09 20 2a 20 54 68 65 20 .-./*.-. * The
5b80: 63 6f 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 comparison funct
5b90: 69 6f 6e 20 73 68 6f 75 6c 64 20 63 6f 6d 70 61 ion should compa
5ba0: 72 65 20 75 70 20 74 6f 20 74 68 65 20 6d 69 6e re up to the min
5bb0: 69 6d 75 6d 20 62 79 74 65 0a 2d 09 20 2a 20 6c imum byte.-. * l
5bc0: 65 6e 67 74 68 20 6f 6e 6c 79 2e 0a 2d 09 20 2a ength only..-. *
5bd0: 2f 0a 2d 0a 2d 09 69 66 20 28 76 61 6c 75 65 50 /.-.-.if (valueP
5be0: 74 72 20 3d 3d 20 76 61 6c 75 65 32 50 74 72 29 tr == value2Ptr)
5bf0: 20 7b 0a 2d 09 20 20 20 20 2f 2a 0a 2d 09 20 20 {.-. /*.-.
5c00: 20 20 20 2a 20 49 6e 20 74 68 65 20 70 75 72 65 * In the pure
5c10: 20 65 71 75 61 6c 69 74 79 20 63 61 73 65 2c 20 equality case,
5c20: 73 65 74 20 6c 65 6e 67 74 68 73 20 74 6f 6f 20 set lengths too
5c30: 66 6f 72 20 74 68 65 20 63 68 65 63 6b 73 20 62 for the checks b
5c40: 65 6c 6f 77 0a 2d 09 20 20 20 20 20 2a 20 28 6f elow.-. * (o
5c50: 72 20 77 65 20 63 6f 75 6c 64 20 67 6f 74 6f 20 r we could goto
5c60: 62 65 79 6f 6e 64 20 69 74 29 2e 0a 2d 09 20 20 beyond it)..-.
5c70: 20 20 20 2a 2f 0a 2d 0a 2d 09 20 20 20 20 69 52 */.-.-. iR
5c80: 65 73 75 6c 74 20 3d 20 73 31 6c 65 6e 20 3d 20 esult = s1len =
5c90: 73 32 6c 65 6e 20 3d 20 30 3b 0a 2d 09 7d 20 65 s2len = 0;.-.} e
5ca0: 6c 73 65 20 69 66 20 28 28 76 61 6c 75 65 50 74 lse if ((valuePt
5cb0: 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 26 74 r->typePtr == &t
5cc0: 63 6c 42 79 74 65 41 72 72 61 79 54 79 70 65 29 clByteArrayType)
5cd0: 0a 2d 09 09 26 26 20 28 76 61 6c 75 65 32 50 74 .-..&& (value2Pt
5ce0: 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 26 74 r->typePtr == &t
5cf0: 63 6c 42 79 74 65 41 72 72 61 79 54 79 70 65 29 clByteArrayType)
5d00: 29 20 7b 0a 2d 09 20 20 20 20 73 31 20 3d 20 28 ) {.-. s1 = (
5d10: 63 68 61 72 20 2a 29 20 54 63 6c 5f 47 65 74 42 char *) Tcl_GetB
5d20: 79 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 yteArrayFromObj(
5d30: 76 61 6c 75 65 50 74 72 2c 20 26 73 31 6c 65 6e valuePtr, &s1len
5d40: 29 3b 0a 2d 09 20 20 20 20 73 32 20 3d 20 28 63 );.-. s2 = (c
5d50: 68 61 72 20 2a 29 20 54 63 6c 5f 47 65 74 42 79 har *) Tcl_GetBy
5d60: 74 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 76 teArrayFromObj(v
5d70: 61 6c 75 65 32 50 74 72 2c 20 26 73 32 6c 65 6e alue2Ptr, &s2len
5d80: 29 3b 0a 2d 09 20 20 20 20 69 52 65 73 75 6c 74 );.-. iResult
5d90: 20 3d 20 6d 65 6d 63 6d 70 28 73 31 2c 20 73 32 = memcmp(s1, s2
5da0: 2c 0a 2d 09 09 20 20 20 20 28 73 69 7a 65 5f 74 ,.-.. (size_t
5db0: 29 20 28 28 73 31 6c 65 6e 20 3c 20 73 32 6c 65 ) ((s1len < s2le
5dc0: 6e 29 20 3f 20 73 31 6c 65 6e 20 3a 20 73 32 6c n) ? s1len : s2l
5dd0: 65 6e 29 29 3b 0a 2d 09 7d 20 65 6c 73 65 20 69 en));.-.} else i
5de0: 66 20 28 28 28 76 61 6c 75 65 50 74 72 2d 3e 74 f (((valuePtr->t
5df0: 79 70 65 50 74 72 20 3d 3d 20 26 74 63 6c 53 74 ypePtr == &tclSt
5e00: 72 69 6e 67 54 79 70 65 29 0a 2d 09 09 26 26 20 ringType).-..&&
5e10: 28 76 61 6c 75 65 32 50 74 72 2d 3e 74 79 70 65 (value2Ptr->type
5e20: 50 74 72 20 3d 3d 20 26 74 63 6c 53 74 72 69 6e Ptr == &tclStrin
5e30: 67 54 79 70 65 29 29 29 20 7b 0a 2d 09 20 20 20 gType))) {.-.
5e40: 20 2f 2a 0a 2d 09 20 20 20 20 20 2a 20 44 6f 20 /*.-. * Do
5e50: 61 20 75 6e 69 63 6f 64 65 2d 73 70 65 63 69 66 a unicode-specif
5e60: 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 66 ic comparison if
5e70: 20 62 6f 74 68 20 6f 66 20 74 68 65 20 61 72 67 both of the arg
5e80: 73 20 61 72 65 20 6f 66 0a 2d 09 20 20 20 20 20 s are of.-.
5e90: 2a 20 53 74 72 69 6e 67 20 74 79 70 65 2e 20 49 * String type. I
5ea0: 66 20 74 68 65 20 63 68 61 72 20 6c 65 6e 67 74 f the char lengt
5eb0: 68 20 3d 3d 20 62 79 74 65 20 6c 65 6e 67 74 68 h == byte length
5ec0: 2c 20 77 65 20 63 61 6e 20 64 6f 20 61 0a 2d 09 , we can do a.-.
5ed0: 20 20 20 20 20 2a 20 6d 65 6d 63 6d 70 2e 20 49 * memcmp. I
5ee0: 6e 20 62 65 6e 63 68 6d 61 72 6b 20 74 65 73 74 n benchmark test
5ef0: 69 6e 67 20 74 68 69 73 20 70 72 6f 76 65 64 20 ing this proved
5f00: 74 68 65 20 6d 6f 73 74 20 65 66 66 69 63 69 65 the most efficie
5f10: 6e 74 0a 2d 09 20 20 20 20 20 2a 20 63 68 65 63 nt.-. * chec
5f20: 6b 20 62 65 74 77 65 65 6e 20 74 68 65 20 75 6e k between the un
5f30: 69 63 6f 64 65 20 61 6e 64 20 73 74 72 69 6e 67 icode and string
5f40: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 comparison oper
5f50: 61 74 69 6f 6e 73 2e 0a 2d 09 20 20 20 20 20 2a ations..-. *
5f60: 2f 0a 2d 0a 2d 09 20 20 20 20 73 31 6c 65 6e 20 /.-.-. s1len
5f70: 3d 20 54 63 6c 5f 47 65 74 43 68 61 72 4c 65 6e = Tcl_GetCharLen
5f80: 67 74 68 28 76 61 6c 75 65 50 74 72 29 3b 0a 2d gth(valuePtr);.-
5f90: 09 20 20 20 20 73 32 6c 65 6e 20 3d 20 54 63 6c . s2len = Tcl
5fa0: 5f 47 65 74 43 68 61 72 4c 65 6e 67 74 68 28 76 _GetCharLength(v
5fb0: 61 6c 75 65 32 50 74 72 29 3b 0a 2d 09 20 20 20 alue2Ptr);.-.
5fc0: 20 69 66 20 28 28 73 31 6c 65 6e 20 3d 3d 20 76 if ((s1len == v
5fd0: 61 6c 75 65 50 74 72 2d 3e 6c 65 6e 67 74 68 29 aluePtr->length)
5fe0: 20 26 26 20 28 73 32 6c 65 6e 20 3d 3d 20 76 61 && (s2len == va
5ff0: 6c 75 65 32 50 74 72 2d 3e 6c 65 6e 67 74 68 29 lue2Ptr->length)
6000: 29 20 7b 0a 2d 09 09 69 52 65 73 75 6c 74 20 3d ) {.-..iResult =
6010: 20 6d 65 6d 63 6d 70 28 76 61 6c 75 65 50 74 72 memcmp(valuePtr
6020: 2d 3e 62 79 74 65 73 2c 20 76 61 6c 75 65 32 50 ->bytes, value2P
6030: 74 72 2d 3e 62 79 74 65 73 2c 0a 2d 09 09 09 28 tr->bytes,.-...(
6040: 75 6e 73 69 67 6e 65 64 29 20 28 28 73 31 6c 65 unsigned) ((s1le
6050: 6e 20 3c 20 73 32 6c 65 6e 29 20 3f 20 73 31 6c n < s2len) ? s1l
6060: 65 6e 20 3a 20 73 32 6c 65 6e 29 29 3b 0a 2d 09 en : s2len));.-.
6070: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 09 } else {.-..
6080: 69 52 65 73 75 6c 74 20 3d 20 54 63 6c 55 6e 69 iResult = TclUni
6090: 43 68 61 72 4e 63 6d 70 28 54 63 6c 5f 47 65 74 CharNcmp(Tcl_Get
60a0: 55 6e 69 63 6f 64 65 28 76 61 6c 75 65 50 74 72 Unicode(valuePtr
60b0: 29 2c 0a 2d 09 09 09 54 63 6c 5f 47 65 74 55 6e ),.-...Tcl_GetUn
60c0: 69 63 6f 64 65 28 76 61 6c 75 65 32 50 74 72 29 icode(value2Ptr)
60d0: 2c 0a 2d 09 09 09 28 75 6e 73 69 67 6e 65 64 29 ,.-...(unsigned)
60e0: 20 28 28 73 31 6c 65 6e 20 3c 20 73 32 6c 65 6e ((s1len < s2len
60f0: 29 20 3f 20 73 31 6c 65 6e 20 3a 20 73 32 6c 65 ) ? s1len : s2le
6100: 6e 29 29 3b 0a 2d 09 20 20 20 20 7d 0a 2d 09 7d n));.-. }.-.}
6110: 20 65 6c 73 65 20 7b 0a 2d 09 20 20 20 20 2f 2a else {.-. /*
6120: 0a 2d 09 20 20 20 20 20 2a 20 57 65 20 63 61 6e .-. * We can
6130: 27 74 20 64 6f 20 61 20 73 69 6d 70 6c 65 20 6d 't do a simple m
6140: 65 6d 63 6d 70 20 69 6e 20 6f 72 64 65 72 20 74 emcmp in order t
6150: 6f 20 68 61 6e 64 6c 65 20 74 68 65 20 73 70 65 o handle the spe
6160: 63 69 61 6c 20 54 63 6c 0a 2d 09 20 20 20 20 20 cial Tcl.-.
6170: 2a 20 5c 78 43 30 5c 78 38 30 20 6e 75 6c 6c 20 * \xC0\x80 null
6180: 65 6e 63 6f 64 69 6e 67 20 66 6f 72 20 75 74 66 encoding for utf
6190: 2d 38 2e 0a 2d 09 20 20 20 20 20 2a 2f 0a 2d 09 -8..-. */.-.
61a0: 20 20 20 20 73 31 20 3d 20 54 63 6c 5f 47 65 74 s1 = Tcl_Get
61b0: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 76 61 StringFromObj(va
61c0: 6c 75 65 50 74 72 2c 20 26 73 31 6c 65 6e 29 3b luePtr, &s1len);
61d0: 0a 2d 09 20 20 20 20 73 32 20 3d 20 54 63 6c 5f .-. s2 = Tcl_
61e0: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a GetStringFromObj
61f0: 28 76 61 6c 75 65 32 50 74 72 2c 20 26 73 32 6c (value2Ptr, &s2l
6200: 65 6e 29 3b 0a 2d 09 20 20 20 20 69 52 65 73 75 en);.-. iResu
6210: 6c 74 20 3d 20 54 63 6c 70 55 74 66 4e 63 6d 70 lt = TclpUtfNcmp
6220: 32 28 73 31 2c 20 73 32 2c 0a 2d 09 09 20 20 20 2(s1, s2,.-..
6230: 20 28 73 69 7a 65 5f 74 29 20 28 28 73 31 6c 65 (size_t) ((s1le
6240: 6e 20 3c 20 73 32 6c 65 6e 29 20 3f 20 73 31 6c n < s2len) ? s1l
6250: 65 6e 20 3a 20 73 32 6c 65 6e 29 29 3b 0a 2d 09 en : s2len));.-.
6260: 7d 0a 2d 0a 2d 09 2f 2a 0a 2d 09 20 2a 20 4d 61 }.-.-./*.-. * Ma
6270: 6b 65 20 73 75 72 65 20 6f 6e 6c 79 20 2d 31 2c ke sure only -1,
6280: 30 2c 31 20 69 73 20 72 65 74 75 72 6e 65 64 0a 0,1 is returned.
6290: 2d 09 20 2a 20 54 4f 44 4f 3a 20 63 6f 6e 73 69 -. * TODO: consi
62a0: 64 65 72 20 70 65 65 70 68 6f 6c 65 20 6f 70 74 der peephole opt
62b0: 2e 0a 2d 09 20 2a 2f 0a 2d 09 69 66 20 28 69 52 ..-. */.-.if (iR
62c0: 65 73 75 6c 74 20 3d 3d 20 30 29 20 7b 0a 2d 09 esult == 0) {.-.
62d0: 20 20 20 20 69 52 65 73 75 6c 74 20 3d 20 73 31 iResult = s1
62e0: 6c 65 6e 20 2d 20 73 32 6c 65 6e 3b 0a 2d 09 7d len - s2len;.-.}
62f0: 0a 2b 09 69 52 65 73 75 6c 74 20 3d 20 54 63 6c .+.iResult = Tcl
6300: 53 74 72 43 6f 6d 70 61 72 65 28 76 61 6c 75 65 StrCompare(value
6310: 50 74 72 2c 20 76 61 6c 75 65 32 50 74 72 2c 20 Ptr, value2Ptr,
6320: 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 0a 20 09 69 0, -1, 0);. . .i
6330: 66 20 28 2a 70 63 20 21 3d 20 49 4e 53 54 5f 53 f (*pc != INST_S
6340: 54 52 5f 43 4d 50 29 20 7b 0a 20 09 20 20 20 20 TR_CMP) {. .
6350: 2f 2a 20 54 61 6b 65 20 63 61 72 65 20 6f 66 20 /* Take care of
6360: 74 68 65 20 6f 70 63 6f 64 65 73 20 74 68 61 74 the opcodes that
6370: 20 67 6f 74 6f 27 65 64 20 69 6e 74 6f 20 68 65 goto'ed into he
6380: 72 65 20 2a 2f 0a 40 40 20 2d 33 39 34 32 2c 37 re */.@@ -3942,7
6390: 20 2b 33 38 36 31 2c 31 32 20 40 40 0a 20 0a 20 +3861,12 @@. .
63a0: 09 69 66 20 28 2a 70 63 20 3d 3d 20 49 4e 53 54 .if (*pc == INST
63b0: 5f 4c 53 48 49 46 54 29 20 7b 0a 20 09 20 20 20 _LSHIFT) {. .
63c0: 20 2f 2a 20 4c 61 72 67 65 20 6c 65 66 74 20 73 /* Large left s
63d0: 68 69 66 74 73 20 63 72 65 61 74 65 20 69 6e 74 hifts create int
63e0: 65 67 65 72 20 6f 76 65 72 66 6c 6f 77 20 2a 2f eger overflow */
63f0: 0a 2d 09 20 20 20 20 72 65 73 75 6c 74 20 3d 20 .-. result =
6400: 54 63 6c 5f 47 65 74 49 6e 74 46 72 6f 6d 4f 62 Tcl_GetIntFromOb
6410: 6a 28 4e 55 4c 4c 2c 20 76 61 6c 75 65 32 50 74 j(NULL, value2Pt
6420: 72 2c 20 26 73 68 69 66 74 29 3b 0a 2b 09 20 20 r, &shift);.+.
6430: 20 20 69 66 20 28 28 74 79 70 65 32 20 21 3d 20 if ((type2 !=
6440: 54 43 4c 5f 4e 55 4d 42 45 52 5f 4c 4f 4e 47 29 TCL_NUMBER_LONG)
6450: 20 7c 7c 0a 2b 09 09 20 20 20 20 28 2a 28 28 63 ||.+.. (*((c
6460: 6f 6e 73 74 20 6c 6f 6e 67 20 2a 29 70 74 72 32 onst long *)ptr2
6470: 29 20 3e 20 28 6c 6f 6e 67 29 20 49 4e 54 5f 4d ) > (long) INT_M
6480: 41 58 29 29 20 7b 0a 2b 09 09 72 65 73 75 6c 74 AX)) {.+..result
6490: 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 = TCL_ERROR;.+.
64a0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 09 09 } else {.+..
64b0: 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 47 65 74 result = Tcl_Get
64c0: 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c IntFromObj(NULL,
64d0: 20 76 61 6c 75 65 32 50 74 72 2c 20 26 73 68 69 value2Ptr, &shi
64e0: 66 74 29 3b 0a 2b 09 20 20 20 20 7d 0a 20 09 20 ft);.+. }. .
64f0: 20 20 20 69 66 20 28 72 65 73 75 6c 74 20 21 3d if (result !=
6500: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 20 09 09 2f 2a TCL_OK) {. ../*
6510: 0a 20 09 09 20 2a 20 54 65 63 68 6e 69 63 61 6c . .. * Technical
6520: 6c 79 2c 20 77 65 20 63 6f 75 6c 64 20 68 6f 6c ly, we could hol
6530: 64 20 74 68 65 20 76 61 6c 75 65 20 28 31 20 3c d the value (1 <
6540: 3c 20 28 49 4e 54 5f 4d 41 58 2b 31 29 29 20 69 < (INT_MAX+1)) i
6550: 6e 0a 40 40 20 2d 34 31 31 37 2c 31 31 35 20 2b n.@@ -4117,115 +
6560: 34 30 34 31 2c 31 33 20 40 40 0a 20 0a 20 09 69 4041,13 @@. . .i
6570: 66 20 28 28 74 79 70 65 31 20 3d 3d 20 54 43 4c f ((type1 == TCL
6580: 5f 4e 55 4d 42 45 52 5f 42 49 47 29 20 7c 7c 20 _NUMBER_BIG) ||
6590: 28 74 79 70 65 32 20 3d 3d 20 54 43 4c 5f 4e 55 (type2 == TCL_NU
65a0: 4d 42 45 52 5f 42 49 47 29 29 20 7b 0a 20 09 20 MBER_BIG)) {. .
65b0: 20 20 20 6d 70 5f 69 6e 74 20 62 69 67 31 2c 20 mp_int big1,
65c0: 62 69 67 32 2c 20 62 69 67 52 65 73 75 6c 74 3b big2, bigResult;
65d0: 0a 2d 09 20 20 20 20 6d 70 5f 69 6e 74 20 2a 46 .-. mp_int *F
65e0: 69 72 73 74 2c 20 2a 53 65 63 6f 6e 64 3b 0a 2d irst, *Second;.-
65f0: 09 20 20 20 20 69 6e 74 20 6e 75 6d 50 6f 73 3b . int numPos;
6600: 0a 20 0a 20 09 20 20 20 20 54 63 6c 5f 54 61 6b . . . Tcl_Tak
6610: 65 42 69 67 6e 75 6d 46 72 6f 6d 4f 62 6a 28 4e eBignumFromObj(N
6620: 55 4c 4c 2c 20 76 61 6c 75 65 50 74 72 2c 20 26 ULL, valuePtr, &
6630: 62 69 67 31 29 3b 0a 20 09 20 20 20 20 54 63 6c big1);. . Tcl
6640: 5f 54 61 6b 65 42 69 67 6e 75 6d 46 72 6f 6d 4f _TakeBignumFromO
6650: 62 6a 28 4e 55 4c 4c 2c 20 76 61 6c 75 65 32 50 bj(NULL, value2P
6660: 74 72 2c 20 26 62 69 67 32 29 3b 0a 20 0a 2d 09 tr, &big2);. .-.
6670: 20 20 20 20 2f 2a 0a 2d 09 20 20 20 20 20 2a 20 /*.-. *
6680: 43 6f 75 6e 74 20 68 6f 77 20 6d 61 6e 79 20 70 Count how many p
6690: 6f 73 69 74 69 76 65 20 61 72 67 75 6d 65 6e 74 ositive argument
66a0: 73 20 77 65 20 68 61 76 65 2e 20 49 66 20 6f 6e s we have. If on
66b0: 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2d 09 ly one of the.-.
66c0: 20 20 20 20 20 2a 20 61 72 67 75 6d 65 6e 74 73 * arguments
66d0: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 73 74 is negative, st
66e0: 6f 72 65 20 69 74 20 69 6e 20 27 53 65 63 6f 6e ore it in 'Secon
66f0: 64 27 2e 0a 2d 09 20 20 20 20 20 2a 2f 0a 2d 0a d'..-. */.-.
6700: 2d 09 20 20 20 20 69 66 20 28 6d 70 5f 63 6d 70 -. if (mp_cmp
6710: 5f 64 28 26 62 69 67 31 2c 20 30 29 20 21 3d 20 _d(&big1, 0) !=
6720: 4d 50 5f 4c 54 29 20 7b 0a 2d 09 09 6e 75 6d 50 MP_LT) {.-..numP
6730: 6f 73 20 3d 20 31 20 2b 20 28 6d 70 5f 63 6d 70 os = 1 + (mp_cmp
6740: 5f 64 28 26 62 69 67 32 2c 20 30 29 20 21 3d 20 _d(&big2, 0) !=
6750: 4d 50 5f 4c 54 29 3b 0a 2d 09 09 46 69 72 73 74 MP_LT);.-..First
6760: 20 20 3d 20 26 62 69 67 31 3b 0a 2d 09 09 53 65 = &big1;.-..Se
6770: 63 6f 6e 64 20 3d 20 26 62 69 67 32 3b 0a 2d 09 cond = &big2;.-.
6780: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 09 } else {.-..
6790: 46 69 72 73 74 20 20 3d 20 26 62 69 67 32 3b 0a First = &big2;.
67a0: 2d 09 09 53 65 63 6f 6e 64 20 3d 20 26 62 69 67 -..Second = &big
67b0: 31 3b 0a 2d 09 09 6e 75 6d 50 6f 73 20 3d 20 28 1;.-..numPos = (
67c0: 6d 70 5f 63 6d 70 5f 64 28 46 69 72 73 74 2c 20 mp_cmp_d(First,
67d0: 30 29 20 21 3d 20 4d 50 5f 4c 54 29 3b 0a 2d 09 0) != MP_LT);.-.
67e0: 20 20 20 20 7d 0a 20 09 20 20 20 20 6d 70 5f 69 }. . mp_i
67f0: 6e 69 74 28 26 62 69 67 52 65 73 75 6c 74 29 3b nit(&bigResult);
6800: 0a 20 0a 2d 09 20 20 20 20 73 77 69 74 63 68 20 . .-. switch
6810: 28 2a 70 63 29 20 7b 0a 2d 09 20 20 20 20 63 61 (*pc) {.-. ca
6820: 73 65 20 49 4e 53 54 5f 42 49 54 41 4e 44 3a 0a se INST_BITAND:.
6830: 2d 09 09 73 77 69 74 63 68 20 28 6e 75 6d 50 6f -..switch (numPo
6840: 73 29 20 7b 0a 2d 09 09 63 61 73 65 20 32 3a 0a s) {.-..case 2:.
6850: 2d 09 09 20 20 20 20 2f 2a 20 42 6f 74 68 20 61 -.. /* Both a
6860: 72 67 75 6d 65 6e 74 73 20 70 6f 73 69 74 69 76 rguments positiv
6870: 65 2c 20 62 61 73 65 20 63 61 73 65 20 2a 2f 0a e, base case */.
6880: 2d 09 09 20 20 20 20 6d 70 5f 61 6e 64 28 46 69 -.. mp_and(Fi
6890: 72 73 74 2c 20 53 65 63 6f 6e 64 2c 20 26 62 69 rst, Second, &bi
68a0: 67 52 65 73 75 6c 74 29 3b 0a 2d 09 09 20 20 20 gResult);.-..
68b0: 20 62 72 65 61 6b 3b 0a 2d 09 09 63 61 73 65 20 break;.-..case
68c0: 31 3a 0a 2d 09 09 20 20 20 20 2f 2a 20 46 69 72 1:.-.. /* Fir
68d0: 73 74 20 69 73 20 70 6f 73 69 74 69 76 65 3b 20 st is positive;
68e0: 53 65 63 6f 6e 64 20 6e 65 67 61 74 69 76 65 0a Second negative.
68f0: 2d 09 09 20 20 20 20 20 2a 20 50 20 26 20 4e 20 -.. * P & N
6900: 3d 20 50 20 26 20 7e 7e 4e 20 3d 20 50 26 7e 28 = P & ~~N = P&~(
6910: 2d 4e 2d 31 29 20 3d 20 50 20 26 20 28 50 20 5e -N-1) = P & (P ^
6920: 20 28 2d 4e 2d 31 29 29 20 2a 2f 0a 2d 09 09 20 (-N-1)) */.-..
6930: 20 20 20 6d 70 5f 6e 65 67 28 53 65 63 6f 6e 64 mp_neg(Second
6940: 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 20 20 , Second);.-..
6950: 20 20 6d 70 5f 73 75 62 5f 64 28 53 65 63 6f 6e mp_sub_d(Secon
6960: 64 2c 20 31 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d d, 1, Second);.-
6970: 09 09 20 20 20 20 6d 70 5f 78 6f 72 28 46 69 72 .. mp_xor(Fir
6980: 73 74 2c 20 53 65 63 6f 6e 64 2c 20 26 62 69 67 st, Second, &big
6990: 52 65 73 75 6c 74 29 3b 0a 2d 09 09 20 20 20 20 Result);.-..
69a0: 6d 70 5f 61 6e 64 28 46 69 72 73 74 2c 20 26 62 mp_and(First, &b
69b0: 69 67 52 65 73 75 6c 74 2c 20 26 62 69 67 52 65 igResult, &bigRe
69c0: 73 75 6c 74 29 3b 0a 2d 09 09 20 20 20 20 62 72 sult);.-.. br
69d0: 65 61 6b 3b 0a 2d 09 09 63 61 73 65 20 30 3a 0a eak;.-..case 0:.
69e0: 2d 09 09 20 20 20 20 2f 2a 20 42 6f 74 68 20 61 -.. /* Both a
69f0: 72 67 75 6d 65 6e 74 73 20 6e 65 67 61 74 69 76 rguments negativ
6a00: 65 0a 2d 09 09 20 20 20 20 20 2a 20 61 20 26 20 e.-.. * a &
6a10: 62 20 3d 20 7e 20 28 7e 61 20 7c 20 7e 62 29 20 b = ~ (~a | ~b)
6a20: 3d 20 2d 28 2d 61 2d 31 7c 2d 62 2d 31 29 2d 31 = -(-a-1|-b-1)-1
6a30: 20 2a 2f 0a 2d 09 09 20 20 20 20 6d 70 5f 6e 65 */.-.. mp_ne
6a40: 67 28 46 69 72 73 74 2c 20 46 69 72 73 74 29 3b g(First, First);
6a50: 0a 2d 09 09 20 20 20 20 6d 70 5f 73 75 62 5f 64 .-.. mp_sub_d
6a60: 28 46 69 72 73 74 2c 20 31 2c 20 46 69 72 73 74 (First, 1, First
6a70: 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f 6e 65 67 );.-.. mp_neg
6a80: 28 53 65 63 6f 6e 64 2c 20 53 65 63 6f 6e 64 29 (Second, Second)
6a90: 3b 0a 2d 09 09 20 20 20 20 6d 70 5f 73 75 62 5f ;.-.. mp_sub_
6aa0: 64 28 53 65 63 6f 6e 64 2c 20 31 2c 20 53 65 63 d(Second, 1, Sec
6ab0: 6f 6e 64 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f ond);.-.. mp_
6ac0: 6f 72 28 46 69 72 73 74 2c 20 53 65 63 6f 6e 64 or(First, Second
6ad0: 2c 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2d , &bigResult);.-
6ae0: 09 09 20 20 20 20 6d 70 5f 6e 65 67 28 26 62 69 .. mp_neg(&bi
6af0: 67 52 65 73 75 6c 74 2c 20 26 62 69 67 52 65 73 gResult, &bigRes
6b00: 75 6c 74 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f ult);.-.. mp_
6b10: 73 75 62 5f 64 28 26 62 69 67 52 65 73 75 6c 74 sub_d(&bigResult
6b20: 2c 20 31 2c 20 26 62 69 67 52 65 73 75 6c 74 29 , 1, &bigResult)
6b30: 3b 0a 2d 09 09 20 20 20 20 62 72 65 61 6b 3b 0a ;.-.. break;.
6b40: 2d 09 09 7d 0a 2d 09 09 62 72 65 61 6b 3b 0a 2d -..}.-..break;.-
6b50: 0a 2d 09 20 20 20 20 63 61 73 65 20 49 4e 53 54 .-. case INST
6b60: 5f 42 49 54 4f 52 3a 0a 2d 09 09 73 77 69 74 63 _BITOR:.-..switc
6b70: 68 20 28 6e 75 6d 50 6f 73 29 20 7b 0a 2d 09 09 h (numPos) {.-..
6b80: 63 61 73 65 20 32 3a 0a 2d 09 09 20 20 20 20 2f case 2:.-.. /
6b90: 2a 20 42 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 * Both arguments
6ba0: 20 70 6f 73 69 74 69 76 65 2c 20 62 61 73 65 20 positive, base
6bb0: 63 61 73 65 20 2a 2f 0a 2d 09 09 20 20 20 20 6d case */.-.. m
6bc0: 70 5f 6f 72 28 46 69 72 73 74 2c 20 53 65 63 6f p_or(First, Seco
6bd0: 6e 64 2c 20 26 62 69 67 52 65 73 75 6c 74 29 3b nd, &bigResult);
6be0: 0a 2d 09 09 20 20 20 20 62 72 65 61 6b 3b 0a 2d .-.. break;.-
6bf0: 09 09 63 61 73 65 20 31 3a 0a 2d 09 09 20 20 20 ..case 1:.-..
6c00: 20 2f 2a 20 46 69 72 73 74 20 69 73 20 70 6f 73 /* First is pos
6c10: 69 74 69 76 65 3b 20 53 65 63 6f 6e 64 20 6e 65 itive; Second ne
6c20: 67 61 74 69 76 65 0a 2d 09 09 20 20 20 20 20 2a gative.-.. *
6c30: 20 4e 7c 50 20 3d 20 7e 28 7e 4e 26 7e 50 29 20 N|P = ~(~N&~P)
6c40: 3d 20 7e 28 28 2d 4e 2d 31 29 26 7e 50 29 20 3d = ~((-N-1)&~P) =
6c50: 20 2d 28 28 2d 4e 2d 31 29 26 28 28 2d 4e 2d 31 -((-N-1)&((-N-1
6c60: 29 5e 50 29 29 2d 31 20 2a 2f 0a 2d 09 09 20 20 )^P))-1 */.-..
6c70: 20 20 6d 70 5f 6e 65 67 28 53 65 63 6f 6e 64 2c mp_neg(Second,
6c80: 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 20 20 20 Second);.-..
6c90: 20 6d 70 5f 73 75 62 5f 64 28 53 65 63 6f 6e 64 mp_sub_d(Second
6ca0: 2c 20 31 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 , 1, Second);.-.
6cb0: 09 20 20 20 20 6d 70 5f 78 6f 72 28 46 69 72 73 . mp_xor(Firs
6cc0: 74 2c 20 53 65 63 6f 6e 64 2c 20 26 62 69 67 52 t, Second, &bigR
6cd0: 65 73 75 6c 74 29 3b 0a 2d 09 09 20 20 20 20 6d esult);.-.. m
6ce0: 70 5f 61 6e 64 28 53 65 63 6f 6e 64 2c 20 26 62 p_and(Second, &b
6cf0: 69 67 52 65 73 75 6c 74 2c 20 26 62 69 67 52 65 igResult, &bigRe
6d00: 73 75 6c 74 29 3b 0a 2d 09 09 20 20 20 20 6d 70 sult);.-.. mp
6d10: 5f 6e 65 67 28 26 62 69 67 52 65 73 75 6c 74 2c _neg(&bigResult,
6d20: 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2d 09 &bigResult);.-.
6d30: 09 20 20 20 20 6d 70 5f 73 75 62 5f 64 28 26 62 . mp_sub_d(&b
6d40: 69 67 52 65 73 75 6c 74 2c 20 31 2c 20 26 62 69 igResult, 1, &bi
6d50: 67 52 65 73 75 6c 74 29 3b 0a 2d 09 09 20 20 20 gResult);.-..
6d60: 20 62 72 65 61 6b 3b 0a 2d 09 09 63 61 73 65 20 break;.-..case
6d70: 30 3a 0a 2d 09 09 20 20 20 20 2f 2a 20 42 6f 74 0:.-.. /* Bot
6d80: 68 20 61 72 67 75 6d 65 6e 74 73 20 6e 65 67 61 h arguments nega
6d90: 74 69 76 65 0a 2d 09 09 20 20 20 20 20 2a 20 61 tive.-.. * a
6da0: 20 7c 20 62 20 3d 20 7e 20 28 7e 61 20 26 20 7e | b = ~ (~a & ~
6db0: 62 29 20 3d 20 2d 28 2d 61 2d 31 26 2d 62 2d 31 b) = -(-a-1&-b-1
6dc0: 29 2d 31 20 2a 2f 0a 2d 09 09 20 20 20 20 6d 70 )-1 */.-.. mp
6dd0: 5f 6e 65 67 28 46 69 72 73 74 2c 20 46 69 72 73 _neg(First, Firs
6de0: 74 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f 73 75 t);.-.. mp_su
6df0: 62 5f 64 28 46 69 72 73 74 2c 20 31 2c 20 46 69 b_d(First, 1, Fi
6e00: 72 73 74 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f rst);.-.. mp_
6e10: 6e 65 67 28 53 65 63 6f 6e 64 2c 20 53 65 63 6f neg(Second, Seco
6e20: 6e 64 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f 73 nd);.-.. mp_s
6e30: 75 62 5f 64 28 53 65 63 6f 6e 64 2c 20 31 2c 20 ub_d(Second, 1,
6e40: 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 20 20 20 20 Second);.-..
6e50: 6d 70 5f 61 6e 64 28 46 69 72 73 74 2c 20 53 65 mp_and(First, Se
6e60: 63 6f 6e 64 2c 20 26 62 69 67 52 65 73 75 6c 74 cond, &bigResult
6e70: 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f 6e 65 67 );.-.. mp_neg
6e80: 28 26 62 69 67 52 65 73 75 6c 74 2c 20 26 62 69 (&bigResult, &bi
6e90: 67 52 65 73 75 6c 74 29 3b 0a 2d 09 09 20 20 20 gResult);.-..
6ea0: 20 6d 70 5f 73 75 62 5f 64 28 26 62 69 67 52 65 mp_sub_d(&bigRe
6eb0: 73 75 6c 74 2c 20 31 2c 20 26 62 69 67 52 65 73 sult, 1, &bigRes
6ec0: 75 6c 74 29 3b 0a 2d 09 09 20 20 20 20 62 72 65 ult);.-.. bre
6ed0: 61 6b 3b 0a 2d 09 09 7d 0a 2d 09 09 62 72 65 61 ak;.-..}.-..brea
6ee0: 6b 3b 0a 2d 0a 2d 09 20 20 20 20 63 61 73 65 20 k;.-.-. case
6ef0: 49 4e 53 54 5f 42 49 54 58 4f 52 3a 0a 2d 09 09 INST_BITXOR:.-..
6f00: 73 77 69 74 63 68 20 28 6e 75 6d 50 6f 73 29 20 switch (numPos)
6f10: 7b 0a 2d 09 09 63 61 73 65 20 32 3a 0a 2d 09 09 {.-..case 2:.-..
6f20: 20 20 20 20 2f 2a 20 42 6f 74 68 20 61 72 67 75 /* Both argu
6f30: 6d 65 6e 74 73 20 70 6f 73 69 74 69 76 65 2c 20 ments positive,
6f40: 62 61 73 65 20 63 61 73 65 20 2a 2f 0a 2d 09 09 base case */.-..
6f50: 20 20 20 20 6d 70 5f 78 6f 72 28 46 69 72 73 74 mp_xor(First
6f60: 2c 20 53 65 63 6f 6e 64 2c 20 26 62 69 67 52 65 , Second, &bigRe
6f70: 73 75 6c 74 29 3b 0a 2d 09 09 20 20 20 20 62 72 sult);.-.. br
6f80: 65 61 6b 3b 0a 2d 09 09 63 61 73 65 20 31 3a 0a eak;.-..case 1:.
6f90: 2d 09 09 20 20 20 20 2f 2a 20 46 69 72 73 74 20 -.. /* First
6fa0: 69 73 20 70 6f 73 69 74 69 76 65 3b 20 53 65 63 is positive; Sec
6fb0: 6f 6e 64 20 6e 65 67 61 74 69 76 65 0a 2d 09 09 ond negative.-..
6fc0: 20 20 20 20 20 2a 20 50 5e 4e 20 3d 20 7e 28 50 * P^N = ~(P
6fd0: 5e 7e 4e 29 20 3d 20 2d 28 50 5e 28 2d 4e 2d 31 ^~N) = -(P^(-N-1
6fe0: 29 29 2d 31 0a 2d 09 09 20 20 20 20 20 2a 2f 0a ))-1.-.. */.
6ff0: 2d 09 09 20 20 20 20 6d 70 5f 6e 65 67 28 53 65 -.. mp_neg(Se
7000: 63 6f 6e 64 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d cond, Second);.-
7010: 09 09 20 20 20 20 6d 70 5f 73 75 62 5f 64 28 53 .. mp_sub_d(S
7020: 65 63 6f 6e 64 2c 20 31 2c 20 53 65 63 6f 6e 64 econd, 1, Second
7030: 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f 78 6f 72 );.-.. mp_xor
7040: 28 46 69 72 73 74 2c 20 53 65 63 6f 6e 64 2c 20 (First, Second,
7050: 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2d 09 09 &bigResult);.-..
7060: 20 20 20 20 6d 70 5f 6e 65 67 28 26 62 69 67 52 mp_neg(&bigR
7070: 65 73 75 6c 74 2c 20 26 62 69 67 52 65 73 75 6c esult, &bigResul
7080: 74 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f 73 75 t);.-.. mp_su
7090: 62 5f 64 28 26 62 69 67 52 65 73 75 6c 74 2c 20 b_d(&bigResult,
70a0: 31 2c 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 1, &bigResult);.
70b0: 2d 09 09 20 20 20 20 62 72 65 61 6b 3b 0a 2d 09 -.. break;.-.
70c0: 09 63 61 73 65 20 30 3a 0a 2d 09 09 20 20 20 20 .case 0:.-..
70d0: 2f 2a 20 42 6f 74 68 20 61 72 67 75 6d 65 6e 74 /* Both argument
70e0: 73 20 6e 65 67 61 74 69 76 65 0a 2d 09 09 20 20 s negative.-..
70f0: 20 20 20 2a 20 61 20 5e 20 62 20 3d 20 28 7e 61 * a ^ b = (~a
7100: 20 5e 20 7e 62 29 20 3d 20 28 2d 61 2d 31 5e 2d ^ ~b) = (-a-1^-
7110: 62 2d 31 29 20 2a 2f 0a 2d 09 09 20 20 20 20 6d b-1) */.-.. m
7120: 70 5f 6e 65 67 28 46 69 72 73 74 2c 20 46 69 72 p_neg(First, Fir
7130: 73 74 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f 73 st);.-.. mp_s
7140: 75 62 5f 64 28 46 69 72 73 74 2c 20 31 2c 20 46 ub_d(First, 1, F
7150: 69 72 73 74 29 3b 0a 2d 09 09 20 20 20 20 6d 70 irst);.-.. mp
7160: 5f 6e 65 67 28 53 65 63 6f 6e 64 2c 20 53 65 63 _neg(Second, Sec
7170: 6f 6e 64 29 3b 0a 2d 09 09 20 20 20 20 6d 70 5f ond);.-.. mp_
7180: 73 75 62 5f 64 28 53 65 63 6f 6e 64 2c 20 31 2c sub_d(Second, 1,
7190: 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 20 20 20 Second);.-..
71a0: 20 6d 70 5f 78 6f 72 28 46 69 72 73 74 2c 20 53 mp_xor(First, S
71b0: 65 63 6f 6e 64 2c 20 26 62 69 67 52 65 73 75 6c econd, &bigResul
71c0: 74 29 3b 0a 2d 09 09 20 20 20 20 62 72 65 61 6b t);.-.. break
71d0: 3b 0a 2d 09 09 7d 0a 2d 09 09 62 72 65 61 6b 3b ;.-..}.-..break;
71e0: 0a 2d 09 20 20 20 20 7d 0a 2b 20 20 20 20 20 20 .-. }.+
71f0: 20 20 20 20 20 20 54 63 6c 42 69 74 57 69 73 65 TclBitWise
7200: 42 69 67 6e 75 6d 4f 70 28 2a 70 63 2c 20 26 62 BignumOp(*pc, &b
7210: 69 67 31 2c 20 26 62 69 67 32 2c 20 26 62 69 67 ig1, &big2, &big
7220: 52 65 73 75 6c 74 29 3b 0a 20 0a 20 09 20 20 20 Result);. . .
7230: 20 6d 70 5f 63 6c 65 61 72 28 26 62 69 67 31 29 mp_clear(&big1)
7240: 3b 0a 20 09 20 20 20 20 6d 70 5f 63 6c 65 61 72 ;. . mp_clear
7250: 28 26 62 69 67 32 29 3b 0a 40 40 20 2d 34 37 38 (&big2);.@@ -478
7260: 36 2c 36 20 2b 34 36 30 38 2c 37 20 40 40 0a 20 6,6 +4608,7 @@.
7270: 09 20 20 20 20 69 66 20 28 74 79 70 65 32 20 3d . if (type2 =
7280: 3d 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 42 49 47 = TCL_NUMBER_BIG
7290: 29 20 7b 0a 20 09 09 54 63 6c 5f 53 65 74 4f 62 ) {. ..Tcl_SetOb
72a0: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a jResult(interp,.
72b0: 20 09 09 09 54 63 6c 5f 4e 65 77 53 74 72 69 6e ...Tcl_NewStrin
72c0: 67 4f 62 6a 28 22 65 78 70 6f 6e 65 6e 74 20 74 gObj("exponent t
72d0: 6f 6f 20 6c 61 72 67 65 22 2c 20 2d 31 29 29 3b oo large", -1));
72e0: 0a 2b 09 09 72 65 73 75 6c 74 20 3d 20 54 43 4c .+..result = TCL
72f0: 5f 45 52 52 4f 52 3b 0a 20 09 09 67 6f 74 6f 20 _ERROR;. ..goto
7300: 63 68 65 63 6b 46 6f 72 43 61 74 63 68 3b 0a 20 checkForCatch;.
7310: 09 20 20 20 20 7d 0a 20 09 20 20 20 20 2f 2a 20 . }. . /*
7320: 54 4f 44 4f 3a 20 50 65 72 66 6f 72 6d 20 74 68 TODO: Perform th
7330: 6f 73 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 73 ose computations
7340: 20 74 68 61 74 20 66 69 74 20 69 6e 20 6e 61 74 that fit in nat
7350: 69 76 65 20 74 79 70 65 73 20 2a 2f 0a 40 40 20 ive types */.@@
7360: 2d 34 38 32 31 2c 37 20 2b 34 36 34 34 2c 37 20 -4821,7 +4644,7
7370: 40 40 0a 20 09 09 7b 0a 20 09 09 20 20 20 20 2f @@. ..{. .. /
7380: 2a 20 4d 75 73 74 20 63 68 65 63 6b 20 66 6f 72 * Must check for
7390: 20 6f 76 65 72 66 6c 6f 77 20 2a 2f 0a 20 09 09 overflow */. ..
73a0: 20 20 20 20 69 66 20 28 28 28 77 31 20 3c 20 30 if (((w1 < 0
73b0: 29 20 26 26 20 28 77 32 20 3e 20 30 29 20 26 26 ) && (w2 > 0) &&
73c0: 20 28 77 52 65 73 75 6c 74 20 3e 20 30 29 29 0a (wResult > 0)).
73d0: 2d 09 09 09 20 20 20 20 7c 7c 20 28 28 77 31 20 -... || ((w1
73e0: 3e 20 30 29 20 26 26 20 28 77 32 20 3c 20 30 29 > 0) && (w2 < 0)
73f0: 20 26 26 20 28 77 52 65 73 75 6c 74 20 3c 20 30 && (wResult < 0
7400: 29 29 29 20 7b 0a 2b 09 09 09 20 20 20 20 7c 7c ))) {.+... ||
7410: 20 28 28 77 31 20 3e 3d 20 30 29 20 26 26 20 28 ((w1 >= 0) && (
7420: 77 32 20 3c 20 30 29 20 26 26 20 28 77 52 65 73 w2 < 0) && (wRes
7430: 75 6c 74 20 3c 20 30 29 29 29 20 7b 0a 20 09 09 ult < 0))) {. ..
7440: 09 67 6f 74 6f 20 6f 76 65 72 66 6c 6f 77 3b 0a .goto overflow;.
7450: 20 09 09 20 20 20 20 7d 0a 20 09 09 7d 0a 40 40 .. }. ..}.@@
7460: 20 2d 34 39 30 36 2c 36 20 2b 34 37 32 39 2c 37 -4906,6 +4729,7
7470: 20 40 40 0a 20 09 09 09 20 20 20 20 54 63 6c 5f @@. ... Tcl_
7480: 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 65 78 NewStringObj("ex
7490: 70 6f 6e 65 6e 74 20 74 6f 6f 20 6c 61 72 67 65 ponent too large
74a0: 22 2c 20 2d 31 29 29 3b 0a 20 09 09 20 20 20 20 ", -1));. ..
74b0: 6d 70 5f 63 6c 65 61 72 28 26 62 69 67 31 29 3b mp_clear(&big1);
74c0: 0a 20 09 09 20 20 20 20 6d 70 5f 63 6c 65 61 72 . .. mp_clear
74d0: 28 26 62 69 67 32 29 3b 0a 2b 09 09 20 20 20 20 (&big2);.+..
74e0: 72 65 73 75 6c 74 20 3d 20 54 43 4c 5f 45 52 52 result = TCL_ERR
74f0: 4f 52 3b 0a 20 09 09 20 20 20 20 67 6f 74 6f 20 OR;. .. goto
7500: 63 68 65 63 6b 46 6f 72 43 61 74 63 68 3b 0a 20 checkForCatch;.
7510: 09 09 7d 0a 20 09 09 6d 70 5f 65 78 70 74 5f 64 ..}. ..mp_expt_d
7520: 28 26 62 69 67 31 2c 20 62 69 67 32 2e 64 70 5b (&big1, big2.dp[
7530: 30 5d 2c 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0], &bigResult);
7540: 0a 40 40 20 2d 36 33 36 38 2c 36 20 2b 36 31 39 .@@ -6368,6 +619
7550: 32 2c 31 36 39 20 40 40 0a 20 20 20 20 20 54 63 2,169 @@. Tc
7560: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 l_SetObjResult(i
7570: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 nterp, Tcl_ObjPr
7580: 69 6e 74 66 28 0a 20 09 20 20 20 20 22 63 61 6e intf(. . "can
7590: 27 74 20 75 73 65 20 25 73 20 61 73 20 6f 70 65 't use %s as ope
75a0: 72 61 6e 64 20 6f 66 20 5c 22 25 73 5c 22 22 2c rand of \"%s\"",
75b0: 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 6f 70 description, op
75c0: 65 72 61 74 6f 72 29 29 3b 0a 20 7d 0a 2b 2f 2a erator));. }.+/*
75d0: 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d .+ *------------
75e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
75f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b ----------.+ *.+
7620: 20 2a 20 54 63 6c 49 6c 6c 65 67 61 6c 45 78 70 * TclIllegalExp
7630: 72 4f 70 65 72 61 6e 64 54 79 70 65 20 2d 2d 0a rOperandType --.
7640: 2b 20 2a 0a 2b 20 2a 09 45 78 70 6f 72 74 65 64 + *.+ *.Exported
7650: 20 76 65 72 73 69 6f 6e 20 6f 66 20 49 6c 6c 65 version of Ille
7660: 67 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 54 79 galExprOperandTy
7670: 70 65 2e 0a 2b 20 2a 20 20 20 20 20 20 42 79 74 pe..+ * Byt
7680: 65 63 6f 64 65 20 61 72 67 75 6d 65 6e 74 20 69 ecode argument i
7690: 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 76 61 s provided by va
76a0: 6c 75 65 20 69 6e 73 74 65 61 64 20 6f 66 20 62 lue instead of b
76b0: 79 20 70 6f 69 6e 74 65 72 2e 0a 2b 20 2a 0a 2b y pointer..+ *.+
76c0: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 * Results:.+ *.
76d0: 4e 6f 6e 65 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 None..+ *.+ * Si
76e0: 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09 de effects:.+ *.
76f0: 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 An error message
7700: 20 69 73 20 61 70 70 65 6e 64 65 64 20 74 6f 20 is appended to
7710: 74 68 65 20 69 6e 74 65 72 70 20 72 65 73 75 6c the interp resul
7720: 74 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d t..+ *.+ *------
7730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7770: 0a 2b 20 2a 2f 0a 2b 0a 2b 76 6f 69 64 0a 2b 54 .+ */.+.+void.+T
7780: 63 6c 49 6c 6c 65 67 61 6c 45 78 70 72 4f 70 65 clIllegalExprOpe
7790: 72 61 6e 64 54 79 70 65 28 0a 2b 20 20 20 20 54 randType(.+ T
77a0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
77b0: 70 2c 09 09 2f 2a 20 49 6e 74 65 72 70 72 65 74 p,../* Interpret
77c0: 65 72 20 74 6f 20 77 68 69 63 68 20 65 72 72 6f er to which erro
77d0: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2b 09 r information.+.
77e0: 09 09 09 20 2a 20 70 65 72 74 61 69 6e 73 2e 20 ... * pertains.
77f0: 2a 2f 0a 2b 20 20 20 20 75 6e 73 69 67 6e 65 64 */.+ unsigned
7800: 20 63 68 61 72 20 6f 70 2c 09 09 2f 2a 20 54 68 char op,../* Th
7810: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 68 e instruction wh
7820: 65 72 65 20 74 68 65 20 69 6c 6c 65 67 61 6c 0a ere the illegal.
7830: 2b 09 09 09 09 20 2a 20 74 79 70 65 20 77 61 73 +.... * type was
7840: 20 66 6f 75 6e 64 2e 20 2a 2f 0a 2b 20 20 20 20 found. */.+
7850: 54 63 6c 5f 4f 62 6a 20 2a 6f 70 6e 64 50 74 72 Tcl_Obj *opndPtr
7860: 29 09 09 2f 2a 20 50 6f 69 6e 74 73 20 74 6f 20 )../* Points to
7870: 74 68 65 20 6f 70 65 72 61 6e 64 20 68 6f 6c 64 the operand hold
7880: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 0a 2b 09 ing the value.+.
7890: 09 09 09 20 2a 20 77 69 74 68 20 74 68 65 20 69 ... * with the i
78a0: 6c 6c 65 67 61 6c 20 74 79 70 65 2e 20 2a 2f 0a llegal type. */.
78b0: 2b 7b 0a 2b 20 20 20 20 49 6c 6c 65 67 61 6c 45 +{.+ IllegalE
78c0: 78 70 72 4f 70 65 72 61 6e 64 54 79 70 65 28 69 xprOperandType(i
78d0: 6e 74 65 72 70 2c 20 26 6f 70 2c 20 6f 70 6e 64 nterp, &op, opnd
78e0: 50 74 72 29 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a Ptr);.+}.+..+/*.
78f0: 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d + *-------------
7900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20 ---------.+ *.+
7940: 2a 20 54 63 6c 42 69 74 57 69 73 65 42 69 67 6e * TclBitWiseBign
7950: 75 6d 4f 70 20 2d 2d 0a 2b 20 2a 0a 2b 20 2a 09 umOp --.+ *.+ *.
7960: 50 65 72 66 6f 72 6d 20 61 20 62 69 74 77 69 73 Perform a bitwis
7970: 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20 62 e operation on b
7980: 69 67 6e 75 6d 73 2e 0a 2b 20 2a 0a 2b 20 2a 20 ignums..+ *.+ *
7990: 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09 52 65 73 Results:.+ *.Res
79a0: 75 6c 74 20 6f 66 20 6f 70 65 72 61 74 69 6f 6e ult of operation
79b0: 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 ..+ *.+ * Side e
79c0: 66 66 65 63 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 ffects:.+ *.None
79d0: 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d ..+ *.+ *-------
79e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
79f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
7a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a ---------------.
7a20: 2b 20 2a 2f 0a 2b 0a 2b 76 6f 69 64 0a 2b 54 63 + */.+.+void.+Tc
7a30: 6c 42 69 74 57 69 73 65 42 69 67 6e 75 6d 4f 70 lBitWiseBignumOp
7a40: 20 28 0a 2b 20 20 20 20 75 6e 73 69 67 6e 65 64 (.+ unsigned
7a50: 20 63 68 61 72 20 6f 70 2c 0a 2b 20 20 20 20 6d char op,.+ m
7a60: 70 5f 69 6e 74 20 2a 62 69 67 31 2c 0a 2b 20 20 p_int *big1,.+
7a70: 20 20 6d 70 5f 69 6e 74 20 2a 62 69 67 32 2c 0a mp_int *big2,.
7a80: 2b 20 20 20 20 6d 70 5f 69 6e 74 20 2a 72 65 73 + mp_int *res
7a90: 75 6c 74 29 0a 2b 7b 0a 2b 20 20 20 20 6d 70 5f ult).+{.+ mp_
7aa0: 69 6e 74 20 62 69 67 52 65 73 75 6c 74 3b 0a 2b int bigResult;.+
7ab0: 20 20 20 20 6d 70 5f 69 6e 74 20 2a 46 69 72 73 mp_int *Firs
7ac0: 74 2c 20 2a 53 65 63 6f 6e 64 3b 0a 2b 20 20 20 t, *Second;.+
7ad0: 20 69 6e 74 20 6e 75 6d 50 6f 73 3b 0a 2b 0a 2b int numPos;.+.+
7ae0: 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 43 /*.+ * C
7af0: 6f 75 6e 74 20 68 6f 77 20 6d 61 6e 79 20 70 6f ount how many po
7b00: 73 69 74 69 76 65 20 61 72 67 75 6d 65 6e 74 73 sitive arguments
7b10: 20 77 65 20 68 61 76 65 2e 20 49 66 20 6f 6e 6c we have. If onl
7b20: 79 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2b 20 20 y one of the.+
7b30: 20 20 20 2a 20 61 72 67 75 6d 65 6e 74 73 20 69 * arguments i
7b40: 73 20 6e 65 67 61 74 69 76 65 2c 20 73 74 6f 72 s negative, stor
7b50: 65 20 69 74 20 69 6e 20 27 53 65 63 6f 6e 64 27 e it in 'Second'
7b60: 2e 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 ..+ */.+.+
7b70: 20 20 69 66 20 28 6d 70 5f 63 6d 70 5f 64 28 62 if (mp_cmp_d(b
7b80: 69 67 31 2c 20 30 29 20 21 3d 20 4d 50 5f 4c 54 ig1, 0) != MP_LT
7b90: 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 6e 75 6d ) {.+ num
7ba0: 50 6f 73 20 3d 20 31 20 2b 20 28 6d 70 5f 63 6d Pos = 1 + (mp_cm
7bb0: 70 5f 64 28 62 69 67 32 2c 20 30 29 20 21 3d 20 p_d(big2, 0) !=
7bc0: 4d 50 5f 4c 54 29 3b 0a 2b 20 20 20 20 20 20 20 MP_LT);.+
7bd0: 20 46 69 72 73 74 20 20 3d 20 62 69 67 31 3b 0a First = big1;.
7be0: 2b 20 20 20 20 20 20 20 20 53 65 63 6f 6e 64 20 + Second
7bf0: 3d 20 62 69 67 32 3b 0a 2b 20 20 20 20 7d 20 65 = big2;.+ } e
7c00: 6c 73 65 20 7b 0a 2b 20 20 20 20 20 20 20 20 46 lse {.+ F
7c10: 69 72 73 74 20 20 3d 20 62 69 67 32 3b 0a 2b 20 irst = big2;.+
7c20: 20 20 20 20 20 20 20 53 65 63 6f 6e 64 20 3d 20 Second =
7c30: 62 69 67 31 3b 0a 2b 20 20 20 20 20 20 20 20 6e big1;.+ n
7c40: 75 6d 50 6f 73 20 3d 20 28 6d 70 5f 63 6d 70 5f umPos = (mp_cmp_
7c50: 64 28 46 69 72 73 74 2c 20 30 29 20 21 3d 20 4d d(First, 0) != M
7c60: 50 5f 4c 54 29 3b 0a 2b 20 20 20 20 7d 0a 2b 20 P_LT);.+ }.+
7c70: 20 20 20 6d 70 5f 69 6e 69 74 28 26 62 69 67 52 mp_init(&bigR
7c80: 65 73 75 6c 74 29 3b 0a 2b 0a 2b 20 20 20 20 73 esult);.+.+ s
7c90: 77 69 74 63 68 20 28 6f 70 29 20 7b 0a 2b 20 20 witch (op) {.+
7ca0: 20 20 63 61 73 65 20 49 4e 53 54 5f 42 49 54 41 case INST_BITA
7cb0: 4e 44 3a 0a 2b 20 20 20 20 20 20 20 20 73 77 69 ND:.+ swi
7cc0: 74 63 68 20 28 6e 75 6d 50 6f 73 29 20 7b 0a 2b tch (numPos) {.+
7cd0: 20 20 20 20 20 20 20 20 63 61 73 65 20 32 3a 0a case 2:.
7ce0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 + /*
7cf0: 42 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 70 Both arguments p
7d00: 6f 73 69 74 69 76 65 2c 20 62 61 73 65 20 63 61 ositive, base ca
7d10: 73 65 20 2a 2f 0a 2b 20 20 20 20 20 20 20 20 20 se */.+
7d20: 20 20 20 6d 70 5f 61 6e 64 28 46 69 72 73 74 2c mp_and(First,
7d30: 20 53 65 63 6f 6e 64 2c 20 26 62 69 67 52 65 73 Second, &bigRes
7d40: 75 6c 74 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 ult);.+
7d50: 20 20 20 62 72 65 61 6b 3b 0a 2b 20 20 20 20 20 break;.+
7d60: 20 20 20 63 61 73 65 20 31 3a 0a 2b 20 20 20 20 case 1:.+
7d70: 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 /* First
7d80: 20 69 73 20 70 6f 73 69 74 69 76 65 3b 20 53 65 is positive; Se
7d90: 63 6f 6e 64 20 6e 65 67 61 74 69 76 65 0a 2b 20 cond negative.+
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 50 20 * P
7db0: 26 20 4e 20 3d 20 50 20 26 20 7e 7e 4e 20 3d 20 & N = P & ~~N =
7dc0: 50 26 7e 28 2d 4e 2d 31 29 20 3d 20 50 20 26 20 P&~(-N-1) = P &
7dd0: 28 50 20 5e 20 28 2d 4e 2d 31 29 29 20 2a 2f 0a (P ^ (-N-1)) */.
7de0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 6d 70 5f + mp_
7df0: 6e 65 67 28 53 65 63 6f 6e 64 2c 20 53 65 63 6f neg(Second, Seco
7e00: 6e 64 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 nd);.+
7e10: 20 20 6d 70 5f 73 75 62 5f 64 28 53 65 63 6f 6e mp_sub_d(Secon
7e20: 64 2c 20 31 2c 20 53 65 63 6f 6e 64 29 3b 0a 2b d, 1, Second);.+
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 6d 70 5f 78 mp_x
7e40: 6f 72 28 46 69 72 73 74 2c 20 53 65 63 6f 6e 64 or(First, Second
7e50: 2c 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2b , &bigResult);.+
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 6d 70 5f 61 mp_a
7e70: 6e 64 28 46 69 72 73 74 2c 20 26 62 69 67 52 65 nd(First, &bigRe
7e80: 73 75 6c 74 2c 20 26 62 69 67 52 65 73 75 6c 74 sult, &bigResult
7e90: 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 );.+
7ea0: 62 72 65 61 6b 3b 0a 2b 20 20 20 20 20 20 20 20 break;.+
7eb0: 63 61 73 65 20 30 3a 0a 2b 20 20 20 20 20 20 20 case 0:.+
7ec0: 20 20 20 20 20 2f 2a 20 42 6f 74 68 20 61 72 67 /* Both arg
7ed0: 75 6d 65 6e 74 73 20 6e 65 67 61 74 69 76 65 0a uments negative.
7ee0: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 + *
7ef0: 61 20 26 20 62 20 3d 20 7e 20 28 7e 61 20 7c 20 a & b = ~ (~a |
7f00: 7e 62 29 20 3d 20 2d 28 2d 61 2d 31 7c 2d 62 2d ~b) = -(-a-1|-b-
7f10: 31 29 2d 31 20 2a 2f 0a 2b 20 20 20 20 20 20 20 1)-1 */.+
7f20: 20 20 20 20 20 6d 70 5f 6e 65 67 28 46 69 72 73 mp_neg(Firs
7f30: 74 2c 20 46 69 72 73 74 29 3b 0a 2b 20 20 20 20 t, First);.+
7f40: 20 20 20 20 20 20 20 20 6d 70 5f 73 75 62 5f 64 mp_sub_d
7f50: 28 46 69 72 73 74 2c 20 31 2c 20 46 69 72 73 74 (First, 1, First
7f60: 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 );.+
7f70: 6d 70 5f 6e 65 67 28 53 65 63 6f 6e 64 2c 20 53 mp_neg(Second, S
7f80: 65 63 6f 6e 64 29 3b 0a 2b 20 20 20 20 20 20 20 econd);.+
7f90: 20 20 20 20 20 6d 70 5f 73 75 62 5f 64 28 53 65 mp_sub_d(Se
7fa0: 63 6f 6e 64 2c 20 31 2c 20 53 65 63 6f 6e 64 29 cond, 1, Second)
7fb0: 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6d ;.+ m
7fc0: 70 5f 6f 72 28 46 69 72 73 74 2c 20 53 65 63 6f p_or(First, Seco
7fd0: 6e 64 2c 20 26 62 69 67 52 65 73 75 6c 74 29 3b nd, &bigResult);
7fe0: 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6d 70 .+ mp
7ff0: 5f 6e 65 67 28 26 62 69 67 52 65 73 75 6c 74 2c _neg(&bigResult,
8000: 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2b 20 &bigResult);.+
8010: 20 20 20 20 20 20 20 20 20 20 20 6d 70 5f 73 75 mp_su
8020: 62 5f 64 28 26 62 69 67 52 65 73 75 6c 74 2c 20 b_d(&bigResult,
8030: 31 2c 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 1, &bigResult);.
8040: 2b 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 + bre
8050: 61 6b 3b 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b ak;.+ }.+
8060: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 2b break;.+
8070: 0a 2b 20 20 20 20 63 61 73 65 20 49 4e 53 54 5f .+ case INST_
8080: 42 49 54 4f 52 3a 0a 2b 20 20 20 20 20 20 20 20 BITOR:.+
8090: 73 77 69 74 63 68 20 28 6e 75 6d 50 6f 73 29 20 switch (numPos)
80a0: 7b 0a 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 {.+ case
80b0: 32 3a 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 2:.+
80c0: 2f 2a 20 42 6f 74 68 20 61 72 67 75 6d 65 6e 74 /* Both argument
80d0: 73 20 70 6f 73 69 74 69 76 65 2c 20 62 61 73 65 s positive, base
80e0: 20 63 61 73 65 20 2a 2f 0a 2b 20 20 20 20 20 20 case */.+
80f0: 20 20 20 20 20 20 6d 70 5f 6f 72 28 46 69 72 73 mp_or(Firs
8100: 74 2c 20 53 65 63 6f 6e 64 2c 20 26 62 69 67 52 t, Second, &bigR
8110: 65 73 75 6c 74 29 3b 0a 2b 20 20 20 20 20 20 20 esult);.+
8120: 20 20 20 20 20 62 72 65 61 6b 3b 0a 2b 20 20 20 break;.+
8130: 20 20 20 20 20 63 61 73 65 20 31 3a 0a 2b 20 20 case 1:.+
8140: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 /* Fir
8150: 73 74 20 69 73 20 70 6f 73 69 74 69 76 65 3b 20 st is positive;
8160: 53 65 63 6f 6e 64 20 6e 65 67 61 74 69 76 65 0a Second negative.
8170: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 20 + *
8180: 4e 7c 50 20 3d 20 7e 28 7e 4e 26 7e 50 29 20 3d N|P = ~(~N&~P) =
8190: 20 7e 28 28 2d 4e 2d 31 29 26 7e 50 29 20 3d 20 ~((-N-1)&~P) =
81a0: 2d 28 28 2d 4e 2d 31 29 26 28 28 2d 4e 2d 31 29 -((-N-1)&((-N-1)
81b0: 5e 50 29 29 2d 31 20 2a 2f 0a 2b 20 20 20 20 20 ^P))-1 */.+
81c0: 20 20 20 20 20 20 20 6d 70 5f 6e 65 67 28 53 65 mp_neg(Se
81d0: 63 6f 6e 64 2c 20 53 65 63 6f 6e 64 29 3b 0a 2b cond, Second);.+
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 70 5f 73 mp_s
81f0: 75 62 5f 64 28 53 65 63 6f 6e 64 2c 20 31 2c 20 ub_d(Second, 1,
8200: 53 65 63 6f 6e 64 29 3b 0a 2b 20 20 20 20 20 20 Second);.+
8210: 20 20 20 20 20 20 6d 70 5f 78 6f 72 28 46 69 72 mp_xor(Fir
8220: 73 74 2c 20 53 65 63 6f 6e 64 2c 20 26 62 69 67 st, Second, &big
8230: 52 65 73 75 6c 74 29 3b 0a 2b 20 20 20 20 20 20 Result);.+
8240: 20 20 20 20 20 20 6d 70 5f 61 6e 64 28 53 65 63 mp_and(Sec
8250: 6f 6e 64 2c 20 26 62 69 67 52 65 73 75 6c 74 2c ond, &bigResult,
8260: 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2b 20 &bigResult);.+
8270: 20 20 20 20 20 20 20 20 20 20 20 6d 70 5f 6e 65 mp_ne
8280: 67 28 26 62 69 67 52 65 73 75 6c 74 2c 20 26 62 g(&bigResult, &b
8290: 69 67 52 65 73 75 6c 74 29 3b 0a 2b 20 20 20 20 igResult);.+
82a0: 20 20 20 20 20 20 20 20 6d 70 5f 73 75 62 5f 64 mp_sub_d
82b0: 28 26 62 69 67 52 65 73 75 6c 74 2c 20 31 2c 20 (&bigResult, 1,
82c0: 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2b 20 20 &bigResult);.+
82d0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b break;
82e0: 0a 2b 20 20 20 20 20 20 20 20 63 61 73 65 20 30 .+ case 0
82f0: 3a 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 2f :.+ /
8300: 2a 20 42 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 * Both arguments
8310: 20 6e 65 67 61 74 69 76 65 0a 2b 20 20 20 20 20 negative.+
8320: 20 20 20 20 20 20 20 20 2a 20 61 20 7c 20 62 20 * a | b
8330: 3d 20 7e 20 28 7e 61 20 26 20 7e 62 29 20 3d 20 = ~ (~a & ~b) =
8340: 2d 28 2d 61 2d 31 26 2d 62 2d 31 29 2d 31 20 2a -(-a-1&-b-1)-1 *
8350: 2f 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6d /.+ m
8360: 70 5f 6e 65 67 28 46 69 72 73 74 2c 20 46 69 72 p_neg(First, Fir
8370: 73 74 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 st);.+
8380: 20 20 6d 70 5f 73 75 62 5f 64 28 46 69 72 73 74 mp_sub_d(First
8390: 2c 20 31 2c 20 46 69 72 73 74 29 3b 0a 2b 20 20 , 1, First);.+
83a0: 20 20 20 20 20 20 20 20 20 20 6d 70 5f 6e 65 67 mp_neg
83b0: 28 53 65 63 6f 6e 64 2c 20 53 65 63 6f 6e 64 29 (Second, Second)
83c0: 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6d ;.+ m
83d0: 70 5f 73 75 62 5f 64 28 53 65 63 6f 6e 64 2c 20 p_sub_d(Second,
83e0: 31 2c 20 53 65 63 6f 6e 64 29 3b 0a 2b 20 20 20 1, Second);.+
83f0: 20 20 20 20 20 20 20 20 20 6d 70 5f 61 6e 64 28 mp_and(
8400: 46 69 72 73 74 2c 20 53 65 63 6f 6e 64 2c 20 26 First, Second, &
8410: 62 69 67 52 65 73 75 6c 74 29 3b 0a 2b 20 20 20 bigResult);.+
8420: 20 20 20 20 20 20 20 20 20 6d 70 5f 6e 65 67 28 mp_neg(
8430: 26 62 69 67 52 65 73 75 6c 74 2c 20 26 62 69 67 &bigResult, &big
8440: 52 65 73 75 6c 74 29 3b 0a 2b 20 20 20 20 20 20 Result);.+
8450: 20 20 20 20 20 20 6d 70 5f 73 75 62 5f 64 28 26 mp_sub_d(&
8460: 62 69 67 52 65 73 75 6c 74 2c 20 31 2c 20 26 62 bigResult, 1, &b
8470: 69 67 52 65 73 75 6c 74 29 3b 0a 2b 20 20 20 20 igResult);.+
8480: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 2b break;.+
8490: 20 20 20 20 20 20 20 20 7d 0a 2b 20 20 20 20 20 }.+
84a0: 20 20 20 62 72 65 61 6b 3b 0a 2b 0a 2b 20 20 20 break;.+.+
84b0: 20 63 61 73 65 20 49 4e 53 54 5f 42 49 54 58 4f case INST_BITXO
84c0: 52 3a 0a 2b 20 20 20 20 20 20 20 20 73 77 69 74 R:.+ swit
84d0: 63 68 20 28 6e 75 6d 50 6f 73 29 20 7b 0a 2b 20 ch (numPos) {.+
84e0: 20 20 20 20 20 20 20 63 61 73 65 20 32 3a 0a 2b case 2:.+
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 /* B
8500: 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 70 6f oth arguments po
8510: 73 69 74 69 76 65 2c 20 62 61 73 65 20 63 61 73 sitive, base cas
8520: 65 20 2a 2f 0a 2b 20 20 20 20 20 20 20 20 20 20 e */.+
8530: 20 20 6d 70 5f 78 6f 72 28 46 69 72 73 74 2c 20 mp_xor(First,
8540: 53 65 63 6f 6e 64 2c 20 26 62 69 67 52 65 73 75 Second, &bigResu
8550: 6c 74 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 lt);.+
8560: 20 20 62 72 65 61 6b 3b 0a 2b 20 20 20 20 20 20 break;.+
8570: 20 20 63 61 73 65 20 31 3a 0a 2b 20 20 20 20 20 case 1:.+
8580: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 /* First
8590: 69 73 20 70 6f 73 69 74 69 76 65 3b 20 53 65 63 is positive; Sec
85a0: 6f 6e 64 20 6e 65 67 61 74 69 76 65 0a 2b 20 20 ond negative.+
85b0: 20 20 20 20 20 20 20 20 20 20 20 2a 20 50 5e 4e * P^N
85c0: 20 3d 20 7e 28 50 5e 7e 4e 29 20 3d 20 2d 28 50 = ~(P^~N) = -(P
85d0: 5e 28 2d 4e 2d 31 29 29 2d 31 0a 2b 20 20 20 20 ^(-N-1))-1.+
85e0: 20 20 20 20 20 20 20 20 20 2a 2f 0a 2b 20 20 20 */.+
85f0: 20 20 20 20 20 20 20 20 20 6d 70 5f 6e 65 67 28 mp_neg(
8600: 53 65 63 6f 6e 64 2c 20 53 65 63 6f 6e 64 29 3b Second, Second);
8610: 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6d 70 .+ mp
8620: 5f 73 75 62 5f 64 28 53 65 63 6f 6e 64 2c 20 31 _sub_d(Second, 1
8630: 2c 20 53 65 63 6f 6e 64 29 3b 0a 2b 20 20 20 20 , Second);.+
8640: 20 20 20 20 20 20 20 20 6d 70 5f 78 6f 72 28 46 mp_xor(F
8650: 69 72 73 74 2c 20 53 65 63 6f 6e 64 2c 20 26 62 irst, Second, &b
8660: 69 67 52 65 73 75 6c 74 29 3b 0a 2b 20 20 20 20 igResult);.+
8670: 20 20 20 20 20 20 20 20 6d 70 5f 6e 65 67 28 26 mp_neg(&
8680: 62 69 67 52 65 73 75 6c 74 2c 20 26 62 69 67 52 bigResult, &bigR
8690: 65 73 75 6c 74 29 3b 0a 2b 20 20 20 20 20 20 20 esult);.+
86a0: 20 20 20 20 20 6d 70 5f 73 75 62 5f 64 28 26 62 mp_sub_d(&b
86b0: 69 67 52 65 73 75 6c 74 2c 20 31 2c 20 26 62 69 igResult, 1, &bi
86c0: 67 52 65 73 75 6c 74 29 3b 0a 2b 20 20 20 20 20 gResult);.+
86d0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 2b 20 break;.+
86e0: 20 20 20 20 20 20 20 63 61 73 65 20 30 3a 0a 2b case 0:.+
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 /* B
8700: 6f 74 68 20 61 72 67 75 6d 65 6e 74 73 20 6e 65 oth arguments ne
8710: 67 61 74 69 76 65 0a 2b 20 20 20 20 20 20 20 20 gative.+
8720: 20 20 20 20 20 2a 20 61 20 5e 20 62 20 3d 20 28 * a ^ b = (
8730: 7e 61 20 5e 20 7e 62 29 20 3d 20 28 2d 61 2d 31 ~a ^ ~b) = (-a-1
8740: 5e 2d 62 2d 31 29 20 2a 2f 0a 2b 20 20 20 20 20 ^-b-1) */.+
8750: 20 20 20 20 20 20 20 6d 70 5f 6e 65 67 28 46 69 mp_neg(Fi
8760: 72 73 74 2c 20 46 69 72 73 74 29 3b 0a 2b 20 20 rst, First);.+
8770: 20 20 20 20 20 20 20 20 20 20 6d 70 5f 73 75 62 mp_sub
8780: 5f 64 28 46 69 72 73 74 2c 20 31 2c 20 46 69 72 _d(First, 1, Fir
8790: 73 74 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 st);.+
87a0: 20 20 6d 70 5f 6e 65 67 28 53 65 63 6f 6e 64 2c mp_neg(Second,
87b0: 20 53 65 63 6f 6e 64 29 3b 0a 2b 20 20 20 20 20 Second);.+
87c0: 20 20 20 20 20 20 20 6d 70 5f 73 75 62 5f 64 28 mp_sub_d(
87d0: 53 65 63 6f 6e 64 2c 20 31 2c 20 53 65 63 6f 6e Second, 1, Secon
87e0: 64 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 d);.+
87f0: 20 6d 70 5f 78 6f 72 28 46 69 72 73 74 2c 20 53 mp_xor(First, S
8800: 65 63 6f 6e 64 2c 20 26 62 69 67 52 65 73 75 6c econd, &bigResul
8810: 74 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 t);.+
8820: 20 62 72 65 61 6b 3b 0a 2b 20 20 20 20 20 20 20 break;.+
8830: 20 7d 0a 2b 20 20 20 20 20 20 20 20 62 72 65 61 }.+ brea
8840: 6b 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 k;.+ }.+.+
8850: 20 6d 70 5f 65 78 63 68 28 72 65 73 75 6c 74 2c mp_exch(result,
8860: 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2b 20 &bigResult);.+
8870: 20 20 20 6d 70 5f 63 6c 65 61 72 28 26 62 69 67 mp_clear(&big
8880: 52 65 73 75 6c 74 29 3b 0a 2b 7d 0a 20 0c 0a 20 Result);.+}. ..
8890: 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d /*. *----------
88a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
88b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
88c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
88d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 64 69 66 ------------.dif
88e0: 66 20 2d 72 75 20 2e 2e 2f 74 63 6c 2d 32 30 30 f -ru ../tcl-200
88f0: 36 31 32 30 36 2f 67 65 6e 65 72 69 63 2f 74 63 61206/generic/tc
8900: 6c 49 6e 74 2e 68 20 2e 2f 67 65 6e 65 72 69 63 lInt.h ./generic
8910: 2f 74 63 6c 49 6e 74 2e 68 0a 2d 2d 2d 20 2e 2e /tclInt.h.--- ..
8920: 2f 74 63 6c 2d 32 30 30 36 31 32 30 36 2f 67 65 /tcl-20061206/ge
8930: 6e 65 72 69 63 2f 74 63 6c 49 6e 74 2e 68 09 32 neric/tclInt.h.2
8940: 30 30 36 2d 31 32 2d 30 32 20 30 38 3a 30 33 3a 006-12-02 08:03:
8950: 31 33 2e 30 30 30 30 30 30 30 30 30 20 2b 30 31 13.000000000 +01
8960: 30 30 0a 2b 2b 2b 20 2e 2f 67 65 6e 65 72 69 63 00.+++ ./generic
8970: 2f 74 63 6c 49 6e 74 2e 68 09 32 30 30 36 2d 31 /tclInt.h.2006-1
8980: 32 2d 30 35 20 31 33 3a 32 31 3a 33 35 2e 30 30 2-05 13:21:35.00
8990: 30 30 30 30 30 30 30 20 2b 30 31 30 30 0a 40 40 0000000 +0100.@@
89a0: 20 2d 32 32 30 37 2c 36 20 2b 32 32 30 37 2c 38 -2207,6 +2207,8
89b0: 20 40 40 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 @@. MODULE_SCOP
89c0: 45 20 69 6e 74 09 54 63 6c 41 72 72 61 79 53 65 E int.TclArraySe
89d0: 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e t(Tcl_Interp *in
89e0: 74 65 72 70 2c 0a 20 09 09 09 20 20 20 20 54 63 terp,. ... Tc
89f0: 6c 5f 4f 62 6a 20 2a 61 72 72 61 79 4e 61 6d 65 l_Obj *arrayName
8a00: 4f 62 6a 2c 20 54 63 6c 5f 4f 62 6a 20 2a 61 72 Obj, Tcl_Obj *ar
8a10: 72 61 79 45 6c 65 6d 4f 62 6a 29 3b 0a 20 4d 4f rayElemObj);. MO
8a20: 44 55 4c 45 5f 53 43 4f 50 45 20 64 6f 75 62 6c DULE_SCOPE doubl
8a30: 65 09 54 63 6c 42 69 67 6e 75 6d 54 6f 44 6f 75 e.TclBignumToDou
8a40: 62 6c 65 28 6d 70 5f 69 6e 74 20 2a 62 69 67 6e ble(mp_int *bign
8a50: 75 6d 29 3b 0a 2b 4d 4f 44 55 4c 45 5f 53 43 4f um);.+MODULE_SCO
8a60: 50 45 20 76 6f 69 64 09 54 63 6c 42 69 74 57 69 PE void.TclBitWi
8a70: 73 65 42 69 67 6e 75 6d 4f 70 20 28 75 6e 73 69 seBignumOp (unsi
8a80: 67 6e 65 64 20 63 68 61 72 20 6f 70 2c 20 6d 70 gned char op, mp
8a90: 5f 69 6e 74 20 2a 62 69 67 31 2c 0a 2b 09 09 09 _int *big1,.+...
8aa0: 20 20 20 20 6d 70 5f 69 6e 74 20 2a 62 69 67 32 mp_int *big2
8ab0: 2c 20 6d 70 5f 69 6e 74 20 2a 72 65 73 75 6c 74 , mp_int *result
8ac0: 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f 50 45 );. MODULE_SCOPE
8ad0: 20 64 6f 75 62 6c 65 09 54 63 6c 43 65 69 6c 28 double.TclCeil(
8ae0: 6d 70 5f 69 6e 74 20 2a 61 29 3b 0a 20 4d 4f 44 mp_int *a);. MOD
8af0: 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 ULE_SCOPE int.Tc
8b00: 6c 43 68 65 63 6b 42 61 64 4f 63 74 61 6c 28 54 lCheckBadOctal(T
8b10: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
8b20: 70 2c 43 4f 4e 53 54 20 63 68 61 72 20 2a 76 61 p,CONST char *va
8b30: 6c 75 65 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 lue);. MODULE_SC
8b40: 4f 50 45 20 69 6e 74 09 54 63 6c 43 68 61 6e 43 OPE int.TclChanC
8b50: 72 65 61 74 65 4f 62 6a 43 6d 64 28 43 6c 69 65 reateObjCmd(Clie
8b60: 6e 74 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 ntData clientDat
8b70: 61 2c 0a 40 40 20 2d 32 32 37 32 2c 36 20 2b 32 a,.@@ -2272,6 +2
8b80: 32 37 34 2c 38 20 40 40 0a 20 4d 4f 44 55 4c 45 274,8 @@. MODULE
8b90: 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c 47 6c _SCOPE int.TclGl
8ba0: 6f 62 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 ob(Tcl_Interp *i
8bb0: 6e 74 65 72 70 2c 20 63 68 61 72 20 2a 70 61 74 nterp, char *pat
8bc0: 74 65 72 6e 2c 0a 20 09 09 09 20 20 20 20 54 63 tern,. ... Tc
8bd0: 6c 5f 4f 62 6a 20 2a 75 6e 71 75 6f 74 65 64 50 l_Obj *unquotedP
8be0: 72 65 66 69 78 2c 20 69 6e 74 20 67 6c 6f 62 46 refix, int globF
8bf0: 6c 61 67 73 2c 0a 20 09 09 09 20 20 20 20 54 63 lags,. ... Tc
8c00: 6c 5f 47 6c 6f 62 54 79 70 65 44 61 74 61 20 2a l_GlobTypeData *
8c10: 74 79 70 65 73 29 3b 0a 2b 4d 4f 44 55 4c 45 5f types);.+MODULE_
8c20: 53 43 4f 50 45 20 76 6f 69 64 09 54 63 6c 49 6c SCOPE void.TclIl
8c30: 6c 65 67 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 legalExprOperand
8c40: 54 79 70 65 28 54 63 6c 5f 49 6e 74 65 72 70 20 Type(Tcl_Interp
8c50: 2a 69 6e 74 65 72 70 2c 0a 2b 09 09 09 20 20 20 *interp,.+...
8c60: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f unsigned char o
8c70: 70 2c 20 54 63 6c 5f 4f 62 6a 20 2a 6f 70 6e 64 p, Tcl_Obj *opnd
8c80: 50 74 72 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 Ptr);. MODULE_SC
8c90: 4f 50 45 20 69 6e 74 09 54 63 6c 49 6e 63 72 4f OPE int.TclIncrO
8ca0: 62 6a 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 bj(Tcl_Interp *i
8cb0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 20 2a nterp, Tcl_Obj *
8cc0: 76 61 6c 75 65 50 74 72 2c 0a 20 09 09 09 20 20 valuePtr,. ...
8cd0: 20 20 54 63 6c 5f 4f 62 6a 20 2a 69 6e 63 72 50 Tcl_Obj *incrP
8ce0: 74 72 29 3b 0a 20 4d 4f 44 55 4c 45 5f 53 43 4f tr);. MODULE_SCO
8cf0: 50 45 20 54 63 6c 5f 4f 62 6a 20 2a 09 54 63 6c PE Tcl_Obj *.Tcl
8d00: 49 6e 63 72 4f 62 6a 56 61 72 32 28 54 63 6c 5f IncrObjVar2(Tcl_
8d10: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 Interp *interp,
8d20: 54 63 6c 5f 4f 62 6a 20 2a 70 61 72 74 31 50 74 Tcl_Obj *part1Pt
8d30: 72 2c 0a 40 40 20 2d 32 34 30 38 2c 36 20 2b 32 r,.@@ -2408,6 +2
8d40: 34 31 32 2c 38 20 40 40 0a 20 4d 4f 44 55 4c 45 412,8 @@. MODULE
8d50: 5f 53 43 4f 50 45 20 76 6f 69 64 09 54 63 6c 53 _SCOPE void.TclS
8d60: 69 67 6e 61 6c 45 78 69 74 54 68 72 65 61 64 28 ignalExitThread(
8d70: 54 63 6c 5f 54 68 72 65 61 64 49 64 20 69 64 2c Tcl_ThreadId id,
8d80: 20 69 6e 74 20 72 65 73 75 6c 74 29 3b 0a 20 4d int result);. M
8d90: 4f 44 55 4c 45 5f 53 43 4f 50 45 20 69 6e 74 09 ODULE_SCOPE int.
8da0: 54 63 6c 53 75 62 73 74 54 6f 6b 65 6e 73 28 54 TclSubstTokens(T
8db0: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
8dc0: 70 2c 20 54 63 6c 5f 54 6f 6b 65 6e 20 2a 74 6f p, Tcl_Token *to
8dd0: 6b 65 6e 50 74 72 2c 0a 20 09 09 09 20 20 20 20 kenPtr,. ...
8de0: 69 6e 74 20 63 6f 75 6e 74 2c 20 69 6e 74 20 2a int count, int *
8df0: 74 6f 6b 65 6e 73 4c 65 66 74 50 74 72 2c 20 69 tokensLeftPtr, i
8e00: 6e 74 20 6c 69 6e 65 29 3b 0a 2b 4d 4f 44 55 4c nt line);.+MODUL
8e10: 45 5f 53 43 4f 50 45 20 69 6e 74 09 54 63 6c 53 E_SCOPE int.TclS
8e20: 74 72 43 6f 6d 70 61 72 65 28 54 63 6c 5f 4f 62 trCompare(Tcl_Ob
8e30: 6a 20 2a 6f 62 6a 31 50 74 72 2c 09 54 63 6c 5f j *obj1Ptr,.Tcl_
8e40: 4f 62 6a 20 2a 6f 62 6a 32 50 74 72 2c 0a 2b 09 Obj *obj2Ptr,.+.
8e50: 09 09 20 20 20 20 69 6e 74 20 6e 6f 63 61 73 65 .. int nocase
8e60: 2c 20 69 6e 74 20 72 65 71 6c 65 6e 67 74 68 2c , int reqlength,
8e70: 20 69 6e 74 20 65 71 75 61 6c 29 3b 0a 20 4d 4f int equal);. MO
8e80: 44 55 4c 45 5f 53 43 4f 50 45 20 76 6f 69 64 09 DULE_SCOPE void.
8e90: 54 63 6c 54 72 61 6e 73 66 65 72 52 65 73 75 6c TclTransferResul
8ea0: 74 28 54 63 6c 5f 49 6e 74 65 72 70 20 2a 73 6f t(Tcl_Interp *so
8eb0: 75 72 63 65 49 6e 74 65 72 70 2c 20 69 6e 74 20 urceInterp, int
8ec0: 72 65 73 75 6c 74 2c 0a 20 09 09 09 20 20 20 20 result,. ...
8ed0: 54 63 6c 5f 49 6e 74 65 72 70 20 2a 74 61 72 67 Tcl_Interp *targ
8ee0: 65 74 49 6e 74 65 72 70 29 3b 0a 20 4d 4f 44 55 etInterp);. MODU
8ef0: 4c 45 5f 53 43 4f 50 45 20 54 63 6c 5f 4f 62 6a LE_SCOPE Tcl_Obj
8f00: 20 2a 09 54 63 6c 70 4e 61 74 69 76 65 54 6f 4e *.TclpNativeToN
8f10: 6f 72 6d 61 6c 69 7a 65 64 28 43 6c 69 65 6e 74 ormalized(Client
8f20: 44 61 74 61 20 63 6c 69 65 6e 74 44 61 74 61 29 Data clientData)
8f30: 3b 0a 64 69 66 66 20 2d 72 75 20 2e 2e 2f 74 63 ;.diff -ru ../tc
8f40: 6c 2d 32 30 30 36 31 32 30 36 2f 67 65 6e 65 72 l-20061206/gener
8f50: 69 63 2f 74 63 6c 4d 61 74 68 4f 70 2e 63 20 2e ic/tclMathOp.c .
8f60: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 4d 61 74 68 /generic/tclMath
8f70: 4f 70 2e 63 0a 2d 2d 2d 20 2e 2e 2f 74 63 6c 2d Op.c.--- ../tcl-
8f80: 32 30 30 36 31 32 30 36 2f 67 65 6e 65 72 69 63 20061206/generic
8f90: 2f 74 63 6c 4d 61 74 68 4f 70 2e 63 09 32 30 30 /tclMathOp.c.200
8fa0: 36 2d 31 32 2d 30 32 20 30 38 3a 30 33 3a 31 33 6-12-02 08:03:13
8fb0: 2e 30 30 30 30 30 30 30 30 30 20 2b 30 31 30 30 .000000000 +0100
8fc0: 0a 2b 2b 2b 20 2e 2f 67 65 6e 65 72 69 63 2f 74 .+++ ./generic/t
8fd0: 63 6c 4d 61 74 68 4f 70 2e 63 09 32 30 30 36 2d clMathOp.c.2006-
8fe0: 31 32 2d 30 36 20 31 36 3a 33 36 3a 35 33 2e 30 12-06 16:36:53.0
8ff0: 30 30 30 30 30 30 30 30 20 2b 30 31 30 30 0a 40 00000000 +0100.@
9000: 40 20 2d 35 30 2c 39 20 2b 35 30 2c 39 20 40 40 @ -50,9 +50,9 @@
9010: 0a 20 20 2a 2f 0a 20 0a 20 73 74 61 74 69 63 20 . */. . static
9020: 54 63 6c 5f 4f 62 6a 20 2a 09 43 6f 6d 62 69 6e Tcl_Obj *.Combin
9030: 65 49 6e 74 46 6c 6f 61 74 28 54 63 6c 5f 49 6e eIntFloat(Tcl_In
9040: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 20 54 63 terp *interp, Tc
9050: 6c 5f 4f 62 6a 20 2a 76 61 6c 75 65 50 74 72 2c l_Obj *valuePtr,
9060: 0a 2d 09 09 09 20 20 20 20 69 6e 74 20 6f 70 63 .-... int opc
9070: 6f 64 65 2c 20 54 63 6c 5f 4f 62 6a 20 2a 76 61 ode, Tcl_Obj *va
9080: 6c 75 65 32 50 74 72 29 3b 0a 2b 09 09 09 20 20 lue2Ptr);.+...
9090: 20 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 unsigned char
90a0: 6f 70 63 6f 64 65 2c 20 54 63 6c 5f 4f 62 6a 20 opcode, Tcl_Obj
90b0: 2a 76 61 6c 75 65 32 50 74 72 29 3b 0a 20 73 74 *value2Ptr);. st
90c0: 61 74 69 63 20 54 63 6c 5f 4f 62 6a 20 2a 09 43 atic Tcl_Obj *.C
90d0: 6f 6d 62 69 6e 65 49 6e 74 4f 6e 6c 79 28 54 63 ombineIntOnly(Tc
90e0: 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 l_Interp *interp
90f0: 2c 20 54 63 6c 5f 4f 62 6a 20 2a 76 61 6c 75 65 , Tcl_Obj *value
9100: 50 74 72 2c 0a 2d 09 09 09 20 20 20 20 69 6e 74 Ptr,.-... int
9110: 20 6f 70 63 6f 64 65 2c 20 54 63 6c 5f 4f 62 6a opcode, Tcl_Obj
9120: 20 2a 76 61 6c 75 65 32 50 74 72 29 3b 0a 2b 09 *value2Ptr);.+.
9130: 09 09 20 20 20 20 75 6e 73 69 67 6e 65 64 20 63 .. unsigned c
9140: 68 61 72 20 6f 70 63 6f 64 65 2c 20 54 63 6c 5f har opcode, Tcl_
9150: 4f 62 6a 20 2a 76 61 6c 75 65 32 50 74 72 29 3b Obj *value2Ptr);
9160: 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 43 6f . static int..Co
9170: 6d 70 61 72 65 4e 75 6d 62 65 72 73 28 54 63 6c mpareNumbers(Tcl
9180: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c _Interp *interp,
9190: 20 54 63 6c 5f 4f 62 6a 20 2a 6e 75 6d 4f 62 6a Tcl_Obj *numObj
91a0: 31 2c 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 4f 1,. ... Tcl_O
91b0: 62 6a 20 2a 6e 75 6d 4f 62 6a 32 2c 20 69 6e 74 bj *numObj2, int
91c0: 20 2a 72 65 73 75 6c 74 50 74 72 29 3b 0a 20 0c *resultPtr);. .
91d0: 0a 40 40 20 2d 38 30 2c 32 32 20 2b 38 30 2c 32 .@@ -80,22 +80,2
91e0: 31 20 40 40 0a 20 43 6f 6d 62 69 6e 65 49 6e 74 1 @@. CombineInt
91f0: 46 6c 6f 61 74 28 0a 20 20 20 20 20 54 63 6c 5f Float(. Tcl_
9200: 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 09 Interp *interp,.
9210: 09 2f 2a 20 50 6c 61 63 65 20 74 6f 20 77 72 69 ./* Place to wri
9220: 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 te error message
9230: 73 2e 20 2a 2f 0a 20 20 20 20 20 54 63 6c 5f 4f s. */. Tcl_O
9240: 62 6a 20 2a 76 61 6c 75 65 50 74 72 2c 09 09 2f bj *valuePtr,../
9250: 2a 20 46 69 72 73 74 20 76 61 6c 75 65 20 74 6f * First value to
9260: 20 63 6f 6d 62 69 6e 65 2e 20 2a 2f 0a 2d 20 20 combine. */.-
9270: 20 20 69 6e 74 20 6f 70 63 6f 64 65 2c 09 09 09 int opcode,...
9280: 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 74 6f 20 /* Operation to
9290: 75 73 65 20 74 6f 20 63 6f 6d 62 69 6e 65 20 74 use to combine t
92a0: 68 65 0a 2b 20 20 20 20 75 6e 73 69 67 6e 65 64 he.+ unsigned
92b0: 20 63 68 61 72 20 6f 70 63 6f 64 65 2c 09 2f 2a char opcode,./*
92c0: 20 4f 70 65 72 61 74 69 6f 6e 20 74 6f 20 75 73 Operation to us
92d0: 65 20 74 6f 20 63 6f 6d 62 69 6e 65 20 74 68 65 e to combine the
92e0: 0a 20 09 09 09 09 20 2a 20 76 61 6c 75 65 73 2e . .... * values.
92f0: 20 4d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 Must be one of
9300: 49 4e 53 54 5f 41 44 44 2c 20 49 4e 53 54 5f 53 INST_ADD, INST_S
9310: 55 42 2c 0a 20 09 09 09 09 20 2a 20 49 4e 53 54 UB,. .... * INST
9320: 5f 4d 55 4c 54 2c 20 49 4e 53 54 5f 44 49 56 20 _MULT, INST_DIV
9330: 6f 72 20 49 4e 53 54 5f 45 58 50 4f 4e 2e 20 2a or INST_EXPON. *
9340: 2f 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a /. Tcl_Obj *
9350: 76 61 6c 75 65 32 50 74 72 29 09 09 2f 2a 20 53 value2Ptr)../* S
9360: 65 63 6f 6e 64 20 76 61 6c 75 65 20 74 6f 20 63 econd value to c
9370: 6f 6d 62 69 6e 65 2e 20 2a 2f 0a 20 7b 0a 20 20 ombine. */. {.
9380: 20 20 20 43 6c 69 65 6e 74 44 61 74 61 20 70 74 ClientData pt
9390: 72 31 2c 20 70 74 72 32 3b 0a 20 20 20 20 20 69 r1, ptr2;. i
93a0: 6e 74 20 74 79 70 65 31 2c 20 74 79 70 65 32 3b nt type1, type2;
93b0: 0a 2d 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 65 .- Tcl_Obj *e
93c0: 72 72 50 74 72 3b 0a 20 0a 20 20 20 20 20 69 66 rrPtr;. . if
93d0: 20 28 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 46 ((TclGetNumberF
93e0: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 76 61 6c romObj(NULL, val
93f0: 75 65 50 74 72 2c 20 26 70 74 72 31 2c 20 26 74 uePtr, &ptr1, &t
9400: 79 70 65 31 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 ype1) != TCL_OK)
9410: 0a 20 23 69 66 6e 64 65 66 20 41 43 43 45 50 54 . #ifndef ACCEPT
9420: 5f 4e 41 4e 0a 20 09 20 20 20 20 7c 7c 20 28 74 _NAN. . || (t
9430: 79 70 65 31 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 ype1 == TCL_NUMB
9440: 45 52 5f 4e 41 4e 29 0a 20 23 65 6e 64 69 66 0a ER_NAN). #endif.
9450: 20 09 20 20 20 20 29 20 7b 0a 2d 09 65 72 72 50 . ) {.-.errP
9460: 74 72 20 3d 20 76 61 6c 75 65 50 74 72 3b 0a 2d tr = valuePtr;.-
9470: 09 67 6f 74 6f 20 69 6c 6c 65 67 61 6c 4f 70 65 .goto illegalOpe
9480: 72 61 6e 64 3b 0a 2b 09 54 63 6c 49 6c 6c 65 67 rand;.+.TclIlleg
9490: 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 54 79 70 alExprOperandTyp
94a0: 65 28 69 6e 74 65 72 70 2c 20 6f 70 63 6f 64 65 e(interp, opcode
94b0: 2c 20 76 61 6c 75 65 50 74 72 29 3b 0a 2b 09 72 , valuePtr);.+.r
94c0: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 20 eturn NULL;.
94d0: 20 7d 0a 20 0a 20 23 69 66 64 65 66 20 41 43 43 }. . #ifdef ACC
94e0: 45 50 54 5f 4e 41 4e 0a 40 40 20 2d 31 31 30 2c EPT_NAN.@@ -110,
94f0: 38 20 2b 31 30 39 2c 38 20 40 40 0a 20 09 20 20 8 +109,8 @@. .
9500: 20 20 7c 7c 20 28 74 79 70 65 32 20 3d 3d 20 54 || (type2 == T
9510: 43 4c 5f 4e 55 4d 42 45 52 5f 4e 41 4e 29 0a 20 CL_NUMBER_NAN).
9520: 23 65 6e 64 69 66 0a 20 09 20 20 20 20 29 20 7b #endif. . ) {
9530: 0a 2d 09 65 72 72 50 74 72 20 3d 20 76 61 6c 75 .-.errPtr = valu
9540: 65 32 50 74 72 3b 0a 2d 09 67 6f 74 6f 20 69 6c e2Ptr;.-.goto il
9550: 6c 65 67 61 6c 4f 70 65 72 61 6e 64 3b 0a 2b 09 legalOperand;.+.
9560: 54 63 6c 49 6c 6c 65 67 61 6c 45 78 70 72 4f 70 TclIllegalExprOp
9570: 65 72 61 6e 64 54 79 70 65 28 69 6e 74 65 72 70 erandType(interp
9580: 2c 20 6f 70 63 6f 64 65 2c 20 76 61 6c 75 65 32 , opcode, value2
9590: 50 74 72 29 3b 0a 2b 09 72 65 74 75 72 6e 20 4e Ptr);.+.return N
95a0: 55 4c 4c 3b 0a 20 20 20 20 20 7d 0a 20 0a 20 23 ULL;. }. . #
95b0: 69 66 64 65 66 20 41 43 43 45 50 54 5f 4e 41 4e ifdef ACCEPT_NAN
95c0: 0a 40 40 20 2d 33 33 31 2c 37 20 2b 33 33 30 2c .@@ -331,7 +330,
95d0: 37 20 40 40 0a 20 09 20 20 20 20 7b 0a 20 09 09 7 @@. . {. ..
95e0: 2f 2a 20 4d 75 73 74 20 63 68 65 63 6b 20 66 6f /* Must check fo
95f0: 72 20 6f 76 65 72 66 6c 6f 77 20 2a 2f 0a 20 09 r overflow */. .
9600: 09 69 66 20 28 28 28 77 31 20 3c 20 30 29 20 26 .if (((w1 < 0) &
9610: 26 20 28 77 32 20 3e 20 30 29 20 26 26 20 28 77 & (w2 > 0) && (w
9620: 52 65 73 75 6c 74 20 3e 20 30 29 29 0a 2d 09 09 Result > 0)).-..
9630: 09 7c 7c 20 28 28 77 31 20 3e 20 30 29 20 26 26 .|| ((w1 > 0) &&
9640: 20 28 77 32 20 3c 20 30 29 20 26 26 20 28 77 52 (w2 < 0) && (wR
9650: 65 73 75 6c 74 20 3c 20 30 29 29 29 20 7b 0a 2b esult < 0))) {.+
9660: 09 09 09 7c 7c 20 28 28 77 31 20 3e 3d 20 30 29 ...|| ((w1 >= 0)
9670: 20 26 26 20 28 77 32 20 3c 20 30 29 20 26 26 20 && (w2 < 0) &&
9680: 28 77 52 65 73 75 6c 74 20 3c 20 30 29 29 29 20 (wResult < 0)))
9690: 7b 0a 20 09 09 20 20 20 20 67 6f 74 6f 20 6f 76 {. .. goto ov
96a0: 65 72 66 6c 6f 77 3b 0a 20 09 09 7d 0a 20 09 20 erflow;. ..}. .
96b0: 20 20 20 7d 0a 40 40 20 2d 34 32 31 2c 34 34 20 }.@@ -421,44
96c0: 2b 34 32 30 2c 36 20 40 40 0a 20 09 72 65 74 75 +420,6 @@. .retu
96d0: 72 6e 20 76 61 6c 75 65 50 74 72 3b 0a 20 20 20 rn valuePtr;.
96e0: 20 20 7d 0a 20 0a 2d 20 20 20 20 7b 0a 2d 09 63 }. .- {.-.c
96f0: 6f 6e 73 74 20 63 68 61 72 20 2a 64 65 73 63 72 onst char *descr
9700: 69 70 74 69 6f 6e 2c 20 2a 6f 70 65 72 61 74 6f iption, *operato
9710: 72 3b 0a 2d 0a 2d 20 20 20 20 69 6c 6c 65 67 61 r;.-.- illega
9720: 6c 4f 70 65 72 61 6e 64 3a 0a 2d 09 73 77 69 74 lOperand:.-.swit
9730: 63 68 20 28 6f 70 63 6f 64 65 29 20 7b 0a 2d 09 ch (opcode) {.-.
9740: 63 61 73 65 20 49 4e 53 54 5f 41 44 44 3a 09 20 case INST_ADD:.
9750: 6f 70 65 72 61 74 6f 72 20 3d 20 22 2b 22 3b 20 operator = "+";
9760: 20 62 72 65 61 6b 3b 0a 2d 09 63 61 73 65 20 49 break;.-.case I
9770: 4e 53 54 5f 53 55 42 3a 09 20 6f 70 65 72 61 74 NST_SUB:. operat
9780: 6f 72 20 3d 20 22 2d 22 3b 20 20 62 72 65 61 6b or = "-"; break
9790: 3b 0a 2d 09 63 61 73 65 20 49 4e 53 54 5f 4d 55 ;.-.case INST_MU
97a0: 4c 54 3a 09 20 6f 70 65 72 61 74 6f 72 20 3d 20 LT:. operator =
97b0: 22 2a 22 3b 20 20 62 72 65 61 6b 3b 0a 2d 09 63 "*"; break;.-.c
97c0: 61 73 65 20 49 4e 53 54 5f 44 49 56 3a 09 20 6f ase INST_DIV:. o
97d0: 70 65 72 61 74 6f 72 20 3d 20 22 2f 22 3b 20 20 perator = "/";
97e0: 62 72 65 61 6b 3b 0a 2d 09 63 61 73 65 20 49 4e break;.-.case IN
97f0: 53 54 5f 45 58 50 4f 4e 3a 20 6f 70 65 72 61 74 ST_EXPON: operat
9800: 6f 72 20 3d 20 22 2a 2a 22 3b 20 62 72 65 61 6b or = "**"; break
9810: 3b 0a 2d 09 64 65 66 61 75 6c 74 3a 0a 2d 09 20 ;.-.default:.-.
9820: 20 20 20 6f 70 65 72 61 74 6f 72 20 3d 20 22 3f operator = "?
9830: 3f 3f 22 3b 0a 2d 09 7d 0a 2d 0a 2d 09 69 66 20 ??";.-.}.-.-.if
9840: 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 46 72 6f (TclGetNumberFro
9850: 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 65 72 72 50 74 mObj(NULL, errPt
9860: 72 2c 20 26 70 74 72 31 2c 20 26 74 79 70 65 31 r, &ptr1, &type1
9870: 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2d ) != TCL_OK) {.-
9880: 09 20 20 20 20 69 6e 74 20 6e 75 6d 42 79 74 65 . int numByte
9890: 73 3b 0a 2d 09 20 20 20 20 43 4f 4e 53 54 20 63 s;.-. CONST c
98a0: 68 61 72 20 2a 62 79 74 65 73 20 3d 20 54 63 6c har *bytes = Tcl
98b0: 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 _GetStringFromOb
98c0: 6a 28 65 72 72 50 74 72 2c 20 26 6e 75 6d 42 79 j(errPtr, &numBy
98d0: 74 65 73 29 3b 0a 2d 09 20 20 20 20 69 66 20 28 tes);.-. if (
98e0: 6e 75 6d 42 79 74 65 73 20 3d 3d 20 30 29 20 7b numBytes == 0) {
98f0: 0a 2d 09 09 64 65 73 63 72 69 70 74 69 6f 6e 20 .-..description
9900: 3d 20 22 65 6d 70 74 79 20 73 74 72 69 6e 67 22 = "empty string"
9910: 3b 0a 2d 09 20 20 20 20 7d 20 65 6c 73 65 20 69 ;.-. } else i
9920: 66 20 28 54 63 6c 43 68 65 63 6b 42 61 64 4f 63 f (TclCheckBadOc
9930: 74 61 6c 28 4e 55 4c 4c 2c 20 62 79 74 65 73 29 tal(NULL, bytes)
9940: 29 20 7b 0a 2d 09 09 64 65 73 63 72 69 70 74 69 ) {.-..descripti
9950: 6f 6e 20 3d 20 22 69 6e 76 61 6c 69 64 20 6f 63 on = "invalid oc
9960: 74 61 6c 20 6e 75 6d 62 65 72 22 3b 0a 2d 09 20 tal number";.-.
9970: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d 09 09 64 } else {.-..d
9980: 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 6e 6f escription = "no
9990: 6e 2d 6e 75 6d 65 72 69 63 20 73 74 72 69 6e 67 n-numeric string
99a0: 22 3b 0a 2d 09 20 20 20 20 7d 0a 2d 09 7d 20 65 ";.-. }.-.} e
99b0: 6c 73 65 20 69 66 20 28 74 79 70 65 31 20 3d 3d lse if (type1 ==
99c0: 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 4e 41 4e 29 TCL_NUMBER_NAN)
99d0: 20 7b 0a 2d 09 20 20 20 20 64 65 73 63 72 69 70 {.-. descrip
99e0: 74 69 6f 6e 20 3d 20 22 6e 6f 6e 2d 6e 75 6d 65 tion = "non-nume
99f0: 72 69 63 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 ric floating-poi
9a00: 6e 74 20 76 61 6c 75 65 22 3b 0a 2d 09 7d 20 65 nt value";.-.} e
9a10: 6c 73 65 20 69 66 20 28 74 79 70 65 31 20 3d 3d lse if (type1 ==
9a20: 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 44 4f 55 42 TCL_NUMBER_DOUB
9a30: 4c 45 29 20 7b 0a 2d 09 20 20 20 20 64 65 73 63 LE) {.-. desc
9a40: 72 69 70 74 69 6f 6e 20 3d 20 22 66 6c 6f 61 74 ription = "float
9a50: 69 6e 67 2d 70 6f 69 6e 74 20 76 61 6c 75 65 22 ing-point value"
9a60: 3b 0a 2d 09 7d 20 65 6c 73 65 20 7b 0a 2d 09 20 ;.-.} else {.-.
9a70: 20 20 20 2f 2a 20 54 4f 44 4f 3a 20 4e 6f 20 63 /* TODO: No c
9a80: 61 6c 6c 65 72 20 6e 65 65 64 73 20 74 68 69 73 aller needs this
9a90: 2e 20 20 45 6c 69 6d 69 6e 61 74 65 3f 20 2a 2f . Eliminate? */
9aa0: 0a 2d 09 20 20 20 20 64 65 73 63 72 69 70 74 69 .-. descripti
9ab0: 6f 6e 20 3d 20 22 28 62 69 67 29 20 69 6e 74 65 on = "(big) inte
9ac0: 67 65 72 22 3b 0a 2d 09 7d 0a 2d 0a 2d 09 54 63 ger";.-.}.-.-.Tc
9ad0: 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 l_SetObjResult(i
9ae0: 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 6a 50 72 nterp, Tcl_ObjPr
9af0: 69 6e 74 66 28 0a 2d 09 09 22 63 61 6e 27 74 20 intf(.-.."can't
9b00: 75 73 65 20 25 73 20 61 73 20 6f 70 65 72 61 6e use %s as operan
9b10: 64 20 6f 66 20 5c 22 25 73 5c 22 22 2c 20 64 65 d of \"%s\"", de
9b20: 73 63 72 69 70 74 69 6f 6e 2c 20 6f 70 65 72 61 scription, opera
9b30: 74 6f 72 29 29 3b 0a 2d 09 72 65 74 75 72 6e 20 tor));.-.return
9b40: 4e 55 4c 4c 3b 0a 2d 20 20 20 20 7d 0a 2d 0a 20 NULL;.- }.-.
9b50: 20 20 64 69 76 69 64 65 42 79 5a 65 72 6f 3a 0a divideByZero:.
9b60: 20 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a 52 Tcl_SetObjR
9b70: 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 63 esult(interp, Tc
9b80: 6c 5f 4e 65 77 53 74 72 69 6e 67 4f 62 6a 28 22 l_NewStringObj("
9b90: 64 69 76 69 64 65 20 62 79 20 7a 65 72 6f 22 2c divide by zero",
9ba0: 20 2d 31 29 29 3b 0a 20 20 20 20 20 54 63 6c 5f -1));. Tcl_
9bb0: 53 65 74 45 72 72 6f 72 43 6f 64 65 28 69 6e 74 SetErrorCode(int
9bc0: 65 72 70 2c 20 22 41 52 49 54 48 22 2c 20 22 44 erp, "ARITH", "D
9bd0: 49 56 5a 45 52 4f 22 2c 20 22 64 69 76 69 64 65 IVZERO", "divide
9be0: 20 62 79 20 7a 65 72 6f 22 2c 20 4e 55 4c 4c 29 by zero", NULL)
9bf0: 3b 0a 40 40 20 2d 34 39 36 2c 31 33 37 20 2b 34 ;.@@ -496,137 +4
9c00: 35 37 2c 33 34 20 40 40 0a 20 43 6f 6d 62 69 6e 57,34 @@. Combin
9c10: 65 49 6e 74 4f 6e 6c 79 28 0a 20 20 20 20 20 54 eIntOnly(. T
9c20: 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 cl_Interp *inter
9c30: 70 2c 09 09 2f 2a 20 50 6c 61 63 65 20 74 6f 20 p,../* Place to
9c40: 77 72 69 74 65 20 65 72 72 6f 72 20 6d 65 73 73 write error mess
9c50: 61 67 65 73 2e 20 2a 2f 0a 20 20 20 20 20 54 63 ages. */. Tc
9c60: 6c 5f 4f 62 6a 20 2a 76 61 6c 75 65 50 74 72 2c l_Obj *valuePtr,
9c70: 09 09 2f 2a 20 46 69 72 73 74 20 76 61 6c 75 65 ../* First value
9c80: 20 74 6f 20 63 6f 6d 62 69 6e 65 2e 20 2a 2f 0a to combine. */.
9c90: 2d 20 20 20 20 69 6e 74 20 6f 70 63 6f 64 65 2c - int opcode,
9ca0: 09 09 09 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 .../* Operation
9cb0: 74 6f 20 75 73 65 20 74 6f 20 63 6f 6d 62 69 6e to use to combin
9cc0: 65 20 74 68 65 0a 2b 20 20 20 20 75 6e 73 69 67 e the.+ unsig
9cd0: 6e 65 64 20 63 68 61 72 20 6f 70 63 6f 64 65 2c ned char opcode,
9ce0: 09 2f 2a 20 4f 70 65 72 61 74 69 6f 6e 20 74 6f ./* Operation to
9cf0: 20 75 73 65 20 74 6f 20 63 6f 6d 62 69 6e 65 20 use to combine
9d00: 74 68 65 0a 20 09 09 09 09 20 2a 20 76 61 6c 75 the. .... * valu
9d10: 65 73 2e 20 4d 75 73 74 20 62 65 20 6f 6e 65 20 es. Must be one
9d20: 6f 66 20 49 4e 53 54 5f 42 49 54 41 4e 44 2c 0a of INST_BITAND,.
9d30: 20 09 09 09 09 20 2a 20 49 4e 53 54 5f 42 49 54 .... * INST_BIT
9d40: 4f 52 20 6f 72 20 49 4e 53 54 5f 42 49 54 58 4f OR or INST_BITXO
9d50: 52 2e 20 2a 2f 0a 20 20 20 20 20 54 63 6c 5f 4f R. */. Tcl_O
9d60: 62 6a 20 2a 76 61 6c 75 65 32 50 74 72 29 09 09 bj *value2Ptr)..
9d70: 2f 2a 20 53 65 63 6f 6e 64 20 76 61 6c 75 65 20 /* Second value
9d80: 74 6f 20 63 6f 6d 62 69 6e 65 2e 20 2a 2f 0a 20 to combine. */.
9d90: 7b 0a 20 20 20 20 20 43 6c 69 65 6e 74 44 61 74 {. ClientDat
9da0: 61 20 70 74 72 31 2c 20 70 74 72 32 3b 0a 20 20 a ptr1, ptr2;.
9db0: 20 20 20 69 6e 74 20 74 79 70 65 31 2c 20 74 79 int type1, ty
9dc0: 70 65 32 3b 0a 2d 20 20 20 20 54 63 6c 5f 4f 62 pe2;.- Tcl_Ob
9dd0: 6a 20 2a 65 72 72 50 74 72 3b 0a 20 0a 20 20 20 j *errPtr;. .
9de0: 20 20 69 66 20 28 28 54 63 6c 47 65 74 4e 75 6d if ((TclGetNum
9df0: 62 65 72 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c berFromObj(NULL,
9e00: 20 76 61 6c 75 65 50 74 72 2c 20 26 70 74 72 31 valuePtr, &ptr1
9e10: 2c 20 26 74 79 70 65 31 29 20 21 3d 20 54 43 4c , &type1) != TCL
9e20: 5f 4f 4b 29 0a 20 09 20 20 20 20 7c 7c 20 28 74 _OK). . || (t
9e30: 79 70 65 31 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 ype1 == TCL_NUMB
9e40: 45 52 5f 4e 41 4e 29 20 7c 7c 20 28 74 79 70 65 ER_NAN) || (type
9e50: 31 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 1 == TCL_NUMBER_
9e60: 44 4f 55 42 4c 45 29 29 20 7b 0a 2d 09 65 72 72 DOUBLE)) {.-.err
9e70: 50 74 72 20 3d 20 76 61 6c 75 65 50 74 72 3b 0a Ptr = valuePtr;.
9e80: 2d 09 67 6f 74 6f 20 69 6c 6c 65 67 61 6c 4f 70 -.goto illegalOp
9e90: 65 72 61 6e 64 3b 0a 2b 09 54 63 6c 49 6c 6c 65 erand;.+.TclIlle
9ea0: 67 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 54 79 galExprOperandTy
9eb0: 70 65 28 69 6e 74 65 72 70 2c 20 6f 70 63 6f 64 pe(interp, opcod
9ec0: 65 2c 20 76 61 6c 75 65 50 74 72 29 3b 0a 2b 09 e, valuePtr);.+.
9ed0: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0a 20 20 20 return NULL;.
9ee0: 20 20 7d 0a 20 20 20 20 20 69 66 20 28 28 54 63 }. if ((Tc
9ef0: 6c 47 65 74 4e 75 6d 62 65 72 46 72 6f 6d 4f 62 lGetNumberFromOb
9f00: 6a 28 4e 55 4c 4c 2c 20 76 61 6c 75 65 32 50 74 j(NULL, value2Pt
9f10: 72 2c 20 26 70 74 72 32 2c 20 26 74 79 70 65 32 r, &ptr2, &type2
9f20: 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 0a 20 09 20 ) != TCL_OK). .
9f30: 20 20 20 7c 7c 20 28 74 79 70 65 32 20 3d 3d 20 || (type2 ==
9f40: 54 43 4c 5f 4e 55 4d 42 45 52 5f 4e 41 4e 29 20 TCL_NUMBER_NAN)
9f50: 7c 7c 20 28 74 79 70 65 32 20 3d 3d 20 54 43 4c || (type2 == TCL
9f60: 5f 4e 55 4d 42 45 52 5f 44 4f 55 42 4c 45 29 29 _NUMBER_DOUBLE))
9f70: 20 7b 0a 2d 09 65 72 72 50 74 72 20 3d 20 76 61 {.-.errPtr = va
9f80: 6c 75 65 32 50 74 72 3b 0a 2d 09 67 6f 74 6f 20 lue2Ptr;.-.goto
9f90: 69 6c 6c 65 67 61 6c 4f 70 65 72 61 6e 64 3b 0a illegalOperand;.
9fa0: 2b 09 54 63 6c 49 6c 6c 65 67 61 6c 45 78 70 72 +.TclIllegalExpr
9fb0: 4f 70 65 72 61 6e 64 54 79 70 65 28 69 6e 74 65 OperandType(inte
9fc0: 72 70 2c 20 6f 70 63 6f 64 65 2c 20 76 61 6c 75 rp, opcode, valu
9fd0: 65 32 50 74 72 29 3b 0a 2b 09 72 65 74 75 72 6e e2Ptr);.+.return
9fe0: 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 7d 0a 20 0a NULL;. }. .
9ff0: 20 20 20 20 20 69 66 20 28 28 74 79 70 65 31 20 if ((type1
a000: 3d 3d 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 42 49 == TCL_NUMBER_BI
a010: 47 29 20 7c 7c 20 28 74 79 70 65 32 20 3d 3d 20 G) || (type2 ==
a020: 54 43 4c 5f 4e 55 4d 42 45 52 5f 42 49 47 29 29 TCL_NUMBER_BIG))
a030: 20 7b 0a 20 09 6d 70 5f 69 6e 74 20 62 69 67 31 {. .mp_int big1
a040: 2c 20 62 69 67 32 2c 20 62 69 67 52 65 73 75 6c , big2, bigResul
a050: 74 3b 0a 2d 09 6d 70 5f 69 6e 74 20 2a 46 69 72 t;.-.mp_int *Fir
a060: 73 74 2c 20 2a 53 65 63 6f 6e 64 3b 0a 2d 09 69 st, *Second;.-.i
a070: 6e 74 20 6e 75 6d 50 6f 73 3b 0a 2d 0a 20 0a 20 nt numPos;.-. .
a080: 09 54 63 6c 5f 54 61 6b 65 42 69 67 6e 75 6d 46 .Tcl_TakeBignumF
a090: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 76 61 6c romObj(NULL, val
a0a0: 75 65 50 74 72 2c 20 26 62 69 67 31 29 3b 0a 20 uePtr, &big1);.
a0b0: 09 54 63 6c 5f 54 61 6b 65 42 69 67 6e 75 6d 46 .Tcl_TakeBignumF
a0c0: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 76 61 6c romObj(NULL, val
a0d0: 75 65 32 50 74 72 2c 20 26 62 69 67 32 29 3b 0a ue2Ptr, &big2);.
a0e0: 20 0a 2d 09 2f 2a 0a 2d 09 20 2a 20 43 6f 75 6e .-./*.-. * Coun
a0f0: 74 20 68 6f 77 20 6d 61 6e 79 20 70 6f 73 69 74 t how many posit
a100: 69 76 65 20 61 72 67 75 6d 65 6e 74 73 20 77 65 ive arguments we
a110: 20 68 61 76 65 2e 20 49 66 20 6f 6e 6c 79 20 6f have. If only o
a120: 6e 65 20 6f 66 20 74 68 65 0a 2d 09 20 2a 20 61 ne of the.-. * a
a130: 72 67 75 6d 65 6e 74 73 20 69 73 20 6e 65 67 61 rguments is nega
a140: 74 69 76 65 2c 20 73 74 6f 72 65 20 69 74 20 69 tive, store it i
a150: 6e 20 27 53 65 63 6f 6e 64 27 2e 0a 2d 09 20 2a n 'Second'..-. *
a160: 2f 0a 2d 0a 2d 09 69 66 20 28 6d 70 5f 63 6d 70 /.-.-.if (mp_cmp
a170: 5f 64 28 26 62 69 67 31 2c 20 30 29 20 21 3d 20 _d(&big1, 0) !=
a180: 4d 50 5f 4c 54 29 20 7b 0a 2d 09 20 20 20 20 6e MP_LT) {.-. n
a190: 75 6d 50 6f 73 20 3d 20 31 20 2b 20 28 6d 70 5f umPos = 1 + (mp_
a1a0: 63 6d 70 5f 64 28 26 62 69 67 32 2c 20 30 29 20 cmp_d(&big2, 0)
a1b0: 21 3d 20 4d 50 5f 4c 54 29 3b 0a 2d 09 20 20 20 != MP_LT);.-.
a1c0: 20 46 69 72 73 74 20 20 3d 20 26 62 69 67 31 3b First = &big1;
a1d0: 0a 2d 09 20 20 20 20 53 65 63 6f 6e 64 20 3d 20 .-. Second =
a1e0: 26 62 69 67 32 3b 0a 2d 09 7d 20 65 6c 73 65 20 &big2;.-.} else
a1f0: 7b 0a 2d 09 20 20 20 20 46 69 72 73 74 20 20 3d {.-. First =
a200: 20 26 62 69 67 32 3b 0a 2d 09 20 20 20 20 53 65 &big2;.-. Se
a210: 63 6f 6e 64 20 3d 20 26 62 69 67 31 3b 0a 2d 09 cond = &big1;.-.
a220: 20 20 20 20 6e 75 6d 50 6f 73 20 3d 20 28 6d 70 numPos = (mp
a230: 5f 63 6d 70 5f 64 28 46 69 72 73 74 2c 20 30 29 _cmp_d(First, 0)
a240: 20 21 3d 20 4d 50 5f 4c 54 29 3b 0a 2d 09 7d 0a != MP_LT);.-.}.
a250: 20 09 6d 70 5f 69 6e 69 74 28 26 62 69 67 52 65 .mp_init(&bigRe
a260: 73 75 6c 74 29 3b 0a 20 0a 2d 09 73 77 69 74 63 sult);. .-.switc
a270: 68 20 28 6f 70 63 6f 64 65 29 20 7b 0a 2d 09 63 h (opcode) {.-.c
a280: 61 73 65 20 49 4e 53 54 5f 42 49 54 41 4e 44 3a ase INST_BITAND:
a290: 0a 2d 09 20 20 20 20 73 77 69 74 63 68 20 28 6e .-. switch (n
a2a0: 75 6d 50 6f 73 29 20 7b 0a 2d 09 20 20 20 20 63 umPos) {.-. c
a2b0: 61 73 65 20 32 3a 0a 2d 09 09 2f 2a 20 42 6f 74 ase 2:.-../* Bot
a2c0: 68 20 61 72 67 75 6d 65 6e 74 73 20 70 6f 73 69 h arguments posi
a2d0: 74 69 76 65 2c 20 62 61 73 65 20 63 61 73 65 20 tive, base case
a2e0: 2a 2f 0a 2d 09 09 6d 70 5f 61 6e 64 28 46 69 72 */.-..mp_and(Fir
a2f0: 73 74 2c 20 53 65 63 6f 6e 64 2c 20 26 62 69 67 st, Second, &big
a300: 52 65 73 75 6c 74 29 3b 0a 2d 09 09 62 72 65 61 Result);.-..brea
a310: 6b 3b 0a 2d 09 20 20 20 20 63 61 73 65 20 31 3a k;.-. case 1:
a320: 0a 2d 09 09 2f 2a 20 46 69 72 73 74 20 69 73 20 .-../* First is
a330: 70 6f 73 69 74 69 76 65 3b 20 53 65 63 6f 6e 64 positive; Second
a340: 20 6e 65 67 61 74 69 76 65 0a 2d 09 09 20 2a 20 negative.-.. *
a350: 50 20 26 20 4e 20 3d 20 50 20 26 20 7e 7e 4e 20 P & N = P & ~~N
a360: 3d 20 50 26 7e 28 2d 4e 2d 31 29 20 3d 20 50 20 = P&~(-N-1) = P
a370: 26 20 28 50 20 5e 20 28 2d 4e 2d 31 29 29 20 2a & (P ^ (-N-1)) *
a380: 2f 0a 2d 09 09 6d 70 5f 6e 65 67 28 53 65 63 6f /.-..mp_neg(Seco
a390: 6e 64 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 nd, Second);.-..
a3a0: 6d 70 5f 73 75 62 5f 64 28 53 65 63 6f 6e 64 2c mp_sub_d(Second,
a3b0: 20 31 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 1, Second);.-..
a3c0: 6d 70 5f 78 6f 72 28 46 69 72 73 74 2c 20 53 65 mp_xor(First, Se
a3d0: 63 6f 6e 64 2c 20 26 62 69 67 52 65 73 75 6c 74 cond, &bigResult
a3e0: 29 3b 0a 2d 09 09 6d 70 5f 61 6e 64 28 46 69 72 );.-..mp_and(Fir
a3f0: 73 74 2c 20 26 62 69 67 52 65 73 75 6c 74 2c 20 st, &bigResult,
a400: 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2d 09 09 &bigResult);.-..
a410: 62 72 65 61 6b 3b 0a 2d 09 20 20 20 20 63 61 73 break;.-. cas
a420: 65 20 30 3a 0a 2d 09 09 2f 2a 20 42 6f 74 68 20 e 0:.-../* Both
a430: 61 72 67 75 6d 65 6e 74 73 20 6e 65 67 61 74 69 arguments negati
a440: 76 65 0a 2d 09 09 20 2a 20 61 20 26 20 62 20 3d ve.-.. * a & b =
a450: 20 7e 20 28 7e 61 20 7c 20 7e 62 29 20 3d 20 2d ~ (~a | ~b) = -
a460: 28 2d 61 2d 31 7c 2d 62 2d 31 29 2d 31 20 2a 2f (-a-1|-b-1)-1 */
a470: 0a 2d 09 09 6d 70 5f 6e 65 67 28 46 69 72 73 74 .-..mp_neg(First
a480: 2c 20 46 69 72 73 74 29 3b 0a 2d 09 09 6d 70 5f , First);.-..mp_
a490: 73 75 62 5f 64 28 46 69 72 73 74 2c 20 31 2c 20 sub_d(First, 1,
a4a0: 46 69 72 73 74 29 3b 0a 2d 09 09 6d 70 5f 6e 65 First);.-..mp_ne
a4b0: 67 28 53 65 63 6f 6e 64 2c 20 53 65 63 6f 6e 64 g(Second, Second
a4c0: 29 3b 0a 2d 09 09 6d 70 5f 73 75 62 5f 64 28 53 );.-..mp_sub_d(S
a4d0: 65 63 6f 6e 64 2c 20 31 2c 20 53 65 63 6f 6e 64 econd, 1, Second
a4e0: 29 3b 0a 2d 09 09 6d 70 5f 6f 72 28 46 69 72 73 );.-..mp_or(Firs
a4f0: 74 2c 20 53 65 63 6f 6e 64 2c 20 26 62 69 67 52 t, Second, &bigR
a500: 65 73 75 6c 74 29 3b 0a 2d 09 09 6d 70 5f 6e 65 esult);.-..mp_ne
a510: 67 28 26 62 69 67 52 65 73 75 6c 74 2c 20 26 62 g(&bigResult, &b
a520: 69 67 52 65 73 75 6c 74 29 3b 0a 2d 09 09 6d 70 igResult);.-..mp
a530: 5f 73 75 62 5f 64 28 26 62 69 67 52 65 73 75 6c _sub_d(&bigResul
a540: 74 2c 20 31 2c 20 26 62 69 67 52 65 73 75 6c 74 t, 1, &bigResult
a550: 29 3b 0a 2d 09 09 62 72 65 61 6b 3b 0a 2d 09 20 );.-..break;.-.
a560: 20 20 20 7d 0a 2d 09 20 20 20 20 62 72 65 61 6b }.-. break
a570: 3b 0a 2d 0a 2d 09 63 61 73 65 20 49 4e 53 54 5f ;.-.-.case INST_
a580: 42 49 54 4f 52 3a 0a 2d 09 20 20 20 20 73 77 69 BITOR:.-. swi
a590: 74 63 68 20 28 6e 75 6d 50 6f 73 29 20 7b 0a 2d tch (numPos) {.-
a5a0: 09 20 20 20 20 63 61 73 65 20 32 3a 0a 2d 09 09 . case 2:.-..
a5b0: 2f 2a 20 42 6f 74 68 20 61 72 67 75 6d 65 6e 74 /* Both argument
a5c0: 73 20 70 6f 73 69 74 69 76 65 2c 20 62 61 73 65 s positive, base
a5d0: 20 63 61 73 65 20 2a 2f 0a 2d 09 09 6d 70 5f 6f case */.-..mp_o
a5e0: 72 28 46 69 72 73 74 2c 20 53 65 63 6f 6e 64 2c r(First, Second,
a5f0: 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2d 09 &bigResult);.-.
a600: 09 62 72 65 61 6b 3b 0a 2d 09 20 20 20 20 63 61 .break;.-. ca
a610: 73 65 20 31 3a 0a 2d 09 09 2f 2a 20 46 69 72 73 se 1:.-../* Firs
a620: 74 20 69 73 20 70 6f 73 69 74 69 76 65 3b 20 53 t is positive; S
a630: 65 63 6f 6e 64 20 6e 65 67 61 74 69 76 65 0a 2d econd negative.-
a640: 09 09 20 2a 20 4e 7c 50 20 3d 20 7e 28 7e 4e 26 .. * N|P = ~(~N&
a650: 7e 50 29 20 3d 20 7e 28 28 2d 4e 2d 31 29 26 7e ~P) = ~((-N-1)&~
a660: 50 29 20 3d 20 2d 28 28 2d 4e 2d 31 29 26 28 28 P) = -((-N-1)&((
a670: 2d 4e 2d 31 29 5e 50 29 29 2d 31 20 2a 2f 0a 2d -N-1)^P))-1 */.-
a680: 09 09 6d 70 5f 6e 65 67 28 53 65 63 6f 6e 64 2c ..mp_neg(Second,
a690: 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 6d 70 5f Second);.-..mp_
a6a0: 73 75 62 5f 64 28 53 65 63 6f 6e 64 2c 20 31 2c sub_d(Second, 1,
a6b0: 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 6d 70 5f Second);.-..mp_
a6c0: 78 6f 72 28 46 69 72 73 74 2c 20 53 65 63 6f 6e xor(First, Secon
a6d0: 64 2c 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a d, &bigResult);.
a6e0: 2d 09 09 6d 70 5f 61 6e 64 28 53 65 63 6f 6e 64 -..mp_and(Second
a6f0: 2c 20 26 62 69 67 52 65 73 75 6c 74 2c 20 26 62 , &bigResult, &b
a700: 69 67 52 65 73 75 6c 74 29 3b 0a 2d 09 09 6d 70 igResult);.-..mp
a710: 5f 6e 65 67 28 26 62 69 67 52 65 73 75 6c 74 2c _neg(&bigResult,
a720: 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2d 09 &bigResult);.-.
a730: 09 6d 70 5f 73 75 62 5f 64 28 26 62 69 67 52 65 .mp_sub_d(&bigRe
a740: 73 75 6c 74 2c 20 31 2c 20 26 62 69 67 52 65 73 sult, 1, &bigRes
a750: 75 6c 74 29 3b 0a 2d 09 09 62 72 65 61 6b 3b 0a ult);.-..break;.
a760: 2d 09 20 20 20 20 63 61 73 65 20 30 3a 0a 2d 09 -. case 0:.-.
a770: 09 2f 2a 20 42 6f 74 68 20 61 72 67 75 6d 65 6e ./* Both argumen
a780: 74 73 20 6e 65 67 61 74 69 76 65 0a 2d 09 09 20 ts negative.-..
a790: 2a 20 61 20 7c 20 62 20 3d 20 7e 20 28 7e 61 20 * a | b = ~ (~a
a7a0: 26 20 7e 62 29 20 3d 20 2d 28 2d 61 2d 31 26 2d & ~b) = -(-a-1&-
a7b0: 62 2d 31 29 2d 31 20 2a 2f 0a 2d 09 09 6d 70 5f b-1)-1 */.-..mp_
a7c0: 6e 65 67 28 46 69 72 73 74 2c 20 46 69 72 73 74 neg(First, First
a7d0: 29 3b 0a 2d 09 09 6d 70 5f 73 75 62 5f 64 28 46 );.-..mp_sub_d(F
a7e0: 69 72 73 74 2c 20 31 2c 20 46 69 72 73 74 29 3b irst, 1, First);
a7f0: 0a 2d 09 09 6d 70 5f 6e 65 67 28 53 65 63 6f 6e .-..mp_neg(Secon
a800: 64 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 6d d, Second);.-..m
a810: 70 5f 73 75 62 5f 64 28 53 65 63 6f 6e 64 2c 20 p_sub_d(Second,
a820: 31 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 6d 1, Second);.-..m
a830: 70 5f 61 6e 64 28 46 69 72 73 74 2c 20 53 65 63 p_and(First, Sec
a840: 6f 6e 64 2c 20 26 62 69 67 52 65 73 75 6c 74 29 ond, &bigResult)
a850: 3b 0a 2d 09 09 6d 70 5f 6e 65 67 28 26 62 69 67 ;.-..mp_neg(&big
a860: 52 65 73 75 6c 74 2c 20 26 62 69 67 52 65 73 75 Result, &bigResu
a870: 6c 74 29 3b 0a 2d 09 09 6d 70 5f 73 75 62 5f 64 lt);.-..mp_sub_d
a880: 28 26 62 69 67 52 65 73 75 6c 74 2c 20 31 2c 20 (&bigResult, 1,
a890: 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2d 09 09 &bigResult);.-..
a8a0: 62 72 65 61 6b 3b 0a 2d 09 20 20 20 20 7d 0a 2d break;.-. }.-
a8b0: 09 20 20 20 20 62 72 65 61 6b 3b 0a 2d 0a 2d 09 . break;.-.-.
a8c0: 63 61 73 65 20 49 4e 53 54 5f 42 49 54 58 4f 52 case INST_BITXOR
a8d0: 3a 0a 2d 09 20 20 20 20 73 77 69 74 63 68 20 28 :.-. switch (
a8e0: 6e 75 6d 50 6f 73 29 20 7b 0a 2d 09 20 20 20 20 numPos) {.-.
a8f0: 63 61 73 65 20 32 3a 0a 2d 09 09 2f 2a 20 42 6f case 2:.-../* Bo
a900: 74 68 20 61 72 67 75 6d 65 6e 74 73 20 70 6f 73 th arguments pos
a910: 69 74 69 76 65 2c 20 62 61 73 65 20 63 61 73 65 itive, base case
a920: 20 2a 2f 0a 2d 09 09 6d 70 5f 78 6f 72 28 46 69 */.-..mp_xor(Fi
a930: 72 73 74 2c 20 53 65 63 6f 6e 64 2c 20 26 62 69 rst, Second, &bi
a940: 67 52 65 73 75 6c 74 29 3b 0a 2d 09 09 62 72 65 gResult);.-..bre
a950: 61 6b 3b 0a 2d 09 20 20 20 20 63 61 73 65 20 31 ak;.-. case 1
a960: 3a 0a 2d 09 09 2f 2a 20 46 69 72 73 74 20 69 73 :.-../* First is
a970: 20 70 6f 73 69 74 69 76 65 3b 20 53 65 63 6f 6e positive; Secon
a980: 64 20 6e 65 67 61 74 69 76 65 0a 2d 09 09 20 2a d negative.-.. *
a990: 20 50 5e 4e 20 3d 20 7e 28 50 5e 7e 4e 29 20 3d P^N = ~(P^~N) =
a9a0: 20 2d 28 50 5e 28 2d 4e 2d 31 29 29 2d 31 20 2a -(P^(-N-1))-1 *
a9b0: 2f 0a 2d 09 09 6d 70 5f 6e 65 67 28 53 65 63 6f /.-..mp_neg(Seco
a9c0: 6e 64 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 nd, Second);.-..
a9d0: 6d 70 5f 73 75 62 5f 64 28 53 65 63 6f 6e 64 2c mp_sub_d(Second,
a9e0: 20 31 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d 09 09 1, Second);.-..
a9f0: 6d 70 5f 78 6f 72 28 46 69 72 73 74 2c 20 53 65 mp_xor(First, Se
aa00: 63 6f 6e 64 2c 20 26 62 69 67 52 65 73 75 6c 74 cond, &bigResult
aa10: 29 3b 0a 2d 09 09 6d 70 5f 6e 65 67 28 26 62 69 );.-..mp_neg(&bi
aa20: 67 52 65 73 75 6c 74 2c 20 26 62 69 67 52 65 73 gResult, &bigRes
aa30: 75 6c 74 29 3b 0a 2d 09 09 6d 70 5f 73 75 62 5f ult);.-..mp_sub_
aa40: 64 28 26 62 69 67 52 65 73 75 6c 74 2c 20 31 2c d(&bigResult, 1,
aa50: 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2d 09 &bigResult);.-.
aa60: 09 62 72 65 61 6b 3b 0a 2d 09 20 20 20 20 63 61 .break;.-. ca
aa70: 73 65 20 30 3a 0a 2d 09 09 2f 2a 20 42 6f 74 68 se 0:.-../* Both
aa80: 20 61 72 67 75 6d 65 6e 74 73 20 6e 65 67 61 74 arguments negat
aa90: 69 76 65 0a 2d 09 09 20 2a 20 61 20 5e 20 62 20 ive.-.. * a ^ b
aaa0: 3d 20 28 7e 61 20 5e 20 7e 62 29 20 3d 20 28 2d = (~a ^ ~b) = (-
aab0: 61 2d 31 5e 2d 62 2d 31 29 20 2a 2f 0a 2d 09 09 a-1^-b-1) */.-..
aac0: 6d 70 5f 6e 65 67 28 46 69 72 73 74 2c 20 46 69 mp_neg(First, Fi
aad0: 72 73 74 29 3b 0a 2d 09 09 6d 70 5f 73 75 62 5f rst);.-..mp_sub_
aae0: 64 28 46 69 72 73 74 2c 20 31 2c 20 46 69 72 73 d(First, 1, Firs
aaf0: 74 29 3b 0a 2d 09 09 6d 70 5f 6e 65 67 28 53 65 t);.-..mp_neg(Se
ab00: 63 6f 6e 64 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d cond, Second);.-
ab10: 09 09 6d 70 5f 73 75 62 5f 64 28 53 65 63 6f 6e ..mp_sub_d(Secon
ab20: 64 2c 20 31 2c 20 53 65 63 6f 6e 64 29 3b 0a 2d d, 1, Second);.-
ab30: 09 09 6d 70 5f 78 6f 72 28 46 69 72 73 74 2c 20 ..mp_xor(First,
ab40: 53 65 63 6f 6e 64 2c 20 26 62 69 67 52 65 73 75 Second, &bigResu
ab50: 6c 74 29 3b 0a 2d 09 09 62 72 65 61 6b 3b 0a 2d lt);.-..break;.-
ab60: 09 20 20 20 20 7d 0a 2d 09 20 20 20 20 62 72 65 . }.-. bre
ab70: 61 6b 3b 0a 2d 09 7d 0a 2b 09 54 63 6c 42 69 74 ak;.-.}.+.TclBit
ab80: 57 69 73 65 42 69 67 6e 75 6d 4f 70 28 6f 70 63 WiseBignumOp(opc
ab90: 6f 64 65 2c 20 26 62 69 67 31 2c 20 26 62 69 67 ode, &big1, &big
aba0: 32 2c 20 26 62 69 67 52 65 73 75 6c 74 29 3b 0a 2, &bigResult);.
abb0: 20 0a 20 09 6d 70 5f 63 6c 65 61 72 28 26 62 69 . .mp_clear(&bi
abc0: 67 31 29 3b 0a 20 09 6d 70 5f 63 6c 65 61 72 28 g1);. .mp_clear(
abd0: 26 62 69 67 32 29 3b 0a 40 40 20 2d 36 39 30 2c &big2);.@@ -690,
abe0: 34 31 20 2b 35 34 38 2c 37 20 40 40 0a 20 09 72 41 +548,7 @@. .r
abf0: 65 74 75 72 6e 20 76 61 6c 75 65 50 74 72 3b 0a eturn valuePtr;.
ac00: 20 20 20 20 20 7d 0a 20 0a 2d 20 20 20 20 7b 0a }. .- {.
ac10: 2d 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 64 65 -.const char *de
ac20: 73 63 72 69 70 74 69 6f 6e 2c 20 2a 6f 70 65 72 scription, *oper
ac30: 61 74 6f 72 3b 0a 2d 0a 2d 20 20 20 20 69 6c 6c ator;.-.- ill
ac40: 65 67 61 6c 4f 70 65 72 61 6e 64 3a 0a 2d 09 73 egalOperand:.-.s
ac50: 77 69 74 63 68 20 28 6f 70 63 6f 64 65 29 20 7b witch (opcode) {
ac60: 0a 2d 09 63 61 73 65 20 49 4e 53 54 5f 42 49 54 .-.case INST_BIT
ac70: 41 4e 44 3a 20 6f 70 65 72 61 74 6f 72 20 3d 20 AND: operator =
ac80: 22 26 22 3b 20 20 62 72 65 61 6b 3b 0a 2d 09 63 "&"; break;.-.c
ac90: 61 73 65 20 49 4e 53 54 5f 42 49 54 4f 52 3a 20 ase INST_BITOR:
aca0: 20 6f 70 65 72 61 74 6f 72 20 3d 20 22 7c 22 3b operator = "|";
acb0: 20 20 62 72 65 61 6b 3b 0a 2d 09 63 61 73 65 20 break;.-.case
acc0: 49 4e 53 54 5f 42 49 54 58 4f 52 3a 20 6f 70 65 INST_BITXOR: ope
acd0: 72 61 74 6f 72 20 3d 20 22 5e 22 3b 20 20 62 72 rator = "^"; br
ace0: 65 61 6b 3b 0a 2d 09 64 65 66 61 75 6c 74 3a 0a eak;.-.default:.
acf0: 2d 09 20 20 20 20 6f 70 65 72 61 74 6f 72 20 3d -. operator =
ad00: 20 22 3f 3f 3f 22 3b 0a 2d 09 7d 0a 2d 0a 2d 09 "???";.-.}.-.-.
ad10: 69 66 20 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 if (TclGetNumber
ad20: 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 65 72 FromObj(NULL, er
ad30: 72 50 74 72 2c 20 26 70 74 72 31 2c 20 26 74 79 rPtr, &ptr1, &ty
ad40: 70 65 31 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 pe1) != TCL_OK)
ad50: 7b 0a 2d 09 20 20 20 20 69 6e 74 20 6e 75 6d 42 {.-. int numB
ad60: 79 74 65 73 3b 0a 2d 09 20 20 20 20 43 4f 4e 53 ytes;.-. CONS
ad70: 54 20 63 68 61 72 20 2a 62 79 74 65 73 20 3d 20 T char *bytes =
ad80: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f Tcl_GetStringFro
ad90: 6d 4f 62 6a 28 65 72 72 50 74 72 2c 20 26 6e 75 mObj(errPtr, &nu
ada0: 6d 42 79 74 65 73 29 3b 0a 2d 09 20 20 20 20 69 mBytes);.-. i
adb0: 66 20 28 6e 75 6d 42 79 74 65 73 20 3d 3d 20 30 f (numBytes == 0
adc0: 29 20 7b 0a 2d 09 09 64 65 73 63 72 69 70 74 69 ) {.-..descripti
add0: 6f 6e 20 3d 20 22 65 6d 70 74 79 20 73 74 72 69 on = "empty stri
ade0: 6e 67 22 3b 0a 2d 09 20 20 20 20 7d 20 65 6c 73 ng";.-. } els
adf0: 65 20 69 66 20 28 54 63 6c 43 68 65 63 6b 42 61 e if (TclCheckBa
ae00: 64 4f 63 74 61 6c 28 4e 55 4c 4c 2c 20 62 79 74 dOctal(NULL, byt
ae10: 65 73 29 29 20 7b 0a 2d 09 09 64 65 73 63 72 69 es)) {.-..descri
ae20: 70 74 69 6f 6e 20 3d 20 22 69 6e 76 61 6c 69 64 ption = "invalid
ae30: 20 6f 63 74 61 6c 20 6e 75 6d 62 65 72 22 3b 0a octal number";.
ae40: 2d 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d -. } else {.-
ae50: 09 09 64 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 ..description =
ae60: 22 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20 73 74 72 "non-numeric str
ae70: 69 6e 67 22 3b 0a 2d 09 20 20 20 20 7d 0a 2d 09 ing";.-. }.-.
ae80: 7d 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 31 } else if (type1
ae90: 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 4e == TCL_NUMBER_N
aea0: 41 4e 29 20 7b 0a 2d 09 20 20 20 20 64 65 73 63 AN) {.-. desc
aeb0: 72 69 70 74 69 6f 6e 20 3d 20 22 6e 6f 6e 2d 6e ription = "non-n
aec0: 75 6d 65 72 69 63 20 66 6c 6f 61 74 69 6e 67 2d umeric floating-
aed0: 70 6f 69 6e 74 20 76 61 6c 75 65 22 3b 0a 2d 09 point value";.-.
aee0: 7d 20 65 6c 73 65 20 69 66 20 28 74 79 70 65 31 } else if (type1
aef0: 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 44 == TCL_NUMBER_D
af00: 4f 55 42 4c 45 29 20 7b 0a 2d 09 20 20 20 20 64 OUBLE) {.-. d
af10: 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 66 6c escription = "fl
af20: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 76 61 6c oating-point val
af30: 75 65 22 3b 0a 2d 09 7d 20 65 6c 73 65 20 7b 0a ue";.-.} else {.
af40: 2d 09 20 20 20 20 2f 2a 20 54 4f 44 4f 3a 20 4e -. /* TODO: N
af50: 6f 20 63 61 6c 6c 65 72 20 6e 65 65 64 73 20 74 o caller needs t
af60: 68 69 73 2e 20 20 45 6c 69 6d 69 6e 61 74 65 3f his. Eliminate?
af70: 20 2a 2f 0a 2d 09 20 20 20 20 64 65 73 63 72 69 */.-. descri
af80: 70 74 69 6f 6e 20 3d 20 22 28 62 69 67 29 20 69 ption = "(big) i
af90: 6e 74 65 67 65 72 22 3b 0a 2d 09 7d 0a 2d 0a 2d nteger";.-.}.-.-
afa0: 09 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c .Tcl_SetObjResul
afb0: 74 28 69 6e 74 65 72 70 2c 20 54 63 6c 5f 4f 62 t(interp, Tcl_Ob
afc0: 6a 50 72 69 6e 74 66 28 0a 2d 09 09 22 63 61 6e jPrintf(.-.."can
afd0: 27 74 20 75 73 65 20 25 73 20 61 73 20 6f 70 65 't use %s as ope
afe0: 72 61 6e 64 20 6f 66 20 5c 22 25 73 5c 22 22 2c rand of \"%s\"",
aff0: 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 6f 70 description, op
b000: 65 72 61 74 6f 72 29 29 3b 0a 2d 09 72 65 74 75 erator));.-.retu
b010: 72 6e 20 4e 55 4c 4c 3b 0a 2d 20 20 20 20 7d 0a rn NULL;.- }.
b020: 2b 20 20 20 20 72 65 74 75 72 6e 20 4e 55 4c 4c + return NULL
b030: 3b 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d ;. }. .. /*.@@ -
b040: 31 30 33 34 2c 36 20 2b 38 35 38 2c 31 31 38 20 1034,6 +858,118
b050: 40 40 0a 20 2f 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d @@. /*. *------
b060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b0a0: 0a 20 20 2a 0a 2b 20 2a 20 54 63 6c 53 74 72 43 . *.+ * TclStrC
b0b0: 6f 6d 70 61 72 65 20 2d 2d 0a 2b 20 2a 0a 2b 20 ompare --.+ *.+
b0c0: 2a 09 43 6f 6d 70 61 72 65 20 74 77 6f 20 73 74 *.Compare two st
b0d0: 72 69 6e 67 73 2e 0a 2b 20 2a 0a 2b 20 2a 20 52 rings..+ *.+ * R
b0e0: 65 73 75 6c 74 73 3a 0a 2b 20 2a 20 20 20 20 20 esults:.+ *
b0f0: 20 2d 31 20 3a 20 6c 65 73 73 20 74 68 61 6e 0a -1 : less than.
b100: 2b 20 2a 20 20 20 20 20 20 20 30 20 3a 20 65 71 + * 0 : eq
b110: 75 61 6c 0a 2b 20 2a 20 20 20 20 20 20 20 31 20 ual.+ * 1
b120: 3a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 28 : greater than (
b130: 6f 72 20 6e 6f 6e 2d 65 71 75 61 6c 20 69 66 20 or non-equal if
b140: 65 71 75 61 6c 20 69 73 20 74 72 75 65 29 0a 2b equal is true).+
b150: 20 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 *.+ * Side effe
b160: 63 74 73 3a 0a 2b 20 2a 09 56 61 6c 75 65 73 20 cts:.+ *.Values
b170: 6d 61 79 20 67 65 74 20 74 68 65 69 72 20 73 74 may get their st
b180: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61 74 ring representat
b190: 69 6f 6e 20 66 69 6c 6c 65 64 20 69 6e 20 6f 72 ion filled in or
b1a0: 20 63 68 61 6e 67 65 0a 2b 20 2a 20 20 20 20 20 change.+ *
b1b0: 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 internal repres
b1c0: 65 6e 74 61 74 69 6f 6e 2e 0a 2b 20 2a 0a 2b 20 entation..+ *.+
b1d0: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d *---------------
b1e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b1f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
b210: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b 0a 2b -------.+ */.+.+
b220: 69 6e 74 0a 2b 54 63 6c 53 74 72 43 6f 6d 70 61 int.+TclStrCompa
b230: 72 65 28 0a 2b 20 20 20 20 54 63 6c 5f 4f 62 6a re(.+ Tcl_Obj
b240: 20 2a 6f 62 6a 31 50 74 72 2c 20 20 20 20 2f 2a *obj1Ptr, /*
b250: 20 46 69 72 73 74 20 76 61 6c 75 65 20 74 6f 20 First value to
b260: 63 6f 6d 70 61 72 65 20 20 2a 2f 0a 2b 20 20 20 compare */.+
b270: 20 54 63 6c 5f 4f 62 6a 20 2a 6f 62 6a 32 50 74 Tcl_Obj *obj2Pt
b280: 72 2c 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 r, /* Second
b290: 76 61 6c 75 65 20 74 6f 20 63 6f 6d 70 61 72 65 value to compare
b2a0: 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 20 6e 6f 63 */.+ int noc
b2b0: 61 73 65 2c 20 20 20 20 20 20 20 20 20 20 2f 2a ase, /*
b2c0: 20 74 72 75 65 20 66 6f 72 20 63 61 73 65 20 69 true for case i
b2d0: 6e 73 65 6e 73 69 74 69 76 65 20 63 6f 6d 70 61 nsensitive compa
b2e0: 72 65 20 2a 2f 0a 2b 20 20 20 20 69 6e 74 20 72 re */.+ int r
b2f0: 65 71 6c 65 6e 67 74 68 2c 20 20 20 20 20 20 20 eqlength,
b300: 2f 2a 20 48 6f 77 20 6d 61 6e 79 20 63 68 61 72 /* How many char
b310: 61 63 74 65 72 73 20 74 6f 20 63 6f 6d 70 61 72 acters to compar
b320: 65 2e 20 2d 31 20 66 6f 72 20 61 6c 6c 20 2a 2f e. -1 for all */
b330: 0a 2b 20 20 20 20 69 6e 74 20 65 71 75 61 6c 29 .+ int equal)
b340: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72 /* tr
b350: 75 65 20 69 66 20 6f 6e 6c 79 20 65 71 75 61 6c ue if only equal
b360: 69 74 79 20 69 73 20 69 6e 74 65 72 65 73 74 69 ity is interesti
b370: 6e 67 20 2a 2f 0a 2b 7b 0a 2b 20 20 20 20 63 68 ng */.+{.+ ch
b380: 61 72 20 2a 73 74 72 69 6e 67 31 2c 20 2a 73 74 ar *string1, *st
b390: 72 69 6e 67 32 3b 0a 2b 20 20 20 20 69 6e 74 20 ring2;.+ int
b3a0: 6c 65 6e 67 74 68 31 2c 20 6c 65 6e 67 74 68 32 length1, length2
b3b0: 3b 0a 2b 20 20 20 20 69 6e 74 20 6d 61 74 63 68 ;.+ int match
b3c0: 2c 20 6c 65 6e 67 74 68 3b 0a 2b 20 20 20 20 74 , length;.+ t
b3d0: 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 74 72 ypedef int (*str
b3e0: 43 6d 70 46 6e 5f 74 29 28 63 6f 6e 73 74 20 63 CmpFn_t)(const c
b3f0: 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 har *, const cha
b400: 72 20 2a 2c 20 75 6e 73 69 67 6e 65 64 20 69 6e r *, unsigned in
b410: 74 29 3b 0a 2b 20 20 20 20 73 74 72 43 6d 70 46 t);.+ strCmpF
b420: 6e 5f 74 20 73 74 72 43 6d 70 46 6e 3b 0a 2b 0a n_t strCmpFn;.+.
b430: 2b 20 20 20 20 69 66 20 28 28 72 65 71 6c 65 6e + if ((reqlen
b440: 67 74 68 20 3d 3d 20 30 29 20 7c 7c 20 28 6f 62 gth == 0) || (ob
b450: 6a 31 50 74 72 20 3d 3d 20 6f 62 6a 32 50 74 72 j1Ptr == obj2Ptr
b460: 29 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 2f 2a )) {.+ /*
b470: 0a 2b 20 20 20 20 20 20 20 20 20 2a 20 41 6c 77 .+ * Alw
b480: 61 79 73 20 6d 61 74 63 68 20 61 74 20 30 20 63 ays match at 0 c
b490: 68 61 72 73 20 6f 72 20 69 66 20 69 74 20 69 73 hars or if it is
b4a0: 20 74 68 65 20 73 61 6d 65 20 6f 62 6a 2e 0a 2b the same obj..+
b4b0: 20 20 20 20 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 */.+.+
b4c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b return 0;
b4d0: 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 .+ } else if
b4e0: 28 21 6e 6f 63 61 73 65 20 26 26 20 6f 62 6a 31 (!nocase && obj1
b4f0: 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 Ptr->typePtr ==
b500: 26 74 63 6c 42 79 74 65 41 72 72 61 79 54 79 70 &tclByteArrayTyp
b510: 65 20 26 26 0a 2b 20 20 20 20 20 20 20 20 20 20 e &&.+
b520: 20 20 20 20 20 6f 62 6a 32 50 74 72 2d 3e 74 79 obj2Ptr->ty
b530: 70 65 50 74 72 20 3d 3d 20 26 74 63 6c 42 79 74 pePtr == &tclByt
b540: 65 41 72 72 61 79 54 79 70 65 29 20 7b 0a 2b 20 eArrayType) {.+
b550: 20 20 20 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 /*.+
b560: 20 20 20 20 2a 20 55 73 65 20 62 69 6e 61 72 79 * Use binary
b570: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6f 6d versions of com
b580: 70 61 72 69 73 6f 6e 73 20 73 69 6e 63 65 20 74 parisons since t
b590: 68 61 74 20 77 6f 6e 27 74 20 63 61 75 73 65 20 hat won't cause
b5a0: 75 6e 64 75 65 0a 2b 20 20 20 20 20 20 20 20 20 undue.+
b5b0: 2a 20 74 79 70 65 20 63 6f 6e 76 65 72 73 69 6f * type conversio
b5c0: 6e 73 20 61 6e 64 20 69 74 20 69 73 20 6d 75 63 ns and it is muc
b5d0: 68 20 66 61 73 74 65 72 2e 20 4f 6e 6c 79 20 64 h faster. Only d
b5e0: 6f 20 74 68 69 73 20 69 66 20 77 65 27 72 65 0a o this if we're.
b5f0: 2b 20 20 20 20 20 20 20 20 20 2a 20 63 61 73 65 + * case
b600: 2d 73 65 6e 73 69 74 69 76 65 20 28 77 68 69 63 -sensitive (whic
b610: 68 20 69 73 20 61 6c 6c 20 74 68 61 74 20 72 65 h is all that re
b620: 61 6c 6c 79 20 6d 61 6b 65 73 20 73 65 6e 73 65 ally makes sense
b630: 20 77 69 74 68 20 62 79 74 65 0a 2b 20 20 20 20 with byte.+
b640: 20 20 20 20 20 2a 20 61 72 72 61 79 73 20 61 6e * arrays an
b650: 79 77 61 79 2c 20 61 6e 64 20 77 65 20 68 61 76 yway, and we hav
b660: 65 20 6e 6f 20 6d 65 6d 63 61 73 65 63 6d 70 28 e no memcasecmp(
b670: 29 20 66 6f 72 20 73 6f 6d 65 0a 2b 20 20 20 20 ) for some.+
b680: 20 20 20 20 20 2a 20 72 65 61 73 6f 6e 2e 2e 2e * reason...
b690: 20 3a 5e 29 0a 2b 20 20 20 20 20 20 20 20 20 2a :^).+ *
b6a0: 2f 0a 2b 0a 2b 20 20 20 20 20 20 20 20 73 74 72 /.+.+ str
b6b0: 69 6e 67 31 20 3d 20 28 63 68 61 72 2a 29 20 54 ing1 = (char*) T
b6c0: 63 6c 5f 47 65 74 42 79 74 65 41 72 72 61 79 46 cl_GetByteArrayF
b6d0: 72 6f 6d 4f 62 6a 28 6f 62 6a 31 50 74 72 2c 20 romObj(obj1Ptr,
b6e0: 26 6c 65 6e 67 74 68 31 29 3b 0a 2b 20 20 20 20 &length1);.+
b6f0: 20 20 20 20 73 74 72 69 6e 67 32 20 3d 20 28 63 string2 = (c
b700: 68 61 72 2a 29 20 54 63 6c 5f 47 65 74 42 79 74 har*) Tcl_GetByt
b710: 65 41 72 72 61 79 46 72 6f 6d 4f 62 6a 28 6f 62 eArrayFromObj(ob
b720: 6a 32 50 74 72 2c 20 26 6c 65 6e 67 74 68 32 29 j2Ptr, &length2)
b730: 3b 0a 2b 20 20 20 20 20 20 20 20 73 74 72 43 6d ;.+ strCm
b740: 70 46 6e 20 3d 20 28 73 74 72 43 6d 70 46 6e 5f pFn = (strCmpFn_
b750: 74 29 20 6d 65 6d 63 6d 70 3b 0a 2b 20 20 20 20 t) memcmp;.+
b760: 7d 20 65 6c 73 65 20 69 66 20 28 28 6f 62 6a 31 } else if ((obj1
b770: 50 74 72 2d 3e 74 79 70 65 50 74 72 20 3d 3d 20 Ptr->typePtr ==
b780: 26 74 63 6c 53 74 72 69 6e 67 54 79 70 65 29 0a &tclStringType).
b790: 2b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 +
b7a0: 26 26 20 28 6f 62 6a 32 50 74 72 2d 3e 74 79 70 && (obj2Ptr->typ
b7b0: 65 50 74 72 20 3d 3d 20 26 74 63 6c 53 74 72 69 ePtr == &tclStri
b7c0: 6e 67 54 79 70 65 29 29 20 7b 0a 2b 20 20 20 20 ngType)) {.+
b7d0: 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 20 20 20 /*.+
b7e0: 20 2a 20 44 6f 20 61 20 75 6e 69 63 6f 64 65 2d * Do a unicode-
b7f0: 73 70 65 63 69 66 69 63 20 63 6f 6d 70 61 72 69 specific compari
b800: 73 6f 6e 20 69 66 20 62 6f 74 68 20 6f 66 20 74 son if both of t
b810: 68 65 20 61 72 67 73 20 61 72 65 20 6f 66 0a 2b he args are of.+
b820: 20 20 20 20 20 20 20 20 20 2a 20 53 74 72 69 6e * Strin
b830: 67 20 74 79 70 65 2e 20 49 6e 20 62 65 6e 63 68 g type. In bench
b840: 6d 61 72 6b 20 74 65 73 74 69 6e 67 20 74 68 69 mark testing thi
b850: 73 20 70 72 6f 76 65 64 20 74 68 65 20 6d 6f 73 s proved the mos
b860: 74 0a 2b 20 20 20 20 20 20 20 20 20 2a 20 65 66 t.+ * ef
b870: 66 69 63 69 65 6e 74 20 63 68 65 63 6b 20 62 65 ficient check be
b880: 74 77 65 65 6e 20 74 68 65 20 75 6e 69 63 6f 64 tween the unicod
b890: 65 20 61 6e 64 20 73 74 72 69 6e 67 20 63 6f 6d e and string com
b8a0: 70 61 72 69 73 6f 6e 0a 2b 20 20 20 20 20 20 20 parison.+
b8b0: 20 20 2a 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a * operations..
b8c0: 2b 20 20 20 20 20 20 20 20 20 2a 2f 0a 2b 0a 2b + */.+.+
b8d0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 31 20 string1
b8e0: 3d 20 28 63 68 61 72 2a 29 20 54 63 6c 5f 47 65 = (char*) Tcl_Ge
b8f0: 74 55 6e 69 63 6f 64 65 46 72 6f 6d 4f 62 6a 28 tUnicodeFromObj(
b900: 6f 62 6a 31 50 74 72 2c 20 26 6c 65 6e 67 74 68 obj1Ptr, &length
b910: 31 29 3b 0a 2b 20 20 20 20 20 20 20 20 73 74 72 1);.+ str
b920: 69 6e 67 32 20 3d 20 28 63 68 61 72 2a 29 20 54 ing2 = (char*) T
b930: 63 6c 5f 47 65 74 55 6e 69 63 6f 64 65 46 72 6f cl_GetUnicodeFro
b940: 6d 4f 62 6a 28 6f 62 6a 32 50 74 72 2c 20 26 6c mObj(obj2Ptr, &l
b950: 65 6e 67 74 68 32 29 3b 0a 2b 20 20 20 20 20 20 ength2);.+
b960: 20 20 73 74 72 43 6d 70 46 6e 20 3d 20 28 73 74 strCmpFn = (st
b970: 72 43 6d 70 46 6e 5f 74 29 0a 2b 20 20 20 20 20 rCmpFn_t).+
b980: 20 20 20 20 20 20 20 28 6e 6f 63 61 73 65 20 3f (nocase ?
b990: 20 54 63 6c 5f 55 6e 69 43 68 61 72 4e 63 61 73 Tcl_UniCharNcas
b9a0: 65 63 6d 70 20 3a 20 54 63 6c 5f 55 6e 69 43 68 ecmp : Tcl_UniCh
b9b0: 61 72 4e 63 6d 70 29 3b 0a 2b 20 20 20 20 7d 20 arNcmp);.+ }
b9c0: 65 6c 73 65 20 7b 0a 2b 20 20 20 20 20 20 20 20 else {.+
b9d0: 2f 2a 0a 2b 20 20 20 20 20 20 20 20 20 2a 20 41 /*.+ * A
b9e0: 73 20 61 20 63 61 74 63 68 2d 61 6c 6c 20 77 65 s a catch-all we
b9f0: 20 77 69 6c 6c 20 77 6f 72 6b 20 77 69 74 68 20 will work with
ba00: 55 54 46 2d 38 2e 20 57 65 20 63 61 6e 6e 6f 74 UTF-8. We cannot
ba10: 20 75 73 65 20 6d 65 6d 63 6d 70 28 29 0a 2b 20 use memcmp().+
ba20: 20 20 20 20 20 20 20 20 2a 20 61 73 20 74 68 61 * as tha
ba30: 74 20 69 73 20 75 6e 73 61 66 65 20 77 69 74 68 t is unsafe with
ba40: 20 61 6e 79 20 73 74 72 69 6e 67 20 63 6f 6e 74 any string cont
ba50: 61 69 6e 69 6e 67 20 4e 55 4c 4c 20 28 5c 78 43 aining NULL (\xC
ba60: 30 5c 78 38 30 20 69 6e 0a 2b 20 20 20 20 20 20 0\x80 in.+
ba70: 20 20 20 2a 20 54 63 6c 27 73 20 75 74 66 20 72 * Tcl's utf r
ba80: 65 70 29 2e 20 57 65 20 63 61 6e 20 75 73 65 20 ep). We can use
ba90: 74 68 65 20 6d 6f 72 65 20 65 66 66 69 63 69 65 the more efficie
baa0: 6e 74 20 54 63 6c 70 55 74 66 4e 63 6d 70 32 20 nt TclpUtfNcmp2
bab0: 69 66 0a 2b 20 20 20 20 20 20 20 20 20 2a 20 77 if.+ * w
bac0: 65 20 61 72 65 20 63 61 73 65 2d 73 65 6e 73 69 e are case-sensi
bad0: 74 69 76 65 20 61 6e 64 20 6e 6f 20 73 70 65 63 tive and no spec
bae0: 69 66 69 63 20 6c 65 6e 67 74 68 20 77 61 73 20 ific length was
baf0: 72 65 71 75 65 73 74 65 64 2e 0a 2b 20 20 20 20 requested..+
bb00: 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20 20 20 */.+.+
bb10: 20 20 20 73 74 72 69 6e 67 31 20 3d 20 28 63 68 string1 = (ch
bb20: 61 72 2a 29 20 54 63 6c 5f 47 65 74 53 74 72 69 ar*) Tcl_GetStri
bb30: 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 31 50 74 ngFromObj(obj1Pt
bb40: 72 2c 20 26 6c 65 6e 67 74 68 31 29 3b 0a 2b 20 r, &length1);.+
bb50: 20 20 20 20 20 20 20 73 74 72 69 6e 67 32 20 3d string2 =
bb60: 20 28 63 68 61 72 2a 29 20 54 63 6c 5f 47 65 74 (char*) Tcl_Get
bb70: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 StringFromObj(ob
bb80: 6a 32 50 74 72 2c 20 26 6c 65 6e 67 74 68 32 29 j2Ptr, &length2)
bb90: 3b 0a 2b 20 20 20 20 20 20 20 20 69 66 20 28 28 ;.+ if ((
bba0: 72 65 71 6c 65 6e 67 74 68 20 3c 20 30 29 20 26 reqlength < 0) &
bbb0: 26 20 21 6e 6f 63 61 73 65 29 20 7b 0a 2b 20 20 & !nocase) {.+
bbc0: 20 20 20 20 20 20 20 20 20 20 73 74 72 43 6d 70 strCmp
bbd0: 46 6e 20 3d 20 28 73 74 72 43 6d 70 46 6e 5f 74 Fn = (strCmpFn_t
bbe0: 29 20 54 63 6c 70 55 74 66 4e 63 6d 70 32 3b 0a ) TclpUtfNcmp2;.
bbf0: 2b 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 + } else
bc00: 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c {.+ l
bc10: 65 6e 67 74 68 31 20 3d 20 54 63 6c 5f 4e 75 6d ength1 = Tcl_Num
bc20: 55 74 66 43 68 61 72 73 28 73 74 72 69 6e 67 31 UtfChars(string1
bc30: 2c 20 6c 65 6e 67 74 68 31 29 3b 0a 2b 20 20 20 , length1);.+
bc40: 20 20 20 20 20 20 20 20 20 6c 65 6e 67 74 68 32 length2
bc50: 20 3d 20 54 63 6c 5f 4e 75 6d 55 74 66 43 68 61 = Tcl_NumUtfCha
bc60: 72 73 28 73 74 72 69 6e 67 32 2c 20 6c 65 6e 67 rs(string2, leng
bc70: 74 68 32 29 3b 0a 2b 20 20 20 20 20 20 20 20 20 th2);.+
bc80: 20 20 20 73 74 72 43 6d 70 46 6e 20 3d 20 28 73 strCmpFn = (s
bc90: 74 72 43 6d 70 46 6e 5f 74 29 0a 2b 20 20 20 20 trCmpFn_t).+
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 6f 63 (noc
bcb0: 61 73 65 20 3f 20 54 63 6c 5f 55 74 66 4e 63 61 ase ? Tcl_UtfNca
bcc0: 73 65 63 6d 70 20 3a 20 54 63 6c 5f 55 74 66 4e secmp : Tcl_UtfN
bcd0: 63 6d 70 29 3b 0a 2b 20 20 20 20 20 20 20 20 7d cmp);.+ }
bce0: 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 69 .+ }.+.+ i
bcf0: 66 20 28 65 71 75 61 6c 20 26 26 20 28 72 65 71 f (equal && (req
bd00: 6c 65 6e 67 74 68 20 3c 20 30 29 20 26 26 20 28 length < 0) && (
bd10: 6c 65 6e 67 74 68 31 20 21 3d 20 6c 65 6e 67 74 length1 != lengt
bd20: 68 32 29 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 h2)) {.+
bd30: 72 65 74 75 72 6e 20 31 3b 0a 2b 20 20 20 20 7d return 1;.+ }
bd40: 0a 2b 0a 2b 20 20 20 20 6c 65 6e 67 74 68 20 3d .+.+ length =
bd50: 20 28 6c 65 6e 67 74 68 31 20 3c 20 6c 65 6e 67 (length1 < leng
bd60: 74 68 32 29 20 3f 20 6c 65 6e 67 74 68 31 20 3a th2) ? length1 :
bd70: 20 6c 65 6e 67 74 68 32 3b 0a 2b 20 20 20 20 69 length2;.+ i
bd80: 66 20 28 72 65 71 6c 65 6e 67 74 68 20 3e 20 30 f (reqlength > 0
bd90: 20 26 26 20 72 65 71 6c 65 6e 67 74 68 20 3c 20 && reqlength <
bda0: 6c 65 6e 67 74 68 29 20 7b 0a 2b 20 20 20 20 20 length) {.+
bdb0: 20 20 20 6c 65 6e 67 74 68 20 3d 20 72 65 71 6c length = reql
bdc0: 65 6e 67 74 68 3b 0a 2b 20 20 20 20 7d 20 65 6c ength;.+ } el
bdd0: 73 65 20 69 66 20 28 72 65 71 6c 65 6e 67 74 68 se if (reqlength
bde0: 20 3c 20 30 29 20 7b 0a 2b 20 20 20 20 20 20 20 < 0) {.+
bdf0: 20 2f 2a 0a 2b 20 20 20 20 20 20 20 20 20 2a 20 /*.+ *
be00: 54 68 65 20 72 65 71 75 65 73 74 65 64 20 6c 65 The requested le
be10: 6e 67 74 68 20 69 73 20 6e 65 67 61 74 69 76 65 ngth is negative
be20: 2c 20 73 6f 20 77 65 20 69 67 6e 6f 72 65 20 69 , so we ignore i
be30: 74 20 62 79 0a 2b 20 20 20 20 20 20 20 20 20 2a t by.+ *
be40: 20 73 65 74 74 69 6e 67 20 69 74 20 74 6f 20 6c setting it to l
be50: 65 6e 67 74 68 20 2b 20 31 20 73 6f 20 77 65 20 ength + 1 so we
be60: 63 6f 72 72 65 63 74 20 74 68 65 20 6d 61 74 63 correct the matc
be70: 68 20 76 61 72 2e 0a 2b 20 20 20 20 20 20 20 20 h var..+
be80: 20 2a 2f 0a 2b 0a 2b 20 20 20 20 20 20 20 20 72 */.+.+ r
be90: 65 71 6c 65 6e 67 74 68 20 3d 20 6c 65 6e 67 74 eqlength = lengt
bea0: 68 20 2b 20 31 3b 0a 2b 20 20 20 20 7d 0a 2b 0a h + 1;.+ }.+.
beb0: 2b 20 20 20 20 6d 61 74 63 68 20 3d 20 73 74 72 + match = str
bec0: 43 6d 70 46 6e 28 73 74 72 69 6e 67 31 2c 20 73 CmpFn(string1, s
bed0: 74 72 69 6e 67 32 2c 20 28 75 6e 73 69 67 6e 65 tring2, (unsigne
bee0: 64 29 20 6c 65 6e 67 74 68 29 3b 0a 2b 20 20 20 d) length);.+
bef0: 20 69 66 20 28 28 6d 61 74 63 68 20 3d 3d 20 30 if ((match == 0
bf00: 29 20 26 26 20 28 72 65 71 6c 65 6e 67 74 68 20 ) && (reqlength
bf10: 3e 20 6c 65 6e 67 74 68 29 29 20 7b 0a 2b 20 20 > length)) {.+
bf20: 20 20 20 20 20 20 6d 61 74 63 68 20 3d 20 6c 65 match = le
bf30: 6e 67 74 68 31 20 2d 20 6c 65 6e 67 74 68 32 3b ngth1 - length2;
bf40: 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69 66 20 .+ }.+ if
bf50: 28 65 71 75 61 6c 29 20 7b 0a 2b 09 72 65 74 75 (equal) {.+.retu
bf60: 72 6e 20 28 6d 61 74 63 68 20 21 3d 20 30 29 20 rn (match != 0)
bf70: 3f 20 31 20 3a 20 30 3b 0a 2b 20 20 20 20 7d 20 ? 1 : 0;.+ }
bf80: 65 6c 73 65 20 7b 0a 2b 09 72 65 74 75 72 6e 20 else {.+.return
bf90: 28 6d 61 74 63 68 20 3e 20 30 29 20 3f 20 31 20 (match > 0) ? 1
bfa0: 3a 20 28 6d 61 74 63 68 20 3c 20 30 29 20 3f 20 : (match < 0) ?
bfb0: 2d 31 20 3a 20 30 3b 0a 2b 20 20 20 20 7d 0a 2b -1 : 0;.+ }.+
bfc0: 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d 2d 2d 2d }.+..+/*.+ *----
bfd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bfe0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
bff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
c000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
c010: 2d 2d 0a 2b 20 2a 0a 20 20 2a 20 54 63 6c 49 6e --.+ *. * TclIn
c020: 76 65 72 74 4f 70 43 6d 64 20 2d 2d 0a 20 20 2a vertOpCmd --. *
c030: 0a 20 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 . *.This proced
c040: 75 72 65 20 69 73 20 69 6e 76 6f 6b 65 64 20 74 ure is invoked t
c050: 6f 20 70 72 6f 63 65 73 73 20 74 68 65 20 22 3a o process the ":
c060: 3a 74 63 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 7e 22 :tcl::mathop::~"
c070: 20 54 63 6c 0a 40 40 20 2d 31 30 36 33 2c 36 20 Tcl.@@ -1063,6
c080: 2b 39 39 39 2c 37 20 40 40 0a 20 09 72 65 74 75 +999,7 @@. .retu
c090: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 rn TCL_ERROR;.
c0a0: 20 20 20 7d 0a 20 20 20 20 20 69 66 20 28 54 63 }. if (Tc
c0b0: 6c 47 65 74 4e 75 6d 62 65 72 46 72 6f 6d 4f 62 lGetNumberFromOb
c0c0: 6a 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 j(interp, objv[1
c0d0: 5d 2c 20 26 76 61 6c 2c 20 26 74 79 70 65 29 20 ], &val, &type)
c0e0: 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 09 54 != TCL_OK) {.+.T
c0f0: 63 6c 49 6c 6c 65 67 61 6c 45 78 70 72 4f 70 65 clIllegalExprOpe
c100: 72 61 6e 64 54 79 70 65 28 69 6e 74 65 72 70 2c randType(interp,
c110: 20 49 4e 53 54 5f 42 49 54 4e 4f 54 2c 20 6f 62 INST_BITNOT, ob
c120: 6a 76 5b 31 5d 29 3b 0a 20 09 72 65 74 75 72 6e jv[1]);. .return
c130: 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 20 TCL_ERROR;.
c140: 20 7d 0a 20 20 20 20 20 73 77 69 74 63 68 20 28 }. switch (
c150: 74 79 70 65 29 20 7b 0a 40 40 20 2d 31 30 38 30 type) {.@@ -1080
c160: 2c 37 20 2b 31 30 31 37 2c 37 20 40 40 0a 20 09 ,7 +1017,7 @@. .
c170: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 return TCL_OK;.
c180: 20 20 20 20 7d 0a 20 23 65 6e 64 69 66 0a 2d 20 }. #endif.-
c190: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 2b 20 default: {.+
c1a0: 20 20 20 63 61 73 65 20 54 43 4c 5f 4e 55 4d 42 case TCL_NUMB
c1b0: 45 52 5f 42 49 47 3a 20 7b 0a 20 09 6d 70 5f 69 ER_BIG: {. .mp_i
c1c0: 6e 74 20 62 69 67 3b 0a 20 0a 20 09 54 63 6c 5f nt big;. . .Tcl_
c1d0: 54 61 6b 65 42 69 67 6e 75 6d 46 72 6f 6d 4f 62 TakeBignumFromOb
c1e0: 6a 28 4e 55 4c 4c 2c 20 6f 62 6a 76 5b 31 5d 2c j(NULL, objv[1],
c1f0: 20 26 62 69 67 29 3b 0a 40 40 20 2d 31 30 39 36 &big);.@@ -1096
c200: 2c 36 20 2b 31 30 33 33 2c 39 20 40 40 0a 20 09 ,6 +1033,9 @@. .
c210: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 return TCL_OK;.
c220: 20 20 20 20 7d 0a 20 20 20 20 20 7d 0a 2b 0a 2b }. }.+.+
c230: 20 20 20 20 54 63 6c 49 6c 6c 65 67 61 6c 45 78 TclIllegalEx
c240: 70 72 4f 70 65 72 61 6e 64 54 79 70 65 28 69 6e prOperandType(in
c250: 74 65 72 70 2c 20 49 4e 53 54 5f 42 49 54 4e 4f terp, INST_BITNO
c260: 54 2c 20 6f 62 6a 76 5b 31 5d 29 3b 0a 2b 20 20 T, objv[1]);.+
c270: 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 return TCL_ERR
c280: 4f 52 3b 0a 20 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 OR;. }. .. /*.@@
c290: 20 2d 31 31 32 39 2c 36 20 2b 31 30 36 39 2c 37 -1129,6 +1069,7
c2a0: 20 40 40 0a 20 09 72 65 74 75 72 6e 20 54 43 4c @@. .return TCL
c2b0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 7d 0a 20 _ERROR;. }.
c2c0: 20 20 20 20 69 66 20 28 54 63 6c 5f 47 65 74 42 if (Tcl_GetB
c2d0: 6f 6f 6c 65 61 6e 46 72 6f 6d 4f 62 6a 28 69 6e ooleanFromObj(in
c2e0: 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 terp, objv[1], &
c2f0: 62 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a b) != TCL_OK) {.
c300: 2b 09 54 63 6c 49 6c 6c 65 67 61 6c 45 78 70 72 +.TclIllegalExpr
c310: 4f 70 65 72 61 6e 64 54 79 70 65 28 69 6e 74 65 OperandType(inte
c320: 72 70 2c 20 49 4e 53 54 5f 4c 4e 4f 54 2c 20 6f rp, INST_LNOT, o
c330: 62 6a 76 5b 31 5d 29 3b 0a 20 09 72 65 74 75 72 bjv[1]);. .retur
c340: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 n TCL_ERROR;.
c350: 20 20 7d 0a 20 20 20 20 20 54 63 6c 5f 53 65 74 }. Tcl_Set
c360: 42 6f 6f 6c 65 61 6e 4f 62 6a 28 54 63 6c 5f 47 BooleanObj(Tcl_G
c370: 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 etObjResult(inte
c380: 72 70 29 2c 20 21 62 29 3b 0a 40 40 20 2d 31 31 rp), !b);.@@ -11
c390: 36 33 2c 36 20 2b 31 31 30 34 2c 31 32 20 40 40 63,6 +1104,12 @@
c3a0: 0a 20 09 54 63 6c 5f 53 65 74 49 6e 74 4f 62 6a . .Tcl_SetIntObj
c3b0: 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c (Tcl_GetObjResul
c3c0: 74 28 69 6e 74 65 72 70 29 2c 20 30 29 3b 0a 20 t(interp), 0);.
c3d0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a .return TCL_OK;.
c3e0: 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 } else if (
c3f0: 6f 62 6a 63 20 3d 3d 20 32 29 20 7b 0a 2b 09 43 objc == 2) {.+.C
c400: 6c 69 65 6e 74 44 61 74 61 20 70 74 72 31 3b 0a lientData ptr1;.
c410: 2b 09 69 6e 74 20 74 79 70 65 31 3b 0a 2b 09 69 +.int type1;.+.i
c420: 66 20 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 46 f (TclGetNumberF
c430: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 6f 62 6a romObj(NULL, obj
c440: 76 5b 31 5d 2c 20 26 70 74 72 31 2c 20 26 74 79 v[1], &ptr1, &ty
c450: 70 65 31 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 pe1) != TCL_OK)
c460: 7b 0a 2b 09 20 20 20 20 54 63 6c 49 6c 6c 65 67 {.+. TclIlleg
c470: 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 54 79 70 alExprOperandTyp
c480: 65 28 69 6e 74 65 72 70 2c 20 49 4e 53 54 5f 41 e(interp, INST_A
c490: 44 44 2c 20 6f 62 6a 76 5b 31 5d 29 3b 0a 2b 09 DD, objv[1]);.+.
c4a0: 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 return TCL_E
c4b0: 52 52 4f 52 3b 0a 2b 09 7d 0a 20 09 54 63 6c 5f RROR;.+.}. .Tcl_
c4c0: 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 SetObjResult(int
c4d0: 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 29 3b 0a 20 erp, objv[1]);.
c4e0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a .return TCL_OK;.
c4f0: 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 } else if (
c500: 6f 62 6a 63 20 3d 3d 20 33 29 20 7b 0a 40 40 20 objc == 3) {.@@
c510: 2d 31 32 32 39 2c 36 20 2b 31 31 37 36 2c 31 32 -1229,6 +1176,12
c520: 20 40 40 0a 20 09 54 63 6c 5f 53 65 74 49 6e 74 @@. .Tcl_SetInt
c530: 4f 62 6a 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65 Obj(Tcl_GetObjRe
c540: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 31 29 sult(interp), 1)
c550: 3b 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f ;. .return TCL_O
c560: 4b 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 69 K;. } else i
c570: 66 20 28 6f 62 6a 63 20 3d 3d 20 32 29 20 7b 0a f (objc == 2) {.
c580: 2b 09 43 6c 69 65 6e 74 44 61 74 61 20 70 74 72 +.ClientData ptr
c590: 31 3b 0a 2b 09 69 6e 74 20 74 79 70 65 31 3b 0a 1;.+.int type1;.
c5a0: 2b 09 69 66 20 28 54 63 6c 47 65 74 4e 75 6d 62 +.if (TclGetNumb
c5b0: 65 72 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 erFromObj(NULL,
c5c0: 6f 62 6a 76 5b 31 5d 2c 20 26 70 74 72 31 2c 20 objv[1], &ptr1,
c5d0: 26 74 79 70 65 31 29 20 21 3d 20 54 43 4c 5f 4f &type1) != TCL_O
c5e0: 4b 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c 49 6c K) {.+. TclIl
c5f0: 6c 65 67 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 legalExprOperand
c600: 54 79 70 65 28 69 6e 74 65 72 70 2c 20 49 4e 53 Type(interp, INS
c610: 54 5f 4d 55 4c 54 2c 20 6f 62 6a 76 5b 31 5d 29 T_MULT, objv[1])
c620: 3b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 ;.+. return T
c630: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a 20 09 CL_ERROR;.+.}. .
c640: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 Tcl_SetObjResult
c650: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d (interp, objv[1]
c660: 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f );. .return TCL_
c670: 4f 4b 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 OK;. } else
c680: 69 66 20 28 6f 62 6a 63 20 3d 3d 20 33 29 20 7b if (objc == 3) {
c690: 0a 40 40 20 2d 31 32 39 35 2c 36 20 2b 31 32 34 .@@ -1295,6 +124
c6a0: 38 2c 31 33 20 40 40 0a 20 09 54 63 6c 5f 53 65 8,13 @@. .Tcl_Se
c6b0: 74 49 6e 74 4f 62 6a 28 54 63 6c 5f 47 65 74 4f tIntObj(Tcl_GetO
c6c0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 bjResult(interp)
c6d0: 2c 20 2d 31 29 3b 0a 20 09 72 65 74 75 72 6e 20 , -1);. .return
c6e0: 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 20 7d 20 65 TCL_OK;. } e
c6f0: 6c 73 65 20 69 66 20 28 6f 62 6a 63 20 3d 3d 20 lse if (objc ==
c700: 32 29 20 7b 0a 2b 09 43 6c 69 65 6e 74 44 61 74 2) {.+.ClientDat
c710: 61 20 70 74 72 31 3b 0a 2b 09 69 6e 74 20 74 79 a ptr1;.+.int ty
c720: 70 65 31 3b 0a 2b 09 69 66 20 28 28 54 63 6c 47 pe1;.+.if ((TclG
c730: 65 74 4e 75 6d 62 65 72 46 72 6f 6d 4f 62 6a 28 etNumberFromObj(
c740: 4e 55 4c 4c 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 NULL, objv[1], &
c750: 70 74 72 31 2c 20 26 74 79 70 65 31 29 20 21 3d ptr1, &type1) !=
c760: 20 54 43 4c 5f 4f 4b 29 0a 2b 09 09 7c 7c 20 28 TCL_OK).+..|| (
c770: 74 79 70 65 31 20 3d 3d 20 54 43 4c 5f 4e 55 4d type1 == TCL_NUM
c780: 42 45 52 5f 4e 41 4e 29 20 7c 7c 20 28 74 79 70 BER_NAN) || (typ
c790: 65 31 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 45 52 e1 == TCL_NUMBER
c7a0: 5f 44 4f 55 42 4c 45 29 29 20 7b 0a 2b 09 20 20 _DOUBLE)) {.+.
c7b0: 20 20 54 63 6c 49 6c 6c 65 67 61 6c 45 78 70 72 TclIllegalExpr
c7c0: 4f 70 65 72 61 6e 64 54 79 70 65 28 69 6e 74 65 OperandType(inte
c7d0: 72 70 2c 20 49 4e 53 54 5f 42 49 54 41 4e 44 2c rp, INST_BITAND,
c7e0: 20 6f 62 6a 76 5b 31 5d 29 3b 0a 2b 09 20 20 20 objv[1]);.+.
c7f0: 20 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f return TCL_ERRO
c800: 52 3b 0a 2b 09 7d 0a 20 09 54 63 6c 5f 53 65 74 R;.+.}. .Tcl_Set
c810: 4f 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 ObjResult(interp
c820: 2c 20 6f 62 6a 76 5b 31 5d 29 3b 0a 20 09 72 65 , objv[1]);. .re
c830: 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 turn TCL_OK;.
c840: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6f 62 6a } else if (obj
c850: 63 20 3d 3d 20 33 29 20 7b 0a 40 40 20 2d 31 33 c == 3) {.@@ -13
c860: 36 31 2c 36 20 2b 31 33 32 31 2c 31 33 20 40 40 61,6 +1321,13 @@
c870: 0a 20 09 54 63 6c 5f 53 65 74 49 6e 74 4f 62 6a . .Tcl_SetIntObj
c880: 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c (Tcl_GetObjResul
c890: 74 28 69 6e 74 65 72 70 29 2c 20 30 29 3b 0a 20 t(interp), 0);.
c8a0: 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a .return TCL_OK;.
c8b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 } else if (
c8c0: 6f 62 6a 63 20 3d 3d 20 32 29 20 7b 0a 2b 09 43 objc == 2) {.+.C
c8d0: 6c 69 65 6e 74 44 61 74 61 20 70 74 72 31 3b 0a lientData ptr1;.
c8e0: 2b 09 69 6e 74 20 74 79 70 65 31 3b 0a 2b 09 69 +.int type1;.+.i
c8f0: 66 20 28 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 f ((TclGetNumber
c900: 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 6f 62 FromObj(NULL, ob
c910: 6a 76 5b 31 5d 2c 20 26 70 74 72 31 2c 20 26 74 jv[1], &ptr1, &t
c920: 79 70 65 31 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 ype1) != TCL_OK)
c930: 0a 2b 09 09 7c 7c 20 28 74 79 70 65 31 20 3d 3d .+..|| (type1 ==
c940: 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 4e 41 4e 29 TCL_NUMBER_NAN)
c950: 20 7c 7c 20 28 74 79 70 65 31 20 3d 3d 20 54 43 || (type1 == TC
c960: 4c 5f 4e 55 4d 42 45 52 5f 44 4f 55 42 4c 45 29 L_NUMBER_DOUBLE)
c970: 29 20 7b 0a 2b 09 20 20 20 20 54 63 6c 49 6c 6c ) {.+. TclIll
c980: 65 67 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 54 egalExprOperandT
c990: 79 70 65 28 69 6e 74 65 72 70 2c 20 49 4e 53 54 ype(interp, INST
c9a0: 5f 42 49 54 4f 52 2c 20 6f 62 6a 76 5b 31 5d 29 _BITOR, objv[1])
c9b0: 3b 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 ;.+. return T
c9c0: 43 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a 20 09 CL_ERROR;.+.}. .
c9d0: 54 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 Tcl_SetObjResult
c9e0: 28 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d (interp, objv[1]
c9f0: 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f );. .return TCL_
ca00: 4f 4b 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 OK;. } else
ca10: 69 66 20 28 6f 62 6a 63 20 3d 3d 20 33 29 20 7b if (objc == 3) {
ca20: 0a 40 40 20 2d 31 34 32 37 2c 36 20 2b 31 33 39 .@@ -1427,6 +139
ca30: 34 2c 31 33 20 40 40 0a 20 09 54 63 6c 5f 53 65 4,13 @@. .Tcl_Se
ca40: 74 49 6e 74 4f 62 6a 28 54 63 6c 5f 47 65 74 4f tIntObj(Tcl_GetO
ca50: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 bjResult(interp)
ca60: 2c 20 30 29 3b 0a 20 09 72 65 74 75 72 6e 20 54 , 0);. .return T
ca70: 43 4c 5f 4f 4b 3b 0a 20 20 20 20 20 7d 20 65 6c CL_OK;. } el
ca80: 73 65 20 69 66 20 28 6f 62 6a 63 20 3d 3d 20 32 se if (objc == 2
ca90: 29 20 7b 0a 2b 09 43 6c 69 65 6e 74 44 61 74 61 ) {.+.ClientData
caa0: 20 70 74 72 31 3b 0a 2b 09 69 6e 74 20 74 79 70 ptr1;.+.int typ
cab0: 65 31 3b 0a 2b 09 69 66 20 28 28 54 63 6c 47 65 e1;.+.if ((TclGe
cac0: 74 4e 75 6d 62 65 72 46 72 6f 6d 4f 62 6a 28 4e tNumberFromObj(N
cad0: 55 4c 4c 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 70 ULL, objv[1], &p
cae0: 74 72 31 2c 20 26 74 79 70 65 31 29 20 21 3d 20 tr1, &type1) !=
caf0: 54 43 4c 5f 4f 4b 29 0a 2b 09 09 7c 7c 20 28 74 TCL_OK).+..|| (t
cb00: 79 70 65 31 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 ype1 == TCL_NUMB
cb10: 45 52 5f 4e 41 4e 29 20 7c 7c 20 28 74 79 70 65 ER_NAN) || (type
cb20: 31 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 1 == TCL_NUMBER_
cb30: 44 4f 55 42 4c 45 29 29 20 7b 0a 2b 09 20 20 20 DOUBLE)) {.+.
cb40: 20 54 63 6c 49 6c 6c 65 67 61 6c 45 78 70 72 4f TclIllegalExprO
cb50: 70 65 72 61 6e 64 54 79 70 65 28 69 6e 74 65 72 perandType(inter
cb60: 70 2c 20 49 4e 53 54 5f 42 49 54 58 4f 52 2c 20 p, INST_BITXOR,
cb70: 6f 62 6a 76 5b 31 5d 29 3b 0a 2b 09 20 20 20 20 objv[1]);.+.
cb80: 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 return TCL_ERROR
cb90: 3b 0a 2b 09 7d 0a 20 09 54 63 6c 5f 53 65 74 4f ;.+.}. .Tcl_SetO
cba0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c bjResult(interp,
cbb0: 20 6f 62 6a 76 5b 31 5d 29 3b 0a 20 09 72 65 74 objv[1]);. .ret
cbc0: 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 urn TCL_OK;.
cbd0: 20 7d 20 65 6c 73 65 20 69 66 20 28 6f 62 6a 63 } else if (objc
cbe0: 20 3d 3d 20 33 29 20 7b 0a 40 40 20 2d 31 34 39 == 3) {.@@ -149
cbf0: 33 2c 36 20 2b 31 34 36 37 2c 31 32 20 40 40 0a 3,6 +1467,12 @@.
cc00: 20 09 54 63 6c 5f 53 65 74 49 6e 74 4f 62 6a 28 .Tcl_SetIntObj(
cc10: 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c 74 Tcl_GetObjResult
cc20: 28 69 6e 74 65 72 70 29 2c 20 31 29 3b 0a 20 09 (interp), 1);. .
cc30: 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 return TCL_OK;.
cc40: 20 20 20 20 7d 20 65 6c 73 65 20 69 66 20 28 6f } else if (o
cc50: 62 6a 63 20 3d 3d 20 32 29 20 7b 0a 2b 09 43 6c bjc == 2) {.+.Cl
cc60: 69 65 6e 74 44 61 74 61 20 70 74 72 31 3b 0a 2b ientData ptr1;.+
cc70: 09 69 6e 74 20 74 79 70 65 31 3b 0a 2b 09 69 66 .int type1;.+.if
cc80: 20 28 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 46 ((TclGetNumberF
cc90: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 6f 62 6a romObj(NULL, obj
cca0: 76 5b 31 5d 2c 20 26 70 74 72 31 2c 20 26 74 79 v[1], &ptr1, &ty
ccb0: 70 65 31 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 29 pe1) != TCL_OK))
ccc0: 20 7b 0a 2b 09 20 20 20 20 54 63 6c 49 6c 6c 65 {.+. TclIlle
ccd0: 67 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 54 79 galExprOperandTy
cce0: 70 65 28 69 6e 74 65 72 70 2c 20 49 4e 53 54 5f pe(interp, INST_
ccf0: 45 58 50 4f 4e 2c 20 6f 62 6a 76 5b 31 5d 29 3b EXPON, objv[1]);
cd00: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 54 43 .+. return TC
cd10: 4c 5f 45 52 52 4f 52 3b 0a 2b 09 7d 0a 20 09 54 L_ERROR;.+.}. .T
cd20: 63 6c 5f 53 65 74 4f 62 6a 52 65 73 75 6c 74 28 cl_SetObjResult(
cd30: 69 6e 74 65 72 70 2c 20 6f 62 6a 76 5b 31 5d 29 interp, objv[1])
cd40: 3b 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 4f ;. .return TCL_O
cd50: 4b 3b 0a 20 20 20 20 20 7d 20 65 6c 73 65 20 69 K;. } else i
cd60: 66 20 28 6f 62 6a 63 20 3d 3d 20 33 29 20 7b 0a f (objc == 3) {.
cd70: 40 40 20 2d 31 37 31 36 2c 38 20 2b 31 36 39 36 @@ -1716,8 +1696
cd80: 2c 37 20 40 40 0a 20 20 20 20 20 54 63 6c 5f 4f ,7 @@. Tcl_O
cd90: 62 6a 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d bj *const objv[]
cda0: 29 0a 20 7b 0a 20 20 20 20 20 43 6c 69 65 6e 74 ). {. Client
cdb0: 44 61 74 61 20 70 74 72 31 2c 20 70 74 72 32 3b Data ptr1, ptr2;
cdc0: 0a 2d 20 20 20 20 69 6e 74 20 69 6e 76 61 6c 69 .- int invali
cdd0: 64 2c 20 73 68 69 66 74 2c 20 74 79 70 65 31 2c d, shift, type1,
cde0: 20 74 79 70 65 32 2c 20 69 64 78 3b 0a 2d 20 20 type2, idx;.-
cdf0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 64 65 const char *de
ce00: 73 63 72 69 70 74 69 6f 6e 3b 0a 2b 20 20 20 20 scription;.+
ce10: 69 6e 74 20 69 6e 76 61 6c 69 64 2c 20 73 68 69 int invalid, shi
ce20: 66 74 2c 20 74 79 70 65 31 2c 20 74 79 70 65 32 ft, type1, type2
ce30: 3b 0a 20 20 20 20 20 6c 6f 6e 67 20 6c 31 3b 0a ;. long l1;.
ce40: 20 0a 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20 . if (objc
ce50: 21 3d 20 33 29 20 7b 0a 40 40 20 2d 31 37 32 37 != 3) {.@@ -1727
ce60: 2c 31 33 20 2b 31 37 30 36 2c 31 33 20 40 40 0a ,13 +1706,13 @@.
ce70: 20 0a 20 20 20 20 20 69 66 20 28 28 54 63 6c 47 . if ((TclG
ce80: 65 74 4e 75 6d 62 65 72 46 72 6f 6d 4f 62 6a 28 etNumberFromObj(
ce90: 4e 55 4c 4c 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 NULL, objv[1], &
cea0: 70 74 72 31 2c 20 26 74 79 70 65 31 29 20 21 3d ptr1, &type1) !=
ceb0: 20 54 43 4c 5f 4f 4b 29 0a 20 09 20 20 20 20 7c TCL_OK). . |
cec0: 7c 20 28 74 79 70 65 31 20 3d 3d 20 54 43 4c 5f | (type1 == TCL_
ced0: 4e 55 4d 42 45 52 5f 44 4f 55 42 4c 45 29 20 7c NUMBER_DOUBLE) |
cee0: 7c 20 28 74 79 70 65 31 20 3d 3d 20 54 43 4c 5f | (type1 == TCL_
cef0: 4e 55 4d 42 45 52 5f 4e 41 4e 29 29 20 7b 0a 2d NUMBER_NAN)) {.-
cf00: 09 69 64 78 20 3d 20 31 3b 0a 2d 09 67 6f 74 6f .idx = 1;.-.goto
cf10: 20 69 6c 6c 65 67 61 6c 4f 70 65 72 61 6e 64 3b illegalOperand;
cf20: 0a 2b 09 54 63 6c 49 6c 6c 65 67 61 6c 45 78 70 .+.TclIllegalExp
cf30: 72 4f 70 65 72 61 6e 64 54 79 70 65 28 69 6e 74 rOperandType(int
cf40: 65 72 70 2c 20 49 4e 53 54 5f 4c 53 48 49 46 54 erp, INST_LSHIFT
cf50: 2c 20 6f 62 6a 76 5b 31 5d 29 3b 0a 2b 09 72 65 , objv[1]);.+.re
cf60: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
cf70: 20 20 20 20 20 7d 0a 20 20 20 20 20 69 66 20 28 }. if (
cf80: 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 46 72 6f (TclGetNumberFro
cf90: 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 6f 62 6a 76 5b mObj(NULL, objv[
cfa0: 32 5d 2c 20 26 70 74 72 32 2c 20 26 74 79 70 65 2], &ptr2, &type
cfb0: 32 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 0a 20 09 2) != TCL_OK). .
cfc0: 20 20 20 20 7c 7c 20 28 74 79 70 65 32 20 3d 3d || (type2 ==
cfd0: 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 44 4f 55 42 TCL_NUMBER_DOUB
cfe0: 4c 45 29 20 7c 7c 20 28 74 79 70 65 32 20 3d 3d LE) || (type2 ==
cff0: 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 4e 41 4e 29 TCL_NUMBER_NAN)
d000: 29 20 7b 0a 2d 09 69 64 78 20 3d 20 32 3b 0a 2d ) {.-.idx = 2;.-
d010: 09 67 6f 74 6f 20 69 6c 6c 65 67 61 6c 4f 70 65 .goto illegalOpe
d020: 72 61 6e 64 3b 0a 2b 09 54 63 6c 49 6c 6c 65 67 rand;.+.TclIlleg
d030: 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 54 79 70 alExprOperandTyp
d040: 65 28 69 6e 74 65 72 70 2c 20 49 4e 53 54 5f 4c e(interp, INST_L
d050: 53 48 49 46 54 2c 20 6f 62 6a 76 5b 32 5d 29 3b SHIFT, objv[2]);
d060: 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 52 .+.return TCL_ER
d070: 52 4f 52 3b 0a 20 20 20 20 20 7d 0a 20 0a 20 20 ROR;. }. .
d080: 20 20 20 2f 2a 20 72 65 6a 65 63 74 20 6e 65 67 /* reject neg
d090: 61 74 69 76 65 20 73 68 69 66 74 20 61 72 67 75 ative shift argu
d0a0: 6d 65 6e 74 20 2a 2f 0a 40 40 20 2d 31 37 36 37 ment */.@@ -1767
d0b0: 2c 37 20 2b 31 37 34 36 2c 39 20 40 40 0a 20 20 ,7 +1746,9 @@.
d0c0: 20 20 20 7d 0a 20 0a 20 20 20 20 20 2f 2a 20 4c }. . /* L
d0d0: 61 72 67 65 20 6c 65 66 74 20 73 68 69 66 74 73 arge left shifts
d0e0: 20 63 72 65 61 74 65 20 69 6e 74 65 67 65 72 20 create integer
d0f0: 6f 76 65 72 66 6c 6f 77 20 2a 2f 0a 2d 20 20 20 overflow */.-
d100: 20 69 66 20 28 54 63 6c 5f 47 65 74 49 6e 74 46 if (Tcl_GetIntF
d110: 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 6f 62 6a romObj(NULL, obj
d120: 76 5b 32 5d 2c 20 26 73 68 69 66 74 29 20 21 3d v[2], &shift) !=
d130: 20 54 43 4c 5f 4f 4b 29 20 7b 0a 2b 20 20 20 20 TCL_OK) {.+
d140: 69 66 20 28 28 74 79 70 65 32 20 21 3d 20 54 43 if ((type2 != TC
d150: 4c 5f 4e 55 4d 42 45 52 5f 4c 4f 4e 47 29 20 7c L_NUMBER_LONG) |
d160: 7c 0a 2b 09 20 20 20 20 28 2a 28 28 63 6f 6e 73 |.+. (*((cons
d170: 74 20 6c 6f 6e 67 20 2a 29 70 74 72 32 29 20 3e t long *)ptr2) >
d180: 20 28 6c 6f 6e 67 29 20 49 4e 54 5f 4d 41 58 29 (long) INT_MAX)
d190: 20 7c 7c 0a 2b 09 20 20 20 20 54 63 6c 5f 47 65 ||.+. Tcl_Ge
d1a0: 74 49 6e 74 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c tIntFromObj(NULL
d1b0: 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 73 68 69 66 , objv[2], &shif
d1c0: 74 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a t) != TCL_OK) {.
d1d0: 20 09 2f 2a 0a 20 09 20 2a 20 54 65 63 68 6e 69 ./*. . * Techni
d1e0: 63 61 6c 6c 79 2c 20 77 65 20 63 6f 75 6c 64 20 cally, we could
d1f0: 68 6f 6c 64 20 74 68 65 20 76 61 6c 75 65 20 28 hold the value (
d200: 31 20 3c 3c 20 28 49 4e 54 5f 4d 41 58 2b 31 29 1 << (INT_MAX+1)
d210: 29 20 69 6e 20 61 6e 0a 20 09 20 2a 20 6d 70 5f ) in an. . * mp_
d220: 69 6e 74 2c 20 62 75 74 20 73 69 6e 63 65 20 77 int, but since w
d230: 65 27 72 65 20 75 73 69 6e 67 20 6d 70 5f 6d 75 e're using mp_mu
d240: 6c 5f 32 64 28 29 20 74 6f 20 64 6f 20 74 68 65 l_2d() to do the
d250: 20 77 6f 72 6b 2c 20 61 6e 64 20 69 74 0a 40 40 work, and it.@@
d260: 20 2d 31 38 31 37 2c 32 37 20 2b 31 37 39 38 2c -1817,27 +1798,
d270: 36 20 40 40 0a 20 09 7d 0a 20 20 20 20 20 7d 0a 6 @@. .}. }.
d280: 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f return TCL_
d290: 4f 4b 3b 0a 2d 0a 2d 20 20 69 6c 6c 65 67 61 6c OK;.-.- illegal
d2a0: 4f 70 65 72 61 6e 64 3a 0a 2d 20 20 20 20 69 66 Operand:.- if
d2b0: 20 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 46 72 (TclGetNumberFr
d2c0: 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 6f 62 6a 76 omObj(NULL, objv
d2d0: 5b 69 64 78 5d 2c 20 26 70 74 72 31 2c 20 26 74 [idx], &ptr1, &t
d2e0: 79 70 65 31 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 ype1) != TCL_OK)
d2f0: 20 7b 0a 2d 09 69 6e 74 20 6e 75 6d 42 79 74 65 {.-.int numByte
d300: 73 3b 0a 2d 09 63 6f 6e 73 74 20 63 68 61 72 20 s;.-.const char
d310: 2a 62 79 74 65 73 20 3d 20 54 63 6c 5f 47 65 74 *bytes = Tcl_Get
d320: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 StringFromObj(ob
d330: 6a 76 5b 69 64 78 5d 2c 20 26 6e 75 6d 42 79 74 jv[idx], &numByt
d340: 65 73 29 3b 0a 2d 09 69 66 20 28 6e 75 6d 42 79 es);.-.if (numBy
d350: 74 65 73 20 3d 3d 20 30 29 20 7b 0a 2d 09 20 20 tes == 0) {.-.
d360: 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 description =
d370: 22 65 6d 70 74 79 20 73 74 72 69 6e 67 22 3b 0a "empty string";.
d380: 2d 09 7d 20 65 6c 73 65 20 69 66 20 28 54 63 6c -.} else if (Tcl
d390: 43 68 65 63 6b 42 61 64 4f 63 74 61 6c 28 4e 55 CheckBadOctal(NU
d3a0: 4c 4c 2c 20 62 79 74 65 73 29 29 20 7b 0a 2d 09 LL, bytes)) {.-.
d3b0: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 description
d3c0: 3d 20 22 69 6e 76 61 6c 69 64 20 6f 63 74 61 6c = "invalid octal
d3d0: 20 6e 75 6d 62 65 72 22 3b 0a 2d 09 7d 20 65 6c number";.-.} el
d3e0: 73 65 20 7b 0a 2d 09 20 20 20 20 64 65 73 63 72 se {.-. descr
d3f0: 69 70 74 69 6f 6e 20 3d 20 22 6e 6f 6e 2d 6e 75 iption = "non-nu
d400: 6d 65 72 69 63 20 73 74 72 69 6e 67 22 3b 0a 2d meric string";.-
d410: 09 7d 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 69 .}.- } else i
d420: 66 20 28 74 79 70 65 31 20 3d 3d 20 54 43 4c 5f f (type1 == TCL_
d430: 4e 55 4d 42 45 52 5f 4e 41 4e 29 20 7b 0a 2d 09 NUMBER_NAN) {.-.
d440: 64 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 6e description = "n
d450: 6f 6e 2d 6e 75 6d 65 72 69 63 20 66 6c 6f 61 74 on-numeric float
d460: 69 6e 67 2d 70 6f 69 6e 74 20 76 61 6c 75 65 22 ing-point value"
d470: 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a ;.- } else {.
d480: 2d 09 64 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 -.description =
d490: 22 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 "floating-point
d4a0: 76 61 6c 75 65 22 3b 0a 2d 20 20 20 20 7d 0a 2d value";.- }.-
d4b0: 0a 2d 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a .- Tcl_SetObj
d4c0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 0a 2d Result(interp,.-
d4d0: 09 20 20 20 20 54 63 6c 5f 4f 62 6a 50 72 69 6e . Tcl_ObjPrin
d4e0: 74 66 28 22 63 61 6e 27 74 20 75 73 65 20 25 73 tf("can't use %s
d4f0: 20 61 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 5c as operand of \
d500: 22 3c 3c 5c 22 22 2c 20 64 65 73 63 72 69 70 74 "<<\"", descript
d510: 69 6f 6e 29 29 3b 0a 2d 20 20 20 20 72 65 74 75 ion));.- retu
d520: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 7d rn TCL_ERROR;. }
d530: 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d 31 38 36 35 . .. /*.@@ -1865
d540: 2c 38 20 2b 31 38 32 35 2c 37 20 40 40 0a 20 20 ,8 +1825,7 @@.
d550: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 Tcl_Obj *cons
d560: 74 20 6f 62 6a 76 5b 5d 29 0a 20 7b 0a 20 20 20 t objv[]). {.
d570: 20 20 43 6c 69 65 6e 74 44 61 74 61 20 70 74 72 ClientData ptr
d580: 31 2c 20 70 74 72 32 3b 0a 2d 20 20 20 20 69 6e 1, ptr2;.- in
d590: 74 20 69 6e 76 61 6c 69 64 2c 20 73 68 69 66 74 t invalid, shift
d5a0: 2c 20 74 79 70 65 31 2c 20 74 79 70 65 32 2c 20 , type1, type2,
d5b0: 69 64 78 3b 0a 2d 20 20 20 20 63 6f 6e 73 74 20 idx;.- const
d5c0: 63 68 61 72 20 2a 64 65 73 63 72 69 70 74 69 6f char *descriptio
d5d0: 6e 3b 0a 2b 20 20 20 20 69 6e 74 20 69 6e 76 61 n;.+ int inva
d5e0: 6c 69 64 2c 20 73 68 69 66 74 2c 20 74 79 70 65 lid, shift, type
d5f0: 31 2c 20 74 79 70 65 32 3b 0a 20 20 20 20 20 6c 1, type2;. l
d600: 6f 6e 67 20 6c 31 3b 0a 20 0a 20 20 20 20 20 69 ong l1;. . i
d610: 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a f (objc != 3) {.
d620: 40 40 20 2d 31 38 37 36 2c 31 33 20 2b 31 38 33 @@ -1876,13 +183
d630: 35 2c 31 33 20 40 40 0a 20 0a 20 20 20 20 20 69 5,13 @@. . i
d640: 66 20 28 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 f ((TclGetNumber
d650: 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 6f 62 FromObj(NULL, ob
d660: 6a 76 5b 31 5d 2c 20 26 70 74 72 31 2c 20 26 74 jv[1], &ptr1, &t
d670: 79 70 65 31 29 20 21 3d 20 54 43 4c 5f 4f 4b 29 ype1) != TCL_OK)
d680: 0a 20 09 20 20 20 20 7c 7c 20 28 74 79 70 65 31 . . || (type1
d690: 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 44 == TCL_NUMBER_D
d6a0: 4f 55 42 4c 45 29 20 7c 7c 20 28 74 79 70 65 31 OUBLE) || (type1
d6b0: 20 3d 3d 20 54 43 4c 5f 4e 55 4d 42 45 52 5f 4e == TCL_NUMBER_N
d6c0: 41 4e 29 29 20 7b 0a 2d 09 69 64 78 20 3d 20 31 AN)) {.-.idx = 1
d6d0: 3b 0a 2d 09 67 6f 74 6f 20 69 6c 6c 65 67 61 6c ;.-.goto illegal
d6e0: 4f 70 65 72 61 6e 64 3b 0a 2b 09 54 63 6c 49 6c Operand;.+.TclIl
d6f0: 6c 65 67 61 6c 45 78 70 72 4f 70 65 72 61 6e 64 legalExprOperand
d700: 54 79 70 65 28 69 6e 74 65 72 70 2c 20 49 4e 53 Type(interp, INS
d710: 54 5f 52 53 48 49 46 54 2c 20 6f 62 6a 76 5b 31 T_RSHIFT, objv[1
d720: 5d 29 3b 0a 2b 09 72 65 74 75 72 6e 20 54 43 4c ]);.+.return TCL
d730: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 20 7d 0a 20 _ERROR;. }.
d740: 20 20 20 20 69 66 20 28 28 54 63 6c 47 65 74 4e if ((TclGetN
d750: 75 6d 62 65 72 46 72 6f 6d 4f 62 6a 28 4e 55 4c umberFromObj(NUL
d760: 4c 2c 20 6f 62 6a 76 5b 32 5d 2c 20 26 70 74 72 L, objv[2], &ptr
d770: 32 2c 20 26 74 79 70 65 32 29 20 21 3d 20 54 43 2, &type2) != TC
d780: 4c 5f 4f 4b 29 0a 20 09 20 20 20 20 7c 7c 20 28 L_OK). . || (
d790: 74 79 70 65 32 20 3d 3d 20 54 43 4c 5f 4e 55 4d type2 == TCL_NUM
d7a0: 42 45 52 5f 44 4f 55 42 4c 45 29 20 7c 7c 20 28 BER_DOUBLE) || (
d7b0: 74 79 70 65 32 20 3d 3d 20 54 43 4c 5f 4e 55 4d type2 == TCL_NUM
d7c0: 42 45 52 5f 4e 41 4e 29 29 20 7b 0a 2d 09 69 64 BER_NAN)) {.-.id
d7d0: 78 20 3d 20 32 3b 0a 2d 09 67 6f 74 6f 20 69 6c x = 2;.-.goto il
d7e0: 6c 65 67 61 6c 4f 70 65 72 61 6e 64 3b 0a 2b 09 legalOperand;.+.
d7f0: 54 63 6c 49 6c 6c 65 67 61 6c 45 78 70 72 4f 70 TclIllegalExprOp
d800: 65 72 61 6e 64 54 79 70 65 28 69 6e 74 65 72 70 erandType(interp
d810: 2c 20 49 4e 53 54 5f 52 53 48 49 46 54 2c 20 6f , INST_RSHIFT, o
d820: 62 6a 76 5b 32 5d 29 3b 0a 2b 09 72 65 74 75 72 bjv[2]);.+.retur
d830: 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 20 n TCL_ERROR;.
d840: 20 20 7d 0a 20 0a 20 20 20 20 20 2f 2a 20 72 65 }. . /* re
d850: 6a 65 63 74 20 6e 65 67 61 74 69 76 65 20 73 68 ject negative sh
d860: 69 66 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a ift argument */.
d870: 40 40 20 2d 31 39 39 37 2c 32 37 20 2b 31 39 35 @@ -1997,27 +195
d880: 36 2c 36 20 40 40 0a 20 09 7d 0a 20 20 20 20 20 6,6 @@. .}.
d890: 7d 0a 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 }. return TC
d8a0: 4c 5f 4f 4b 3b 0a 2d 0a 2d 20 20 69 6c 6c 65 67 L_OK;.-.- illeg
d8b0: 61 6c 4f 70 65 72 61 6e 64 3a 0a 2d 20 20 20 20 alOperand:.-
d8c0: 69 66 20 28 54 63 6c 47 65 74 4e 75 6d 62 65 72 if (TclGetNumber
d8d0: 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c 2c 20 6f 62 FromObj(NULL, ob
d8e0: 6a 76 5b 69 64 78 5d 2c 20 26 70 74 72 31 2c 20 jv[idx], &ptr1,
d8f0: 26 74 79 70 65 31 29 20 21 3d 20 54 43 4c 5f 4f &type1) != TCL_O
d900: 4b 29 20 7b 0a 2d 09 69 6e 74 20 6e 75 6d 42 79 K) {.-.int numBy
d910: 74 65 73 3b 0a 2d 09 63 6f 6e 73 74 20 63 68 61 tes;.-.const cha
d920: 72 20 2a 62 79 74 65 73 20 3d 20 54 63 6c 5f 47 r *bytes = Tcl_G
d930: 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 etStringFromObj(
d940: 6f 62 6a 76 5b 69 64 78 5d 2c 20 26 6e 75 6d 42 objv[idx], &numB
d950: 79 74 65 73 29 3b 0a 2d 09 69 66 20 28 6e 75 6d ytes);.-.if (num
d960: 42 79 74 65 73 20 3d 3d 20 30 29 20 7b 0a 2d 09 Bytes == 0) {.-.
d970: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 description
d980: 3d 20 22 65 6d 70 74 79 20 73 74 72 69 6e 67 22 = "empty string"
d990: 3b 0a 2d 09 7d 20 65 6c 73 65 20 69 66 20 28 54 ;.-.} else if (T
d9a0: 63 6c 43 68 65 63 6b 42 61 64 4f 63 74 61 6c 28 clCheckBadOctal(
d9b0: 4e 55 4c 4c 2c 20 62 79 74 65 73 29 29 20 7b 0a NULL, bytes)) {.
d9c0: 2d 09 20 20 20 20 64 65 73 63 72 69 70 74 69 6f -. descriptio
d9d0: 6e 20 3d 20 22 69 6e 76 61 6c 69 64 20 6f 63 74 n = "invalid oct
d9e0: 61 6c 20 6e 75 6d 62 65 72 22 3b 0a 2d 09 7d 20 al number";.-.}
d9f0: 65 6c 73 65 20 7b 0a 2d 09 20 20 20 20 64 65 73 else {.-. des
da00: 63 72 69 70 74 69 6f 6e 20 3d 20 22 6e 6f 6e 2d cription = "non-
da10: 6e 75 6d 65 72 69 63 20 73 74 72 69 6e 67 22 3b numeric string";
da20: 0a 2d 09 7d 0a 2d 20 20 20 20 7d 20 65 6c 73 65 .-.}.- } else
da30: 20 69 66 20 28 74 79 70 65 31 20 3d 3d 20 54 43 if (type1 == TC
da40: 4c 5f 4e 55 4d 42 45 52 5f 4e 41 4e 29 20 7b 0a L_NUMBER_NAN) {.
da50: 2d 09 64 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 -.description =
da60: 22 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20 66 6c 6f "non-numeric flo
da70: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 76 61 6c 75 ating-point valu
da80: 65 22 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 e";.- } else
da90: 7b 0a 2d 09 64 65 73 63 72 69 70 74 69 6f 6e 20 {.-.description
daa0: 3d 20 22 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e = "floating-poin
dab0: 74 20 76 61 6c 75 65 22 3b 0a 2d 20 20 20 20 7d t value";.- }
dac0: 0a 2d 0a 2d 20 20 20 20 54 63 6c 5f 53 65 74 4f .-.- Tcl_SetO
dad0: 62 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c bjResult(interp,
dae0: 0a 2d 09 20 20 20 20 54 63 6c 5f 4f 62 6a 50 72 .-. Tcl_ObjPr
daf0: 69 6e 74 66 28 22 63 61 6e 27 74 20 75 73 65 20 intf("can't use
db00: 25 73 20 61 73 20 6f 70 65 72 61 6e 64 20 6f 66 %s as operand of
db10: 20 5c 22 3e 3e 5c 22 22 2c 20 64 65 73 63 72 69 \">>\"", descri
db20: 70 74 69 6f 6e 29 29 3b 0a 2d 20 20 20 20 72 65 ption));.- re
db30: 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a turn TCL_ERROR;.
db40: 20 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d 32 30 }. .. /*.@@ -20
db50: 34 34 2c 31 31 20 2b 31 39 38 32 2c 39 20 40 40 44,11 +1982,9 @@
db60: 0a 20 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 0a . int objc,.
db70: 20 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f Tcl_Obj *co
db80: 6e 73 74 20 6f 62 6a 76 5b 5d 29 0a 20 7b 0a 2d nst objv[]). {.-
db90: 20 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 61 72 67 Tcl_Obj *arg
dba0: 4f 62 6a 3b 0a 20 20 20 20 20 43 6c 69 65 6e 74 Obj;. Client
dbb0: 44 61 74 61 20 70 74 72 31 2c 20 70 74 72 32 3b Data ptr1, ptr2;
dbc0: 0a 20 20 20 20 20 69 6e 74 20 74 79 70 65 31 2c . int type1,
dbd0: 20 74 79 70 65 32 3b 0a 20 20 20 20 20 6c 6f 6e type2;. lon
dbe0: 67 20 6c 31 2c 20 6c 32 20 3d 20 30 3b 0a 2d 20 g l1, l2 = 0;.-
dbf0: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 64 const char *d
dc00: 65 73 63 72 69 70 74 69 6f 6e 3b 0a 20 0a 20 20 escription;. .
dc10: 20 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 if (objc != 3
dc20: 29 20 7b 0a 20 09 54 63 6c 5f 57 72 6f 6e 67 4e ) {. .Tcl_WrongN
dc30: 75 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 umArgs(interp, 1
dc40: 2c 20 6f 62 6a 76 2c 20 22 76 61 6c 75 65 20 76 , objv, "value v
dc50: 61 6c 75 65 22 29 3b 0a 40 40 20 2d 32 30 35 37 alue");.@@ -2057
dc60: 2c 31 33 20 2b 31 39 39 33 2c 31 33 20 40 40 0a ,13 +1993,13 @@.
dc70: 20 0a 20 20 20 20 20 69 66 20 28 28 54 63 6c 47 . if ((TclG
dc80: 65 74 4e 75 6d 62 65 72 46 72 6f 6d 4f 62 6a 28 etNumberFromObj(
dc90: 4e 55 4c 4c 2c 20 6f 62 6a 76 5b 31 5d 2c 20 26 NULL, objv[1], &
dca0: 70 74 72 31 2c 20 26 74 79 70 65 31 29 20 21 3d ptr1, &type1) !=
dcb0: 20 54 43 4c 5f 4f 4b 29 0a 20 09 20 20 20 20 7c TCL_OK). . |
dcc0: 7c 20 28 74 79 70 65 31 20 3d 3d 20 54 43 4c 5f | (type1 == TCL_
dcd0: 4e 55 4d 42 45 52 5f 44 4f 55 42 4c 45 29 20 7c NUMBER_DOUBLE) |
dce0: 7c 20 28 74 79 70 65 31 20 3d 3d 20 54 43 4c 5f | (type1 == TCL_
dcf0: 4e 55 4d 42 45 52 5f 4e 41 4e 29 29 20 7b 0a 2d NUMBER_NAN)) {.-
dd00: 09 61 72 67 4f 62 6a 20 3d 20 6f 62 6a 76 5b 31 .argObj = objv[1
dd10: 5d 3b 0a 2d 09 67 6f 74 6f 20 62 61 64 41 72 67 ];.-.goto badArg
dd20: 3b 0a 2b 09 54 63 6c 49 6c 6c 65 67 61 6c 45 78 ;.+.TclIllegalEx
dd30: 70 72 4f 70 65 72 61 6e 64 54 79 70 65 28 69 6e prOperandType(in
dd40: 74 65 72 70 2c 20 49 4e 53 54 5f 4d 4f 44 2c 20 terp, INST_MOD,
dd50: 6f 62 6a 76 5b 31 5d 29 3b 0a 2b 09 72 65 74 75 objv[1]);.+.retu
dd60: 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 20 rn TCL_ERROR;.
dd70: 20 20 20 7d 0a 20 20 20 20 20 69 66 20 28 28 54 }. if ((T
dd80: 63 6c 47 65 74 4e 75 6d 62 65 72 46 72 6f 6d 4f clGetNumberFromO
dd90: 62 6a 28 4e 55 4c 4c 2c 20 6f 62 6a 76 5b 32 5d bj(NULL, objv[2]
dda0: 2c 20 26 70 74 72 32 2c 20 26 74 79 70 65 32 29 , &ptr2, &type2)
ddb0: 20 21 3d 20 54 43 4c 5f 4f 4b 29 0a 20 09 20 20 != TCL_OK). .
ddc0: 20 20 7c 7c 20 28 74 79 70 65 32 20 3d 3d 20 54 || (type2 == T
ddd0: 43 4c 5f 4e 55 4d 42 45 52 5f 44 4f 55 42 4c 45 CL_NUMBER_DOUBLE
dde0: 29 20 7c 7c 20 28 74 79 70 65 32 20 3d 3d 20 54 ) || (type2 == T
ddf0: 43 4c 5f 4e 55 4d 42 45 52 5f 4e 41 4e 29 29 20 CL_NUMBER_NAN))
de00: 7b 0a 2d 09 61 72 67 4f 62 6a 20 3d 20 6f 62 6a {.-.argObj = obj
de10: 76 5b 32 5d 3b 0a 2d 09 67 6f 74 6f 20 62 61 64 v[2];.-.goto bad
de20: 41 72 67 3b 0a 2b 09 54 63 6c 49 6c 6c 65 67 61 Arg;.+.TclIllega
de30: 6c 45 78 70 72 4f 70 65 72 61 6e 64 54 79 70 65 lExprOperandType
de40: 28 69 6e 74 65 72 70 2c 20 49 4e 53 54 5f 4d 4f (interp, INST_MO
de50: 44 2c 20 6f 62 6a 76 5b 32 5d 29 3b 0a 2b 09 72 D, objv[2]);.+.r
de60: 65 74 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b eturn TCL_ERROR;
de70: 0a 20 20 20 20 20 7d 0a 20 0a 20 20 20 20 20 69 . }. . i
de80: 66 20 28 74 79 70 65 32 20 3d 3d 20 54 43 4c 5f f (type2 == TCL_
de90: 4e 55 4d 42 45 52 5f 4c 4f 4e 47 29 20 7b 0a 40 NUMBER_LONG) {.@
dea0: 40 20 2d 32 32 30 33 2c 32 37 20 2b 32 31 33 39 @ -2203,27 +2139
deb0: 2c 36 20 40 40 0a 20 09 7d 0a 20 09 72 65 74 75 ,6 @@. .}. .retu
dec0: 72 6e 20 54 43 4c 5f 4f 4b 3b 0a 20 20 20 20 20 rn TCL_OK;.
ded0: 7d 0a 2d 0a 2d 20 20 62 61 64 41 72 67 3a 0a 2d }.-.- badArg:.-
dee0: 20 20 20 20 69 66 20 28 54 63 6c 47 65 74 4e 75 if (TclGetNu
def0: 6d 62 65 72 46 72 6f 6d 4f 62 6a 28 4e 55 4c 4c mberFromObj(NULL
df00: 2c 20 61 72 67 4f 62 6a 2c 20 26 70 74 72 31 2c , argObj, &ptr1,
df10: 20 26 74 79 70 65 31 29 20 21 3d 20 54 43 4c 5f &type1) != TCL_
df20: 4f 4b 29 20 7b 0a 2d 09 69 6e 74 20 6e 75 6d 42 OK) {.-.int numB
df30: 79 74 65 73 3b 0a 2d 09 43 4f 4e 53 54 20 63 68 ytes;.-.CONST ch
df40: 61 72 20 2a 62 79 74 65 73 20 3d 20 54 63 6c 5f ar *bytes = Tcl_
df50: 47 65 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a GetStringFromObj
df60: 28 61 72 67 4f 62 6a 2c 20 26 6e 75 6d 42 79 74 (argObj, &numByt
df70: 65 73 29 3b 0a 2d 09 69 66 20 28 6e 75 6d 42 79 es);.-.if (numBy
df80: 74 65 73 20 3d 3d 20 30 29 20 7b 0a 2d 09 20 20 tes == 0) {.-.
df90: 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 description =
dfa0: 22 65 6d 70 74 79 20 73 74 72 69 6e 67 22 3b 0a "empty string";.
dfb0: 2d 09 7d 20 65 6c 73 65 20 69 66 20 28 54 63 6c -.} else if (Tcl
dfc0: 43 68 65 63 6b 42 61 64 4f 63 74 61 6c 28 4e 55 CheckBadOctal(NU
dfd0: 4c 4c 2c 20 62 79 74 65 73 29 29 20 7b 0a 2d 09 LL, bytes)) {.-.
dfe0: 20 20 20 20 64 65 73 63 72 69 70 74 69 6f 6e 20 description
dff0: 3d 20 22 69 6e 76 61 6c 69 64 20 6f 63 74 61 6c = "invalid octal
e000: 20 6e 75 6d 62 65 72 22 3b 0a 2d 09 7d 20 65 6c number";.-.} el
e010: 73 65 20 7b 0a 2d 09 20 20 20 20 64 65 73 63 72 se {.-. descr
e020: 69 70 74 69 6f 6e 20 3d 20 22 6e 6f 6e 2d 6e 75 iption = "non-nu
e030: 6d 65 72 69 63 20 73 74 72 69 6e 67 22 3b 0a 2d meric string";.-
e040: 09 7d 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 69 .}.- } else i
e050: 66 20 28 74 79 70 65 31 20 3d 3d 20 54 43 4c 5f f (type1 == TCL_
e060: 4e 55 4d 42 45 52 5f 4e 41 4e 29 20 7b 0a 2d 09 NUMBER_NAN) {.-.
e070: 64 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 22 6e description = "n
e080: 6f 6e 2d 6e 75 6d 65 72 69 63 20 66 6c 6f 61 74 on-numeric float
e090: 69 6e 67 2d 70 6f 69 6e 74 20 76 61 6c 75 65 22 ing-point value"
e0a0: 3b 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a ;.- } else {.
e0b0: 2d 09 64 65 73 63 72 69 70 74 69 6f 6e 20 3d 20 -.description =
e0c0: 22 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 "floating-point
e0d0: 76 61 6c 75 65 22 3b 0a 2d 20 20 20 20 7d 0a 2d value";.- }.-
e0e0: 0a 2d 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 6a .- Tcl_SetObj
e0f0: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 54 Result(interp, T
e100: 63 6c 5f 4f 62 6a 50 72 69 6e 74 66 28 0a 2d 09 cl_ObjPrintf(.-.
e110: 20 20 20 20 22 63 61 6e 27 74 20 75 73 65 20 25 "can't use %
e120: 73 20 61 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 s as operand of
e130: 5c 22 25 25 5c 22 22 2c 20 64 65 73 63 72 69 70 \"%%\"", descrip
e140: 74 69 6f 6e 29 29 3b 0a 2d 20 20 20 20 72 65 74 tion));.- ret
e150: 75 72 6e 20 54 43 4c 5f 45 52 52 4f 52 3b 0a 20 urn TCL_ERROR;.
e160: 7d 0a 20 0c 0a 20 2f 2a 0a 40 40 20 2d 32 32 35 }. .. /*.@@ -225
e170: 30 2c 38 20 2b 32 31 36 35 2c 37 20 40 40 0a 20 0,8 +2165,7 @@.
e180: 20 20 20 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 int objc,.
e190: 20 20 20 54 63 6c 5f 4f 62 6a 20 2a 63 6f 6e 73 Tcl_Obj *cons
e1a0: 74 20 6f 62 6a 76 5b 5d 29 0a 20 7b 0a 2d 20 20 t objv[]). {.-
e1b0: 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 31 int result = 1
e1c0: 2c 20 63 6d 70 2c 20 6c 65 6e 31 2c 20 6c 65 6e , cmp, len1, len
e1d0: 32 3b 0a 2d 20 20 20 20 63 6f 6e 73 74 20 63 68 2;.- const ch
e1e0: 61 72 20 2a 73 74 72 31 2c 20 2a 73 74 72 32 3b ar *str1, *str2;
e1f0: 0a 2b 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 .+ int result
e200: 20 3d 20 31 2c 20 63 6d 70 3b 0a 20 0a 20 20 20 = 1, cmp;. .
e210: 20 20 69 66 20 28 6f 62 6a 63 20 21 3d 20 33 29 if (objc != 3)
e220: 20 7b 0a 20 09 54 63 6c 5f 57 72 6f 6e 67 4e 75 {. .Tcl_WrongNu
e230: 6d 41 72 67 73 28 69 6e 74 65 72 70 2c 20 31 2c mArgs(interp, 1,
e240: 20 6f 62 6a 76 2c 20 22 76 61 6c 75 65 20 76 61 objv, "value va
e250: 6c 75 65 22 29 3b 0a 40 40 20 2d 32 32 36 33 2c lue");.@@ -2263,
e260: 39 20 2b 32 31 37 37 2c 38 20 40 40 0a 20 09 2f 9 +2177,8 @@. ./
e270: 2a 0a 20 09 20 2a 20 47 6f 74 20 61 20 73 74 72 *. . * Got a str
e280: 69 6e 67 0a 20 09 20 2a 2f 0a 2d 09 73 74 72 31 ing. . */.-.str1
e290: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 = Tcl_GetString
e2a0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 31 5d 2c FromObj(objv[1],
e2b0: 20 26 6c 65 6e 31 29 3b 0a 2d 09 73 74 72 32 20 &len1);.-.str2
e2c0: 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 = Tcl_GetStringF
e2d0: 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 32 5d 2c 20 romObj(objv[2],
e2e0: 26 6c 65 6e 32 29 3b 0a 2d 09 69 66 20 28 6c 65 &len2);.-.if (le
e2f0: 6e 31 20 3d 3d 20 6c 65 6e 32 20 26 26 20 21 73 n1 == len2 && !s
e300: 74 72 63 6d 70 28 73 74 72 31 2c 20 73 74 72 32 trcmp(str1, str2
e310: 29 29 20 7b 0a 2b 0a 2b 09 69 66 20 28 54 63 6c )) {.+.+.if (Tcl
e320: 53 74 72 43 6f 6d 70 61 72 65 28 6f 62 6a 76 5b StrCompare(objv[
e330: 31 5d 2c 20 6f 62 6a 76 5b 32 5d 2c 20 30 2c 20 1], objv[2], 0,
e340: 2d 31 2c 20 31 29 20 3d 3d 20 30 29 20 7b 0a 20 -1, 1) == 0) {.
e350: 09 20 20 20 20 72 65 73 75 6c 74 20 3d 20 30 3b . result = 0;
e360: 0a 20 09 7d 0a 20 20 20 20 20 63 61 73 65 20 54 . .}. case T
e370: 43 4c 5f 42 52 45 41 4b 3a 09 09 09 2f 2a 20 44 CL_BREAK:.../* D
e380: 65 6c 69 62 65 72 61 74 65 20 66 61 6c 6c 74 68 eliberate fallth
e390: 72 6f 75 67 68 20 2a 2f 0a 40 40 20 2d 32 32 37 rough */.@@ -227
e3a0: 34 2c 37 20 2b 32 31 38 37 2c 38 20 40 40 0a 20 4,7 +2187,8 @@.
e3b0: 09 2f 2a 0a 20 09 20 2a 20 47 6f 74 20 70 72 6f ./*. . * Got pro
e3c0: 70 65 72 20 6e 75 6d 62 65 72 73 0a 20 09 20 2a per numbers. . *
e3d0: 2f 0a 2d 09 69 66 20 28 63 6d 70 20 21 3d 20 4d /.-.if (cmp != M
e3e0: 50 5f 45 51 29 20 7b 0a 2b 0a 2b 09 69 66 20 28 P_EQ) {.+.+.if (
e3f0: 63 6d 70 20 3d 3d 20 4d 50 5f 45 51 29 20 7b 0a cmp == MP_EQ) {.
e400: 20 09 20 20 20 20 72 65 73 75 6c 74 20 3d 20 30 . result = 0
e410: 3b 0a 20 09 7d 0a 20 20 20 20 20 7d 0a 40 40 20 ;. .}. }.@@
e420: 2d 32 33 30 36 2c 32 31 20 2b 32 32 32 30 2c 31 -2306,21 +2220,1
e430: 35 20 40 40 0a 20 20 20 20 20 69 6e 74 20 6f 62 5 @@. int ob
e440: 6a 63 2c 0a 20 20 20 20 20 54 63 6c 5f 4f 62 6a jc,. Tcl_Obj
e450: 20 2a 63 6f 6e 73 74 20 6f 62 6a 76 5b 5d 29 0a *const objv[]).
e460: 20 7b 0a 2d 20 20 20 20 63 6f 6e 73 74 20 63 68 {.- const ch
e470: 61 72 20 2a 73 31 2c 20 2a 73 32 3b 0a 2d 20 20 ar *s1, *s2;.-
e480: 20 20 69 6e 74 20 73 31 6c 65 6e 2c 20 73 32 6c int s1len, s2l
e490: 65 6e 3b 0a 2b 20 20 20 20 69 6e 74 20 63 6f 6d en;.+ int com
e4a0: 70 61 72 65 3b 0a 20 0a 20 20 20 20 20 69 66 20 pare;. . if
e4b0: 28 6f 62 6a 63 20 21 3d 20 33 29 20 7b 0a 20 09 (objc != 3) {. .
e4c0: 54 63 6c 5f 57 72 6f 6e 67 4e 75 6d 41 72 67 73 Tcl_WrongNumArgs
e4d0: 28 69 6e 74 65 72 70 2c 20 31 2c 20 6f 62 6a 76 (interp, 1, objv
e4e0: 2c 20 22 76 61 6c 75 65 20 76 61 6c 75 65 22 29 , "value value")
e4f0: 3b 0a 20 09 72 65 74 75 72 6e 20 54 43 4c 5f 45 ;. .return TCL_E
e500: 52 52 4f 52 3b 0a 20 20 20 20 20 7d 0a 20 0a 2d RROR;. }. .-
e510: 20 20 20 20 73 31 20 3d 20 54 63 6c 5f 47 65 74 s1 = Tcl_Get
e520: 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 StringFromObj(ob
e530: 6a 76 5b 31 5d 2c 20 26 73 31 6c 65 6e 29 3b 0a jv[1], &s1len);.
e540: 2d 20 20 20 20 73 32 20 3d 20 54 63 6c 5f 47 65 - s2 = Tcl_Ge
e550: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f tStringFromObj(o
e560: 62 6a 76 5b 32 5d 2c 20 26 73 32 6c 65 6e 29 3b bjv[2], &s2len);
e570: 0a 2d 20 20 20 20 69 66 20 28 73 31 6c 65 6e 20 .- if (s1len
e580: 3d 3d 20 73 32 6c 65 6e 20 26 26 20 21 73 74 72 == s2len && !str
e590: 63 6d 70 28 73 31 2c 20 73 32 29 29 20 7b 0a 2d cmp(s1, s2)) {.-
e5a0: 09 54 63 6c 5f 53 65 74 42 6f 6f 6c 65 61 6e 4f .Tcl_SetBooleanO
e5b0: 62 6a 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 bj(Tcl_GetObjRes
e5c0: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 30 29 3b ult(interp), 0);
e5d0: 0a 2d 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 2d .- } else {.-
e5e0: 09 54 63 6c 5f 53 65 74 42 6f 6f 6c 65 61 6e 4f .Tcl_SetBooleanO
e5f0: 62 6a 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 bj(Tcl_GetObjRes
e600: 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 31 29 3b ult(interp), 1);
e610: 0a 2d 20 20 20 20 7d 0a 2b 20 20 20 20 63 6f 6d .- }.+ com
e620: 70 61 72 65 20 3d 20 54 63 6c 53 74 72 43 6f 6d pare = TclStrCom
e630: 70 61 72 65 28 6f 62 6a 76 5b 31 5d 2c 20 6f 62 pare(objv[1], ob
e640: 6a 76 5b 32 5d 2c 20 30 2c 20 2d 31 2c 20 31 29 jv[2], 0, -1, 1)
e650: 3b 0a 2b 20 20 20 20 54 63 6c 5f 53 65 74 4f 62 ;.+ Tcl_SetOb
e660: 6a 52 65 73 75 6c 74 28 69 6e 74 65 72 70 2c 20 jResult(interp,
e670: 54 63 6c 5f 4e 65 77 42 6f 6f 6c 65 61 6e 4f 62 Tcl_NewBooleanOb
e680: 6a 28 63 6f 6d 70 61 72 65 20 21 3d 20 30 29 29 j(compare != 0))
e690: 3b 0a 20 20 20 20 20 72 65 74 75 72 6e 20 54 43 ;. return TC
e6a0: 4c 5f 4f 4b 3b 0a 20 7d 0a 20 0c 0a 40 40 20 2d L_OK;. }. ..@@ -
e6b0: 32 34 34 37 2c 38 20 2b 32 33 35 35 2c 37 20 40 2447,8 +2355,7 @
e6c0: 40 0a 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c @. int resul
e6d0: 74 20 3d 20 31 3b 0a 20 0a 20 20 20 20 20 69 66 t = 1;. . if
e6e0: 20 28 6f 62 6a 63 20 3e 20 32 29 20 7b 0a 2d 09 (objc > 2) {.-.
e6f0: 69 6e 74 20 69 2c 20 63 6d 70 2c 20 6c 65 6e 31 int i, cmp, len1
e700: 2c 20 6c 65 6e 32 3b 0a 2d 09 63 6f 6e 73 74 20 , len2;.-.const
e710: 63 68 61 72 20 2a 73 74 72 31 2c 20 2a 73 74 72 char *str1, *str
e720: 32 3b 0a 2b 09 69 6e 74 20 69 2c 20 63 6d 70 3b 2;.+.int i, cmp;
e730: 0a 20 0a 20 09 66 6f 72 20 28 69 3d 31 20 3b 20 . . .for (i=1 ;
e740: 69 3c 6f 62 6a 63 2d 31 20 3b 20 69 2b 2b 29 20 i<objc-1 ; i++)
e750: 7b 0a 20 09 20 20 20 20 73 77 69 74 63 68 20 28 {. . switch (
e760: 43 6f 6d 70 61 72 65 4e 75 6d 62 65 72 73 28 4e CompareNumbers(N
e770: 55 4c 4c 2c 20 6f 62 6a 76 5b 69 5d 2c 20 6f 62 ULL, objv[i], ob
e780: 6a 76 5b 69 2b 31 5d 2c 20 26 63 6d 70 29 29 20 jv[i+1], &cmp))
e790: 7b 0a 40 40 20 2d 32 34 35 36 2c 31 30 20 2b 32 {.@@ -2456,10 +2
e7a0: 33 36 33 2c 38 20 40 40 0a 20 09 09 2f 2a 0a 20 363,8 @@. ../*.
e7b0: 09 09 20 2a 20 47 6f 74 20 61 20 73 74 72 69 6e .. * Got a strin
e7c0: 67 0a 20 09 09 20 2a 2f 0a 2d 09 09 73 74 72 31 g. .. */.-..str1
e7d0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 = Tcl_GetString
e7e0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 69 5d 2c FromObj(objv[i],
e7f0: 20 26 6c 65 6e 31 29 3b 0a 2d 09 09 73 74 72 32 &len1);.-..str2
e800: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 = Tcl_GetString
e810: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 69 2b 31 FromObj(objv[i+1
e820: 5d 2c 20 26 6c 65 6e 32 29 3b 0a 2d 09 09 69 66 ], &len2);.-..if
e830: 20 28 54 63 6c 70 55 74 66 4e 63 6d 70 32 28 73 (TclpUtfNcmp2(s
e840: 74 72 31 2c 20 73 74 72 32 2c 0a 2d 09 09 09 28 tr1, str2,.-...(
e850: 73 69 7a 65 5f 74 29 20 28 28 6c 65 6e 31 20 3c size_t) ((len1 <
e860: 20 6c 65 6e 32 29 20 3f 20 6c 65 6e 31 20 3a 20 len2) ? len1 :
e870: 6c 65 6e 32 29 29 20 3e 3d 20 30 29 20 7b 0a 2b len2)) >= 0) {.+
e880: 0a 2b 09 09 69 66 20 28 54 63 6c 53 74 72 43 6f .+..if (TclStrCo
e890: 6d 70 61 72 65 28 6f 62 6a 76 5b 69 5d 2c 20 6f mpare(objv[i], o
e8a0: 62 6a 76 5b 69 2b 31 5d 2c 20 30 2c 20 2d 31 2c bjv[i+1], 0, -1,
e8b0: 20 30 29 20 3e 3d 20 30 29 20 7b 0a 20 09 09 20 0) >= 0) {. ..
e8c0: 20 20 20 72 65 73 75 6c 74 20 3d 20 30 3b 0a 20 result = 0;.
e8d0: 09 09 20 20 20 20 69 20 3d 20 6f 62 6a 63 3b 0a .. i = objc;.
e8e0: 20 09 09 7d 0a 40 40 20 2d 32 34 36 38 2c 36 20 ..}.@@ -2468,6
e8f0: 2b 32 33 37 33 2c 37 20 40 40 0a 20 09 09 2f 2a +2373,7 @@. ../*
e900: 0a 20 09 09 20 2a 20 47 6f 74 20 70 72 6f 70 65 . .. * Got prope
e910: 72 20 6e 75 6d 62 65 72 73 0a 20 09 09 20 2a 2f r numbers. .. */
e920: 0a 2b 0a 20 09 09 69 66 20 28 63 6d 70 20 21 3d .+. ..if (cmp !=
e930: 20 4d 50 5f 4c 54 29 20 7b 0a 20 09 09 20 20 20 MP_LT) {. ..
e940: 20 72 65 73 75 6c 74 20 3d 20 30 3b 0a 20 09 09 result = 0;. ..
e950: 20 20 20 20 69 20 3d 20 6f 62 6a 63 3b 0a 40 40 i = objc;.@@
e960: 20 2d 32 34 37 38 2c 36 20 2b 32 33 38 34 2c 37 -2478,6 +2384,7
e970: 20 40 40 0a 20 09 09 20 2a 20 47 6f 74 20 61 20 @@. .. * Got a
e980: 4e 61 4e 20 28 77 68 69 63 68 20 69 73 20 64 69 NaN (which is di
e990: 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 65 76 65 fferent from eve
e9a0: 72 79 74 68 69 6e 67 2c 20 69 6e 63 6c 75 64 69 rything, includi
e9b0: 6e 67 0a 20 09 09 20 2a 20 69 74 73 65 6c 66 29 ng. .. * itself)
e9c0: 0a 20 09 09 20 2a 2f 0a 2b 0a 20 09 09 72 65 73 . .. */.+. ..res
e9d0: 75 6c 74 20 3d 20 30 3b 0a 20 09 09 69 20 3d 20 ult = 0;. ..i =
e9e0: 6f 62 6a 63 3b 0a 20 09 09 63 6f 6e 74 69 6e 75 objc;. ..continu
e9f0: 65 3b 0a 40 40 20 2d 32 35 31 35 2c 38 20 2b 32 e;.@@ -2515,8 +2
ea00: 34 32 32 2c 37 20 40 40 0a 20 20 20 20 20 69 6e 422,7 @@. in
ea10: 74 20 72 65 73 75 6c 74 20 3d 20 31 3b 0a 20 0a t result = 1;. .
ea20: 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3e 20 if (objc >
ea30: 32 29 20 7b 0a 2d 09 69 6e 74 20 69 2c 20 63 6d 2) {.-.int i, cm
ea40: 70 2c 20 6c 65 6e 31 2c 20 6c 65 6e 32 3b 0a 2d p, len1, len2;.-
ea50: 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 74 72 .const char *str
ea60: 31 2c 20 2a 73 74 72 32 3b 0a 2b 09 69 6e 74 20 1, *str2;.+.int
ea70: 69 2c 20 63 6d 70 3b 0a 20 0a 20 09 66 6f 72 20 i, cmp;. . .for
ea80: 28 69 3d 31 20 3b 20 69 3c 6f 62 6a 63 2d 31 20 (i=1 ; i<objc-1
ea90: 3b 20 69 2b 2b 29 20 7b 0a 20 09 20 20 20 20 73 ; i++) {. . s
eaa0: 77 69 74 63 68 20 28 43 6f 6d 70 61 72 65 4e 75 witch (CompareNu
eab0: 6d 62 65 72 73 28 4e 55 4c 4c 2c 20 6f 62 6a 76 mbers(NULL, objv
eac0: 5b 69 5d 2c 20 6f 62 6a 76 5b 69 2b 31 5d 2c 20 [i], objv[i+1],
ead0: 26 63 6d 70 29 29 20 7b 0a 40 40 20 2d 32 35 32 &cmp)) {.@@ -252
eae0: 34 2c 31 30 20 2b 32 34 33 30 2c 38 20 40 40 0a 4,10 +2430,8 @@.
eaf0: 20 09 09 2f 2a 0a 20 09 09 20 2a 20 47 6f 74 20 ../*. .. * Got
eb00: 61 20 73 74 72 69 6e 67 0a 20 09 09 20 2a 2f 0a a string. .. */.
eb10: 2d 09 09 73 74 72 31 20 3d 20 54 63 6c 5f 47 65 -..str1 = Tcl_Ge
eb20: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f tStringFromObj(o
eb30: 62 6a 76 5b 69 5d 2c 20 26 6c 65 6e 31 29 3b 0a bjv[i], &len1);.
eb40: 2d 09 09 73 74 72 32 20 3d 20 54 63 6c 5f 47 65 -..str2 = Tcl_Ge
eb50: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f tStringFromObj(o
eb60: 62 6a 76 5b 69 2b 31 5d 2c 20 26 6c 65 6e 32 29 bjv[i+1], &len2)
eb70: 3b 0a 2d 09 09 69 66 20 28 54 63 6c 70 55 74 66 ;.-..if (TclpUtf
eb80: 4e 63 6d 70 32 28 73 74 72 31 2c 20 73 74 72 32 Ncmp2(str1, str2
eb90: 2c 0a 2d 09 09 09 28 73 69 7a 65 5f 74 29 20 28 ,.-...(size_t) (
eba0: 28 6c 65 6e 31 20 3c 20 6c 65 6e 32 29 20 3f 20 (len1 < len2) ?
ebb0: 6c 65 6e 31 20 3a 20 6c 65 6e 32 29 29 20 3e 20 len1 : len2)) >
ebc0: 30 29 20 7b 0a 2b 0a 2b 09 09 69 66 20 28 54 63 0) {.+.+..if (Tc
ebd0: 6c 53 74 72 43 6f 6d 70 61 72 65 28 6f 62 6a 76 lStrCompare(objv
ebe0: 5b 69 5d 2c 20 6f 62 6a 76 5b 69 2b 31 5d 2c 20 [i], objv[i+1],
ebf0: 30 2c 20 2d 31 2c 20 30 29 20 3e 20 30 29 20 7b 0, -1, 0) > 0) {
ec00: 0a 20 09 09 20 20 20 20 72 65 73 75 6c 74 20 3d . .. result =
ec10: 20 30 3b 0a 20 09 09 20 20 20 20 69 20 3d 20 6f 0;. .. i = o
ec20: 62 6a 63 3b 0a 20 09 09 7d 0a 40 40 20 2d 32 35 bjc;. ..}.@@ -25
ec30: 33 36 2c 36 20 2b 32 34 34 30 2c 37 20 40 40 0a 36,6 +2440,7 @@.
ec40: 20 09 09 2f 2a 0a 20 09 09 20 2a 20 47 6f 74 20 ../*. .. * Got
ec50: 70 72 6f 70 65 72 20 6e 75 6d 62 65 72 73 0a 20 proper numbers.
ec60: 09 09 20 2a 2f 0a 2b 0a 20 09 09 69 66 20 28 63 .. */.+. ..if (c
ec70: 6d 70 20 3d 3d 20 4d 50 5f 47 54 29 20 7b 0a 20 mp == MP_GT) {.
ec80: 09 09 20 20 20 20 72 65 73 75 6c 74 20 3d 20 30 .. result = 0
ec90: 3b 0a 20 09 09 20 20 20 20 69 20 3d 20 6f 62 6a ;. .. i = obj
eca0: 63 3b 0a 40 40 20 2d 32 35 34 36 2c 36 20 2b 32 c;.@@ -2546,6 +2
ecb0: 34 35 31 2c 37 20 40 40 0a 20 09 09 20 2a 20 47 451,7 @@. .. * G
ecc0: 6f 74 20 61 20 4e 61 4e 20 28 77 68 69 63 68 20 ot a NaN (which
ecd0: 69 73 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f is different fro
ece0: 6d 20 65 76 65 72 79 74 68 69 6e 67 2c 20 69 6e m everything, in
ecf0: 63 6c 75 64 69 6e 67 0a 20 09 09 20 2a 20 69 74 cluding. .. * it
ed00: 73 65 6c 66 29 0a 20 09 09 20 2a 2f 0a 2b 0a 20 self). .. */.+.
ed10: 09 09 72 65 73 75 6c 74 20 3d 20 30 3b 0a 20 09 ..result = 0;. .
ed20: 09 69 20 3d 20 6f 62 6a 63 3b 0a 20 09 09 63 6f .i = objc;. ..co
ed30: 6e 74 69 6e 75 65 3b 0a 40 40 20 2d 32 35 38 33 ntinue;.@@ -2583
ed40: 2c 38 20 2b 32 34 38 39 2c 37 20 40 40 0a 20 20 ,8 +2489,7 @@.
ed50: 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 int result =
ed60: 31 3b 0a 20 0a 20 20 20 20 20 69 66 20 28 6f 62 1;. . if (ob
ed70: 6a 63 20 3e 20 32 29 20 7b 0a 2d 09 69 6e 74 20 jc > 2) {.-.int
ed80: 69 2c 20 63 6d 70 2c 20 6c 65 6e 31 2c 20 6c 65 i, cmp, len1, le
ed90: 6e 32 3b 0a 2d 09 63 6f 6e 73 74 20 63 68 61 72 n2;.-.const char
eda0: 20 2a 73 74 72 31 2c 20 2a 73 74 72 32 3b 0a 2b *str1, *str2;.+
edb0: 09 69 6e 74 20 69 2c 20 63 6d 70 3b 0a 20 0a 20 .int i, cmp;. .
edc0: 09 66 6f 72 20 28 69 3d 31 20 3b 20 69 3c 6f 62 .for (i=1 ; i<ob
edd0: 6a 63 2d 31 20 3b 20 69 2b 2b 29 20 7b 0a 20 09 jc-1 ; i++) {. .
ede0: 20 20 20 20 73 77 69 74 63 68 20 28 43 6f 6d 70 switch (Comp
edf0: 61 72 65 4e 75 6d 62 65 72 73 28 4e 55 4c 4c 2c areNumbers(NULL,
ee00: 20 6f 62 6a 76 5b 69 5d 2c 20 6f 62 6a 76 5b 69 objv[i], objv[i
ee10: 2b 31 5d 2c 20 26 63 6d 70 29 29 20 7b 0a 40 40 +1], &cmp)) {.@@
ee20: 20 2d 32 35 39 32 2c 31 30 20 2b 32 34 39 37 2c -2592,10 +2497,
ee30: 38 20 40 40 0a 20 09 09 2f 2a 0a 20 09 09 20 2a 8 @@. ../*. .. *
ee40: 20 47 6f 74 20 61 20 73 74 72 69 6e 67 0a 20 09 Got a string. .
ee50: 09 20 2a 2f 0a 2d 09 09 73 74 72 31 20 3d 20 54 . */.-..str1 = T
ee60: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d cl_GetStringFrom
ee70: 4f 62 6a 28 6f 62 6a 76 5b 69 5d 2c 20 26 6c 65 Obj(objv[i], &le
ee80: 6e 31 29 3b 0a 2d 09 09 73 74 72 32 20 3d 20 54 n1);.-..str2 = T
ee90: 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f 6d cl_GetStringFrom
eea0: 4f 62 6a 28 6f 62 6a 76 5b 69 2b 31 5d 2c 20 26 Obj(objv[i+1], &
eeb0: 6c 65 6e 32 29 3b 0a 2d 09 09 69 66 20 28 54 63 len2);.-..if (Tc
eec0: 6c 70 55 74 66 4e 63 6d 70 32 28 73 74 72 31 2c lpUtfNcmp2(str1,
eed0: 20 73 74 72 32 2c 0a 2d 09 09 09 28 73 69 7a 65 str2,.-...(size
eee0: 5f 74 29 20 28 28 6c 65 6e 31 20 3c 20 6c 65 6e _t) ((len1 < len
eef0: 32 29 20 3f 20 6c 65 6e 31 20 3a 20 6c 65 6e 32 2) ? len1 : len2
ef00: 29 29 20 3c 3d 20 30 29 20 7b 0a 2b 0a 2b 09 09 )) <= 0) {.+.+..
ef10: 69 66 20 28 54 63 6c 53 74 72 43 6f 6d 70 61 72 if (TclStrCompar
ef20: 65 28 6f 62 6a 76 5b 69 5d 2c 20 6f 62 6a 76 5b e(objv[i], objv[
ef30: 69 2b 31 5d 2c 20 30 2c 20 2d 31 2c 20 30 29 20 i+1], 0, -1, 0)
ef40: 3c 3d 20 30 29 20 7b 0a 20 09 09 20 20 20 20 72 <= 0) {. .. r
ef50: 65 73 75 6c 74 20 3d 20 30 3b 0a 20 09 09 20 20 esult = 0;. ..
ef60: 20 20 69 20 3d 20 6f 62 6a 63 3b 0a 20 09 09 7d i = objc;. ..}
ef70: 0a 40 40 20 2d 32 36 30 34 2c 36 20 2b 32 35 30 .@@ -2604,6 +250
ef80: 37 2c 37 20 40 40 0a 20 09 09 2f 2a 0a 20 09 09 7,7 @@. ../*. ..
ef90: 20 2a 20 47 6f 74 20 70 72 6f 70 65 72 20 6e 75 * Got proper nu
efa0: 6d 62 65 72 73 0a 20 09 09 20 2a 2f 0a 2b 0a 20 mbers. .. */.+.
efb0: 09 09 69 66 20 28 63 6d 70 20 21 3d 20 4d 50 5f ..if (cmp != MP_
efc0: 47 54 29 20 7b 0a 20 09 09 20 20 20 20 72 65 73 GT) {. .. res
efd0: 75 6c 74 20 3d 20 30 3b 0a 20 09 09 20 20 20 20 ult = 0;. ..
efe0: 69 20 3d 20 6f 62 6a 63 3b 0a 40 40 20 2d 32 36 i = objc;.@@ -26
eff0: 31 34 2c 36 20 2b 32 35 31 38 2c 37 20 40 40 0a 14,6 +2518,7 @@.
f000: 20 09 09 20 2a 20 47 6f 74 20 61 20 4e 61 4e 20 .. * Got a NaN
f010: 28 77 68 69 63 68 20 69 73 20 64 69 66 66 65 72 (which is differ
f020: 65 6e 74 20 66 72 6f 6d 20 65 76 65 72 79 74 68 ent from everyth
f030: 69 6e 67 2c 20 69 6e 63 6c 75 64 69 6e 67 0a 20 ing, including.
f040: 09 09 20 2a 20 69 74 73 65 6c 66 29 0a 20 09 09 .. * itself). ..
f050: 20 2a 2f 0a 2b 0a 20 09 09 72 65 73 75 6c 74 20 */.+. ..result
f060: 3d 20 30 3b 0a 20 09 09 69 20 3d 20 6f 62 6a 63 = 0;. ..i = objc
f070: 3b 0a 20 09 09 63 6f 6e 74 69 6e 75 65 3b 0a 40 ;. ..continue;.@
f080: 40 20 2d 32 36 35 31 2c 38 20 2b 32 35 35 36 2c @ -2651,8 +2556,
f090: 37 20 40 40 0a 20 20 20 20 20 69 6e 74 20 72 65 7 @@. int re
f0a0: 73 75 6c 74 20 3d 20 31 3b 0a 20 0a 20 20 20 20 sult = 1;. .
f0b0: 20 69 66 20 28 6f 62 6a 63 20 3e 20 32 29 20 7b if (objc > 2) {
f0c0: 0a 2d 09 69 6e 74 20 69 2c 20 63 6d 70 2c 20 6c .-.int i, cmp, l
f0d0: 65 6e 31 2c 20 6c 65 6e 32 3b 0a 2d 09 63 6f 6e en1, len2;.-.con
f0e0: 73 74 20 63 68 61 72 20 2a 73 74 72 31 2c 20 2a st char *str1, *
f0f0: 73 74 72 32 3b 0a 2b 09 69 6e 74 20 69 2c 20 63 str2;.+.int i, c
f100: 6d 70 3b 0a 20 0a 20 09 66 6f 72 20 28 69 3d 31 mp;. . .for (i=1
f110: 20 3b 20 69 3c 6f 62 6a 63 2d 31 20 3b 20 69 2b ; i<objc-1 ; i+
f120: 2b 29 20 7b 0a 20 09 20 20 20 20 73 77 69 74 63 +) {. . switc
f130: 68 20 28 43 6f 6d 70 61 72 65 4e 75 6d 62 65 72 h (CompareNumber
f140: 73 28 4e 55 4c 4c 2c 20 6f 62 6a 76 5b 69 5d 2c s(NULL, objv[i],
f150: 20 6f 62 6a 76 5b 69 2b 31 5d 2c 20 26 63 6d 70 objv[i+1], &cmp
f160: 29 29 20 7b 0a 40 40 20 2d 32 36 36 30 2c 31 30 )) {.@@ -2660,10
f170: 20 2b 32 35 36 34 2c 38 20 40 40 0a 20 09 09 2f +2564,8 @@. ../
f180: 2a 0a 20 09 09 20 2a 20 47 6f 74 20 61 20 73 74 *. .. * Got a st
f190: 72 69 6e 67 0a 20 09 09 20 2a 2f 0a 2d 09 09 73 ring. .. */.-..s
f1a0: 74 72 31 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 tr1 = Tcl_GetStr
f1b0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b ingFromObj(objv[
f1c0: 69 5d 2c 20 26 6c 65 6e 31 29 3b 0a 2d 09 09 73 i], &len1);.-..s
f1d0: 74 72 32 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 tr2 = Tcl_GetStr
f1e0: 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b ingFromObj(objv[
f1f0: 69 2b 31 5d 2c 20 26 6c 65 6e 32 29 3b 0a 2d 09 i+1], &len2);.-.
f200: 09 69 66 20 28 54 63 6c 70 55 74 66 4e 63 6d 70 .if (TclpUtfNcmp
f210: 32 28 73 74 72 31 2c 20 73 74 72 32 2c 0a 2d 09 2(str1, str2,.-.
f220: 09 09 28 73 69 7a 65 5f 74 29 20 28 28 6c 65 6e ..(size_t) ((len
f230: 31 20 3c 20 6c 65 6e 32 29 20 3f 20 6c 65 6e 31 1 < len2) ? len1
f240: 20 3a 20 6c 65 6e 32 29 29 20 3c 20 30 29 20 7b : len2)) < 0) {
f250: 0a 2b 0a 2b 09 09 69 66 20 28 54 63 6c 53 74 72 .+.+..if (TclStr
f260: 43 6f 6d 70 61 72 65 28 6f 62 6a 76 5b 69 5d 2c Compare(objv[i],
f270: 20 6f 62 6a 76 5b 69 2b 31 5d 2c 20 30 2c 20 2d objv[i+1], 0, -
f280: 31 2c 20 30 29 20 3c 20 30 29 20 7b 0a 20 09 09 1, 0) < 0) {. ..
f290: 20 20 20 20 72 65 73 75 6c 74 20 3d 20 30 3b 0a result = 0;.
f2a0: 20 09 09 20 20 20 20 69 20 3d 20 6f 62 6a 63 3b .. i = objc;
f2b0: 0a 20 09 09 7d 0a 40 40 20 2d 32 36 37 32 2c 36 . ..}.@@ -2672,6
f2c0: 20 2b 32 35 37 34 2c 37 20 40 40 0a 20 09 09 2f +2574,7 @@. ../
f2d0: 2a 0a 20 09 09 20 2a 20 47 6f 74 20 70 72 6f 70 *. .. * Got prop
f2e0: 65 72 20 6e 75 6d 62 65 72 73 0a 20 09 09 20 2a er numbers. .. *
f2f0: 2f 0a 2b 0a 20 09 09 69 66 20 28 63 6d 70 20 3d /.+. ..if (cmp =
f300: 3d 20 4d 50 5f 4c 54 29 20 7b 0a 20 09 09 20 20 = MP_LT) {. ..
f310: 20 20 72 65 73 75 6c 74 20 3d 20 30 3b 0a 20 09 result = 0;. .
f320: 09 20 20 20 20 69 20 3d 20 6f 62 6a 63 3b 0a 40 . i = objc;.@
f330: 40 20 2d 32 36 38 32 2c 36 20 2b 32 35 38 35 2c @ -2682,6 +2585,
f340: 37 20 40 40 0a 20 09 09 20 2a 20 47 6f 74 20 61 7 @@. .. * Got a
f350: 20 4e 61 4e 20 28 77 68 69 63 68 20 69 73 20 64 NaN (which is d
f360: 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 65 76 ifferent from ev
f370: 65 72 79 74 68 69 6e 67 2c 20 69 6e 63 6c 75 64 erything, includ
f380: 69 6e 67 0a 20 09 09 20 2a 20 69 74 73 65 6c 66 ing. .. * itself
f390: 29 0a 20 09 09 20 2a 2f 0a 2b 0a 20 09 09 72 65 ). .. */.+. ..re
f3a0: 73 75 6c 74 20 3d 20 30 3b 0a 20 09 09 69 20 3d sult = 0;. ..i =
f3b0: 20 6f 62 6a 63 3b 0a 20 09 09 63 6f 6e 74 69 6e objc;. ..contin
f3c0: 75 65 3b 0a 40 40 20 2d 32 37 31 39 2c 38 20 2b ue;.@@ -2719,8 +
f3d0: 32 36 32 33 2c 37 20 40 40 0a 20 20 20 20 20 69 2623,7 @@. i
f3e0: 6e 74 20 72 65 73 75 6c 74 20 3d 20 31 3b 0a 20 nt result = 1;.
f3f0: 0a 20 20 20 20 20 69 66 20 28 6f 62 6a 63 20 3e . if (objc >
f400: 20 32 29 20 7b 0a 2d 09 69 6e 74 20 69 2c 20 63 2) {.-.int i, c
f410: 6d 70 2c 20 6c 65 6e 31 2c 20 6c 65 6e 32 3b 0a mp, len1, len2;.
f420: 2d 09 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 74 -.const char *st
f430: 72 31 2c 20 2a 73 74 72 32 3b 0a 2b 09 69 6e 74 r1, *str2;.+.int
f440: 20 69 2c 20 63 6d 70 3b 0a 20 0a 20 09 66 6f 72 i, cmp;. . .for
f450: 20 28 69 3d 31 20 3b 20 69 3c 6f 62 6a 63 2d 31 (i=1 ; i<objc-1
f460: 20 3b 20 69 2b 2b 29 20 7b 0a 20 09 20 20 20 20 ; i++) {. .
f470: 73 77 69 74 63 68 20 28 43 6f 6d 70 61 72 65 4e switch (CompareN
f480: 75 6d 62 65 72 73 28 4e 55 4c 4c 2c 20 6f 62 6a umbers(NULL, obj
f490: 76 5b 69 5d 2c 20 6f 62 6a 76 5b 69 2b 31 5d 2c v[i], objv[i+1],
f4a0: 20 26 63 6d 70 29 29 20 7b 0a 40 40 20 2d 32 37 &cmp)) {.@@ -27
f4b0: 32 38 2c 39 20 2b 32 36 33 31 2c 38 20 40 40 0a 28,9 +2631,8 @@.
f4c0: 20 09 09 2f 2a 0a 20 09 09 20 2a 20 47 6f 74 20 ../*. .. * Got
f4d0: 61 20 73 74 72 69 6e 67 0a 20 09 09 20 2a 2f 0a a string. .. */.
f4e0: 2d 09 09 73 74 72 31 20 3d 20 54 63 6c 5f 47 65 -..str1 = Tcl_Ge
f4f0: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f tStringFromObj(o
f500: 62 6a 76 5b 69 5d 2c 20 26 6c 65 6e 31 29 3b 0a bjv[i], &len1);.
f510: 2d 09 09 73 74 72 32 20 3d 20 54 63 6c 5f 47 65 -..str2 = Tcl_Ge
f520: 74 53 74 72 69 6e 67 46 72 6f 6d 4f 62 6a 28 6f tStringFromObj(o
f530: 62 6a 76 5b 69 2b 31 5d 2c 20 26 6c 65 6e 32 29 bjv[i+1], &len2)
f540: 3b 0a 2d 09 09 69 66 20 28 6c 65 6e 31 20 21 3d ;.-..if (len1 !=
f550: 20 6c 65 6e 32 20 7c 7c 20 73 74 72 63 6d 70 28 len2 || strcmp(
f560: 73 74 72 31 2c 20 73 74 72 32 29 29 20 7b 0a 2b str1, str2)) {.+
f570: 0a 2b 09 09 69 66 20 28 54 63 6c 53 74 72 43 6f .+..if (TclStrCo
f580: 6d 70 61 72 65 28 6f 62 6a 76 5b 69 5d 2c 20 6f mpare(objv[i], o
f590: 62 6a 76 5b 69 2b 31 5d 2c 20 30 2c 20 2d 31 2c bjv[i+1], 0, -1,
f5a0: 20 31 29 20 21 3d 20 30 29 20 7b 0a 20 09 09 20 1) != 0) {. ..
f5b0: 20 20 20 72 65 73 75 6c 74 20 3d 20 30 3b 0a 20 result = 0;.
f5c0: 09 09 20 20 20 20 69 20 3d 20 6f 62 6a 63 3b 0a .. i = objc;.
f5d0: 20 09 09 7d 0a 40 40 20 2d 32 37 38 36 2c 31 33 ..}.@@ -2786,13
f5e0: 20 2b 32 36 38 38 2c 31 30 20 40 40 0a 20 20 20 +2688,10 @@.
f5f0: 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 31 int result = 1
f600: 3b 0a 20 0a 20 20 20 20 20 69 66 20 28 6f 62 6a ;. . if (obj
f610: 63 20 3e 20 32 29 20 7b 0a 2d 09 69 6e 74 20 69 c > 2) {.-.int i
f620: 2c 20 6c 65 6e 31 2c 20 6c 65 6e 32 3b 0a 2d 09 , len1, len2;.-.
f630: 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 74 72 31 const char *str1
f640: 2c 20 2a 73 74 72 32 3b 0a 2b 09 69 6e 74 20 69 , *str2;.+.int i
f650: 3b 0a 20 0a 20 09 66 6f 72 20 28 69 3d 31 20 3b ;. . .for (i=1 ;
f660: 20 69 3c 6f 62 6a 63 2d 31 20 3b 20 69 2b 2b 29 i<objc-1 ; i++)
f670: 20 7b 0a 2d 09 20 20 20 20 73 74 72 31 20 3d 20 {.-. str1 =
f680: 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 46 72 6f Tcl_GetStringFro
f690: 6d 4f 62 6a 28 6f 62 6a 76 5b 69 5d 2c 20 26 6c mObj(objv[i], &l
f6a0: 65 6e 31 29 3b 0a 2d 09 20 20 20 20 73 74 72 32 en1);.-. str2
f6b0: 20 3d 20 54 63 6c 5f 47 65 74 53 74 72 69 6e 67 = Tcl_GetString
f6c0: 46 72 6f 6d 4f 62 6a 28 6f 62 6a 76 5b 69 2b 31 FromObj(objv[i+1
f6d0: 5d 2c 20 26 6c 65 6e 32 29 3b 0a 2d 09 20 20 20 ], &len2);.-.
f6e0: 20 69 66 20 28 6c 65 6e 31 20 21 3d 20 6c 65 6e if (len1 != len
f6f0: 32 20 7c 7c 20 73 74 72 63 6d 70 28 73 74 72 31 2 || strcmp(str1
f700: 2c 20 73 74 72 32 29 29 20 7b 0a 2b 09 20 20 20 , str2)) {.+.
f710: 20 69 66 20 28 54 63 6c 53 74 72 43 6f 6d 70 61 if (TclStrCompa
f720: 72 65 28 6f 62 6a 76 5b 69 5d 2c 20 6f 62 6a 76 re(objv[i], objv
f730: 5b 69 2b 31 5d 2c 20 30 2c 20 2d 31 2c 20 31 29 [i+1], 0, -1, 1)
f740: 20 21 3d 20 30 29 20 7b 0a 20 09 09 72 65 73 75 != 0) {. ..resu
f750: 6c 74 20 3d 20 30 3b 0a 20 09 09 62 72 65 61 6b lt = 0;. ..break
f760: 3b 0a 20 09 20 20 20 20 7d 0a 64 69 66 66 20 2d ;. . }.diff -
f770: 72 75 20 2e 2e 2f 74 63 6c 2d 32 30 30 36 31 32 ru ../tcl-200612
f780: 30 36 2f 74 65 73 74 73 2f 6d 61 74 68 6f 70 2e 06/tests/mathop.
f790: 74 65 73 74 20 2e 2f 74 65 73 74 73 2f 6d 61 74 test ./tests/mat
f7a0: 68 6f 70 2e 74 65 73 74 0a 2d 2d 2d 20 2e 2e 2f hop.test.--- ../
f7b0: 74 63 6c 2d 32 30 30 36 31 32 30 36 2f 74 65 73 tcl-20061206/tes
f7c0: 74 73 2f 6d 61 74 68 6f 70 2e 74 65 73 74 09 32 ts/mathop.test.2
f7d0: 30 30 36 2d 31 32 2d 30 37 20 30 38 3a 30 32 3a 006-12-07 08:02:
f7e0: 33 35 2e 30 30 30 30 30 30 30 30 30 20 2b 30 31 35.000000000 +01
f7f0: 30 30 0a 2b 2b 2b 20 2e 2f 74 65 73 74 73 2f 6d 00.+++ ./tests/m
f800: 61 74 68 6f 70 2e 74 65 73 74 09 32 30 30 36 2d athop.test.2006-
f810: 31 32 2d 30 37 20 31 33 3a 31 38 3a 32 37 2e 30 12-07 13:18:27.0
f820: 30 30 30 30 30 30 30 30 20 2b 30 31 30 30 0a 40 00000000 +0100.@
f830: 40 20 2d 35 2c 36 20 2b 35 2c 37 20 40 40 0a 20 @ -5,6 +5,7 @@.
f840: 23 20 66 6f 72 20 65 72 72 6f 72 73 2e 20 4e 6f # for errors. No
f850: 20 6f 75 74 70 75 74 20 6d 65 61 6e 73 20 6e 6f output means no
f860: 20 65 72 72 6f 72 73 20 77 65 72 65 20 66 6f 75 errors were fou
f870: 6e 64 2e 0a 20 23 0a 20 23 20 43 6f 70 79 72 69 nd.. #. # Copyri
f880: 67 68 74 20 28 63 29 20 32 30 30 36 20 44 6f 6e ght (c) 2006 Don
f890: 61 6c 20 4b 2e 20 46 65 6c 6c 6f 77 73 0a 2b 23 al K. Fellows.+#
f8a0: 20 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 Copyright (c) 2
f8b0: 30 30 36 20 50 65 74 65 72 20 53 70 6a 75 74 68 006 Peter Spjuth
f8c0: 0a 20 23 0a 20 23 20 53 65 65 20 74 68 65 20 66 . #. # See the f
f8d0: 69 6c 65 20 22 6c 69 63 65 6e 73 65 2e 74 65 72 ile "license.ter
f8e0: 6d 73 22 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74 ms" for informat
f8f0: 69 6f 6e 20 6f 6e 20 75 73 61 67 65 20 61 6e 64 ion on usage and
f900: 20 72 65 64 69 73 74 72 69 62 75 74 69 6f 6e 20 redistribution
f910: 6f 66 0a 20 23 20 74 68 69 73 20 66 69 6c 65 2c of. # this file,
f920: 20 61 6e 64 20 66 6f 72 20 61 20 44 49 53 43 4c and for a DISCL
f930: 41 49 4d 45 52 20 4f 46 20 41 4c 4c 20 57 41 52 AIMER OF ALL WAR
f940: 52 41 4e 54 49 45 53 2e 0a 40 40 20 2d 31 36 2c RANTIES..@@ -16,
f950: 36 20 2b 31 37 2c 38 37 20 40 40 0a 20 20 20 20 6 +17,87 @@.
f960: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 namespace impor
f970: 74 20 2d 66 6f 72 63 65 20 3a 3a 74 63 6c 74 65 t -force ::tclte
f980: 73 74 3a 3a 2a 0a 20 7d 0a 20 0a 2b 23 20 41 20 st::*. }. .+# A
f990: 6e 61 6d 65 73 70 61 63 65 20 74 6f 20 74 65 73 namespace to tes
f9a0: 74 20 74 68 61 74 20 6f 70 65 72 61 74 6f 72 73 t that operators
f9b0: 20 61 72 65 20 65 78 70 6f 72 74 65 64 20 61 6e are exported an
f9c0: 64 20 74 68 61 74 20 74 68 65 79 0a 2b 23 20 77 d that they.+# w
f9d0: 6f 72 6b 20 77 68 65 6e 20 69 6d 70 6f 72 74 65 ork when importe
f9e0: 64 0a 2b 6e 61 6d 65 73 70 61 63 65 20 65 76 61 d.+namespace eva
f9f0: 6c 20 3a 3a 74 65 73 74 6d 61 74 68 6f 70 32 20 l ::testmathop2
fa00: 7b 0a 2b 20 20 20 20 6e 61 6d 65 73 70 61 63 65 {.+ namespace
fa10: 20 69 6d 70 6f 72 74 20 3a 3a 74 63 6c 3a 3a 6d import ::tcl::m
fa20: 61 74 68 6f 70 3a 3a 2a 0a 2b 7d 0a 2b 0a 2b 23 athop::*.+}.+.+#
fa30: 20 48 65 6c 70 65 72 20 74 6f 20 74 65 73 74 20 Helper to test
fa40: 6d 61 74 68 20 6f 70 73 2e 0a 2b 23 20 54 65 73 math ops..+# Tes
fa50: 74 20 64 69 66 66 65 72 65 6e 74 20 69 6e 76 6f t different invo
fa60: 6b 61 74 69 6f 6e 20 76 61 72 69 61 6e 74 73 20 kation variants
fa70: 61 6e 64 20 73 65 65 20 74 68 61 74 20 74 68 65 and see that the
fa80: 79 20 64 6f 20 74 68 65 20 73 61 6d 65 20 74 68 y do the same th
fa90: 69 6e 67 2e 0a 2b 23 20 42 79 74 65 20 63 6f 6d ing..+# Byte com
faa0: 70 69 6c 65 64 20 2f 20 6e 6f 6e 20 62 79 74 65 piled / non byte
fab0: 20 63 6f 6d 70 69 6c 65 64 20 76 65 72 73 69 6f compiled versio
fac0: 6e 0a 2b 23 20 53 68 61 72 65 64 20 2f 20 75 6e n.+# Shared / un
fad0: 73 68 61 72 65 64 20 61 72 67 75 6d 65 6e 74 73 shared arguments
fae0: 0a 2b 23 20 4f 72 69 67 69 6e 61 6c 20 2f 20 69 .+# Original / i
faf0: 6d 70 6f 72 74 65 64 0a 2b 70 72 6f 63 20 54 65 mported.+proc Te
fb00: 73 74 4f 70 20 7b 6f 70 20 61 72 67 73 7d 20 7b stOp {op args} {
fb10: 0a 2b 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 .+ set result
fb20: 73 20 7b 7d 0a 2b 0a 2b 20 20 20 20 23 20 4e 6f s {}.+.+ # No
fb30: 6e 20 62 79 74 65 20 63 6f 6d 70 69 6c 65 64 20 n byte compiled
fb40: 76 65 72 73 69 6f 6e 2c 20 73 68 61 72 65 64 20 version, shared
fb50: 61 72 67 73 0a 2b 20 20 20 20 69 66 20 7b 5b 63 args.+ if {[c
fb60: 61 74 63 68 20 7b 3a 3a 74 63 6c 3a 3a 6d 61 74 atch {::tcl::mat
fb70: 68 6f 70 3a 3a 24 6f 70 20 7b 65 78 70 61 6e 64 hop::$op {expand
fb80: 7d 24 61 72 67 73 7d 20 72 65 73 5d 7d 20 7b 0a }$args} res]} {.
fb90: 2b 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 + append
fba0: 72 65 73 20 22 20 24 3a 3a 65 72 72 6f 72 43 6f res " $::errorCo
fbb0: 64 65 22 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 de".+ }.+
fbc0: 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 73 20 lappend results
fbd0: 24 72 65 73 0a 2b 0a 2b 20 20 20 20 23 20 4e 6f $res.+.+ # No
fbe0: 6e 20 62 79 74 65 20 63 6f 6d 70 69 6c 65 64 20 n byte compiled
fbf0: 76 65 72 73 69 6f 6e 2c 20 75 6e 73 68 61 72 65 version, unshare
fc00: 64 20 61 72 67 73 0a 2b 20 20 20 20 73 65 74 20 d args.+ set
fc10: 63 6d 64 20 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f cmd ::tcl::matho
fc20: 70 3a 3a 5c 24 6f 70 0a 2b 20 20 20 20 66 6f 72 p::\$op.+ for
fc30: 65 61 63 68 20 61 72 67 20 24 61 72 67 73 20 7b each arg $args {
fc40: 0a 2b 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .+ append
fc50: 20 63 6d 64 20 22 20 5c 5b 66 6f 72 6d 61 74 20 cmd " \[format
fc60: 25 73 20 5b 6c 69 73 74 20 24 61 72 67 5d 5c 5d %s [list $arg]\]
fc70: 22 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 69 66 ".+ }.+ if
fc80: 20 7b 5b 63 61 74 63 68 20 24 63 6d 64 20 72 65 {[catch $cmd re
fc90: 73 5d 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 61 s]} {.+ a
fca0: 70 70 65 6e 64 20 72 65 73 20 22 20 24 3a 3a 65 ppend res " $::e
fcb0: 72 72 6f 72 43 6f 64 65 22 0a 2b 20 20 20 20 7d rrorCode".+ }
fcc0: 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .+ lappend re
fcd0: 73 75 6c 74 73 20 24 72 65 73 0a 2b 0a 2b 20 20 sults $res.+.+
fce0: 20 20 23 20 4e 6f 6e 20 62 79 74 65 20 63 6f 6d # Non byte com
fcf0: 70 69 6c 65 64 20 69 6d 70 6f 72 74 65 64 0a 2b piled imported.+
fd00: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch {
fd10: 3a 3a 74 65 73 74 6d 61 74 68 6f 70 32 3a 3a 24 ::testmathop2::$
fd20: 6f 70 20 7b 65 78 70 61 6e 64 7d 24 61 72 67 73 op {expand}$args
fd30: 7d 20 72 65 73 5d 7d 20 7b 0a 2b 20 20 20 20 20 } res]} {.+
fd40: 20 20 20 61 70 70 65 6e 64 20 72 65 73 20 22 20 append res "
fd50: 24 3a 3a 65 72 72 6f 72 43 6f 64 65 22 0a 2b 20 $::errorCode".+
fd60: 20 20 20 7d 0a 2b 20 20 20 20 6c 61 70 70 65 6e }.+ lappen
fd70: 64 20 72 65 73 75 6c 74 73 20 5b 73 74 72 69 6e d results [strin
fd80: 67 20 6d 61 70 20 7b 74 65 73 74 6d 61 74 68 6f g map {testmatho
fd90: 70 32 20 74 63 6c 3a 3a 6d 61 74 68 6f 70 7d 20 p2 tcl::mathop}
fda0: 24 72 65 73 5d 0a 2b 0a 2b 20 20 20 20 23 20 42 $res].+.+ # B
fdb0: 43 20 76 65 72 73 69 6f 6e 0a 2b 20 20 20 20 73 C version.+ s
fdc0: 65 74 20 61 72 67 4c 69 73 74 31 20 7b 7d 0a 2b et argList1 {}.+
fdd0: 20 20 20 20 73 65 74 20 61 72 67 4c 69 73 74 32 set argList2
fde0: 20 7b 7d 0a 2b 20 20 20 20 73 65 74 20 61 72 67 {}.+ set arg
fdf0: 4c 69 73 74 33 20 7b 7d 0a 2b 20 20 20 20 66 6f List3 {}.+ fo
fe00: 72 20 7b 73 65 74 20 74 20 30 7d 20 7b 24 74 20 r {set t 0} {$t
fe10: 3c 20 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 73 < [llength $args
fe20: 5d 7d 20 7b 69 6e 63 72 20 74 7d 20 7b 0a 2b 20 ]} {incr t} {.+
fe30: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 61 lappend a
fe40: 72 67 4c 69 73 74 31 20 61 24 74 0a 2b 20 20 20 rgList1 a$t.+
fe50: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 61 72 67 lappend arg
fe60: 4c 69 73 74 32 20 5c 24 61 24 74 0a 2b 20 20 20 List2 \$a$t.+
fe70: 20 20 20 20 20 6c 61 70 70 65 6e 64 20 61 72 67 lappend arg
fe80: 4c 69 73 74 33 20 22 5c 5b 66 6f 72 6d 61 74 20 List3 "\[format
fe90: 25 73 20 5c 24 61 24 74 5c 5d 22 0a 2b 20 20 20 %s \$a$t\]".+
fea0: 20 7d 0a 2b 20 20 20 20 23 20 53 68 61 72 65 64 }.+ # Shared
feb0: 20 61 72 67 73 0a 2b 20 20 20 20 70 72 6f 63 20 args.+ proc
fec0: 5f 54 65 73 74 4f 70 20 20 24 61 72 67 4c 69 73 _TestOp $argLis
fed0: 74 31 20 22 3a 3a 74 63 6c 3a 3a 6d 61 74 68 6f t1 "::tcl::matho
fee0: 70 3a 3a 24 6f 70 20 5b 6a 6f 69 6e 20 24 61 72 p::$op [join $ar
fef0: 67 4c 69 73 74 32 5d 22 0a 2b 20 20 20 20 23 20 gList2]".+ #
ff00: 55 6e 73 68 61 72 65 64 20 61 72 67 73 0a 2b 20 Unshared args.+
ff10: 20 20 20 70 72 6f 63 20 5f 54 65 73 74 4f 70 32 proc _TestOp2
ff20: 20 24 61 72 67 4c 69 73 74 31 20 22 3a 3a 74 63 $argList1 "::tc
ff30: 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 24 6f 70 20 5b l::mathop::$op [
ff40: 6a 6f 69 6e 20 24 61 72 67 4c 69 73 74 33 5d 22 join $argList3]"
ff50: 0a 2b 20 20 20 20 23 20 49 6d 70 6f 72 74 65 64 .+ # Imported
ff60: 0a 2b 20 20 20 20 70 72 6f 63 20 5f 54 65 73 74 .+ proc _Test
ff70: 4f 70 33 20 24 61 72 67 4c 69 73 74 31 20 22 3a Op3 $argList1 ":
ff80: 3a 74 65 73 74 6d 61 74 68 6f 70 32 3a 3a 24 6f :testmathop2::$o
ff90: 70 20 5b 6a 6f 69 6e 20 24 61 72 67 4c 69 73 74 p [join $argList
ffa0: 32 5d 22 0a 2b 0a 2b 20 20 20 20 73 65 74 20 3a 2]".+.+ set :
ffb0: 3a 74 63 6c 5f 74 72 61 63 65 43 6f 6d 70 69 6c :tcl_traceCompil
ffc0: 65 20 30 20 20 3b 23 20 53 65 74 20 74 6f 20 32 e 0 ;# Set to 2
ffd0: 20 74 6f 20 68 65 6c 70 20 77 69 74 68 20 64 65 to help with de
ffe0: 62 75 67 0a 2b 20 20 20 20 69 66 20 7b 5b 63 61 bug.+ if {[ca
fff0: 74 63 68 20 7b 5f 54 65 73 74 4f 70 20 7b 65 78 tch {_TestOp {ex
10000 70 61 6e 64 7d 24 61 72 67 73 7d 20 72 65 73 5d pand}$args} res]
10010 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 61 70 70 } {.+ app
10020 65 6e 64 20 72 65 73 20 22 20 24 3a 3a 65 72 72 end res " $::err
10030 6f 72 43 6f 64 65 22 0a 2b 20 20 20 20 7d 0a 2b orCode".+ }.+
10040 20 20 20 20 73 65 74 20 3a 3a 74 63 6c 5f 74 72 set ::tcl_tr
10050 61 63 65 43 6f 6d 70 69 6c 65 20 30 0a 2b 20 20 aceCompile 0.+
10060 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
10070 73 20 24 72 65 73 0a 2b 0a 2b 20 20 20 20 69 66 s $res.+.+ if
10080 20 7b 5b 63 61 74 63 68 20 7b 5f 54 65 73 74 4f {[catch {_TestO
10090 70 32 20 7b 65 78 70 61 6e 64 7d 24 61 72 67 73 p2 {expand}$args
100a0 7d 20 72 65 73 5d 7d 20 7b 0a 2b 20 20 20 20 20 } res]} {.+
100b0 20 20 20 61 70 70 65 6e 64 20 72 65 73 20 22 20 append res "
100c0 24 3a 3a 65 72 72 6f 72 43 6f 64 65 22 0a 2b 20 $::errorCode".+
100d0 20 20 20 7d 0a 2b 20 20 20 20 6c 61 70 70 65 6e }.+ lappen
100e0 64 20 72 65 73 75 6c 74 73 20 24 72 65 73 0a 2b d results $res.+
100f0 0a 2b 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 .+ if {[catch
10100 20 7b 5f 54 65 73 74 4f 70 33 20 7b 65 78 70 61 {_TestOp3 {expa
10110 6e 64 7d 24 61 72 67 73 7d 20 72 65 73 5d 7d 20 nd}$args} res]}
10120 7b 0a 2b 20 20 20 20 20 20 20 20 61 70 70 65 6e {.+ appen
10130 64 20 72 65 73 20 22 20 24 3a 3a 65 72 72 6f 72 d res " $::error
10140 43 6f 64 65 22 0a 2b 20 20 20 20 7d 0a 2b 20 20 Code".+ }.+
10150 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 lappend result
10160 73 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 74 s [string map {t
10170 65 73 74 6d 61 74 68 6f 70 32 20 74 63 6c 3a 3a estmathop2 tcl::
10180 6d 61 74 68 6f 70 7d 20 24 72 65 73 5d 0a 2b 0a mathop} $res].+.
10190 2b 20 20 20 20 23 20 43 68 65 63 6b 20 74 68 61 + # Check tha
101a0 74 20 74 68 65 79 20 64 6f 20 74 68 65 20 73 61 t they do the sa
101b0 6d 65 0a 2b 20 20 20 20 73 65 74 20 6c 65 6e 20 me.+ set len
101c0 5b 6c 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 [llength $result
101d0 73 5d 0a 2b 20 20 20 20 66 6f 72 20 7b 73 65 74 s].+ for {set
101e0 20 69 20 30 7d 20 7b 24 69 20 3c 20 28 24 6c 65 i 0} {$i < ($le
101f0 6e 20 2d 20 31 29 7d 20 7b 69 6e 63 72 20 69 7d n - 1)} {incr i}
10200 20 7b 0a 2b 20 20 20 20 20 20 20 20 73 65 74 20 {.+ set
10210 72 65 73 31 20 5b 6c 69 6e 64 65 78 20 24 72 65 res1 [lindex $re
10220 73 75 6c 74 73 20 24 69 5d 0a 2b 20 20 20 20 20 sults $i].+
10230 20 20 20 73 65 74 20 72 65 73 32 20 5b 6c 69 6e set res2 [lin
10240 64 65 78 20 24 72 65 73 75 6c 74 73 20 24 69 2b dex $results $i+
10250 31 5d 0a 2b 20 20 20 20 20 20 20 20 69 66 20 7b 1].+ if {
10260 24 72 65 73 31 20 6e 65 20 24 72 65 73 32 7d 20 $res1 ne $res2}
10270 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 72 {.+ r
10280 65 74 75 72 6e 20 22 24 69 3a 28 24 72 65 73 31 eturn "$i:($res1
10290 20 21 3d 20 24 72 65 73 32 29 22 0a 2b 20 20 20 != $res2)".+
102a0 20 20 20 20 20 7d 0a 2b 20 20 20 20 7d 0a 2b 20 }.+ }.+
102b0 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 6e 64 65 return [linde
102c0 78 20 24 72 65 73 75 6c 74 73 20 30 5d 0a 2b 7d x $results 0].+}
102d0 0a 2b 0a 20 23 20 73 74 61 72 74 20 6f 66 20 74 .+. # start of t
102e0 65 73 74 73 0a 20 0a 20 6e 61 6d 65 73 70 61 63 ests. . namespac
102f0 65 20 65 76 61 6c 20 3a 3a 74 65 73 74 6d 61 74 e eval ::testmat
10300 68 6f 70 20 7b 0a 40 40 20 2d 35 33 2c 37 20 2b hop {.@@ -53,7 +
10310 31 33 35 2c 37 20 40 40 0a 20 09 2b 20 30 20 5b 135,7 @@. .+ 0 [
10320 65 72 72 6f 72 20 65 78 70 65 63 74 65 64 45 72 error expectedEr
10330 72 6f 72 5d 0a 20 20 20 20 20 7d 20 2d 72 65 73 ror]. } -res
10340 75 6c 74 20 65 78 70 65 63 74 65 64 45 72 72 6f ult expectedErro
10350 72 0a 20 20 20 20 20 74 65 73 74 20 6d 61 74 68 r. test math
10360 6f 70 2d 31 2e 31 38 20 7b 63 6f 6d 70 69 6c 65 op-1.18 {compile
10370 64 20 2b 3a 20 61 72 67 75 6d 65 6e 74 20 70 72 d +: argument pr
10380 6f 63 65 73 73 69 6e 67 20 6f 72 64 65 72 7d 20 ocessing order}
10390 2d 62 6f 64 79 20 7b 0a 2d 09 23 20 42 79 74 65 -body {.-.# Byte
103a0 63 6f 64 65 20 63 6f 6d 70 69 6c 61 74 69 6f 6e code compilation
103b0 20 6b 6e 6f 77 6e 20 62 75 67 67 79 20 66 6f 72 known buggy for
103c0 20 33 2b 20 61 72 67 75 6d 65 6e 74 73 0a 2b 09 3+ arguments.+.
103d0 23 20 42 79 74 65 63 6f 64 65 20 63 6f 6d 70 69 # Bytecode compi
103e0 6c 61 74 69 6f 6e 20 6b 6e 6f 77 6e 20 68 61 72 lation known har
103f0 64 20 66 6f 72 20 33 2b 20 61 72 67 75 6d 65 6e d for 3+ argumen
10400 74 73 0a 20 09 6c 69 73 74 20 5b 63 61 74 63 68 ts. .list [catch
10410 20 7b 0a 20 09 20 20 20 20 2b 20 5b 73 65 74 20 {. . + [set
10420 78 20 30 5d 20 5b 69 6e 63 72 20 78 5d 20 4e 61 x 0] [incr x] Na
10430 4e 20 5b 69 6e 63 72 20 78 5d 20 5b 65 72 72 6f N [incr x] [erro
10440 72 20 65 78 70 65 63 74 65 64 5d 20 5b 69 6e 63 r expected] [inc
10450 72 20 78 5d 0a 20 09 7d 20 6d 73 67 5d 20 24 6d r x]. .} msg] $m
10460 73 67 20 24 78 0a 40 40 20 2d 31 32 38 2c 37 20 sg $x.@@ -128,7
10470 2b 32 31 30 2c 37 20 40 40 0a 20 09 2a 20 30 20 +210,7 @@. .* 0
10480 5b 65 72 72 6f 72 20 65 78 70 65 63 74 65 64 45 [error expectedE
10490 72 72 6f 72 5d 0a 20 20 20 20 20 7d 20 2d 72 65 rror]. } -re
104a0 73 75 6c 74 20 65 78 70 65 63 74 65 64 45 72 72 sult expectedErr
104b0 6f 72 0a 20 20 20 20 20 74 65 73 74 20 6d 61 74 or. test mat
104c0 68 6f 70 2d 32 2e 31 38 20 7b 63 6f 6d 70 69 6c hop-2.18 {compil
104d0 65 64 20 2a 3a 20 61 72 67 75 6d 65 6e 74 20 70 ed *: argument p
104e0 72 6f 63 65 73 73 69 6e 67 20 6f 72 64 65 72 7d rocessing order}
104f0 20 2d 62 6f 64 79 20 7b 0a 2d 09 23 20 42 79 74 -body {.-.# Byt
10500 65 63 6f 64 65 20 63 6f 6d 70 69 6c 61 74 69 6f ecode compilatio
10510 6e 20 6b 6e 6f 77 6e 20 62 75 67 67 79 20 66 6f n known buggy fo
10520 72 20 33 2b 20 61 72 67 75 6d 65 6e 74 73 0a 2b r 3+ arguments.+
10530 09 23 20 42 79 74 65 63 6f 64 65 20 63 6f 6d 70 .# Bytecode comp
10540 69 6c 61 74 69 6f 6e 20 6b 6e 6f 77 6e 20 68 61 ilation known ha
10550 72 64 20 66 6f 72 20 33 2b 20 61 72 67 75 6d 65 rd for 3+ argume
10560 6e 74 73 0a 20 09 6c 69 73 74 20 5b 63 61 74 63 nts. .list [catc
10570 68 20 7b 0a 20 09 20 20 20 20 2a 20 5b 73 65 74 h {. . * [set
10580 20 78 20 30 5d 20 5b 69 6e 63 72 20 78 5d 20 4e x 0] [incr x] N
10590 61 4e 20 5b 69 6e 63 72 20 78 5d 20 5b 65 72 72 aN [incr x] [err
105a0 6f 72 20 65 78 70 65 63 74 65 64 5d 20 5b 69 6e or expected] [in
105b0 63 72 20 78 5d 0a 20 09 7d 20 6d 73 67 5d 20 24 cr x]. .} msg] $
105c0 6d 73 67 20 24 78 0a 40 40 20 2d 31 37 32 2c 31 msg $x.@@ -172,1
105d0 30 20 2b 32 35 34 2c 36 35 38 20 40 40 0a 20 20 0 +254,658 @@.
105e0 20 20 20 7d 20 2d 72 65 73 75 6c 74 20 7b 31 20 } -result {1
105f0 65 78 70 65 63 74 65 64 20 32 7d 0a 20 0a 20 20 expected 2}. .
10600 20 20 20 23 20 54 4f 44 4f 3a 20 21 20 7e 20 20 # TODO: ! ~
10610 26 20 7c 20 5e 20 20 25 20 2a 2a 20 3c 3c 20 3e & | ^ % ** << >
10620 3e 20 20 2d 20 2f 20 20 3d 3d 20 21 3d 20 3c 20 > - / == != <
10630 3c 3d 20 3e 20 3e 3d 20 20 65 71 20 6e 65 20 20 <= > >= eq ne
10640 69 6e 20 6e 69 0a 2b 0a 2b 20 20 20 20 74 65 73 in ni.+.+ tes
10650 74 20 6d 61 74 68 6f 70 2d 33 2e 31 38 20 7b 63 t mathop-3.18 {c
10660 6f 6d 70 69 6c 65 64 20 2f 3a 20 61 72 67 75 6d ompiled /: argum
10670 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 20 6f ent processing o
10680 72 64 65 72 7d 20 2d 62 6f 64 79 20 7b 0a 2b 09 rder} -body {.+.
10690 23 20 42 79 74 65 63 6f 64 65 20 63 6f 6d 70 69 # Bytecode compi
106a0 6c 61 74 69 6f 6e 20 6b 6e 6f 77 6e 20 68 61 72 lation known har
106b0 64 20 66 6f 72 20 33 2b 20 61 72 67 75 6d 65 6e d for 3+ argumen
106c0 74 73 0a 2b 09 6c 69 73 74 20 5b 63 61 74 63 68 ts.+.list [catch
106d0 20 7b 0a 2b 09 20 20 20 20 2f 20 5b 73 65 74 20 {.+. / [set
106e0 78 20 30 5d 20 5b 69 6e 63 72 20 78 5d 20 4e 61 x 0] [incr x] Na
106f0 4e 20 5b 69 6e 63 72 20 78 5d 20 5b 65 72 72 6f N [incr x] [erro
10700 72 20 65 78 70 65 63 74 65 64 5d 20 5b 69 6e 63 r expected] [inc
10710 72 20 78 5d 0a 2b 09 7d 20 6d 73 67 5d 20 24 6d r x].+.} msg] $m
10720 73 67 20 24 78 0a 2b 20 20 20 20 7d 20 2d 72 65 sg $x.+ } -re
10730 73 75 6c 74 20 7b 31 20 65 78 70 65 63 74 65 64 sult {1 expected
10740 20 32 7d 0a 2b 0a 2b 20 20 20 20 74 65 73 74 20 2}.+.+ test
10750 6d 61 74 68 6f 70 2d 34 2e 31 38 20 7b 63 6f 6d mathop-4.18 {com
10760 70 69 6c 65 64 20 2d 3a 20 61 72 67 75 6d 65 6e piled -: argumen
10770 74 20 70 72 6f 63 65 73 73 69 6e 67 20 6f 72 64 t processing ord
10780 65 72 7d 20 2d 62 6f 64 79 20 7b 0a 2b 09 23 20 er} -body {.+.#
10790 42 79 74 65 63 6f 64 65 20 63 6f 6d 70 69 6c 61 Bytecode compila
107a0 74 69 6f 6e 20 6b 6e 6f 77 6e 20 68 61 72 64 20 tion known hard
107b0 66 6f 72 20 33 2b 20 61 72 67 75 6d 65 6e 74 73 for 3+ arguments
107c0 0a 2b 09 6c 69 73 74 20 5b 63 61 74 63 68 20 7b .+.list [catch {
107d0 0a 2b 09 20 20 20 20 2d 20 5b 73 65 74 20 78 20 .+. - [set x
107e0 30 5d 20 5b 69 6e 63 72 20 78 5d 20 4e 61 4e 20 0] [incr x] NaN
107f0 5b 69 6e 63 72 20 78 5d 20 5b 65 72 72 6f 72 20 [incr x] [error
10800 65 78 70 65 63 74 65 64 5d 20 5b 69 6e 63 72 20 expected] [incr
10810 78 5d 0a 2b 09 7d 20 6d 73 67 5d 20 24 6d 73 67 x].+.} msg] $msg
10820 20 24 78 0a 2b 20 20 20 20 7d 20 2d 72 65 73 75 $x.+ } -resu
10830 6c 74 20 7b 31 20 65 78 70 65 63 74 65 64 20 32 lt {1 expected 2
10840 7d 0a 2b 7d 0a 2b 0a 2b 0a 2b 74 65 73 74 20 6d }.+}.+.+.+test m
10850 61 74 68 6f 70 2d 32 30 2e 31 20 7b 20 7a 65 72 athop-20.1 { zer
10860 6f 20 61 72 67 73 2c 20 72 65 74 75 72 6e 20 75 o args, return u
10870 6e 69 74 20 7d 20 7b 0a 2b 20 20 20 20 73 65 74 nit } {.+ set
10880 20 72 65 73 20 7b 7d 0a 2b 20 20 20 20 66 6f 72 res {}.+ for
10890 65 61 63 68 20 6f 70 20 7b 2b 20 2a 20 26 20 5e each op {+ * & ^
108a0 20 7c 20 2a 2a 20 3c 20 3c 3d 20 3e 20 3e 3d 20 | ** < <= > >=
108b0 3d 3d 20 65 71 7d 20 7b 0a 2b 20 20 20 20 20 20 == eq} {.+
108c0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 lappend res [T
108d0 65 73 74 4f 70 20 24 6f 70 5d 0a 2b 20 20 20 20 estOp $op].+
108e0 7d 0a 2b 20 20 20 20 73 65 74 20 72 65 73 0a 2b }.+ set res.+
108f0 7d 20 7b 30 20 31 20 2d 31 20 30 20 30 20 31 20 } {0 1 -1 0 0 1
10900 31 20 31 20 31 20 31 20 31 20 31 7d 0a 2b 0a 2b 1 1 1 1 1 1}.+.+
10910 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 30 2e 32 test mathop-20.2
10920 20 7b 20 7a 65 72 6f 20 61 72 67 73 2c 20 6e 6f { zero args, no
10930 74 20 61 6c 6c 6f 77 65 64 20 7d 20 7b 0a 2b 20 t allowed } {.+
10940 20 20 20 73 65 74 20 65 78 70 20 7b 7d 0a 2b 20 set exp {}.+
10950 20 20 20 66 6f 72 65 61 63 68 20 6f 70 20 7b 7e foreach op {~
10960 20 21 20 3c 3c 20 3e 3e 20 25 20 21 3d 20 6e 65 ! << >> % != ne
10970 20 69 6e 20 6e 69 20 2d 20 2f 7d 20 7b 0a 2b 20 in ni - /} {.+
10980 20 20 20 20 20 20 20 73 65 74 20 72 65 73 20 5b set res [
10990 54 65 73 74 4f 70 20 24 6f 70 5d 0a 2b 20 20 20 TestOp $op].+
109a0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string
109b0 20 6d 61 74 63 68 20 22 77 72 6f 6e 67 20 23 20 match "wrong #
109c0 61 72 67 73 2a 20 4e 4f 4e 45 22 20 24 72 65 73 args* NONE" $res
109d0 5d 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 ]} {.+
109e0 20 20 6c 61 70 70 65 6e 64 20 65 78 70 20 30 0a lappend exp 0.
109f0 2b 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 + } else
10a00 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c {.+ l
10a10 61 70 70 65 6e 64 20 65 78 70 20 24 72 65 73 0a append exp $res.
10a20 2b 20 20 20 20 20 20 20 20 7d 0a 2b 20 20 20 20 + }.+
10a30 7d 0a 2b 20 20 20 20 73 65 74 20 65 78 70 0a 2b }.+ set exp.+
10a40 7d 20 7b 30 20 30 20 30 20 30 20 30 20 30 20 30 } {0 0 0 0 0 0 0
10a50 20 30 20 30 20 30 20 30 7d 0a 2b 0a 2b 74 65 73 0 0 0 0}.+.+tes
10a60 74 20 6d 61 74 68 6f 70 2d 32 30 2e 33 20 7b 20 t mathop-20.3 {
10a70 6f 6e 65 20 61 72 67 20 7d 20 7b 0a 2b 20 20 20 one arg } {.+
10a80 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b 20 20 20 set res {}.+
10a90 20 66 6f 72 65 61 63 68 20 76 61 6c 20 7b 37 20 foreach val {7
10aa0 38 2e 33 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 8.3} {.+
10ab0 66 6f 72 65 61 63 68 20 6f 70 20 7b 2b 20 2a 2a foreach op {+ **
10ac0 20 2d 20 2a 20 2f 20 3c 20 3c 3d 20 3e 20 3e 3d - * / < <= > >=
10ad0 20 3d 3d 20 65 71 20 21 7d 20 7b 0a 2b 20 20 20 == eq !} {.+
10ae0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 lappend
10af0 20 72 65 73 20 5b 54 65 73 74 4f 70 20 24 6f 70 res [TestOp $op
10b00 20 24 76 61 6c 5d 0a 2b 20 20 20 20 20 20 20 20 $val].+
10b10 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 }.+ }.+ se
10b20 74 20 72 65 73 0a 2b 7d 20 5b 6c 69 73 74 20 37 t res.+} [list 7
10b30 20 20 20 37 20 20 20 2d 37 20 20 20 37 20 20 20 7 -7 7
10b40 5b 65 78 70 72 20 7b 31 2e 30 2f 37 2e 30 7d 5d [expr {1.0/7.0}]
10b50 20 31 20 31 20 31 20 31 20 31 20 31 20 30 20 5c 1 1 1 1 1 1 0 \
10b60 0a 2b 20 20 20 20 20 20 20 20 38 2e 33 20 38 2e .+ 8.3 8.
10b70 33 20 2d 38 2e 33 20 38 2e 33 20 5b 65 78 70 72 3 -8.3 8.3 [expr
10b80 20 7b 31 2e 30 2f 38 2e 33 7d 5d 20 31 20 31 20 {1.0/8.3}] 1 1
10b90 31 20 31 20 31 20 31 20 30 5d 0a 2b 0a 2b 74 65 1 1 1 1 0].+.+te
10ba0 73 74 20 6d 61 74 68 6f 70 2d 32 30 2e 34 20 7b st mathop-20.4 {
10bb0 20 6f 6e 65 20 61 72 67 2c 20 69 6e 74 65 67 65 one arg, intege
10bc0 72 20 6f 6e 6c 79 20 6f 70 73 20 7d 20 7b 0a 2b r only ops } {.+
10bd0 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b set res {}.+
10be0 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 6c 20 foreach val
10bf0 7b 32 33 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 {23} {.+
10c00 66 6f 72 65 61 63 68 20 6f 70 20 7b 26 20 7c 20 foreach op {& |
10c10 5e 20 7e 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 ^ ~} {.+
10c20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 lappend res
10c30 5b 54 65 73 74 4f 70 20 24 6f 70 20 24 76 61 6c [TestOp $op $val
10c40 5d 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b 20 20 ].+ }.+
10c50 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 72 65 73 }.+ set res
10c60 0a 2b 7d 20 5b 6c 69 73 74 20 32 33 20 32 33 20 .+} [list 23 23
10c70 32 33 20 2d 32 34 5d 0a 2b 0a 2b 74 65 73 74 20 23 -24].+.+test
10c80 6d 61 74 68 6f 70 2d 32 30 2e 35 20 7b 20 6f 6e mathop-20.5 { on
10c90 65 20 61 72 67 2c 20 6e 6f 74 20 61 6c 6c 6f 77 e arg, not allow
10ca0 65 64 20 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 ed } {.+ set
10cb0 65 78 70 20 7b 7d 0a 2b 20 20 20 20 66 6f 72 65 exp {}.+ fore
10cc0 61 63 68 20 6f 70 20 7b 25 20 21 3d 20 6e 65 20 ach op {% != ne
10cd0 69 6e 20 6e 69 20 3c 3c 20 3e 3e 7d 20 7b 0a 2b in ni << >>} {.+
10ce0 20 20 20 20 20 20 20 20 73 65 74 20 72 65 73 20 set res
10cf0 5b 54 65 73 74 4f 70 20 24 6f 70 20 31 5d 0a 2b [TestOp $op 1].+
10d00 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str
10d10 69 6e 67 20 6d 61 74 63 68 20 22 77 72 6f 6e 67 ing match "wrong
10d20 20 23 20 61 72 67 73 2a 20 4e 4f 4e 45 22 20 24 # args* NONE" $
10d30 72 65 73 5d 7d 20 7b 0a 2b 20 20 20 20 20 20 20 res]} {.+
10d40 20 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 lappend exp
10d50 20 30 0a 2b 20 20 20 20 20 20 20 20 7d 20 65 6c 0.+ } el
10d60 73 65 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 se {.+
10d70 20 20 6c 61 70 70 65 6e 64 20 65 78 70 20 24 72 lappend exp $r
10d80 65 73 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b 20 es.+ }.+
10d90 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 65 78 }.+ set ex
10da0 70 0a 2b 7d 20 7b 30 20 30 20 30 20 30 20 30 20 p.+} {0 0 0 0 0
10db0 30 20 30 7d 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 0 0}.+.+test mat
10dc0 68 6f 70 2d 32 30 2e 36 20 7b 20 6f 6e 65 20 61 hop-20.6 { one a
10dd0 72 67 2c 20 65 72 72 6f 72 20 7d 20 7b 0a 2b 20 rg, error } {.+
10de0 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b 20 set res {}.+
10df0 20 20 20 73 65 74 20 65 78 70 20 7b 7d 0a 2b 20 set exp {}.+
10e00 20 20 20 66 6f 72 65 61 63 68 20 76 61 6c 73 20 foreach vals
10e10 7b 78 20 7b 31 20 78 7d 20 7b 31 20 31 20 78 7d {x {1 x} {1 1 x}
10e20 20 7b 31 20 78 20 31 7d 7d 20 7b 0a 2b 20 20 20 {1 x 1}} {.+
10e30 20 20 20 20 20 23 20 73 6b 69 70 70 69 6e 67 20 # skipping
10e40 2d 20 66 6f 72 20 6e 6f 77 2c 20 6b 6e 6f 77 6e - for now, known
10e50 62 75 67 2e 2e 2e 0a 2b 20 20 20 20 20 20 20 20 bug....+
10e60 66 6f 72 65 61 63 68 20 6f 70 20 7b 2b 20 2a 20 foreach op {+ *
10e70 2f 20 26 20 7c 20 5e 20 2a 2a 7d 20 7b 0a 2b 20 / & | ^ **} {.+
10e80 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe
10e90 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 24 nd res [TestOp $
10ea0 6f 70 20 7b 65 78 70 61 6e 64 7d 24 76 61 6c 73 op {expand}$vals
10eb0 5d 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c ].+ l
10ec0 61 70 70 65 6e 64 20 65 78 70 20 22 63 61 6e 27 append exp "can'
10ed0 74 20 75 73 65 20 6e 6f 6e 2d 6e 75 6d 65 72 69 t use non-numeri
10ee0 63 20 73 74 72 69 6e 67 20 61 73 20 6f 70 65 72 c string as oper
10ef0 61 6e 64 20 6f 66 20 5c 22 24 6f 70 5c 22 20 4e and of \"$op\" N
10f00 4f 4e 45 22 0a 2b 20 20 20 20 20 20 20 20 7d 0a ONE".+ }.
10f10 2b 20 20 20 20 7d 0a 2b 20 20 20 20 65 78 70 72 + }.+ expr
10f20 20 7b 24 72 65 73 20 65 71 20 24 65 78 70 20 3f {$res eq $exp ?
10f30 20 30 20 3a 20 24 72 65 73 7d 0a 2b 7d 20 30 0a 0 : $res}.+} 0.
10f40 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 +.+test mathop-2
10f50 30 2e 37 20 7b 20 6d 75 6c 74 69 20 61 72 67 20 0.7 { multi arg
10f60 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 72 65 73 } {.+ set res
10f70 20 7b 7d 0a 2b 20 20 20 20 66 6f 72 65 61 63 68 {}.+ foreach
10f80 20 76 61 6c 73 20 7b 7b 31 20 32 7d 20 7b 33 20 vals {{1 2} {3
10f90 34 20 35 7d 20 7b 34 20 33 20 32 20 31 7d 7d 20 4 5} {4 3 2 1}}
10fa0 7b 0a 2b 20 20 20 20 20 20 20 20 66 6f 72 65 61 {.+ forea
10fb0 63 68 20 6f 70 20 7b 2b 20 2d 20 2a 20 2f 7d 20 ch op {+ - * /}
10fc0 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c {.+ l
10fd0 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
10fe0 4f 70 20 24 6f 70 20 7b 65 78 70 61 6e 64 7d 24 Op $op {expand}$
10ff0 76 61 6c 73 5d 0a 2b 20 20 20 20 20 20 20 20 7d vals].+ }
11000 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 .+ }.+ set
11010 20 72 65 73 0a 2b 7d 20 5b 6c 69 73 74 20 33 20 res.+} [list 3
11020 2d 31 20 32 20 30 20 20 31 32 20 2d 36 20 36 30 -1 2 0 12 -6 60
11030 20 30 20 20 31 30 20 2d 32 20 32 34 20 30 5d 0a 0 10 -2 24 0].
11040 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 +.+test mathop-2
11050 30 2e 38 20 7b 20 6d 75 6c 74 69 20 61 72 67 2c 0.8 { multi arg,
11060 20 64 6f 75 62 6c 65 20 7d 20 7b 0a 2b 20 20 20 double } {.+
11070 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b 20 20 20 set res {}.+
11080 20 66 6f 72 65 61 63 68 20 76 61 6c 73 20 7b 7b foreach vals {{
11090 31 2e 30 20 32 7d 20 7b 33 2e 30 20 34 20 35 7d 1.0 2} {3.0 4 5}
110a0 20 7b 34 20 33 2e 30 20 32 20 31 7d 7d 20 7b 0a {4 3.0 2 1}} {.
110b0 2b 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 + foreach
110c0 20 6f 70 20 7b 2b 20 2d 20 2a 20 2f 7d 20 7b 0a op {+ - * /} {.
110d0 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 + lap
110e0 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 pend res [TestOp
110f0 20 24 6f 70 20 7b 65 78 70 61 6e 64 7d 24 76 61 $op {expand}$va
11100 6c 73 5d 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b ls].+ }.+
11110 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 72 }.+ set r
11120 65 73 0a 2b 7d 20 5b 6c 69 73 74 20 33 2e 30 20 es.+} [list 3.0
11130 2d 31 2e 30 20 32 2e 30 20 30 2e 35 20 20 31 32 -1.0 2.0 0.5 12
11140 2e 30 20 2d 36 2e 30 20 36 30 2e 30 20 30 2e 31 .0 -6.0 60.0 0.1
11150 35 20 20 31 30 2e 30 20 2d 32 2e 30 20 32 34 2e 5 10.0 -2.0 24.
11160 30 20 5b 65 78 70 72 20 7b 32 2e 30 2f 33 7d 5d 0 [expr {2.0/3}]
11170 5d 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 ].+.+test mathop
11180 2d 32 31 2e 31 20 7b 20 75 6e 61 72 79 20 6f 70 -21.1 { unary op
11190 73 2c 20 62 69 74 6e 6f 74 20 7d 20 7b 0a 2b 20 s, bitnot } {.+
111a0 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b 20 set res {}.+
111b0 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b lappend res [
111c0 54 65 73 74 4f 70 20 7e 20 37 5d 0a 2b 20 20 20 TestOp ~ 7].+
111d0 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 lappend res [Te
111e0 73 74 4f 70 20 7e 20 2d 35 5d 0a 2b 20 20 20 20 stOp ~ -5].+
111f0 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 lappend res [Tes
11200 74 4f 70 20 7e 20 33 35 34 36 35 37 34 38 33 39 tOp ~ 3546574839
11210 32 33 34 35 36 5d 0a 2b 20 20 20 20 6c 61 70 70 23456].+ lapp
11220 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 end res [TestOp
11230 7e 20 31 32 33 34 35 36 37 38 39 31 32 33 34 35 ~ 12345678912345
11240 36 37 38 39 31 32 33 34 35 36 37 38 39 5d 0a 2b 6789123456789].+
11250 20 20 20 20 73 65 74 20 72 65 73 0a 2b 7d 20 5b set res.+} [
11260 6c 69 73 74 20 2d 38 20 34 20 2d 33 35 34 36 35 list -8 4 -35465
11270 37 34 38 33 39 32 33 34 35 37 20 2d 31 32 33 34 7483923457 -1234
11280 35 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 5678912345678912
11290 33 34 35 36 37 39 30 5d 0a 2b 0a 2b 74 65 73 74 3456790].+.+test
112a0 20 6d 61 74 68 6f 70 2d 32 31 2e 32 20 7b 20 75 mathop-21.2 { u
112b0 6e 61 72 79 20 6f 70 73 2c 20 6c 6f 67 69 63 61 nary ops, logica
112c0 6c 20 6e 6f 74 20 7d 20 7b 0a 2b 20 20 20 20 73 l not } {.+ s
112d0 65 74 20 72 65 73 20 7b 7d 0a 2b 20 20 20 20 6c et res {}.+ l
112e0 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
112f0 4f 70 20 21 20 30 5d 0a 2b 20 20 20 20 6c 61 70 Op ! 0].+ lap
11300 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 pend res [TestOp
11310 20 21 20 31 5d 0a 2b 20 20 20 20 6c 61 70 70 65 ! 1].+ lappe
11320 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 21 nd res [TestOp !
11330 20 74 72 75 65 5d 0a 2b 20 20 20 20 6c 61 70 70 true].+ lapp
11340 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 end res [TestOp
11350 21 20 66 61 6c 73 65 5d 0a 2b 20 20 20 20 6c 61 ! false].+ la
11360 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
11370 70 20 21 20 33 37 5d 0a 2b 20 20 20 20 6c 61 70 p ! 37].+ lap
11380 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 pend res [TestOp
11390 20 21 20 38 2e 35 5d 0a 2b 20 20 20 20 73 65 74 ! 8.5].+ set
113a0 20 72 65 73 0a 2b 7d 20 5b 6c 69 73 74 20 31 20 res.+} [list 1
113b0 30 20 30 20 31 20 30 20 30 5d 0a 2b 0a 2b 74 65 0 0 1 0 0].+.+te
113c0 73 74 20 6d 61 74 68 6f 70 2d 32 31 2e 33 20 7b st mathop-21.3 {
113d0 20 75 6e 61 72 79 20 6f 70 73 2c 20 6e 65 67 61 unary ops, nega
113e0 74 69 6f 6e 20 7d 20 7b 0a 2b 20 20 20 20 73 65 tion } {.+ se
113f0 74 20 72 65 73 20 7b 7d 0a 2b 20 20 20 20 6c 61 t res {}.+ la
11400 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
11410 70 20 2d 20 20 37 2e 32 5d 0a 2b 20 20 20 20 6c p - 7.2].+ l
11420 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
11430 4f 70 20 2d 20 2d 35 5d 0a 2b 20 20 20 20 6c 61 Op - -5].+ la
11440 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
11450 70 20 2d 20 2d 32 31 34 37 34 38 33 36 34 38 5d p - -2147483648]
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11470 20 20 3b 23 20 2d 32 2a 2a 33 31 0a 2b 20 20 20 ;# -2**31.+
11480 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 lappend res [Te
11490 73 74 4f 70 20 2d 20 2d 39 32 32 33 33 37 32 30 stOp - -92233720
114a0 33 36 38 35 34 37 37 35 38 30 38 5d 20 20 20 20 36854775808]
114b0 20 20 20 20 20 3b 23 20 2d 32 2a 2a 36 33 0a 2b ;# -2**63.+
114c0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 lappend res
114d0 5b 54 65 73 74 4f 70 20 2d 20 20 33 35 34 36 35 [TestOp - 35465
114e0 37 34 38 33 39 32 33 34 35 36 5d 20 20 20 20 20 7483923456]
114f0 20 20 20 20 20 20 20 20 3b 23 20 77 69 64 65 0a ;# wide.
11500 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 + lappend res
11510 20 5b 54 65 73 74 4f 70 20 2d 20 20 31 32 33 34 [TestOp - 1234
11520 35 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 5678912345678912
11530 33 34 35 36 37 38 39 5d 20 3b 23 20 62 69 67 0a 3456789] ;# big.
11540 2b 20 20 20 20 73 65 74 20 72 65 73 0a 2b 7d 20 + set res.+}
11550 5b 6c 69 73 74 20 2d 37 2e 32 20 35 20 32 31 34 [list -7.2 5 214
11560 37 34 38 33 36 34 38 20 39 32 32 33 33 37 32 30 7483648 92233720
11570 33 36 38 35 34 37 37 35 38 30 38 20 2d 33 35 34 36854775808 -354
11580 36 35 37 34 38 33 39 32 33 34 35 36 20 5c 0a 2b 657483923456 \.+
11590 20 20 20 20 20 20 20 20 20 20 20 2d 31 32 33 34 -1234
115a0 35 36 37 38 39 31 32 33 34 35 36 37 38 39 31 32 5678912345678912
115b0 33 34 35 36 37 38 39 5d 0a 2b 0a 2b 74 65 73 74 3456789].+.+test
115c0 20 6d 61 74 68 6f 70 2d 32 31 2e 34 20 7b 20 75 mathop-21.4 { u
115d0 6e 61 72 79 20 6f 70 73 2c 20 69 6e 76 65 72 73 nary ops, invers
115e0 69 6f 6e 20 7d 20 7b 0a 2b 20 20 20 20 73 65 74 ion } {.+ set
115f0 20 72 65 73 20 7b 7d 0a 2b 20 20 20 20 6c 61 70 res {}.+ lap
11600 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 pend res [TestOp
11610 20 2f 20 31 5d 0a 2b 20 20 20 20 6c 61 70 70 65 / 1].+ lappe
11620 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 2f nd res [TestOp /
11630 20 35 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 5].+ lappend
11640 20 72 65 73 20 5b 54 65 73 74 4f 70 20 2f 20 35 res [TestOp / 5
11650 2e 36 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 .6].+ lappend
11660 20 72 65 73 20 5b 54 65 73 74 4f 70 20 2f 20 2d res [TestOp / -
11670 38 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 8].+ lappend
11680 72 65 73 20 5b 54 65 73 74 4f 70 20 2f 20 20 33 res [TestOp / 3
11690 35 34 36 35 37 34 38 33 39 32 33 34 35 36 5d 20 54657483923456]
116a0 20 20 20 20 20 20 20 20 20 20 20 20 3b 23 20 77 ;# w
116b0 69 64 65 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 ide.+ lappend
116c0 20 72 65 73 20 5b 54 65 73 74 4f 70 20 2f 20 20 res [TestOp /
116d0 31 32 33 34 35 36 37 38 39 31 32 33 34 35 36 37 1234567891234567
116e0 38 39 31 32 33 34 35 36 37 38 39 5d 20 3b 23 20 89123456789] ;#
116f0 62 69 67 0a 2b 20 20 20 20 73 65 74 20 72 65 73 big.+ set res
11700 0a 2b 7d 20 5b 6c 69 73 74 20 31 2e 30 20 30 2e .+} [list 1.0 0.
11710 32 20 30 2e 31 37 38 35 37 31 34 32 38 35 37 31 2 0.178571428571
11720 34 32 38 35 38 20 2d 30 2e 31 32 35 20 5c 0a 2b 42858 -0.125 \.+
11730 20 20 20 20 20 20 20 20 20 20 20 32 2e 38 31 39 2.819
11740 36 32 31 38 37 35 35 35 35 33 36 30 34 65 2d 31 6218755553604e-1
11750 35 20 38 2e 31 30 30 30 30 30 30 36 35 36 31 65 5 8.10000006561e
11760 2d 32 37 5d 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 -27].+.+test mat
11770 68 6f 70 2d 32 31 2e 35 20 7b 20 75 6e 61 72 79 hop-21.5 { unary
11780 20 6f 70 73 2c 20 62 61 64 20 76 61 6c 75 65 73 ops, bad values
11790 20 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 72 65 } {.+ set re
117a0 73 20 7b 7d 0a 2b 20 20 20 20 73 65 74 20 65 78 s {}.+ set ex
117b0 70 20 7b 7d 0a 2b 20 20 20 20 6c 61 70 70 65 6e p {}.+ lappen
117c0 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 2f 20 d res [TestOp /
117d0 78 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 x].+ lappend
117e0 65 78 70 20 22 63 61 6e 27 74 20 75 73 65 20 6e exp "can't use n
117f0 6f 6e 2d 6e 75 6d 65 72 69 63 20 73 74 72 69 6e on-numeric strin
11800 67 20 61 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 g as operand of
11810 5c 22 2f 5c 22 20 4e 4f 4e 45 22 0a 2b 20 20 20 \"/\" NONE".+
11820 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 lappend res [Te
11830 73 74 4f 70 20 2d 20 78 5d 0a 2b 20 20 20 20 6c stOp - x].+ l
11840 61 70 70 65 6e 64 20 65 78 70 20 22 63 61 6e 27 append exp "can'
11850 74 20 75 73 65 20 6e 6f 6e 2d 6e 75 6d 65 72 69 t use non-numeri
11860 63 20 73 74 72 69 6e 67 20 61 73 20 6f 70 65 72 c string as oper
11870 61 6e 64 20 6f 66 20 5c 22 2d 5c 22 20 4e 4f 4e and of \"-\" NON
11880 45 22 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 E".+ lappend
11890 72 65 73 20 5b 54 65 73 74 4f 70 20 7e 20 78 5d res [TestOp ~ x]
118a0 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 .+ lappend ex
118b0 70 20 22 63 61 6e 27 74 20 75 73 65 20 6e 6f 6e p "can't use non
118c0 2d 6e 75 6d 65 72 69 63 20 73 74 72 69 6e 67 20 -numeric string
118d0 61 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 5c 22 as operand of \"
118e0 7e 5c 22 20 4e 4f 4e 45 22 0a 2b 20 20 20 20 6c ~\" NONE".+ l
118f0 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
11900 4f 70 20 21 20 78 5d 0a 2b 20 20 20 20 6c 61 70 Op ! x].+ lap
11910 70 65 6e 64 20 65 78 70 20 22 63 61 6e 27 74 20 pend exp "can't
11920 75 73 65 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20 use non-numeric
11930 73 74 72 69 6e 67 20 61 73 20 6f 70 65 72 61 6e string as operan
11940 64 20 6f 66 20 5c 22 21 5c 22 20 4e 4f 4e 45 22 d of \"!\" NONE"
11950 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .+ lappend re
11960 73 20 5b 54 65 73 74 4f 70 20 7e 20 35 2e 30 5d s [TestOp ~ 5.0]
11970 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 .+ lappend ex
11980 70 20 22 63 61 6e 27 74 20 75 73 65 20 66 6c 6f p "can't use flo
11990 61 74 69 6e 67 2d 70 6f 69 6e 74 20 76 61 6c 75 ating-point valu
119a0 65 20 61 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 e as operand of
119b0 5c 22 7e 5c 22 20 4e 4f 4e 45 22 0a 2b 20 20 20 \"~\" NONE".+
119c0 20 65 78 70 72 20 7b 24 72 65 73 20 65 71 20 24 expr {$res eq $
119d0 65 78 70 20 3f 20 30 20 3a 20 24 72 65 73 7d 0a exp ? 0 : $res}.
119e0 2b 7d 20 30 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 +} 0.+.+test mat
119f0 68 6f 70 2d 32 31 2e 36 20 7b 20 75 6e 61 72 79 hop-21.6 { unary
11a00 20 6f 70 73 2c 20 74 6f 6f 20 6d 61 6e 79 20 7d ops, too many }
11a10 20 7b 0a 2b 20 20 20 20 73 65 74 20 65 78 70 20 {.+ set exp
11a20 7b 7d 0a 2b 20 20 20 20 66 6f 72 65 61 63 68 20 {}.+ foreach
11a30 6f 70 20 7b 7e 20 21 7d 20 7b 0a 2b 20 20 20 20 op {~ !} {.+
11a40 20 20 20 20 73 65 74 20 72 65 73 20 5b 54 65 73 set res [Tes
11a50 74 4f 70 20 24 6f 70 20 37 20 38 5d 0a 2b 20 20 tOp $op 7 8].+
11a60 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin
11a70 67 20 6d 61 74 63 68 20 22 77 72 6f 6e 67 20 23 g match "wrong #
11a80 20 61 72 67 73 2a 20 4e 4f 4e 45 22 20 24 72 65 args* NONE" $re
11a90 73 5d 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 s]} {.+
11aa0 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 20 30 lappend exp 0
11ab0 0a 2b 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .+ } else
11ac0 20 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 {.+
11ad0 6c 61 70 70 65 6e 64 20 65 78 70 20 24 72 65 73 lappend exp $res
11ae0 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b 20 20 20 .+ }.+
11af0 20 7d 0a 2b 20 20 20 20 73 65 74 20 65 78 70 0a }.+ set exp.
11b00 2b 7d 20 7b 30 20 30 7d 0a 2b 0a 2b 74 65 73 74 +} {0 0}.+.+test
11b10 20 6d 61 74 68 6f 70 2d 32 32 2e 31 20 7b 20 62 mathop-22.1 { b
11b20 69 74 77 69 73 65 20 6f 70 73 20 7d 20 7b 0a 2b itwise ops } {.+
11b30 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b set res {}.+
11b40 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 6c 73 foreach vals
11b50 20 7b 35 20 7b 31 20 36 7d 20 7b 31 20 32 20 33 {5 {1 6} {1 2 3
11b60 7d 20 7b 31 20 32 20 33 20 34 7d 7d 20 7b 0a 2b } {1 2 3 4}} {.+
11b70 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach
11b80 6f 70 20 7b 26 20 7c 20 5e 7d 20 7b 0a 2b 20 20 op {& | ^} {.+
11b90 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen
11ba0 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 24 6f d res [TestOp $o
11bb0 70 20 7b 65 78 70 61 6e 64 7d 24 76 61 6c 73 5d p {expand}$vals]
11bc0 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b 20 20 20 .+ }.+
11bd0 20 7d 0a 2b 20 20 20 20 73 65 74 20 72 65 73 0a }.+ set res.
11be0 2b 7d 20 5b 6c 69 73 74 20 35 20 35 20 35 20 20 +} [list 5 5 5
11bf0 30 20 37 20 37 20 20 30 20 33 20 30 20 20 30 20 0 7 7 0 3 0 0
11c00 37 20 34 5d 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 7 4].+.+test mat
11c10 68 6f 70 2d 32 32 2e 32 20 7b 20 62 69 74 77 69 hop-22.2 { bitwi
11c20 73 65 20 6f 70 73 20 6f 6e 20 62 69 67 6e 75 6d se ops on bignum
11c30 73 20 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 64 s } {.+ set d
11c40 69 67 20 35 30 0a 2b 20 20 20 20 73 65 74 20 61 ig 50.+ set a
11c50 20 30 78 5b 73 74 72 69 6e 67 20 72 65 70 65 61 0x[string repea
11c60 74 20 35 20 24 64 69 67 5d 0a 2b 20 20 20 20 73 t 5 $dig].+ s
11c70 65 74 20 62 20 30 78 5b 73 74 72 69 6e 67 20 72 et b 0x[string r
11c80 65 70 65 61 74 20 37 20 24 64 69 67 5d 0a 2b 20 epeat 7 $dig].+
11c90 20 20 20 73 65 74 20 63 20 30 78 5b 73 74 72 69 set c 0x[stri
11ca0 6e 67 20 72 65 70 65 61 74 20 39 20 24 64 69 67 ng repeat 9 $dig
11cb0 5d 0a 2b 20 20 20 20 73 65 74 20 62 6e 20 5b 65 ].+ set bn [e
11cc0 78 70 72 20 7b 7e 24 62 7d 5d 0a 2b 20 20 20 20 xpr {~$b}].+
11cd0 73 65 74 20 63 6e 20 5b 65 78 70 72 20 7b 7e 24 set cn [expr {~$
11ce0 63 7d 5d 0a 2b 0a 2b 20 20 20 20 73 65 74 20 72 c}].+.+ set r
11cf0 65 73 20 7b 7d 0a 2b 20 20 20 20 66 6f 72 65 61 es {}.+ forea
11d00 63 68 20 76 61 6c 73 20 5b 6c 69 73 74 20 5b 6c ch vals [list [l
11d10 69 73 74 20 24 61 20 24 62 5d 20 5b 6c 69 73 74 ist $a $b] [list
11d20 20 24 61 20 24 63 5d 20 5b 6c 69 73 74 20 24 62 $a $c] [list $b
11d30 20 24 63 5d 20 5c 0a 2b 20 20 20 20 20 20 20 20 $c] \.+
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11d50 20 20 5b 6c 69 73 74 20 24 61 20 24 62 6e 5d 20 [list $a $bn]
11d60 5b 6c 69 73 74 20 24 62 6e 20 24 63 5d 20 5b 6c [list $bn $c] [l
11d70 69 73 74 20 24 62 6e 20 24 63 6e 5d 5d 20 7b 0a ist $bn $cn]] {.
11d80 2b 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 + foreach
11d90 20 6f 70 20 7b 26 20 7c 20 5e 7d 20 7b 0a 2b 20 op {& | ^} {.+
11da0 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe
11db0 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 24 nd res [TestOp $
11dc0 6f 70 20 7b 65 78 70 61 6e 64 7d 24 76 61 6c 73 op {expand}$vals
11dd0 5d 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b 20 20 ].+ }.+
11de0 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 65 78 70 }.+ set exp
11df0 20 7b 7d 0a 2b 20 20 20 20 66 6f 72 65 61 63 68 {}.+ foreach
11e00 20 64 20 7b 35 20 37 20 32 20 20 31 20 44 20 43 d {5 7 2 1 D C
11e10 20 20 31 20 46 20 45 20 20 30 20 2d 44 20 2d 44 1 F E 0 -D -D
11e20 20 20 38 20 2d 39 20 2d 31 20 20 2d 30 20 2d 45 8 -9 -1 -0 -E
11e30 20 45 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 69 E} {.+ i
11e40 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 f {[string match
11e50 20 22 2d 2a 22 20 24 64 5d 7d 20 7b 0a 2b 20 20 "-*" $d]} {.+
11e60 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 20 set d
11e70 5b 66 6f 72 6d 61 74 20 25 58 20 5b 65 78 70 72 [format %X [expr
11e80 20 31 35 2d 30 78 5b 73 74 72 69 6e 67 20 72 61 15-0x[string ra
11e90 6e 67 65 20 24 64 20 31 20 65 6e 64 5d 5d 5d 0a nge $d 1 end]]].
11ea0 2b 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 + set
11eb0 20 76 61 6c 20 5b 65 78 70 72 20 2d 30 78 5b 73 val [expr -0x[s
11ec0 74 72 69 6e 67 20 72 65 70 65 61 74 20 24 64 20 tring repeat $d
11ed0 24 64 69 67 5d 2d 31 5d 0a 2b 20 20 20 20 20 20 $dig]-1].+
11ee0 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 20 20 20 20 } else {.+
11ef0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 20 set val
11f00 5b 65 78 70 72 20 30 78 5b 73 74 72 69 6e 67 20 [expr 0x[string
11f10 72 65 70 65 61 74 20 24 64 20 24 64 69 67 5d 5d repeat $d $dig]]
11f20 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b 20 20 20 .+ }.+
11f30 20 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 lappend exp
11f40 20 24 76 61 6c 0a 2b 20 20 20 20 7d 0a 2b 20 20 $val.+ }.+
11f50 20 20 65 78 70 72 20 7b 24 65 78 70 20 65 71 20 expr {$exp eq
11f60 24 72 65 73 20 3f 20 31 20 3a 20 22 28 24 72 65 $res ? 1 : "($re
11f70 73 20 21 3d 20 24 65 78 70 22 7d 0a 2b 7d 20 31 s != $exp"}.+} 1
11f80 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d .+.+test mathop-
11f90 32 32 2e 33 20 7b 20 62 69 74 77 69 73 65 20 6f 22.3 { bitwise o
11fa0 70 73 20 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 ps } {.+ set
11fb0 62 69 67 31 20 20 20 20 20 20 31 32 31 33 35 34 big1 121354
11fc0 33 35 34 33 35 33 35 34 34 33 35 34 33 35 33 34 3543535443543534
11fd0 32 34 32 33 39 34 38 37 36 33 38 36 37 38 37 36 2423948763867876
11fe0 0a 2b 20 20 20 20 73 65 74 20 62 69 67 32 20 20 .+ set big2
11ff0 20 20 20 20 20 32 37 34 36 32 33 37 31 37 34 37 27462371747
12000 38 33 38 33 36 37 34 36 32 36 32 35 36 34 38 39 8383674626256489
12010 32 39 31 38 33 32 37 38 34 37 0a 2b 20 20 20 20 2918327847.+
12020 73 65 74 20 77 69 64 65 31 20 20 20 20 20 20 20 set wide1
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12040 20 20 20 20 20 20 31 32 33 34 35 36 37 38 39 31 1234567891
12050 32 33 34 35 0a 2b 20 20 20 20 73 65 74 20 77 69 2345.+ set wi
12060 64 65 32 20 20 20 20 20 20 20 20 20 20 20 20 20 de2
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12080 38 37 33 32 31 38 34 37 32 33 32 32 31 35 0a 2b 87321847232215.+
12090 20 20 20 20 73 65 74 20 73 6d 61 6c 6c 31 20 20 set small1
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
120c0 20 20 20 38 37 33 34 35 0a 2b 20 20 20 20 73 65 87345.+ se
120d0 74 20 73 6d 61 6c 6c 32 20 20 20 20 20 20 20 20 t small2
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
120f0 20 20 20 20 20 20 20 20 20 20 20 20 20 31 36 37 167
12100 35 33 0a 2b 0a 2b 20 20 20 20 73 65 74 20 72 65 53.+.+ set re
12110 73 20 7b 7d 0a 2b 20 20 20 20 66 6f 72 65 61 63 s {}.+ foreac
12120 68 20 6f 70 20 7b 26 20 7c 20 5e 7d 20 7b 0a 2b h op {& | ^} {.+
12130 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend
12140 72 65 73 20 5b 54 65 73 74 4f 70 20 24 6f 70 20 res [TestOp $op
12150 24 62 69 67 31 20 20 20 24 62 69 67 32 5d 0a 2b $big1 $big2].+
12160 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend
12170 72 65 73 20 5b 54 65 73 74 4f 70 20 24 6f 70 20 res [TestOp $op
12180 24 62 69 67 31 20 20 20 24 77 69 64 65 32 5d 0a $big1 $wide2].
12190 2b 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 + lappend
121a0 20 72 65 73 20 5b 54 65 73 74 4f 70 20 24 6f 70 res [TestOp $op
121b0 20 24 62 69 67 31 20 20 20 24 73 6d 61 6c 6c 32 $big1 $small2
121c0 5d 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 70 65 ].+ lappe
121d0 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 24 nd res [TestOp $
121e0 6f 70 20 24 77 69 64 65 31 20 20 24 62 69 67 32 op $wide1 $big2
121f0 5d 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 70 65 ].+ lappe
12200 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 24 nd res [TestOp $
12210 6f 70 20 24 77 69 64 65 31 20 20 24 77 69 64 65 op $wide1 $wide
12220 32 5d 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 70 2].+ lapp
12230 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 end res [TestOp
12240 24 6f 70 20 24 77 69 64 65 31 20 20 24 73 6d 61 $op $wide1 $sma
12250 6c 6c 32 5d 0a 2b 20 20 20 20 20 20 20 20 6c 61 ll2].+ la
12260 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
12270 70 20 24 6f 70 20 24 73 6d 61 6c 6c 31 20 24 62 p $op $small1 $b
12280 69 67 32 5d 0a 2b 20 20 20 20 20 20 20 20 6c 61 ig2].+ la
12290 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
122a0 70 20 24 6f 70 20 24 73 6d 61 6c 6c 31 20 24 77 p $op $small1 $w
122b0 69 64 65 32 5d 0a 2b 20 20 20 20 20 20 20 20 6c ide2].+ l
122c0 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
122d0 4f 70 20 24 6f 70 20 24 73 6d 61 6c 6c 31 20 24 Op $op $small1 $
122e0 73 6d 61 6c 6c 32 5d 0a 2b 20 20 20 20 7d 0a 2b small2].+ }.+
122f0 20 20 20 20 73 65 74 20 72 65 73 0a 2b 7d 20 5b set res.+} [
12300 6c 69 73 74 20 5c 0a 2b 20 20 20 20 20 20 20 20 list \.+
12310 20 20 20 37 31 32 34 33 39 34 34 39 32 39 34 36 7124394492946
12320 35 33 38 31 35 38 39 30 35 39 38 38 35 36 35 30 5381589059885650
12330 31 37 39 36 20 5c 0a 2b 20 20 20 20 20 20 20 20 1796 \.+
12340 20 20 20 37 38 35 32 31 34 35 30 31 31 31 36 38 7852145011168
12350 34 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 4 \.+
12360 39 36 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 96 \.+
12370 20 32 33 37 31 34 32 32 33 39 30 37 38 35 20 5c 2371422390785 \
12380 0a 2b 20 20 20 20 20 20 20 20 20 20 20 31 32 32 .+ 122
12390 37 35 38 38 31 34 39 37 31 36 39 20 5c 0a 2b 20 75881497169 \.+
123a0 20 20 20 20 20 20 20 20 20 20 31 36 37 32 31 20 16721
123b0 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 33 33 \.+ 33
123c0 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 38 \.+ 8
123d0 37 30 35 37 20 5c 0a 2b 20 20 20 20 20 20 20 20 7057 \.+
123e0 20 20 20 31 36 36 38 39 20 5c 0a 2b 20 20 20 20 16689 \.+
123f0 20 20 20 20 20 20 20 31 34 38 38 30 39 36 30 31 148809601
12400 37 30 36 38 38 39 37 37 35 32 37 37 38 39 30 39 7068897752778909
12410 38 32 34 32 38 32 35 36 39 33 39 32 37 20 5c 0a 8242825693927 \.
12420 2b 20 20 20 20 20 20 20 20 20 20 20 31 32 31 33 + 1213
12430 35 34 33 35 34 33 35 33 35 34 34 33 35 34 33 35 5435435354435435
12440 33 34 32 34 33 32 37 34 39 31 36 30 39 38 38 34 3424327491609884
12450 30 37 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 07 \.+
12460 20 31 32 31 33 35 34 33 35 34 33 35 33 35 34 34 121354354353544
12470 33 35 34 33 35 33 34 32 34 32 33 39 34 38 37 36 3543534242394876
12480 33 38 38 34 35 33 33 20 5c 0a 2b 20 20 20 20 20 3884533 \.+
12490 20 20 20 20 20 20 32 37 34 36 32 33 37 31 37 34 2746237174
124a0 37 38 33 38 33 36 37 34 36 32 36 32 35 37 34 38 7838367462625748
124b0 36 37 31 37 34 38 34 39 34 30 37 20 5c 0a 2b 20 67174849407 \.+
124c0 20 20 20 20 20 20 20 20 20 20 38 37 33 39 31 36 873916
124d0 34 34 36 34 37 33 39 31 20 5c 0a 2b 20 20 20 20 44647391 \.+
124e0 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38 39 123456789
124f0 31 32 33 37 37 20 5c 0a 2b 20 20 20 20 20 20 20 12377 \.+
12500 20 20 20 20 32 37 34 36 32 33 37 31 37 34 37 38 274623717478
12510 33 38 33 36 37 34 36 32 36 32 35 36 34 38 39 32 3836746262564892
12520 39 31 38 34 31 35 31 35 39 20 5c 0a 2b 20 20 20 918415159 \.+
12530 20 20 20 20 20 20 20 20 38 37 33 32 31 38 34 37 87321847
12540 32 33 32 35 30 33 20 5c 0a 2b 20 20 20 20 20 20 232503 \.+
12550 20 20 20 20 20 38 37 34 30 39 20 5c 0a 2b 20 20 87409 \.+
12560 20 20 20 20 20 20 20 20 20 31 34 38 38 30 32 34 1488024
12570 37 37 33 31 32 33 39 36 38 32 38 37 33 39 37 33 7731239682873973
12580 32 30 37 36 34 33 39 36 39 31 39 32 31 33 31 20 207643969192131
12590 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 31 32 \.+ 12
125a0 31 33 35 34 33 35 34 33 35 33 35 34 34 33 35 34 1354354353544354
125b0 33 35 33 34 32 33 35 34 32 32 37 37 31 30 38 37 3534235422771087
125c0 36 37 32 33 20 5c 0a 2b 20 20 20 20 20 20 20 20 6723 \.+
125d0 20 20 20 31 32 31 33 35 34 33 35 34 33 35 33 35 1213543543535
125e0 34 34 33 35 34 33 35 33 34 32 34 32 33 39 34 38 4435435342423948
125f0 37 36 33 38 38 34 34 33 37 20 5c 0a 2b 20 20 20 763884437 \.+
12600 20 20 20 20 20 20 20 20 32 37 34 36 32 33 37 31 27462371
12610 37 34 37 38 33 38 33 36 37 34 36 32 36 32 35 37 7478383674626257
12620 32 34 39 35 37 35 32 34 35 38 36 32 32 20 5c 0a 2495752458622 \.
12630 2b 20 20 20 20 20 20 20 20 20 20 20 37 35 31 31 + 7511
12640 35 37 36 33 31 35 30 32 32 32 20 5c 0a 2b 20 20 5763150222 \.+
12650 20 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 1234567
12660 38 38 39 35 36 35 36 20 5c 0a 2b 20 20 20 20 20 8895656 \.+
12670 20 20 20 20 20 20 32 37 34 36 32 33 37 31 37 34 2746237174
12680 37 38 33 38 33 36 37 34 36 32 36 32 35 36 34 38 7838367462625648
12690 39 32 39 31 38 34 31 35 31 32 36 20 5c 0a 2b 20 92918415126 \.+
126a0 20 20 20 20 20 20 20 20 20 20 38 37 33 32 31 38 873218
126b0 34 37 31 34 35 34 34 36 20 5c 0a 2b 20 20 20 20 47145446 \.+
126c0 20 20 20 20 20 20 20 37 30 37 32 30 20 5c 0a 2b 70720 \.+
126d0 20 20 20 20 20 20 20 20 20 20 5d 0a 2b 0a 2b 74 ].+.+t
126e0 65 73 74 20 6d 61 74 68 6f 70 2d 32 32 2e 34 20 est mathop-22.4
126f0 7b 20 75 6e 61 72 79 20 6f 70 73 2c 20 62 61 64 { unary ops, bad
12700 20 76 61 6c 75 65 73 20 7d 20 7b 0a 2b 20 20 20 values } {.+
12710 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b 20 20 20 set res {}.+
12720 20 73 65 74 20 65 78 70 20 7b 7d 0a 2b 20 20 20 set exp {}.+
12730 20 66 6f 72 65 61 63 68 20 6f 70 20 7b 26 20 7c foreach op {& |
12740 20 5e 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 6c ^} {.+ l
12750 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
12760 4f 70 20 24 6f 70 20 78 20 35 5d 0a 2b 20 20 20 Op $op x 5].+
12770 20 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 lappend exp
12780 20 22 63 61 6e 27 74 20 75 73 65 20 6e 6f 6e 2d "can't use non-
12790 6e 75 6d 65 72 69 63 20 73 74 72 69 6e 67 20 61 numeric string a
127a0 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 5c 22 24 s operand of \"$
127b0 6f 70 5c 22 20 4e 4f 4e 45 22 0a 2b 20 20 20 20 op\" NONE".+
127c0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 lappend res
127d0 5b 54 65 73 74 4f 70 20 24 6f 70 20 35 20 78 5d [TestOp $op 5 x]
127e0 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e .+ lappen
127f0 64 20 65 78 70 20 22 63 61 6e 27 74 20 75 73 65 d exp "can't use
12800 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20 73 74 72 non-numeric str
12810 69 6e 67 20 61 73 20 6f 70 65 72 61 6e 64 20 6f ing as operand o
12820 66 20 5c 22 24 6f 70 5c 22 20 4e 4f 4e 45 22 0a f \"$op\" NONE".
12830 2b 20 20 20 20 7d 0a 2b 20 20 20 20 65 78 70 72 + }.+ expr
12840 20 7b 24 72 65 73 20 65 71 20 24 65 78 70 20 3f {$res eq $exp ?
12850 20 30 20 3a 20 24 72 65 73 7d 0a 2b 7d 20 30 0a 0 : $res}.+} 0.
12860 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 +.+test mathop-2
12870 33 2e 31 20 7b 20 63 6f 6d 70 61 72 69 73 6f 6e 3.1 { comparison
12880 20 6f 70 73 2c 20 6e 75 6d 65 72 69 63 61 6c 20 ops, numerical
12890 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 72 65 73 } {.+ set res
128a0 20 7b 7d 0a 2b 20 20 20 20 73 65 74 20 74 6f 64 {}.+ set tod
128b0 6f 20 7b 35 20 7b 31 20 36 7d 20 7b 31 20 32 20 o {5 {1 6} {1 2
128c0 32 20 33 7d 20 7b 34 20 33 20 32 20 31 7d 20 7b 2 3} {4 3 2 1} {
128d0 35 2e 30 20 35 2e 30 7d 20 7b 36 20 33 20 33 20 5.0 5.0} {6 3 3
128e0 31 7d 20 7b 35 2e 30 20 35 7d 7d 0a 2b 20 20 20 1} {5.0 5}}.+
128f0 20 6c 61 70 70 65 6e 64 20 74 6f 64 6f 20 5b 6c lappend todo [l
12900 69 73 74 20 32 33 34 32 34 37 36 32 33 34 37 36 ist 234247623476
12910 32 34 38 32 37 33 34 36 32 33 38 34 32 33 34 32 2482734623842342
12920 20 32 33 34 38 32 37 34 36 33 38 37 36 34 37 33 234827463876473
12930 20 33 34 33 34 5d 0a 2b 20 20 20 20 6c 61 70 70 3434].+ lapp
12940 65 6e 64 20 74 6f 64 6f 20 5b 6c 69 73 74 20 32 end todo [list 2
12950 36 35 33 20 34 35 33 37 33 35 39 31 30 32 36 34 653 453735910264
12960 35 33 36 20 34 35 33 37 33 35 39 31 30 32 36 34 536 453735910264
12970 35 33 37 20 32 33 38 34 37 36 32 34 37 32 36 33 537 238476247263
12980 34 39 38 32 37 34 36 32 33 39 38 34 37 36 33 37 4982746239847637
12990 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 74 ].+ lappend t
129a0 6f 64 6f 20 5b 6c 69 73 74 20 32 36 35 33 20 32 odo [list 2653 2
129b0 33 38 34 37 36 32 34 37 32 36 33 34 39 38 32 37 3847624726349827
129c0 34 36 32 33 39 38 34 37 36 33 37 5d 0a 2b 20 20 46239847637].+
129d0 20 20 6c 61 70 70 65 6e 64 20 74 6f 64 6f 20 5b lappend todo [
129e0 6c 69 73 74 20 32 36 35 33 20 2d 32 33 38 34 37 list 2653 -23847
129f0 36 32 34 37 32 36 33 34 39 38 32 37 34 36 32 33 6247263498274623
12a00 39 38 34 37 36 33 37 5d 0a 2b 20 20 20 20 6c 61 9847637].+ la
12a10 70 70 65 6e 64 20 74 6f 64 6f 20 5b 6c 69 73 74 ppend todo [list
12a20 20 33 37 38 39 32 35 33 36 37 38 32 31 32 36 35 378925367821265
12a30 33 20 2d 32 33 38 34 37 36 32 34 37 32 36 33 34 3 -2384762472634
12a40 39 38 32 37 34 36 32 33 39 38 34 37 36 33 37 5d 982746239847637]
12a50 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 74 6f .+ lappend to
12a60 64 6f 20 5b 6c 69 73 74 20 35 2e 30 20 36 20 37 do [list 5.0 6 7
12a70 2e 30 20 38 20 31 65 31 33 20 31 39 34 35 36 32 .0 8 1e13 194562
12a80 38 35 36 37 33 35 32 36 35 34 20 31 2e 31 65 32 8567352654 1.1e2
12a90 30 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 0 \.+
12aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 36 6
12ab0 37 33 34 32 35 33 36 34 37 35 38 39 31 32 33 34 7342536475891234
12ac0 35 36 37 38 34 35 36 34 33 37 38 20 32 2e 33 65 56784564378 2.3e
12ad0 35 30 5d 0a 2b 20 20 20 20 73 65 74 20 61 20 37 50].+ set a 7
12ae0 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 74 6f .+ lappend to
12af0 64 6f 20 5b 6c 69 73 74 20 24 61 20 24 61 5d 20 do [list $a $a]
12b00 3b 23 20 53 61 6d 65 20 6f 62 6a 65 63 74 0a 2b ;# Same object.+
12b10 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 6c 73 foreach vals
12b20 20 24 74 6f 64 6f 20 7b 0a 2b 20 20 20 20 20 20 $todo {.+
12b30 20 20 66 6f 72 65 61 63 68 20 6f 70 20 7b 3c 20 foreach op {<
12b40 3c 3d 20 3e 20 3e 3d 20 3d 3d 20 65 71 7d 20 7b <= > >= == eq} {
12b50 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 .+ la
12b60 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
12b70 70 20 24 6f 70 20 7b 65 78 70 61 6e 64 7d 24 76 p $op {expand}$v
12b80 61 6c 73 5d 0a 2b 20 20 20 20 20 20 20 20 7d 0a als].+ }.
12b90 2b 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 + }.+ set
12ba0 72 65 73 0a 2b 7d 20 5b 6c 69 73 74 20 31 20 31 res.+} [list 1 1
12bb0 20 31 20 31 20 31 20 31 20 5c 0a 2b 20 20 20 20 1 1 1 1 \.+
12bc0 20 20 20 20 31 20 31 20 30 20 30 20 30 20 30 20 1 1 0 0 0 0
12bd0 5c 0a 2b 20 20 20 20 20 20 20 20 30 20 31 20 30 \.+ 0 1 0
12be0 20 30 20 30 20 30 20 5c 0a 2b 20 20 20 20 20 20 0 0 0 \.+
12bf0 20 20 30 20 30 20 31 20 31 20 30 20 30 20 5c 0a 0 0 1 1 0 0 \.
12c00 2b 20 20 20 20 20 20 20 20 30 20 31 20 30 20 31 + 0 1 0 1
12c10 20 31 20 31 20 5c 0a 2b 20 20 20 20 20 20 20 20 1 1 \.+
12c20 30 20 30 20 30 20 31 20 30 20 30 20 5c 0a 2b 20 0 0 0 1 0 0 \.+
12c30 20 20 20 20 20 20 20 30 20 31 20 30 20 31 20 31 0 1 0 1 1
12c40 20 30 20 5c 0a 2b 20 20 20 20 20 20 20 20 30 20 0 \.+ 0
12c50 30 20 31 20 31 20 30 20 30 20 5c 0a 2b 20 20 20 0 1 1 0 0 \.+
12c60 20 20 20 20 20 31 20 31 20 30 20 30 20 30 20 30 1 1 0 0 0 0
12c70 20 5c 0a 2b 20 20 20 20 20 20 20 20 31 20 31 20 \.+ 1 1
12c80 30 20 30 20 30 20 30 20 5c 0a 2b 20 20 20 20 20 0 0 0 0 \.+
12c90 20 20 20 30 20 30 20 31 20 31 20 30 20 30 20 5c 0 0 1 1 0 0 \
12ca0 0a 2b 20 20 20 20 20 20 20 20 30 20 30 20 31 20 .+ 0 0 1
12cb0 31 20 30 20 30 20 5c 0a 2b 20 20 20 20 20 20 20 1 0 0 \.+
12cc0 20 31 20 31 20 30 20 30 20 30 20 30 20 5c 0a 2b 1 1 0 0 0 0 \.+
12cd0 20 20 20 20 20 20 20 20 30 20 31 20 30 20 31 20 0 1 0 1
12ce0 31 20 31 20 5c 0a 2b 20 20 20 20 20 20 20 5d 0a 1 1 \.+ ].
12cf0 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 +.+test mathop-2
12d00 33 2e 32 20 7b 20 63 6f 6d 70 61 72 69 73 6f 6e 3.2 { comparison
12d10 20 6f 70 73 2c 20 73 74 72 69 6e 67 20 7d 20 7b ops, string } {
12d20 0a 2b 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d .+ set res {}
12d30 0a 2b 20 20 20 20 73 65 74 20 74 6f 64 6f 20 7b .+ set todo {
12d40 61 20 7b 61 20 62 7d 20 7b 35 20 62 20 62 20 63 a {a b} {5 b b c
12d50 7d 20 7b 64 20 63 20 62 20 61 7d 20 7b 78 79 20 } {d c b a} {xy
12d60 78 79 7d 20 7b 67 79 20 65 66 20 65 66 20 61 62 xy} {gy ef ef ab
12d70 7d 7d 0a 2b 20 20 20 20 73 65 74 20 61 20 78 0a }}.+ set a x.
12d80 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 74 6f 64 + lappend tod
12d90 6f 20 5b 6c 69 73 74 20 24 61 20 24 61 5d 0a 2b o [list $a $a].+
12da0 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 6c 73 foreach vals
12db0 20 24 74 6f 64 6f 20 7b 0a 2b 20 20 20 20 20 20 $todo {.+
12dc0 20 20 66 6f 72 65 61 63 68 20 6f 70 20 7b 3c 20 foreach op {<
12dd0 3c 3d 20 3e 20 3e 3d 20 3d 3d 20 65 71 7d 20 7b <= > >= == eq} {
12de0 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 .+ la
12df0 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
12e00 70 20 24 6f 70 20 7b 65 78 70 61 6e 64 7d 24 76 p $op {expand}$v
12e10 61 6c 73 5d 0a 2b 20 20 20 20 20 20 20 20 7d 0a als].+ }.
12e20 2b 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 20 + }.+ set
12e30 72 65 73 0a 2b 7d 20 5b 6c 69 73 74 20 31 20 31 res.+} [list 1 1
12e40 20 31 20 31 20 31 20 31 20 5c 0a 2b 20 20 20 20 1 1 1 1 \.+
12e50 20 20 20 20 31 20 31 20 30 20 30 20 30 20 30 20 1 1 0 0 0 0
12e60 5c 0a 2b 20 20 20 20 20 20 20 20 30 20 31 20 30 \.+ 0 1 0
12e70 20 30 20 30 20 30 20 5c 0a 2b 20 20 20 20 20 20 0 0 0 \.+
12e80 20 20 30 20 30 20 31 20 31 20 30 20 30 20 5c 0a 0 0 1 1 0 0 \.
12e90 2b 20 20 20 20 20 20 20 20 30 20 31 20 30 20 31 + 0 1 0 1
12ea0 20 31 20 31 20 5c 0a 2b 20 20 20 20 20 20 20 20 1 1 \.+
12eb0 30 20 30 20 30 20 31 20 30 20 30 20 5c 0a 2b 20 0 0 0 1 0 0 \.+
12ec0 20 20 20 20 20 20 20 30 20 31 20 30 20 31 20 31 0 1 0 1 1
12ed0 20 31 20 5c 0a 2b 20 20 20 20 20 20 20 5d 0a 2b 1 \.+ ].+
12ee0 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 33 .+test mathop-23
12ef0 2e 33 20 7b 20 63 6f 6d 70 61 72 69 73 6f 6e 20 .3 { comparison
12f00 6f 70 73 2c 20 6e 6f 6e 65 71 75 61 6c 7d 20 7b ops, nonequal} {
12f10 0a 2b 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d .+ set res {}
12f20 0a 2b 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 .+ foreach va
12f30 6c 73 20 7b 7b 61 20 62 7d 20 7b 31 37 2e 30 20 ls {{a b} {17.0
12f40 30 78 31 31 7d 20 7b 66 6f 6f 20 66 6f 6f 7d 20 0x11} {foo foo}
12f50 7b 31 30 20 31 30 7d 7d 20 7b 0a 2b 20 20 20 20 {10 10}} {.+
12f60 20 20 20 20 66 6f 72 65 61 63 68 20 6f 70 20 7b foreach op {
12f70 21 3d 20 6e 65 7d 20 7b 0a 2b 20 20 20 20 20 20 != ne} {.+
12f80 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 lappend re
12f90 73 20 5b 54 65 73 74 4f 70 20 24 6f 70 20 7b 65 s [TestOp $op {e
12fa0 78 70 61 6e 64 7d 24 76 61 6c 73 5d 0a 2b 20 20 xpand}$vals].+
12fb0 20 20 20 20 20 20 7d 0a 2b 20 20 20 20 7d 0a 2b }.+ }.+
12fc0 20 20 20 20 73 65 74 20 72 65 73 0a 2b 7d 20 5b set res.+} [
12fd0 6c 69 73 74 20 31 20 31 20 20 30 20 31 20 20 30 list 1 1 0 1 0
12fe0 20 30 20 20 30 20 30 20 5d 0a 2b 0a 2b 74 65 73 0 0 0 ].+.+tes
12ff0 74 20 6d 61 74 68 6f 70 2d 32 34 2e 31 20 7b 20 t mathop-24.1 {
13000 62 69 6e 61 72 79 20 6f 70 73 20 7d 20 7b 0a 2b binary ops } {.+
13010 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b set res {}.+
13020 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 6c 73 foreach vals
13030 20 7b 7b 33 20 35 7d 20 7b 31 37 20 37 7d 20 7b {{3 5} {17 7} {
13040 31 39 39 20 35 7d 20 7b 32 39 33 32 33 34 36 37 199 5} {29323467
13050 35 37 36 33 34 33 34 32 33 38 34 37 36 32 33 39 5763434238476239
13060 34 38 36 20 31 37 7d 20 5c 0a 2b 20 20 20 20 20 486 17} \.+
13070 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 35 20 {5
13080 31 7d 20 7b 30 20 37 7d 7d 20 7b 0a 2b 20 20 20 1} {0 7}} {.+
13090 20 20 20 20 20 66 6f 72 65 61 63 68 20 6f 70 20 foreach op
130a0 7b 25 20 3c 3c 20 3e 3e 20 69 6e 20 6e 69 7d 20 {% << >> in ni}
130b0 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 6c {.+ l
130c0 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
130d0 4f 70 20 24 6f 70 20 7b 65 78 70 61 6e 64 7d 24 Op $op {expand}$
130e0 76 61 6c 73 5d 0a 2b 20 20 20 20 20 20 20 20 7d vals].+ }
130f0 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 73 65 74 .+ }.+ set
13100 20 72 65 73 0a 2b 7d 20 5b 6c 69 73 74 20 33 20 res.+} [list 3
13110 39 36 20 30 20 30 20 31 20 20 33 20 32 31 37 36 96 0 0 1 3 2176
13120 20 30 20 30 20 31 20 20 34 20 36 33 36 38 20 36 0 0 1 4 6368 6
13130 20 30 20 31 20 5c 0a 2b 20 20 20 20 20 20 20 20 0 1 \.+
13140 31 34 20 33 38 34 33 34 38 35 35 34 32 31 36 36 14 3843485542166
13150 34 38 35 32 35 30 35 35 35 37 36 36 31 39 30 38 4852505557661908
13160 39 39 32 20 32 32 33 37 32 30 33 30 33 31 36 34 992 223720303164
13170 32 34 31 32 30 39 37 37 34 39 20 30 20 31 20 5c 2412097749 0 1 \
13180 0a 2b 20 20 20 20 20 20 20 20 30 20 31 30 20 32 .+ 0 10 2
13190 20 30 20 31 20 20 30 20 30 20 30 20 30 20 31 5d 0 1 0 0 0 0 1]
131a0 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d .+.+test mathop-
131b0 32 34 2e 32 20 7b 20 62 69 6e 61 72 79 20 6f 70 24.2 { binary op
131c0 73 2c 20 6d 6f 64 75 6c 6f 20 7d 20 7b 0a 2b 20 s, modulo } {.+
131d0 20 20 20 23 20 54 65 73 74 20 64 69 66 66 65 72 # Test differ
131e0 65 6e 74 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73 ent combinations
131f0 20 74 6f 20 67 65 74 20 61 6c 6c 20 63 6f 64 65 to get all code
13200 20 70 61 74 68 73 0a 2b 20 20 20 20 73 65 74 20 paths.+ set
13210 72 65 73 20 7b 7d 0a 2b 0a 2b 20 20 20 20 73 65 res {}.+.+ se
13220 74 20 62 69 67 62 69 67 20 31 34 33 37 32 34 32 t bigbig 1437242
13230 33 36 37 34 35 36 34 35 33 35 32 33 34 35 34 33 3674564535234543
13240 35 34 35 32 34 38 39 37 32 36 33 34 39 32 33 38 5452489726349238
13250 36 39 0a 2b 20 20 20 20 73 65 74 20 62 69 67 20 69.+ set big
13260 20 20 20 20 20 20 31 32 31 33 35 34 33 35 34 33 1213543543
13270 35 33 35 34 34 33 35 34 33 35 33 34 32 34 32 33 5354435435342423
13280 39 34 38 37 36 33 38 36 37 38 37 36 0a 2b 20 20 948763867876.+
13290 20 20 73 65 74 20 77 69 64 65 20 20 20 20 20 20 set wide
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
132b0 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38 12345678
132c0 39 31 32 33 34 35 0a 2b 20 20 20 20 73 65 74 20 912345.+ set
132d0 6e 65 67 77 69 64 65 20 20 20 20 20 20 20 20 20 negwide
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
132f0 20 2d 31 32 33 34 35 36 37 38 39 31 32 33 34 35 -12345678912345
13300 0a 2b 20 20 20 20 73 65 74 20 73 6d 61 6c 6c 20 .+ set small
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13330 20 20 20 20 20 20 20 20 20 35 0a 2b 20 20 20 20 5.+
13340 73 65 74 20 6e 65 67 20 20 20 20 20 20 20 20 20 set neg
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13370 20 20 2d 35 0a 2b 0a 2b 20 20 20 20 6c 61 70 70 -5.+.+ lapp
13380 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 end res [TestOp
13390 25 20 24 62 69 67 62 69 67 20 20 24 62 69 67 5d % $bigbig $big]
133a0 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .+ lappend re
133b0 73 20 5b 54 65 73 74 4f 70 20 25 20 24 77 69 64 s [TestOp % $wid
133c0 65 20 20 20 20 24 62 69 67 5d 0a 2b 20 20 20 20 e $big].+
133d0 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 lappend res [Tes
133e0 74 4f 70 20 25 20 24 6e 65 67 77 69 64 65 20 24 tOp % $negwide $
133f0 62 69 67 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e big].+ lappen
13400 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 25 20 d res [TestOp %
13410 24 73 6d 61 6c 6c 20 20 20 24 62 69 67 5d 0a 2b $small $big].+
13420 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 lappend res
13430 5b 54 65 73 74 4f 70 20 25 20 24 6e 65 67 20 20 [TestOp % $neg
13440 20 20 20 24 62 69 67 5d 0a 2b 20 20 20 20 6c 61 $big].+ la
13450 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
13460 70 20 25 20 24 73 6d 61 6c 6c 20 20 24 77 69 64 p % $small $wid
13470 65 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 e].+ lappend
13480 72 65 73 20 5b 54 65 73 74 4f 70 20 25 20 24 6e res [TestOp % $n
13490 65 67 20 20 20 20 24 77 69 64 65 5d 0a 2b 20 20 eg $wide].+
134a0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 lappend res [T
134b0 65 73 74 4f 70 20 25 20 24 77 69 64 65 20 20 24 estOp % $wide $
134c0 73 6d 61 6c 6c 5d 0a 2b 20 20 20 20 73 65 74 20 small].+ set
134d0 72 65 73 0a 2b 7d 20 5b 6c 69 73 74 20 20 20 34 res.+} [list 4
134e0 30 36 38 31 31 39 31 30 34 38 38 33 36 37 39 30 0681191048836790
134f0 39 38 31 31 35 32 39 33 36 33 36 32 31 35 33 35 9811529363621535
13500 38 36 38 35 20 5c 0a 2b 20 20 20 20 20 20 20 20 8685 \.+
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13520 20 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 1234567
13530 38 39 31 32 33 34 35 20 5c 0a 2b 20 20 20 20 20 8912345 \.+
13540 20 20 20 20 31 32 31 33 35 34 33 35 34 33 35 33 121354354353
13550 35 34 34 33 35 34 33 35 33 34 32 34 31 31 36 30 5443543534241160
13560 33 30 38 34 39 35 35 35 33 31 20 5c 0a 2b 20 20 3084955531 \.+
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13590 20 20 20 20 20 20 20 20 20 20 20 20 35 20 5c 0a 5 \.
135a0 2b 20 20 20 20 20 20 20 20 20 31 32 31 33 35 34 + 121354
135b0 33 35 34 33 35 33 35 34 34 33 35 34 33 35 33 34 3543535443543534
135c0 32 34 32 33 39 34 38 37 36 33 38 36 37 38 37 31 2423948763867871
135d0 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 \.+
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13600 20 20 35 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 5 \.+
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13620 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38 12345678
13630 39 31 32 33 34 30 20 5c 0a 2b 20 20 20 20 20 20 912340 \.+
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13660 20 20 20 20 20 20 20 20 30 20 5c 0a 2b 20 20 20 0 \.+
13670 20 20 20 20 20 20 20 5d 0a 2b 0a 2b 74 65 73 74 ].+.+test
13680 20 6d 61 74 68 6f 70 2d 32 34 2e 33 20 7b 20 62 mathop-24.3 { b
13690 69 6e 61 72 79 20 6f 70 73 2c 20 62 61 64 20 76 inary ops, bad v
136a0 61 6c 75 65 73 20 7d 20 7b 0a 2b 20 20 20 20 73 alues } {.+ s
136b0 65 74 20 72 65 73 20 7b 7d 0a 2b 20 20 20 20 73 et res {}.+ s
136c0 65 74 20 65 78 70 20 7b 7d 0a 2b 20 20 20 20 66 et exp {}.+ f
136d0 6f 72 65 61 63 68 20 6f 70 20 7b 25 20 3c 3c 20 oreach op {% <<
136e0 3e 3e 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 6c >>} {.+ l
136f0 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
13700 4f 70 20 24 6f 70 20 78 20 31 5d 0a 2b 20 20 20 Op $op x 1].+
13710 20 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 lappend exp
13720 20 22 63 61 6e 27 74 20 75 73 65 20 6e 6f 6e 2d "can't use non-
13730 6e 75 6d 65 72 69 63 20 73 74 72 69 6e 67 20 61 numeric string a
13740 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 5c 22 24 s operand of \"$
13750 6f 70 5c 22 20 4e 4f 4e 45 22 0a 2b 20 20 20 20 op\" NONE".+
13760 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 lappend res
13770 5b 54 65 73 74 4f 70 20 24 6f 70 20 31 20 78 5d [TestOp $op 1 x]
13780 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e .+ lappen
13790 64 20 65 78 70 20 22 63 61 6e 27 74 20 75 73 65 d exp "can't use
137a0 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20 73 74 72 non-numeric str
137b0 69 6e 67 20 61 73 20 6f 70 65 72 61 6e 64 20 6f ing as operand o
137c0 66 20 5c 22 24 6f 70 5c 22 20 4e 4f 4e 45 22 0a f \"$op\" NONE".
137d0 2b 20 20 20 20 7d 0a 2b 20 20 20 20 66 6f 72 65 + }.+ fore
137e0 61 63 68 20 6f 70 20 7b 25 20 3c 3c 20 3e 3e 7d ach op {% << >>}
137f0 20 7b 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 70 {.+ lapp
13800 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 end res [TestOp
13810 24 6f 70 20 35 2e 30 20 31 5d 0a 2b 20 20 20 20 $op 5.0 1].+
13820 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 20 lappend exp
13830 22 63 61 6e 27 74 20 75 73 65 20 66 6c 6f 61 74 "can't use float
13840 69 6e 67 2d 70 6f 69 6e 74 20 76 61 6c 75 65 20 ing-point value
13850 61 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 5c 22 as operand of \"
13860 24 6f 70 5c 22 20 4e 4f 4e 45 22 0a 2b 20 20 20 $op\" NONE".+
13870 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 lappend res
13880 20 5b 54 65 73 74 4f 70 20 24 6f 70 20 31 20 35 [TestOp $op 1 5
13890 2e 30 5d 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 .0].+ lap
138a0 70 65 6e 64 20 65 78 70 20 22 63 61 6e 27 74 20 pend exp "can't
138b0 75 73 65 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69 use floating-poi
138c0 6e 74 20 76 61 6c 75 65 20 61 73 20 6f 70 65 72 nt value as oper
138d0 61 6e 64 20 6f 66 20 5c 22 24 6f 70 5c 22 20 4e and of \"$op\" N
138e0 4f 4e 45 22 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 ONE".+ }.+
138f0 20 66 6f 72 65 61 63 68 20 6f 70 20 7b 69 6e 20 foreach op {in
13900 6e 69 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 6c ni} {.+ l
13910 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
13920 4f 70 20 24 6f 70 20 35 20 22 61 20 62 20 5c 7b Op $op 5 "a b \{
13930 20 63 22 5d 0a 2b 20 20 20 20 20 20 20 20 6c 61 c"].+ la
13940 70 70 65 6e 64 20 65 78 70 20 22 75 6e 6d 61 74 ppend exp "unmat
13950 63 68 65 64 20 6f 70 65 6e 20 62 72 61 63 65 20 ched open brace
13960 69 6e 20 6c 69 73 74 20 4e 4f 4e 45 22 0a 2b 20 in list NONE".+
13970 20 20 20 7d 0a 2b 20 20 20 20 6c 61 70 70 65 6e }.+ lappen
13980 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 25 20 d res [TestOp %
13990 35 20 30 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 5 0].+ lappen
139a0 64 20 65 78 70 20 22 64 69 76 69 64 65 20 62 79 d exp "divide by
139b0 20 7a 65 72 6f 20 41 52 49 54 48 20 44 49 56 5a zero ARITH DIVZ
139c0 45 52 4f 20 7b 64 69 76 69 64 65 20 62 79 20 7a ERO {divide by z
139d0 65 72 6f 7d 22 0a 2b 20 20 20 20 6c 61 70 70 65 ero}".+ lappe
139e0 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 25 nd res [TestOp %
139f0 20 39 38 33 38 39 32 33 34 36 38 32 39 37 33 34 983892346829734
13a00 36 32 33 38 34 37 38 37 33 37 36 34 37 36 33 37 6238478737647637
13a10 33 37 35 20 30 5d 0a 2b 20 20 20 20 6c 61 70 70 375 0].+ lapp
13a20 65 6e 64 20 65 78 70 20 22 64 69 76 69 64 65 20 end exp "divide
13a30 62 79 20 7a 65 72 6f 20 41 52 49 54 48 20 44 49 by zero ARITH DI
13a40 56 5a 45 52 4f 20 7b 64 69 76 69 64 65 20 62 79 VZERO {divide by
13a50 20 7a 65 72 6f 7d 22 0a 2b 20 20 20 20 6c 61 70 zero}".+ lap
13a60 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 pend res [TestOp
13a70 20 2f 20 35 20 30 5d 0a 2b 20 20 20 20 6c 61 70 / 5 0].+ lap
13a80 70 65 6e 64 20 65 78 70 20 22 64 69 76 69 64 65 pend exp "divide
13a90 20 62 79 20 7a 65 72 6f 20 41 52 49 54 48 20 44 by zero ARITH D
13aa0 49 56 5a 45 52 4f 20 7b 64 69 76 69 64 65 20 62 IVZERO {divide b
13ab0 79 20 7a 65 72 6f 7d 22 0a 2b 20 20 20 20 6c 61 y zero}".+ la
13ac0 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
13ad0 70 20 2f 20 39 38 33 38 39 32 33 34 36 38 32 39 p / 983892346829
13ae0 37 33 34 36 32 33 38 34 37 38 37 33 37 36 34 37 7346238478737647
13af0 36 33 37 33 37 35 20 30 5d 0a 2b 20 20 20 20 6c 637375 0].+ l
13b00 61 70 70 65 6e 64 20 65 78 70 20 22 64 69 76 69 append exp "divi
13b10 64 65 20 62 79 20 7a 65 72 6f 20 41 52 49 54 48 de by zero ARITH
13b20 20 44 49 56 5a 45 52 4f 20 7b 64 69 76 69 64 65 DIVZERO {divide
13b30 20 62 79 20 7a 65 72 6f 7d 22 0a 2b 20 20 20 20 by zero}".+
13b40 65 78 70 72 20 7b 24 72 65 73 20 65 71 20 24 65 expr {$res eq $e
13b50 78 70 20 3f 20 30 20 3a 20 24 72 65 73 7d 0a 2b xp ? 0 : $res}.+
13b60 7d 20 30 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 68 } 0.+.+test math
13b70 6f 70 2d 32 34 2e 34 20 7b 20 62 69 6e 61 72 79 op-24.4 { binary
13b80 20 6f 70 73 2c 20 6e 65 67 61 74 69 76 65 20 73 ops, negative s
13b90 68 69 66 74 20 7d 20 7b 0a 2b 20 20 20 20 73 65 hift } {.+ se
13ba0 74 20 72 65 73 20 7b 7d 0a 2b 0a 2b 20 20 20 20 t res {}.+.+
13bb0 73 65 74 20 62 69 67 20 20 20 20 20 20 2d 31 32 set big -12
13bc0 31 33 35 34 33 35 34 33 35 33 35 34 34 33 35 34 1354354353544354
13bd0 33 35 33 34 32 34 32 33 39 34 38 37 36 33 38 36 3534242394876386
13be0 37 38 37 36 0a 2b 20 20 20 20 73 65 74 20 77 69 7876.+ set wi
13bf0 64 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 de
13c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d -
13c10 31 32 33 34 35 36 37 38 39 31 32 33 34 35 0a 2b 12345678912345.+
13c20 20 20 20 20 73 65 74 20 73 6d 61 6c 6c 20 20 20 set small
13c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13c50 20 20 20 20 20 20 2d 31 0a 2b 0a 2b 20 20 20 20 -1.+.+
13c60 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 lappend res [Tes
13c70 74 4f 70 20 3c 3c 20 31 30 20 24 62 69 67 5d 0a tOp << 10 $big].
13c80 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 + lappend res
13c90 20 5b 54 65 73 74 4f 70 20 3c 3c 20 31 30 20 24 [TestOp << 10 $
13ca0 77 69 64 65 5d 0a 2b 20 20 20 20 6c 61 70 70 65 wide].+ lappe
13cb0 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 3c nd res [TestOp <
13cc0 3c 20 31 30 20 24 73 6d 61 6c 6c 5d 0a 2b 20 20 < 10 $small].+
13cd0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 lappend res [T
13ce0 65 73 74 4f 70 20 3e 3e 20 31 30 20 24 62 69 67 estOp >> 10 $big
13cf0 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 ].+ lappend r
13d00 65 73 20 5b 54 65 73 74 4f 70 20 3e 3e 20 31 30 es [TestOp >> 10
13d10 20 24 77 69 64 65 5d 0a 2b 20 20 20 20 6c 61 70 $wide].+ lap
13d20 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 pend res [TestOp
13d30 20 3e 3e 20 31 30 20 24 73 6d 61 6c 6c 5d 0a 2b >> 10 $small].+
13d40 0a 2b 20 20 20 20 73 65 74 20 65 78 70 20 5b 6c .+ set exp [l
13d50 72 65 70 65 61 74 20 36 20 22 6e 65 67 61 74 69 repeat 6 "negati
13d60 76 65 20 73 68 69 66 74 20 61 72 67 75 6d 65 6e ve shift argumen
13d70 74 20 4e 4f 4e 45 22 5d 0a 2b 20 20 20 20 65 78 t NONE"].+ ex
13d80 70 72 20 7b 24 72 65 73 20 65 71 20 24 65 78 70 pr {$res eq $exp
13d90 20 3f 20 30 20 3a 20 24 72 65 73 7d 0a 2b 7d 20 ? 0 : $res}.+}
13da0 30 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 0.+.+test mathop
13db0 2d 32 34 2e 35 20 7b 20 62 69 6e 61 72 79 20 6f -24.5 { binary o
13dc0 70 73 2c 20 6c 61 72 67 65 20 73 68 69 66 74 20 ps, large shift
13dd0 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 72 65 73 } {.+ set res
13de0 20 7b 7d 0a 2b 20 20 20 20 73 65 74 20 65 78 70 {}.+ set exp
13df0 20 7b 7d 0a 2b 0a 2b 20 20 20 20 73 65 74 20 62 {}.+.+ set b
13e00 69 67 20 20 20 20 20 20 31 32 31 33 35 34 33 35 ig 12135435
13e10 34 33 35 33 35 34 34 33 35 34 33 35 33 34 32 34 4353544354353424
13e20 32 33 39 34 38 37 36 33 38 36 37 38 37 36 0a 2b 23948763867876.+
13e30 20 20 20 20 73 65 74 20 77 69 64 65 20 20 20 20 set wide
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e50 20 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 1234567
13e60 38 39 31 32 33 34 35 0a 2b 20 20 20 20 73 65 74 8912345.+ set
13e70 20 73 6d 61 6c 6c 20 20 20 20 20 20 20 20 20 20 small
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 1
13ea0 0a 2b 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 .+.+ lappend
13eb0 72 65 73 20 5b 54 65 73 74 4f 70 20 3c 3c 20 31 res [TestOp << 1
13ec0 20 32 31 34 37 34 38 33 36 34 38 5d 0a 2b 20 20 2147483648].+
13ed0 20 20 6c 61 70 70 65 6e 64 20 65 78 70 20 22 69 lappend exp "i
13ee0 6e 74 65 67 65 72 20 76 61 6c 75 65 20 74 6f 6f nteger value too
13ef0 20 6c 61 72 67 65 20 74 6f 20 72 65 70 72 65 73 large to repres
13f00 65 6e 74 20 4e 4f 4e 45 22 0a 2b 20 20 20 20 6c ent NONE".+ l
13f10 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
13f20 4f 70 20 3c 3c 20 31 20 34 32 39 34 39 36 37 32 Op << 1 42949672
13f30 39 36 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 96].+ lappend
13f40 20 65 78 70 20 22 69 6e 74 65 67 65 72 20 76 61 exp "integer va
13f50 6c 75 65 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f lue too large to
13f60 20 72 65 70 72 65 73 65 6e 74 20 4e 4f 4e 45 22 represent NONE"
13f70 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .+ lappend re
13f80 73 20 5b 54 65 73 74 4f 70 20 3c 3c 20 24 73 6d s [TestOp << $sm
13f90 61 6c 6c 20 24 77 69 64 65 5d 0a 2b 20 20 20 20 all $wide].+
13fa0 6c 61 70 70 65 6e 64 20 65 78 70 20 22 69 6e 74 lappend exp "int
13fb0 65 67 65 72 20 76 61 6c 75 65 20 74 6f 6f 20 6c eger value too l
13fc0 61 72 67 65 20 74 6f 20 72 65 70 72 65 73 65 6e arge to represen
13fd0 74 20 4e 4f 4e 45 22 0a 2b 20 20 20 20 6c 61 70 t NONE".+ lap
13fe0 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 pend res [TestOp
13ff0 20 3c 3c 20 24 73 6d 61 6c 6c 20 24 62 69 67 5d << $small $big]
14000 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 .+ lappend ex
14010 70 20 22 69 6e 74 65 67 65 72 20 76 61 6c 75 65 p "integer value
14020 20 74 6f 6f 20 6c 61 72 67 65 20 74 6f 20 72 65 too large to re
14030 70 72 65 73 65 6e 74 20 4e 4f 4e 45 22 0a 2b 20 present NONE".+
14040 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b lappend res [
14050 54 65 73 74 4f 70 20 3e 3e 20 24 62 69 67 20 24 TestOp >> $big $
14060 77 69 64 65 5d 0a 2b 20 20 20 20 6c 61 70 70 65 wide].+ lappe
14070 6e 64 20 65 78 70 20 30 0a 2b 20 20 20 20 6c 61 nd exp 0.+ la
14080 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
14090 70 20 3e 3e 20 24 62 69 67 20 24 62 69 67 5d 0a p >> $big $big].
140a0 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 + lappend exp
140b0 20 30 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 0.+ lappend
140c0 72 65 73 20 5b 54 65 73 74 4f 70 20 3e 3e 20 24 res [TestOp >> $
140d0 73 6d 61 6c 6c 20 37 30 5d 0a 2b 20 20 20 20 6c small 70].+ l
140e0 61 70 70 65 6e 64 20 65 78 70 20 30 0a 2b 20 20 append exp 0.+
140f0 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 lappend res [T
14100 65 73 74 4f 70 20 3e 3e 20 24 77 69 64 65 20 37 estOp >> $wide 7
14110 30 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 0].+ lappend
14120 65 78 70 20 30 0a 2b 20 20 20 20 6c 61 70 70 65 exp 0.+ lappe
14130 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 3e nd res [TestOp >
14140 3e 20 2d 24 62 69 67 20 24 77 69 64 65 5d 0a 2b > -$big $wide].+
14150 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 20 lappend exp
14160 2d 31 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 -1.+ lappend
14170 72 65 73 20 5b 54 65 73 74 4f 70 20 3e 3e 20 2d res [TestOp >> -
14180 24 77 69 64 65 20 24 77 69 64 65 5d 0a 2b 20 20 $wide $wide].+
14190 20 20 6c 61 70 70 65 6e 64 20 65 78 70 20 2d 31 lappend exp -1
141a0 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .+ lappend re
141b0 73 20 5b 54 65 73 74 4f 70 20 3e 3e 20 2d 24 73 s [TestOp >> -$s
141c0 6d 61 6c 6c 20 24 77 69 64 65 5d 0a 2b 20 20 20 mall $wide].+
141d0 20 6c 61 70 70 65 6e 64 20 65 78 70 20 2d 31 0a lappend exp -1.
141e0 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 + lappend res
141f0 20 5b 54 65 73 74 4f 70 20 3e 3e 20 2d 24 73 6d [TestOp >> -$sm
14200 61 6c 6c 20 37 30 5d 0a 2b 20 20 20 20 6c 61 70 all 70].+ lap
14210 70 65 6e 64 20 65 78 70 20 2d 31 0a 2b 20 20 20 pend exp -1.+
14220 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 lappend res [Te
14230 73 74 4f 70 20 3e 3e 20 2d 24 77 69 64 65 20 37 stOp >> -$wide 7
14240 30 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 0].+ lappend
14250 65 78 70 20 2d 31 0a 2b 0a 2b 20 20 20 20 65 78 exp -1.+.+ ex
14260 70 72 20 7b 24 72 65 73 20 65 71 20 24 65 78 70 pr {$res eq $exp
14270 20 3f 20 30 20 3a 20 24 72 65 73 7d 0a 2b 7d 20 ? 0 : $res}.+}
14280 30 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 0.+.+test mathop
14290 2d 32 34 2e 36 20 7b 20 62 69 6e 61 72 79 20 6f -24.6 { binary o
142a0 70 73 2c 20 73 68 69 66 74 20 7d 20 7b 0a 2b 20 ps, shift } {.+
142b0 20 20 20 23 20 54 65 73 74 20 64 69 66 66 65 72 # Test differ
142c0 65 6e 74 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 73 ent combinations
142d0 20 74 6f 20 67 65 74 20 61 6c 6c 20 63 6f 64 65 to get all code
142e0 20 70 61 74 68 73 0a 2b 20 20 20 20 73 65 74 20 paths.+ set
142f0 72 65 73 20 7b 7d 0a 2b 0a 2b 20 20 20 20 73 65 res {}.+.+ se
14300 74 20 62 69 67 62 69 67 20 31 34 33 37 32 34 32 t bigbig 1437242
14310 33 36 37 34 35 36 34 35 33 35 32 33 34 35 34 33 3674564535234543
14320 35 34 35 32 34 38 39 37 32 36 33 34 39 32 33 38 5452489726349238
14330 36 39 0a 2b 20 20 20 20 73 65 74 20 62 69 67 20 69.+ set big
14340 20 20 20 20 20 20 31 32 31 33 35 34 33 35 34 33 1213543543
14350 35 33 35 34 34 33 35 34 33 35 33 34 32 34 32 33 5354435435342423
14360 39 34 38 37 36 33 38 36 37 38 37 36 0a 2b 20 20 948763867876.+
14370 20 20 73 65 74 20 77 69 64 65 20 20 20 20 20 20 set wide
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14390 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38 12345678
143a0 39 31 32 33 34 35 0a 2b 20 20 20 20 73 65 74 20 912345.+ set
143b0 6e 65 67 77 69 64 65 20 20 20 20 20 20 20 20 20 negwide
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
143d0 20 2d 31 32 33 34 35 36 37 38 39 31 32 33 34 35 -12345678912345
143e0 0a 2b 20 20 20 20 73 65 74 20 73 6d 61 6c 6c 20 .+ set small
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14410 20 20 20 20 20 20 20 20 20 35 0a 2b 20 20 20 20 5.+
14420 73 65 74 20 6e 65 67 20 20 20 20 20 20 20 20 20 set neg
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14450 20 20 2d 35 0a 2b 0a 2b 20 20 20 20 6c 61 70 70 -5.+.+ lapp
14460 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 end res [TestOp
14470 3c 3c 20 24 77 69 64 65 20 24 73 6d 61 6c 6c 5d << $wide $small]
14480 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .+ lappend re
14490 73 20 5b 54 65 73 74 4f 70 20 3e 3e 20 24 77 69 s [TestOp >> $wi
144a0 64 65 20 24 73 6d 61 6c 6c 5d 0a 2b 20 20 20 20 de $small].+
144b0 73 65 74 20 72 65 73 0a 2b 7d 20 5b 6c 69 73 74 set res.+} [list
144c0 20 20 20 33 39 35 30 36 31 37 32 35 31 39 35 30 3950617251950
144d0 34 30 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 40 \.+
144e0 20 20 20 33 38 35 38 30 32 34 36 36 30 31 30 20 385802466010
144f0 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 5d 0a 2b \.+ ].+
14500 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 34 .+test mathop-24
14510 2e 37 20 7b 20 62 69 6e 61 72 79 20 6f 70 73 2c .7 { binary ops,
14520 20 6c 69 73 74 20 73 65 61 72 63 68 20 7d 20 7b list search } {
14530 0a 2b 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d .+ set res {}
14540 0a 2b 0a 2b 20 20 20 20 66 6f 72 65 61 63 68 20 .+.+ foreach
14550 6f 70 20 7b 69 6e 20 6e 69 7d 20 7b 0a 2b 20 20 op {in ni} {.+
14560 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 lappend re
14570 73 20 5b 54 65 73 74 4f 70 20 24 6f 70 20 35 20 s [TestOp $op 5
14580 7b 37 20 35 20 38 7d 5d 0a 2b 20 20 20 20 20 20 {7 5 8}].+
14590 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 lappend res [T
145a0 65 73 74 4f 70 20 24 6f 70 20 68 65 6a 20 7b 66 estOp $op hej {f
145b0 6f 6f 20 62 61 72 20 68 65 6a 7d 5d 0a 2b 20 20 oo bar hej}].+
145c0 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 lappend re
145d0 73 20 5b 54 65 73 74 4f 70 20 24 6f 70 20 35 20 s [TestOp $op 5
145e0 7b 37 20 30 78 35 20 38 7d 5d 0a 2b 20 20 20 20 {7 0x5 8}].+
145f0 7d 0a 2b 20 20 20 20 73 65 74 20 72 65 73 0a 2b }.+ set res.+
14600 7d 20 5b 6c 69 73 74 20 31 20 31 20 30 20 20 30 } [list 1 1 0 0
14610 20 30 20 31 5d 0a 2b 0a 2b 74 65 73 74 20 6d 61 0 1].+.+test ma
14620 74 68 6f 70 2d 32 34 2e 38 20 7b 20 62 69 6e 61 thop-24.8 { bina
14630 72 79 20 6f 70 73 2c 20 74 6f 6f 20 6d 61 6e 79 ry ops, too many
14640 20 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 65 78 } {.+ set ex
14650 70 20 7b 7d 0a 2b 20 20 20 20 66 6f 72 65 61 63 p {}.+ foreac
14660 68 20 6f 70 20 7b 3c 3c 20 3e 3e 20 25 20 21 3d h op {<< >> % !=
14670 20 6e 65 20 69 6e 20 6e 69 20 7e 20 21 7d 20 7b ne in ni ~ !} {
14680 0a 2b 20 20 20 20 20 20 20 20 73 65 74 20 72 65 .+ set re
14690 73 20 5b 54 65 73 74 4f 70 20 24 6f 70 20 37 20 s [TestOp $op 7
146a0 38 20 39 5d 0a 2b 20 20 20 20 20 20 20 20 69 66 8 9].+ if
146b0 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match
146c0 22 77 72 6f 6e 67 20 23 20 61 72 67 73 2a 20 4e "wrong # args* N
146d0 4f 4e 45 22 20 24 72 65 73 5d 7d 20 7b 0a 2b 20 ONE" $res]} {.+
146e0 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe
146f0 6e 64 20 65 78 70 20 30 0a 2b 20 20 20 20 20 20 nd exp 0.+
14700 20 20 7d 20 65 6c 73 65 20 7b 0a 2b 20 20 20 20 } else {.+
14710 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend
14720 65 78 70 20 24 72 65 73 0a 2b 20 20 20 20 20 20 exp $res.+
14730 20 20 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20 20 }.+ }.+
14740 73 65 74 20 65 78 70 0a 2b 7d 20 7b 30 20 30 20 set exp.+} {0 0
14750 30 20 30 20 30 20 30 20 30 20 30 20 30 7d 0a 2b 0 0 0 0 0 0 0}.+
14760 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d .+.+test mathop-
14770 32 35 2e 31 20 20 7b 20 65 78 70 20 6f 70 65 72 25.1 { exp oper
14780 61 74 6f 72 20 7d 20 7b 54 65 73 74 4f 70 20 2a ator } {TestOp *
14790 2a 20 20 20 20 20 20 20 20 7d 20 31 0a 2b 74 65 * } 1.+te
147a0 73 74 20 6d 61 74 68 6f 70 2d 32 35 2e 32 20 20 st mathop-25.2
147b0 7b 20 65 78 70 20 6f 70 65 72 61 74 6f 72 20 7d { exp operator }
147c0 20 7b 54 65 73 74 4f 70 20 2a 2a 20 20 20 30 20 {TestOp ** 0
147d0 20 20 20 7d 20 30 0a 2b 74 65 73 74 20 6d 61 74 } 0.+test mat
147e0 68 6f 70 2d 32 35 2e 33 20 20 7b 20 65 78 70 20 hop-25.3 { exp
147f0 6f 70 65 72 61 74 6f 72 20 7d 20 7b 54 65 73 74 operator } {Test
14800 4f 70 20 2a 2a 20 20 20 30 20 20 20 35 7d 20 30 Op ** 0 5} 0
14810 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 35 .+test mathop-25
14820 2e 34 20 20 7b 20 65 78 70 20 6f 70 65 72 61 74 .4 { exp operat
14830 6f 72 20 7d 20 7b 54 65 73 74 4f 70 20 2a 2a 20 or } {TestOp **
14840 37 2e 35 20 20 20 20 7d 20 37 2e 35 0a 2b 74 65 7.5 } 7.5.+te
14850 73 74 20 6d 61 74 68 6f 70 2d 32 35 2e 35 20 20 st mathop-25.5
14860 7b 20 65 78 70 20 6f 70 65 72 61 74 6f 72 20 7d { exp operator }
14870 20 7b 54 65 73 74 4f 70 20 2a 2a 20 20 20 31 20 {TestOp ** 1
14880 20 20 35 7d 20 31 0a 2b 74 65 73 74 20 6d 61 74 5} 1.+test mat
14890 68 6f 70 2d 32 35 2e 36 20 20 7b 20 65 78 70 20 hop-25.6 { exp
148a0 6f 70 65 72 61 74 6f 72 20 7d 20 7b 54 65 73 74 operator } {Test
148b0 4f 70 20 2a 2a 20 20 20 35 20 20 20 31 7d 20 35 Op ** 5 1} 5
148c0 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 35 .+test mathop-25
148d0 2e 37 20 20 7b 20 65 78 70 20 6f 70 65 72 61 74 .7 { exp operat
148e0 6f 72 20 7d 20 7b 54 65 73 74 4f 70 20 2a 2a 20 or } {TestOp **
148f0 34 20 33 20 32 20 31 7d 20 32 36 32 31 34 34 0a 4 3 2 1} 262144.
14900 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 35 2e +test mathop-25.
14910 38 20 20 7b 20 65 78 70 20 6f 70 65 72 61 74 6f 8 { exp operato
14920 72 20 7d 20 7b 54 65 73 74 4f 70 20 2a 2a 20 35 r } {TestOp ** 5
14930 2e 35 20 20 20 34 7d 20 39 31 35 2e 30 36 32 35 .5 4} 915.0625
14940 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 35 .+test mathop-25
14950 2e 39 20 20 7b 20 65 78 70 20 6f 70 65 72 61 74 .9 { exp operat
14960 6f 72 20 7d 20 7b 54 65 73 74 4f 70 20 2a 2a 20 or } {TestOp **
14970 20 20 36 20 33 2e 35 7d 20 35 32 39 2e 30 38 39 6 3.5} 529.089
14980 37 38 34 34 34 31 31 36 36 34 0a 2b 74 65 73 74 7844411664.+test
14990 20 6d 61 74 68 6f 70 2d 32 35 2e 31 30 20 7b 20 mathop-25.10 {
149a0 65 78 70 20 6f 70 65 72 61 74 6f 72 20 7d 20 7b exp operator } {
149b0 54 65 73 74 4f 70 20 2a 2a 20 33 2e 35 20 20 20 TestOp ** 3.5
149c0 30 7d 20 31 2e 30 0a 2b 74 65 73 74 20 6d 61 74 0} 1.0.+test mat
149d0 68 6f 70 2d 32 35 2e 31 31 20 7b 20 65 78 70 20 hop-25.11 { exp
149e0 6f 70 65 72 61 74 6f 72 20 7d 20 7b 54 65 73 74 operator } {Test
149f0 4f 70 20 2a 2a 20 33 37 38 20 20 20 30 7d 20 31 Op ** 378 0} 1
14a00 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 35 .+test mathop-25
14a10 2e 31 32 20 7b 20 65 78 70 20 6f 70 65 72 61 74 .12 { exp operat
14a20 6f 72 20 7d 20 7b 54 65 73 74 4f 70 20 2a 2a 20 or } {TestOp **
14a30 37 2e 38 20 20 20 31 7d 20 37 2e 38 0a 2b 74 65 7.8 1} 7.8.+te
14a40 73 74 20 6d 61 74 68 6f 70 2d 32 35 2e 31 33 20 st mathop-25.13
14a50 7b 20 65 78 70 20 6f 70 65 72 61 74 6f 72 20 7d { exp operator }
14a60 20 7b 54 65 73 74 4f 70 20 2a 2a 20 37 34 38 20 {TestOp ** 748
14a70 20 20 31 7d 20 37 34 38 0a 2b 74 65 73 74 20 6d 1} 748.+test m
14a80 61 74 68 6f 70 2d 32 35 2e 31 34 20 7b 20 65 78 athop-25.14 { ex
14a90 70 20 6f 70 65 72 61 74 6f 72 20 7d 20 7b 54 65 p operator } {Te
14aa0 73 74 4f 70 20 2a 2a 20 36 2e 33 20 20 2d 31 7d stOp ** 6.3 -1}
14ab0 20 30 2e 31 35 38 37 33 30 31 35 38 37 33 30 31 0.1587301587301
14ac0 35 38 37 32 0a 2b 74 65 73 74 20 6d 61 74 68 6f 5872.+test matho
14ad0 70 2d 32 35 2e 31 35 20 7b 20 65 78 70 20 6f 70 p-25.15 { exp op
14ae0 65 72 61 74 6f 72 20 7d 20 7b 54 65 73 74 4f 70 erator } {TestOp
14af0 20 2a 2a 20 36 38 33 20 20 2d 31 7d 20 30 0a 2b ** 683 -1} 0.+
14b00 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 35 2e 31 test mathop-25.1
14b10 36 20 7b 20 65 78 70 20 6f 70 65 72 61 74 6f 72 6 { exp operator
14b20 20 7d 20 7b 54 65 73 74 4f 70 20 2a 2a 20 20 20 } {TestOp **
14b30 31 20 20 2d 31 7d 20 31 0a 2b 74 65 73 74 20 6d 1 -1} 1.+test m
14b40 61 74 68 6f 70 2d 32 35 2e 31 37 20 7b 20 65 78 athop-25.17 { ex
14b50 70 20 6f 70 65 72 61 74 6f 72 20 7d 20 7b 54 65 p operator } {Te
14b60 73 74 4f 70 20 2a 2a 20 20 2d 31 20 20 2d 31 7d stOp ** -1 -1}
14b70 20 2d 31 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 -1.+test mathop
14b80 2d 32 35 2e 31 38 20 7b 20 65 78 70 20 6f 70 65 -25.18 { exp ope
14b90 72 61 74 6f 72 20 7d 20 7b 54 65 73 74 4f 70 20 rator } {TestOp
14ba0 2a 2a 20 20 2d 31 20 20 2d 32 7d 20 31 0a 2b 74 ** -1 -2} 1.+t
14bb0 65 73 74 20 6d 61 74 68 6f 70 2d 32 35 2e 31 39 est mathop-25.19
14bc0 20 7b 20 65 78 70 20 6f 70 65 72 61 74 6f 72 20 { exp operator
14bd0 7d 20 7b 54 65 73 74 4f 70 20 2a 2a 20 20 2d 31 } {TestOp ** -1
14be0 20 20 20 33 7d 20 2d 31 0a 2b 74 65 73 74 20 6d 3} -1.+test m
14bf0 61 74 68 6f 70 2d 32 35 2e 32 30 20 7b 20 65 78 athop-25.20 { ex
14c00 70 20 6f 70 65 72 61 74 6f 72 20 7d 20 7b 54 65 p operator } {Te
14c10 73 74 4f 70 20 2a 2a 20 20 2d 31 20 20 20 34 7d stOp ** -1 4}
14c20 20 31 0a 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 1.+test mathop-
14c30 32 35 2e 32 31 20 7b 20 65 78 70 20 6f 70 65 72 25.21 { exp oper
14c40 61 74 6f 72 20 7d 20 7b 54 65 73 74 4f 70 20 2a ator } {TestOp *
14c50 2a 20 20 20 32 20 20 36 33 7d 20 39 32 32 33 33 * 2 63} 92233
14c60 37 32 30 33 36 38 35 34 37 37 35 38 30 38 0a 2b 72036854775808.+
14c70 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 35 2e 32 test mathop-25.2
14c80 32 20 7b 20 65 78 70 20 6f 70 65 72 61 74 6f 72 2 { exp operator
14c90 20 7d 20 7b 54 65 73 74 4f 70 20 2a 2a 20 38 33 } {TestOp ** 83
14ca0 37 35 36 34 38 35 37 36 33 34 35 38 37 34 36 33 7564857634587463
14cb0 35 38 37 33 34 36 35 38 34 37 33 35 36 37 38 34 5873465847356784
14cc0 37 35 36 37 34 37 33 20 32 7d 20 37 30 31 35 31 7567473 2} 70151
14cd0 34 38 39 30 37 34 34 34 34 36 37 36 35 37 38 39 4890744446765789
14ce0 37 35 38 35 34 37 34 34 39 33 37 35 37 37 38 31 7585474493757781
14cf0 31 36 31 39 39 38 39 31 34 35 32 31 35 33 37 38 1619989145215378
14d00 33 35 38 30 39 36 32 33 34 30 38 31 35 37 33 34 3580962340815734
14d10 33 30 30 33 32 38 37 36 30 35 37 32 39 0a 2b 0a 3003287605729.+.
14d20 2b 74 65 73 74 20 6d 61 74 68 6f 70 2d 32 35 2e +test mathop-25.
14d30 32 33 20 7b 20 65 78 70 20 6f 70 65 72 61 74 6f 23 { exp operato
14d40 72 20 65 72 72 6f 72 73 20 7d 20 7b 0a 2b 20 20 r errors } {.+
14d50 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 2b 20 20 set res {}.+
14d60 20 20 73 65 74 20 65 78 70 20 7b 7d 0a 2b 0a 2b set exp {}.+.+
14d70 20 20 20 20 73 65 74 20 68 75 67 65 20 20 20 20 set huge
14d80 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 [string repeat
14d90 31 34 35 37 38 32 20 31 30 30 30 5d 0a 2b 20 20 145782 1000].+
14da0 20 20 73 65 74 20 62 69 67 20 20 20 20 20 20 31 set big 1
14db0 32 31 33 35 34 33 35 34 33 35 33 35 34 34 33 35 2135435435354435
14dc0 34 33 35 33 34 32 34 32 33 39 34 38 37 36 33 38 4353424239487638
14dd0 36 37 38 37 36 0a 2b 20 20 20 20 73 65 74 20 77 67876.+ set w
14de0 69 64 65 20 20 20 20 20 20 20 20 20 20 20 20 20 ide
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14e00 31 32 33 34 35 36 37 38 39 31 32 33 34 35 0a 2b 12345678912345.+
14e10 20 20 20 20 73 65 74 20 73 6d 61 6c 6c 20 20 20 set small
14e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14e40 20 20 20 20 20 20 32 0a 2b 0a 2b 20 20 20 20 6c 2.+.+ l
14e50 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
14e60 4f 70 20 2a 2a 20 30 20 2d 35 5d 0a 2b 20 20 20 Op ** 0 -5].+
14e70 20 6c 61 70 70 65 6e 64 20 65 78 70 20 22 65 78 lappend exp "ex
14e80 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 20 6f 66 20 ponentiation of
14e90 7a 65 72 6f 20 62 79 20 6e 65 67 61 74 69 76 65 zero by negative
14ea0 20 70 6f 77 65 72 20 41 52 49 54 48 20 44 4f 4d power ARITH DOM
14eb0 41 49 4e 20 7b 65 78 70 6f 6e 65 6e 74 69 61 74 AIN {exponentiat
14ec0 69 6f 6e 20 6f 66 20 7a 65 72 6f 20 62 79 20 6e ion of zero by n
14ed0 65 67 61 74 69 76 65 20 70 6f 77 65 72 7d 22 0a egative power}".
14ee0 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 + lappend res
14ef0 20 5b 54 65 73 74 4f 70 20 2a 2a 20 30 2e 30 20 [TestOp ** 0.0
14f00 2d 35 2e 30 5d 0a 2b 20 20 20 20 6c 61 70 70 65 -5.0].+ lappe
14f10 6e 64 20 65 78 70 20 22 65 78 70 6f 6e 65 6e 74 nd exp "exponent
14f20 69 61 74 69 6f 6e 20 6f 66 20 7a 65 72 6f 20 62 iation of zero b
14f30 79 20 6e 65 67 61 74 69 76 65 20 70 6f 77 65 72 y negative power
14f40 20 41 52 49 54 48 20 44 4f 4d 41 49 4e 20 7b 65 ARITH DOMAIN {e
14f50 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 20 6f 66 xponentiation of
14f60 20 7a 65 72 6f 20 62 79 20 6e 65 67 61 74 69 76 zero by negativ
14f70 65 20 70 6f 77 65 72 7d 22 0a 2b 20 20 20 20 6c e power}".+ l
14f80 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
14f90 4f 70 20 2a 2a 20 24 73 6d 61 6c 6c 20 24 77 69 Op ** $small $wi
14fa0 64 65 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 de].+ lappend
14fb0 20 65 78 70 20 22 65 78 70 6f 6e 65 6e 74 20 74 exp "exponent t
14fc0 6f 6f 20 6c 61 72 67 65 20 4e 4f 4e 45 22 0a 2b oo large NONE".+
14fd0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 lappend res
14fe0 5b 54 65 73 74 4f 70 20 2a 2a 20 32 20 24 62 69 [TestOp ** 2 $bi
14ff0 67 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 g].+ lappend
15000 65 78 70 20 22 65 78 70 6f 6e 65 6e 74 20 74 6f exp "exponent to
15010 6f 20 6c 61 72 67 65 20 4e 4f 4e 45 22 0a 2b 20 o large NONE".+
15020 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b lappend res [
15030 54 65 73 74 4f 70 20 2a 2a 20 24 68 75 67 65 20 TestOp ** $huge
15040 32 2e 31 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e 2.1].+ lappen
15050 64 20 65 78 70 20 22 49 6e 66 22 0a 2b 20 20 20 d exp "Inf".+
15060 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 lappend res [Te
15070 73 74 4f 70 20 2a 2a 20 32 20 66 6f 6f 5d 0a 2b stOp ** 2 foo].+
15080 20 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 20 lappend exp
15090 22 63 61 6e 27 74 20 75 73 65 20 6e 6f 6e 2d 6e "can't use non-n
150a0 75 6d 65 72 69 63 20 73 74 72 69 6e 67 20 61 73 umeric string as
150b0 20 6f 70 65 72 61 6e 64 20 6f 66 20 5c 22 2a 2a operand of \"**
150c0 5c 22 20 4e 4f 4e 45 22 0a 2b 20 20 20 20 6c 61 \" NONE".+ la
150d0 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f ppend res [TestO
150e0 70 20 2a 2a 20 66 6f 6f 20 32 5d 0a 2b 20 20 20 p ** foo 2].+
150f0 20 6c 61 70 70 65 6e 64 20 65 78 70 20 22 63 61 lappend exp "ca
15100 6e 27 74 20 75 73 65 20 6e 6f 6e 2d 6e 75 6d 65 n't use non-nume
15110 72 69 63 20 73 74 72 69 6e 67 20 61 73 20 6f 70 ric string as op
15120 65 72 61 6e 64 20 6f 66 20 5c 22 2a 2a 5c 22 20 erand of \"**\"
15130 4e 4f 4e 45 22 0a 2b 0a 2b 20 20 20 20 65 78 70 NONE".+.+ exp
15140 72 20 7b 24 72 65 73 20 65 71 20 24 65 78 70 20 r {$res eq $exp
15150 3f 20 30 20 3a 20 24 72 65 73 7d 0a 2b 7d 20 30 ? 0 : $res}.+} 0
15160 0a 2b 0a 2b 0a 2b 74 65 73 74 20 6d 61 74 68 6f .+.+.+test matho
15170 70 2d 32 36 2e 31 20 7b 20 6d 69 73 63 20 6f 70 p-26.1 { misc op
15180 73 2c 20 73 69 7a 65 20 63 6f 6d 62 69 6e 61 74 s, size combinat
15190 69 6f 6e 73 20 7d 20 7b 0a 2b 20 20 20 20 73 65 ions } {.+ se
151a0 74 20 62 69 67 31 20 20 20 20 20 20 31 32 31 33 t big1 1213
151b0 35 34 33 35 34 33 35 33 35 34 34 33 35 34 33 35 5435435354435435
151c0 33 34 32 34 32 33 39 34 38 37 36 33 38 36 37 38 3424239487638678
151d0 37 36 0a 2b 20 20 20 20 73 65 74 20 62 69 67 32 76.+ set big2
151e0 20 20 20 20 20 20 20 32 37 34 36 32 33 37 31 37 274623717
151f0 34 37 38 33 38 33 36 37 34 36 32 36 32 35 36 34 4783836746262564
15200 38 39 32 39 31 38 33 32 37 38 34 37 0a 2b 20 20 892918327847.+
15210 20 20 73 65 74 20 77 69 64 65 31 20 20 20 20 20 set wide1
15220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15230 20 20 20 20 20 20 20 20 38 37 33 32 31 38 34 37 87321847
15240 32 33 32 32 31 35 0a 2b 20 20 20 20 73 65 74 20 232215.+ set
15250 77 69 64 65 32 20 20 20 20 20 20 20 20 20 20 20 wide2
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15270 20 20 31 32 33 34 35 36 37 38 39 31 32 33 34 35 12345678912345
15280 0a 2b 20 20 20 20 73 65 74 20 73 6d 61 6c 6c 31 .+ set small1
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
152b0 20 20 20 20 20 38 37 33 34 35 0a 2b 20 20 20 20 87345.+
152c0 73 65 74 20 73 6d 61 6c 6c 32 20 20 20 20 20 20 set small2
152d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
152e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 1
152f0 36 37 35 33 0a 2b 0a 2b 20 20 20 20 73 65 74 20 6753.+.+ set
15300 72 65 73 20 7b 7d 0a 2b 20 20 20 20 66 6f 72 65 res {}.+ fore
15310 61 63 68 20 6f 70 20 7b 2b 20 2a 20 2d 20 2f 7d ach op {+ * - /}
15320 20 7b 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 70 {.+ lapp
15330 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 end res [TestOp
15340 24 6f 70 20 24 62 69 67 31 20 20 20 24 62 69 67 $op $big1 $big
15350 32 5d 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 70 2].+ lapp
15360 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 end res [TestOp
15370 24 6f 70 20 24 62 69 67 31 20 20 20 24 77 69 64 $op $big1 $wid
15380 65 32 5d 0a 2b 20 20 20 20 20 20 20 20 6c 61 70 e2].+ lap
15390 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 pend res [TestOp
153a0 20 24 6f 70 20 24 62 69 67 31 20 20 20 24 73 6d $op $big1 $sm
153b0 61 6c 6c 32 5d 0a 2b 20 20 20 20 20 20 20 20 6c all2].+ l
153c0 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
153d0 4f 70 20 24 6f 70 20 24 77 69 64 65 31 20 20 24 Op $op $wide1 $
153e0 62 69 67 32 5d 0a 2b 20 20 20 20 20 20 20 20 6c big2].+ l
153f0 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 74 append res [Test
15400 4f 70 20 24 6f 70 20 24 77 69 64 65 31 20 20 24 Op $op $wide1 $
15410 77 69 64 65 32 5d 0a 2b 20 20 20 20 20 20 20 20 wide2].+
15420 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 73 lappend res [Tes
15430 74 4f 70 20 24 6f 70 20 24 77 69 64 65 31 20 20 tOp $op $wide1
15440 24 73 6d 61 6c 6c 32 5d 0a 2b 20 20 20 20 20 20 $small2].+
15450 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 lappend res [T
15460 65 73 74 4f 70 20 24 6f 70 20 24 73 6d 61 6c 6c estOp $op $small
15470 31 20 24 62 69 67 32 5d 0a 2b 20 20 20 20 20 20 1 $big2].+
15480 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 lappend res [T
15490 65 73 74 4f 70 20 24 6f 70 20 24 73 6d 61 6c 6c estOp $op $small
154a0 31 20 24 77 69 64 65 32 5d 0a 2b 20 20 20 20 20 1 $wide2].+
154b0 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b lappend res [
154c0 54 65 73 74 4f 70 20 24 6f 70 20 24 73 6d 61 6c TestOp $op $smal
154d0 6c 31 20 24 73 6d 61 6c 6c 32 5d 0a 2b 20 20 20 l1 $small2].+
154e0 20 7d 0a 2b 20 20 20 20 73 65 74 20 72 65 73 0a }.+ set res.
154f0 2b 7d 20 5b 6c 69 73 74 20 5c 0a 2b 20 20 20 20 +} [list \.+
15500 20 20 20 20 20 20 20 31 34 38 38 31 36 37 32 36 148816726
15510 31 30 31 33 38 32 37 32 31 38 31 36 30 34 39 38 1013827218160498
15520 38 38 34 31 36 38 32 31 39 35 37 32 33 20 5c 0a 8841682195723 \.
15530 2b 20 20 20 20 20 20 20 20 20 20 20 31 32 31 33 + 1213
15540 35 34 33 35 34 33 35 33 35 34 34 33 35 34 33 35 5435435354435435
15550 33 34 32 34 33 36 32 39 34 34 34 32 37 38 30 32 3424362944427802
15560 32 31 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 21 \.+
15570 20 31 32 31 33 35 34 33 35 34 33 35 33 35 34 34 121354354353544
15580 33 35 34 33 35 33 34 32 34 32 33 39 34 38 37 36 3543534242394876
15590 33 38 38 34 36 32 39 20 5c 0a 2b 20 20 20 20 20 3884629 \.+
155a0 20 20 20 20 20 20 32 37 34 36 32 33 37 31 37 34 2746237174
155b0 37 38 33 38 33 36 37 34 36 32 36 32 36 35 32 32 7838367462626522
155c0 31 34 37 36 35 35 36 30 30 36 32 20 5c 0a 2b 20 14765560062 \.+
155d0 20 20 20 20 20 20 20 20 20 20 39 39 36 36 37 35 996675
155e0 32 36 31 34 34 35 36 30 20 5c 0a 2b 20 20 20 20 26144560 \.+
155f0 20 20 20 20 20 20 20 38 37 33 32 31 38 34 37 32 873218472
15600 34 38 39 36 38 20 5c 0a 2b 20 20 20 20 20 20 20 48968 \.+
15610 20 20 20 20 32 37 34 36 32 33 37 31 37 34 37 38 274623717478
15620 33 38 33 36 37 34 36 32 36 32 35 36 34 38 39 32 3836746262564892
15630 39 31 38 34 31 35 31 39 32 20 5c 0a 2b 20 20 20 918415192 \.+
15640 20 20 20 20 20 20 20 20 31 32 33 34 35 36 37 38 12345678
15650 39 39 39 36 39 30 20 5c 0a 2b 20 20 20 20 20 20 999690 \.+
15660 20 20 20 20 20 31 30 34 30 39 38 20 5c 0a 2b 20 104098 \.+
15670 20 20 20 20 20 20 20 20 20 20 33 33 33 32 36 37 333267
15680 38 33 39 32 34 37 35 39 34 32 34 36 38 34 34 34 8392475942468444
15690 37 38 39 31 34 30 31 32 37 30 32 32 32 39 31 30 7891401270222910
156a0 34 30 35 33 36 36 32 34 34 36 36 31 36 38 35 38 4053662446616858
156b0 39 30 39 39 33 37 37 30 34 38 39 39 35 39 35 34 9099377048995954
156c0 32 39 37 32 20 5c 0a 2b 20 20 20 20 20 20 20 20 2972 \.+
156d0 20 20 20 31 34 39 38 32 30 31 38 39 33 34 36 33 1498201893463
156e0 37 39 35 31 38 30 32 34 39 36 39 37 38 33 30 36 7951802496978306
156f0 38 34 31 30 39 38 38 33 36 36 36 31 30 39 36 35 8410988366610965
15700 33 32 39 32 32 30 20 5c 0a 2b 20 20 20 20 20 20 329220 \.+
15710 20 20 20 20 20 32 30 33 33 30 34 39 34 39 38 34 20330494984
15720 38 34 39 32 38 35 36 38 34 38 32 39 31 36 32 38 8492856848291628
15730 34 31 33 36 34 31 30 37 38 35 32 36 36 32 38 20 413641078526628
15740 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 32 33 \.+ 23
15750 39 38 30 36 35 30 33 30 33 39 39 30 33 39 31 35 9806503039903915
15760 39 37 32 35 34 36 31 36 33 34 34 30 33 34 37 31 9725461634403471
15770 31 34 33 36 30 36 30 32 39 30 39 39 39 31 31 30 1436060290999110
15780 35 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 5 \.+
15790 31 30 37 38 30 34 37 34 38 37 39 36 31 37 36 38 1078047487961768
157a0 33 32 39 38 34 35 31 39 34 31 37 35 20 5c 0a 2b 329845194175 \.+
157b0 20 20 20 20 20 20 20 20 20 20 20 31 34 36 32 39 14629
157c0 30 32 39 30 36 36 38 31 32 39 37 38 39 35 20 5c 02906681297895 \
157d0 0a 2b 20 20 20 20 20 20 20 20 20 20 20 32 33 39 .+ 239
157e0 38 37 30 30 38 36 30 33 31 34 39 34 32 32 30 36 8700860314942206
157f0 30 32 33 30 33 37 33 30 35 37 31 39 35 31 33 34 0230373057195134
15800 35 37 39 36 32 31 35 20 5c 0a 2b 20 20 20 20 20 5796215 \.+
15810 20 20 20 20 20 20 31 30 37 38 33 33 33 33 32 34 1078333324
15820 35 39 38 37 37 34 30 32 35 20 5c 0a 2b 20 20 20 598774025 \.+
15830 20 20 20 20 20 20 20 20 31 34 36 33 32 39 30 37 14632907
15840 38 35 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 85 \.+
15850 20 39 33 38 39 31 39 38 32 36 30 35 37 30 35 39 938919826057059
15860 38 36 38 39 30 37 39 38 35 39 30 35 35 38 34 35 8689079859055845
15870 35 34 30 30 32 39 20 5c 0a 2b 20 20 20 20 20 20 540029 \.+
15880 20 20 20 20 20 31 32 31 33 35 34 33 35 34 33 35 12135435435
15890 33 35 34 34 33 35 34 33 35 33 34 32 34 31 31 36 3544354353424116
158a0 30 33 30 38 34 39 35 35 35 33 31 20 5c 0a 2b 20 03084955531 \.+
158b0 20 20 20 20 20 20 20 20 20 20 31 32 31 33 35 34 121354
158c0 33 35 34 33 35 33 35 34 34 33 35 34 33 35 33 34 3543535443543534
158d0 32 34 32 33 39 34 38 37 36 33 38 35 31 31 32 33 2423948763851123
158e0 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 2d \.+ -
158f0 32 37 34 36 32 33 37 31 37 34 37 38 33 38 33 36 2746237174783836
15900 37 34 36 32 36 32 34 37 37 35 37 31 30 37 31 30 7462624775710710
15910 39 35 36 33 32 20 5c 0a 2b 20 20 20 20 20 20 20 95632 \.+
15920 20 20 20 20 37 34 39 37 36 31 36 38 33 31 39 38 749761683198
15930 37 30 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 70 \.+
15940 20 38 37 33 32 31 38 34 37 32 31 35 34 36 32 20 87321847215462
15950 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 20 2d 32 \.+ -2
15960 37 34 36 32 33 37 31 37 34 37 38 33 38 33 36 37 7462371747838367
15970 34 36 32 36 32 35 36 34 38 39 32 39 31 38 32 34 4626256489291824
15980 30 35 30 32 20 5c 0a 2b 20 20 20 20 20 20 20 20 0502 \.+
15990 20 20 20 2d 31 32 33 34 35 36 37 38 38 32 35 30 -123456788250
159a0 30 30 20 5c 0a 2b 20 20 20 20 20 20 20 20 20 20 00 \.+
159b0 20 37 30 35 39 32 20 5c 0a 2b 20 20 20 20 20 20 70592 \.+
159c0 20 20 20 20 20 34 20 5c 0a 2b 20 20 20 20 20 20 4 \.+
159d0 20 20 20 20 20 39 38 32 39 37 30 32 37 38 32 32 98297027822
159e0 35 38 32 32 35 38 37 32 35 37 32 30 31 20 5c 0a 5822587257201 \.
159f0 2b 20 20 20 20 20 20 20 20 20 20 20 37 32 34 33 + 7243
15a00 37 33 38 36 39 34 37 37 33 37 33 33 33 32 32 35 7386947737333225
15a10 39 34 34 31 35 32 39 38 30 31 34 36 30 20 5c 0a 9441529801460 \.
15a20 2b 20 20 20 20 20 20 20 20 20 20 20 30 20 5c 0a + 0 \.
15a30 2b 20 20 20 20 20 20 20 20 20 20 20 37 20 5c 0a + 7 \.
15a40 2b 20 20 20 20 20 20 20 20 20 20 20 35 32 31 32 + 5212
15a50 33 31 31 30 36 32 20 5c 0a 2b 20 20 20 20 20 20 311062 \.+
15a60 20 20 20 20 20 30 20 5c 0a 2b 20 20 20 20 20 20 0 \.+
15a70 20 20 20 20 20 30 20 5c 0a 2b 20 20 20 20 20 20 0 \.+
15a80 20 20 20 20 20 35 20 5c 0a 2b 20 20 20 20 20 20 5 \.+
15a90 20 20 20 20 5d 0a 2b 0a 2b 74 65 73 74 20 6d 61 ].+.+test ma
15aa0 74 68 6f 70 2d 32 36 2e 32 20 7b 20 6d 69 73 63 thop-26.2 { misc
15ab0 20 6f 70 73 2c 20 63 6f 72 6e 65 72 20 63 61 73 ops, corner cas
15ac0 65 73 20 7d 20 7b 0a 2b 20 20 20 20 73 65 74 20 es } {.+ set
15ad0 72 65 73 20 7b 7d 0a 2b 20 20 20 20 6c 61 70 70 res {}.+ lapp
15ae0 65 6e 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 end res [TestOp
15af0 2d 20 30 20 2d 32 31 34 37 34 38 33 36 34 38 5d - 0 -2147483648]
15b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
15b10 20 20 3b 23 20 2d 32 2a 2a 33 31 0a 2b 20 20 20 ;# -2**31.+
15b20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 54 65 lappend res [Te
15b30 73 74 4f 70 20 2d 20 30 20 2d 39 32 32 33 33 37 stOp - 0 -922337
15b40 32 30 33 36 38 35 34 37 37 35 38 30 38 5d 20 20 2036854775808]
15b50 20 20 20 20 20 20 20 3b 23 20 2d 32 2a 2a 36 33 ;# -2**63
15b60 0a 2b 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .+ lappend re
15b70 73 20 5b 54 65 73 74 4f 70 20 2f 20 2d 39 32 32 s [TestOp / -922
15b80 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30 38 3372036854775808
15b90 20 2d 31 5d 0a 2b 20 20 20 20 6c 61 70 70 65 6e -1].+ lappen
15ba0 64 20 72 65 73 20 5b 54 65 73 74 4f 70 20 2a 20 d res [TestOp *
15bb0 32 31 34 37 34 38 33 36 34 38 20 32 5d 0a 2b 20 2147483648 2].+
15bc0 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b lappend res [
15bd0 54 65 73 74 4f 70 20 2a 20 39 32 32 33 33 37 32 TestOp * 9223372
15be0 30 33 36 38 35 34 37 37 35 38 30 38 20 32 5d 0a 036854775808 2].
15bf0 2b 20 20 20 20 73 65 74 20 72 65 73 0a 2b 7d 20 + set res.+}
15c00 5b 6c 69 73 74 20 32 31 34 37 34 38 33 36 34 38 [list 2147483648
15c10 20 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37 922337203685477
15c20 35 38 30 38 20 39 32 32 33 33 37 32 30 33 36 38 5808 92233720368
15c30 35 34 37 37 35 38 30 38 20 34 32 39 34 39 36 37 54775808 4294967
15c40 32 39 36 20 31 38 34 34 36 37 34 34 30 37 33 37 296 184467440737
15c50 30 39 35 35 31 36 31 36 5d 0a 2b 0a 2b 69 66 20 09551616].+.+if
15c60 30 20 7b 0a 2b 20 20 20 20 23 20 43 6f 6d 70 61 0 {.+ # Compa
15c70 72 65 20 6f 70 73 20 74 6f 20 65 78 70 72 20 62 re ops to expr b
15c80 79 74 65 63 6f 64 65 73 0a 2b 20 20 20 20 6e 61 ytecodes.+ na
15c90 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
15ca0 3a 74 63 6c 3a 3a 6d 61 74 68 6f 70 3a 3a 2a 0a :tcl::mathop::*.
15cb0 2b 20 20 20 20 70 72 6f 63 20 5f 58 20 7b 61 20 + proc _X {a
15cc0 62 20 63 7d 20 7b 0a 2b 20 20 20 20 20 20 20 20 b c} {.+
15cd0 73 65 74 20 78 20 5b 2b 20 24 61 20 5b 2d 20 24 set x [+ $a [- $
15ce0 62 20 24 63 5d 5d 0a 2b 20 20 20 20 20 20 20 20 b $c]].+
15cf0 73 65 74 20 79 20 5b 65 78 70 72 20 7b 24 61 20 set y [expr {$a
15d00 2b 20 28 24 62 20 2d 20 24 63 29 7d 5d 0a 2b 20 + ($b - $c)}].+
15d10 20 20 20 20 20 20 20 73 65 74 20 7a 20 5b 3c 20 set z [<
15d20 24 61 20 24 62 20 24 63 5d 0a 2b 20 20 20 20 7d $a $b $c].+ }
15d30 0a 2b 20 20 20 20 73 65 74 20 3a 3a 74 63 6c 5f .+ set ::tcl_
15d40 74 72 61 63 65 43 6f 6d 70 69 6c 65 20 32 0a 2b traceCompile 2.+
15d50 20 20 20 20 5f 58 20 33 20 34 20 35 0a 2b 20 20 _X 3 4 5.+
15d60 20 20 73 65 74 20 3a 3a 74 63 6c 5f 74 72 61 63 set ::tcl_trac
15d70 65 43 6f 6d 70 69 6c 65 20 30 0a 20 7d 0a 20 0a eCompile 0. }. .
15d80 20 23 20 63 6c 65 61 6e 75 70 0a 20 6e 61 6d 65 # cleanup. name
15d90 73 70 61 63 65 20 64 65 6c 65 74 65 20 3a 3a 74 space delete ::t
15da0 65 73 74 6d 61 74 68 6f 70 0a 2b 6e 61 6d 65 73 estmathop.+names
15db0 70 61 63 65 20 64 65 6c 65 74 65 20 3a 3a 74 65 pace delete ::te
15dc0 73 74 6d 61 74 68 6f 70 32 0a 20 3a 3a 74 63 6c stmathop2. ::tcl
15dd0 74 65 73 74 3a 3a 63 6c 65 61 6e 75 70 54 65 73 test::cleanupTes
15de0 74 73 0a 20 72 65 74 75 72 6e 0a 20 0a ts. return. .