Tcl Source Code

Hex Artifact Content
Login

Artifact 62500ef3bb3571297944d55cfdea14e755359c6f:

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