Tcl Source Code

Hex Artifact Content
Login

Artifact 48e525fa7d5e182dd2bf90063ca3feac9d98ecf1:

Attachment "tcl_expon.patch" to ticket [655176ffff] added by dkf 2003-09-13 07:06:30.
0000: 49 6e 64 65 78 3a 20 64 6f 63 2f 65 78 70 72 2e  Index: doc/expr.
0010: 6e 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  n.==============
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20  =====.RCS file: 
0060: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c  /cvsroot/tcl/tcl
0070: 2f 64 6f 63 2f 65 78 70 72 2e 6e 2c 76 0a 72 65  /doc/expr.n,v.re
0080: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f  trieving revisio
0090: 6e 20 31 2e 31 31 0a 64 69 66 66 20 2d 75 20 2d  n 1.11.diff -u -
00a0: 72 31 2e 31 31 20 65 78 70 72 2e 6e 0a 2d 2d 2d  r1.11 expr.n.---
00b0: 20 64 6f 63 2f 65 78 70 72 2e 6e 09 34 20 4a 75   doc/expr.n.4 Ju
00c0: 6c 20 32 30 30 33 20 32 32 3a 32 32 3a 30 37 20  l 2003 22:22:07 
00d0: 2d 30 30 30 30 09 31 2e 31 31 0a 2b 2b 2b 20 64  -0000.1.11.+++ d
00e0: 6f 63 2f 65 78 70 72 2e 6e 09 31 32 20 53 65 70  oc/expr.n.12 Sep
00f0: 20 32 30 30 33 20 32 33 3a 34 31 3a 30 36 20 2d   2003 23:41:06 -
0100: 30 30 30 30 0a 40 40 20 2d 38 2c 37 20 2b 38 2c  0000.@@ -8,7 +8,
0110: 37 20 40 40 0a 20 27 5c 22 20 52 43 53 3a 20 40  7 @@. '\" RCS: @
0120: 28 23 29 20 24 49 64 3a 20 65 78 70 72 2e 6e 2c  (#) $Id: expr.n,
0130: 76 20 31 2e 31 31 20 32 30 30 33 2f 30 37 2f 30  v 1.11 2003/07/0
0140: 34 20 32 32 3a 32 32 3a 30 37 20 64 6b 66 20 45  4 22:22:07 dkf E
0150: 78 70 20 24 0a 20 27 5c 22 20 0a 20 2e 73 6f 20  xp $. '\" . .so 
0160: 6d 61 6e 2e 6d 61 63 72 6f 73 0a 2d 2e 54 48 20  man.macros.-.TH 
0170: 65 78 70 72 20 6e 20 38 2e 34 20 54 63 6c 20 22  expr n 8.4 Tcl "
0180: 54 63 6c 20 42 75 69 6c 74 2d 49 6e 20 43 6f 6d  Tcl Built-In Com
0190: 6d 61 6e 64 73 22 0a 2b 2e 54 48 20 65 78 70 72  mands".+.TH expr
01a0: 20 6e 20 38 2e 35 20 54 63 6c 20 22 54 63 6c 20   n 8.5 Tcl "Tcl 
01b0: 42 75 69 6c 74 2d 49 6e 20 43 6f 6d 6d 61 6e 64  Built-In Command
01c0: 73 22 0a 20 2e 42 53 0a 20 27 5c 22 20 4e 6f 74  s". .BS. '\" Not
01d0: 65 3a 20 20 64 6f 20 6e 6f 74 20 6d 6f 64 69 66  e:  do not modif
01e0: 79 20 74 68 65 20 2e 53 48 20 4e 41 4d 45 20 6c  y the .SH NAME l
01f0: 69 6e 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ine immediately 
0200: 62 65 6c 6f 77 21 0a 20 2e 53 48 20 4e 41 4d 45  below!. .SH NAME
0210: 0a 40 40 20 2d 35 35 2c 31 32 20 2b 35 35 2c 31  .@@ -55,12 +55,1
0220: 30 20 40 40 0a 20 61 73 20 61 20 73 74 72 69 6e  0 @@. as a strin
0230: 67 20 28 61 6e 64 20 6f 6e 6c 79 20 61 20 6c 69  g (and only a li
0240: 6d 69 74 65 64 20 73 65 74 20 6f 66 20 6f 70 65  mited set of ope
0250: 72 61 74 6f 72 73 20 6d 61 79 20 62 65 20 61 70  rators may be ap
0260: 70 6c 69 65 64 20 74 6f 0a 20 69 74 29 2e 0a 20  plied to. it).. 
0270: 2e 50 50 0a 2d 2e 56 53 20 38 2e 34 0a 20 4f 6e  .PP.-.VS 8.4. On
0280: 20 33 32 2d 62 69 74 20 73 79 73 74 65 6d 73 2c   32-bit systems,
0290: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 73 20   integer values 
02a0: 4d 41 58 5f 49 4e 54 20 28 30 78 37 46 46 46 46  MAX_INT (0x7FFFF
02b0: 46 46 46 29 20 61 6e 64 20 4d 49 4e 5f 49 4e 54  FFF) and MIN_INT
02c0: 0a 20 28 2d 30 78 38 30 30 30 30 30 30 30 29 20  . (-0x80000000) 
02d0: 77 69 6c 6c 20 62 65 20 72 65 70 72 65 73 65 6e  will be represen
02e0: 74 65 64 20 61 73 20 33 32 2d 62 69 74 20 76 61  ted as 32-bit va
02f0: 6c 75 65 73 2c 20 61 6e 64 20 69 6e 74 65 67 65  lues, and intege
0300: 72 20 76 61 6c 75 65 73 0a 20 6f 75 74 73 69 64  r values. outsid
0310: 65 20 74 68 61 74 20 72 61 6e 67 65 20 77 69 6c  e that range wil
0320: 6c 20 62 65 20 72 65 70 72 65 73 65 6e 74 65 64  l be represented
0330: 20 61 73 20 36 34 2d 62 69 74 20 76 61 6c 75 65   as 64-bit value
0340: 73 20 28 69 66 20 74 68 61 74 20 69 73 0a 20 70  s (if that is. p
0350: 6f 73 73 69 62 6c 65 20 61 74 20 61 6c 6c 2e 29  ossible at all.)
0360: 0a 2d 2e 56 45 20 38 2e 34 0a 20 2e 50 50 0a 20  .-.VE 8.4. .PP. 
0370: 4f 70 65 72 61 6e 64 73 20 6d 61 79 20 62 65 20  Operands may be 
0380: 73 70 65 63 69 66 69 65 64 20 69 6e 20 61 6e 79  specified in any
0390: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
03a0: 67 20 77 61 79 73 3a 0a 20 2e 49 50 20 5b 31 5d  g ways:. .IP [1]
03b0: 0a 40 40 20 2d 31 31 37 2c 36 20 2b 31 31 35 2c  .@@ -117,6 +115,
03c0: 31 32 20 40 40 0a 20 6d 61 79 20 62 65 20 61 70  12 @@. may be ap
03d0: 70 6c 69 65 64 20 74 6f 20 73 74 72 69 6e 67 20  plied to string 
03e0: 6f 70 65 72 61 6e 64 73 2c 20 61 6e 64 20 62 69  operands, and bi
03f0: 74 2d 77 69 73 65 20 4e 4f 54 20 6d 61 79 20 62  t-wise NOT may b
0400: 65 0a 20 61 70 70 6c 69 65 64 20 6f 6e 6c 79 20  e. applied only 
0410: 74 6f 20 69 6e 74 65 67 65 72 73 2e 0a 20 2e 54  to integers.. .T
0420: 50 20 32 30 0a 2b 5c 66 42 2a 2a 5c 66 52 0a 2b  P 20.+\fB**\fR.+
0430: 2e 56 53 20 38 2e 35 0a 2b 45 78 70 6f 6e 65 6e  .VS 8.5.+Exponen
0440: 74 69 61 74 69 6f 6e 2e 20 20 4e 6f 6e 65 20 6f  tiation.  None o
0450: 66 20 74 68 65 73 65 20 6f 70 65 72 61 6e 64 73  f these operands
0460: 20 6d 61 79 20 62 65 20 61 70 70 6c 69 65 64 20   may be applied 
0470: 74 6f 20 73 74 72 69 6e 67 0a 2b 6f 70 65 72 61  to string.+opera
0480: 6e 64 73 2e 0a 2b 2e 56 45 20 38 2e 35 0a 2b 2e  nds..+.VE 8.5.+.
0490: 54 50 20 32 30 0a 20 5c 66 42 2a 5c 30 5c 30 2f  TP 20. \fB*\0\0/
04a0: 5c 30 5c 30 25 5c 66 52 0a 20 4d 75 6c 74 69 70  \0\0%\fR. Multip
04b0: 6c 79 2c 20 64 69 76 69 64 65 2c 20 72 65 6d 61  ly, divide, rema
04c0: 69 6e 64 65 72 2e 20 20 4e 6f 6e 65 20 6f 66 20  inder.  None of 
04d0: 74 68 65 73 65 20 6f 70 65 72 61 6e 64 73 20 6d  these operands m
04e0: 61 79 20 62 65 0a 20 61 70 70 6c 69 65 64 20 74  ay be. applied t
04f0: 6f 20 73 74 72 69 6e 67 20 6f 70 65 72 61 6e 64  o string operand
0500: 73 2c 20 61 6e 64 20 72 65 6d 61 69 6e 64 65 72  s, and remainder
0510: 20 6d 61 79 20 62 65 20 61 70 70 6c 69 65 64 20   may be applied 
0520: 6f 6e 6c 79 0a 40 40 20 2d 31 34 30 2c 31 32 20  only.@@ -140,12 
0530: 2b 31 34 34 2c 31 30 20 40 40 0a 20 5c 66 42 3d  +144,10 @@. \fB=
0540: 3d 5c 30 5c 30 21 3d 5c 66 52 0a 20 42 6f 6f 6c  =\0\0!=\fR. Bool
0550: 65 61 6e 20 65 71 75 61 6c 20 61 6e 64 20 6e 6f  ean equal and no
0560: 74 20 65 71 75 61 6c 2e 20 20 45 61 63 68 20 6f  t equal.  Each o
0570: 70 65 72 61 74 6f 72 20 70 72 6f 64 75 63 65 73  perator produces
0580: 20 61 20 7a 65 72 6f 2f 6f 6e 65 20 72 65 73 75   a zero/one resu
0590: 6c 74 2e 0a 20 56 61 6c 69 64 20 66 6f 72 20 61  lt.. Valid for a
05a0: 6c 6c 20 6f 70 65 72 61 6e 64 20 74 79 70 65 73  ll operand types
05b0: 2e 0a 2d 2e 56 53 20 38 2e 34 0a 20 2e 54 50 20  ..-.VS 8.4. .TP 
05c0: 32 30 0a 20 5c 66 42 65 71 5c 30 5c 30 6e 65 5c  20. \fBeq\0\0ne\
05d0: 66 52 0a 20 42 6f 6f 6c 65 61 6e 20 73 74 72 69  fR. Boolean stri
05e0: 6e 67 20 65 71 75 61 6c 20 61 6e 64 20 73 74 72  ng equal and str
05f0: 69 6e 67 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20  ing not equal.  
0600: 45 61 63 68 20 6f 70 65 72 61 74 6f 72 20 70 72  Each operator pr
0610: 6f 64 75 63 65 73 20 61 0a 20 7a 65 72 6f 2f 6f  oduces a. zero/o
0620: 6e 65 20 72 65 73 75 6c 74 2e 20 20 54 68 65 20  ne result.  The 
0630: 6f 70 65 72 61 6e 64 20 74 79 70 65 73 20 61 72  operand types ar
0640: 65 20 69 6e 74 65 72 70 72 65 74 65 64 20 6f 6e  e interpreted on
0650: 6c 79 20 61 73 20 73 74 72 69 6e 67 73 2e 0a 2d  ly as strings..-
0660: 2e 56 45 20 38 2e 34 0a 20 2e 54 50 20 32 30 0a  .VE 8.4. .TP 20.
0670: 20 5c 66 42 26 5c 66 52 0a 20 42 69 74 2d 77 69   \fB&\fR. Bit-wi
0680: 73 65 20 41 4e 44 2e 20 20 56 61 6c 69 64 20 66  se AND.  Valid f
0690: 6f 72 20 69 6e 74 65 67 65 72 20 6f 70 65 72 61  or integer opera
06a0: 6e 64 73 20 6f 6e 6c 79 2e 0a 40 40 20 2d 31 37  nds only..@@ -17
06b0: 33 2c 36 20 2b 31 37 35 2c 31 31 20 40 40 0a 20  3,6 +175,11 @@. 
06c0: 2e 4c 50 0a 20 53 65 65 20 74 68 65 20 43 20 6d  .LP. See the C m
06d0: 61 6e 75 61 6c 20 66 6f 72 20 6d 6f 72 65 20 64  anual for more d
06e0: 65 74 61 69 6c 73 20 6f 6e 20 74 68 65 20 72 65  etails on the re
06f0: 73 75 6c 74 73 0a 20 70 72 6f 64 75 63 65 64 20  sults. produced 
0700: 62 79 20 65 61 63 68 20 6f 70 65 72 61 74 6f 72  by each operator
0710: 2e 0a 2b 2e 56 53 20 38 2e 35 0a 2b 54 68 65 20  ..+.VS 8.5.+The 
0720: 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 20 6f  exponentiation o
0730: 70 65 72 61 74 6f 72 20 70 72 6f 6d 6f 74 65 73  perator promotes
0740: 20 74 79 70 65 73 20 6c 69 6b 65 20 74 68 65 20   types like the 
0750: 6d 75 6c 74 69 70 6c 79 20 61 6e 64 0a 2b 64 69  multiply and.+di
0760: 76 69 64 65 20 6f 70 65 72 61 74 6f 72 73 2c 20  vide operators, 
0770: 61 6e 64 20 70 72 6f 64 75 63 65 73 20 61 20 72  and produces a r
0780: 65 73 75 6c 74 20 74 68 61 74 20 69 73 20 74 68  esult that is th
0790: 65 20 73 61 6d 65 20 61 73 20 74 68 65 20 6f 75  e same as the ou
07a0: 74 70 75 74 0a 2b 6f 66 20 74 68 65 20 5c 66 42  tput.+of the \fB
07b0: 70 6f 77 5c 66 52 20 66 75 6e 63 74 69 6f 6e 20  pow\fR function 
07c0: 28 61 66 74 65 72 20 61 6e 79 20 74 79 70 65 20  (after any type 
07d0: 63 6f 6e 76 65 72 73 69 6f 6e 73 2e 29 0a 2b 2e  conversions.).+.
07e0: 56 45 20 38 2e 35 0a 20 41 6c 6c 20 6f 66 20 74  VE 8.5. All of t
07f0: 68 65 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74  he binary operat
0800: 6f 72 73 20 67 72 6f 75 70 20 6c 65 66 74 2d 74  ors group left-t
0810: 6f 2d 72 69 67 68 74 20 77 69 74 68 69 6e 20 74  o-right within t
0820: 68 65 20 73 61 6d 65 0a 20 70 72 65 63 65 64 65  he same. precede
0830: 6e 63 65 20 6c 65 76 65 6c 2e 20 20 46 6f 72 20  nce level.  For 
0840: 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 63 6f 6d  example, the com
0850: 6d 61 6e 64 0a 20 2e 43 53 0a 40 40 20 2d 32 36  mand. .CS.@@ -26
0860: 31 2c 31 33 20 2b 32 36 38 2c 31 31 20 40 40 0a  1,13 +268,11 @@.
0870: 20 5c 66 42 73 71 72 74 28 5c 66 49 78 5c 66 52   \fBsqrt(\fIx\fR
0880: 2a 5c 66 49 78 5c 66 52 2b 5c 66 49 79 5c 66 52  *\fIx\fR+\fIy\fR
0890: 2a 5c 66 49 79 5c 66 42 29 5c 66 52 2e 0a 20 2e  *\fIy\fB)\fR.. .
08a0: 54 50 0a 20 5c 66 42 69 6e 74 28 5c 66 49 61 72  TP. \fBint(\fIar
08b0: 67 5c 66 42 29 5c 66 52 0a 2d 2e 56 53 20 38 2e  g\fB)\fR.-.VS 8.
08c0: 34 0a 20 49 66 20 5c 66 49 61 72 67 5c 66 52 20  4. If \fIarg\fR 
08d0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61  is an integer va
08e0: 6c 75 65 20 6f 66 20 74 68 65 20 73 61 6d 65 20  lue of the same 
08f0: 77 69 64 74 68 20 61 73 20 74 68 65 20 6d 61 63  width as the mac
0900: 68 69 6e 65 0a 20 77 6f 72 64 2c 20 72 65 74 75  hine. word, retu
0910: 72 6e 73 20 5c 66 49 61 72 67 5c 66 52 2c 20 6f  rns \fIarg\fR, o
0920: 74 68 65 72 77 69 73 65 0a 20 63 6f 6e 76 65 72  therwise. conver
0930: 74 73 20 5c 66 49 61 72 67 5c 66 52 20 74 6f 20  ts \fIarg\fR to 
0940: 61 6e 20 69 6e 74 65 67 65 72 20 28 6f 66 20 74  an integer (of t
0950: 68 65 20 73 61 6d 65 20 73 69 7a 65 20 61 73 20  he same size as 
0960: 61 20 6d 61 63 68 69 6e 65 20 77 6f 72 64 2c 0a  a machine word,.
0970: 20 69 2e 65 2e 20 33 32 2d 62 69 74 73 20 6f 6e   i.e. 32-bits on
0980: 20 33 32 2d 62 69 74 20 73 79 73 74 65 6d 73 2c   32-bit systems,
0990: 20 61 6e 64 20 36 34 2d 62 69 74 73 20 6f 6e 20   and 64-bits on 
09a0: 36 34 2d 62 69 74 20 73 79 73 74 65 6d 73 29 20  64-bit systems) 
09b0: 62 79 0a 20 74 72 75 6e 63 61 74 69 6f 6e 20 61  by. truncation a
09c0: 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 63  nd returns the c
09d0: 6f 6e 76 65 72 74 65 64 20 76 61 6c 75 65 2e 0a  onverted value..
09e0: 2d 2e 56 45 20 38 2e 34 0a 20 2e 54 50 0a 20 5c  -.VE 8.4. .TP. \
09f0: 66 42 6c 6f 67 28 5c 66 49 61 72 67 5c 66 42 29  fBlog(\fIarg\fB)
0a00: 5c 66 52 0a 20 52 65 74 75 72 6e 73 20 74 68 65  \fR. Returns the
0a10: 20 6e 61 74 75 72 61 6c 20 6c 6f 67 61 72 69 74   natural logarit
0a20: 68 6d 20 6f 66 20 5c 66 49 61 72 67 5c 66 52 2e  hm of \fIarg\fR.
0a30: 20 20 5c 66 49 41 72 67 5c 66 52 20 6d 75 73 74    \fIArg\fR must
0a40: 20 62 65 20 61 0a 40 40 20 2d 33 31 36 2c 31 30   be a.@@ -316,10
0a50: 20 2b 33 32 31 2c 38 20 40 40 0a 20 52 65 74 75   +321,8 @@. Retu
0a60: 72 6e 73 20 74 68 65 20 68 79 70 65 72 62 6f 6c  rns the hyperbol
0a70: 69 63 20 74 61 6e 67 65 6e 74 20 6f 66 20 5c 66  ic tangent of \f
0a80: 49 61 72 67 5c 66 52 2e 0a 20 2e 54 50 0a 20 5c  Iarg\fR.. .TP. \
0a90: 66 42 77 69 64 65 28 5c 66 49 61 72 67 5c 66 42  fBwide(\fIarg\fB
0aa0: 29 5c 66 52 0a 2d 2e 56 53 20 38 2e 34 0a 20 43  )\fR.-.VS 8.4. C
0ab0: 6f 6e 76 65 72 74 73 20 5c 66 49 61 72 67 5c 66  onverts \fIarg\f
0ac0: 52 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20  R to an integer 
0ad0: 76 61 6c 75 65 20 61 74 20 6c 65 61 73 74 20 36  value at least 6
0ae0: 34 2d 62 69 74 73 20 77 69 64 65 20 28 62 79 20  4-bits wide (by 
0af0: 73 69 67 6e 2d 65 78 74 65 6e 73 69 6f 6e 0a 20  sign-extension. 
0b00: 69 66 20 5c 66 49 61 72 67 5c 66 52 20 69 73 20  if \fIarg\fR is 
0b10: 61 20 33 32 2d 62 69 74 20 6e 75 6d 62 65 72 29  a 32-bit number)
0b20: 20 69 66 20 69 74 20 69 73 20 6e 6f 74 20 6f 6e   if it is not on
0b30: 65 20 61 6c 72 65 61 64 79 2e 0a 2d 2e 56 45 20  e already..-.VE 
0b40: 38 2e 34 0a 20 2e 50 50 0a 20 49 6e 20 61 64 64  8.4. .PP. In add
0b50: 69 74 69 6f 6e 20 74 6f 20 74 68 65 73 65 20 70  ition to these p
0b60: 72 65 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69  redefined functi
0b70: 6f 6e 73 2c 20 61 70 70 6c 69 63 61 74 69 6f 6e  ons, application
0b80: 73 20 6d 61 79 0a 20 64 65 66 69 6e 65 20 61 64  s may. define ad
0b90: 64 69 74 69 6f 6e 61 6c 20 66 75 6e 63 74 69 6f  ditional functio
0ba0: 6e 73 20 75 73 69 6e 67 20 5c 66 42 54 63 6c 5f  ns using \fBTcl_
0bb0: 43 72 65 61 74 65 4d 61 74 68 46 75 6e 63 5c 66  CreateMathFunc\f
0bc0: 52 28 29 2e 0a 40 40 20 2d 33 36 35 2c 39 20 2b  R()..@@ -365,9 +
0bd0: 33 36 38 2c 37 20 40 40 0a 20 53 74 72 69 6e 67  368,7 @@. String
0be0: 20 76 61 6c 75 65 73 20 6d 61 79 20 62 65 20 75   values may be u
0bf0: 73 65 64 20 61 73 20 6f 70 65 72 61 6e 64 73 20  sed as operands 
0c00: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
0c10: 6e 20 6f 70 65 72 61 74 6f 72 73 2c 0a 20 61 6c  n operators,. al
0c20: 74 68 6f 75 67 68 20 74 68 65 20 65 78 70 72 65  though the expre
0c30: 73 73 69 6f 6e 20 65 76 61 6c 75 61 74 6f 72 20  ssion evaluator 
0c40: 74 72 69 65 73 20 74 6f 20 64 6f 20 63 6f 6d 70  tries to do comp
0c50: 61 72 69 73 6f 6e 73 20 61 73 20 69 6e 74 65 67  arisons as integ
0c60: 65 72 0a 20 6f 72 20 66 6c 6f 61 74 69 6e 67 2d  er. or floating-
0c70: 70 6f 69 6e 74 20 77 68 65 6e 20 69 74 20 63 61  point when it ca
0c80: 6e 2c 0a 2d 2e 56 53 20 38 2e 34 0a 20 65 78 63  n,.-.VS 8.4. exc
0c90: 65 70 74 20 69 6e 20 74 68 65 20 63 61 73 65 20  ept in the case 
0ca0: 6f 66 20 74 68 65 20 5c 66 42 65 71 5c 66 52 20  of the \fBeq\fR 
0cb0: 61 6e 64 20 5c 66 42 6e 65 5c 66 52 20 6f 70 65  and \fBne\fR ope
0cc0: 72 61 74 6f 72 73 2e 0a 2d 2e 56 45 20 38 2e 34  rators..-.VE 8.4
0cd0: 0a 20 49 66 20 6f 6e 65 20 6f 66 20 74 68 65 20  . If one of the 
0ce0: 6f 70 65 72 61 6e 64 73 20 6f 66 20 61 20 63 6f  operands of a co
0cf0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73 74  mparison is a st
0d00: 72 69 6e 67 20 61 6e 64 20 74 68 65 20 6f 74 68  ring and the oth
0d10: 65 72 0a 20 68 61 73 20 61 20 6e 75 6d 65 72 69  er. has a numeri
0d20: 63 20 76 61 6c 75 65 2c 20 74 68 65 20 6e 75 6d  c value, the num
0d30: 65 72 69 63 20 6f 70 65 72 61 6e 64 20 69 73 20  eric operand is 
0d40: 63 6f 6e 76 65 72 74 65 64 20 62 61 63 6b 20 74  converted back t
0d50: 6f 0a 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e  o. a string usin
0d60: 67 20 74 68 65 20 43 20 5c 66 49 73 70 72 69 6e  g the C \fIsprin
0d70: 74 66 5c 66 52 20 66 6f 72 6d 61 74 20 73 70 65  tf\fR format spe
0d80: 63 69 66 69 65 72 0a 40 40 20 2d 33 38 34 2c 31  cifier.@@ -384,1
0d90: 30 20 2b 33 38 35 2c 37 20 40 40 0a 20 70 6f 73  0 +385,7 @@. pos
0da0: 73 69 62 6c 65 2c 20 69 74 20 69 73 6e 27 74 20  sible, it isn't 
0db0: 67 65 6e 65 72 61 6c 6c 79 20 61 20 67 6f 6f 64  generally a good
0dc0: 20 69 64 65 61 20 74 6f 20 75 73 65 20 6f 70 65   idea to use ope
0dd0: 72 61 74 6f 72 73 20 6c 69 6b 65 20 5c 66 42 3d  rators like \fB=
0de0: 3d 5c 66 52 0a 20 77 68 65 6e 20 79 6f 75 20 72  =\fR. when you r
0df0: 65 61 6c 6c 79 20 77 61 6e 74 20 73 74 72 69 6e  eally want strin
0e00: 67 20 63 6f 6d 70 61 72 69 73 6f 6e 20 61 6e 64  g comparison and
0e10: 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 74   the values of t
0e20: 68 65 0a 20 6f 70 65 72 61 6e 64 73 20 63 6f 75  he. operands cou
0e30: 6c 64 20 62 65 20 61 72 62 69 74 72 61 72 79 3b  ld be arbitrary;
0e40: 20 20 69 74 27 73 20 62 65 74 74 65 72 20 69 6e    it's better in
0e50: 20 74 68 65 73 65 20 63 61 73 65 73 20 74 6f 20   these cases to 
0e60: 75 73 65 0a 2d 2e 56 53 20 38 2e 34 0a 2d 74 68  use.-.VS 8.4.-th
0e70: 65 20 5c 66 42 65 71 5c 66 52 20 6f 72 20 5c 66  e \fBeq\fR or \f
0e80: 42 6e 65 5c 66 52 20 6f 70 65 72 61 74 6f 72 73  Bne\fR operators
0e90: 2c 20 6f 72 0a 2d 2e 56 45 20 38 2e 34 0a 2d 74  , or.-.VE 8.4.-t
0ea0: 68 65 20 5c 66 42 73 74 72 69 6e 67 5c 66 52 20  he \fBstring\fR 
0eb0: 63 6f 6d 6d 61 6e 64 20 69 6e 73 74 65 61 64 2e  command instead.
0ec0: 0a 2b 74 68 65 20 5c 66 42 65 71 5c 66 52 20 6f  .+the \fBeq\fR o
0ed0: 72 20 5c 66 42 6e 65 5c 66 52 20 6f 70 65 72 61  r \fBne\fR opera
0ee0: 74 6f 72 73 2c 20 6f 72 20 74 68 65 20 5c 66 42  tors, or the \fB
0ef0: 73 74 72 69 6e 67 5c 66 52 20 63 6f 6d 6d 61 6e  string\fR comman
0f00: 64 20 69 6e 73 74 65 61 64 2e 0a 20 0a 20 2e 53  d instead.. . .S
0f10: 48 20 22 50 45 52 46 4f 52 4d 41 4e 43 45 20 43  H "PERFORMANCE C
0f20: 4f 4e 53 49 44 45 52 41 54 49 4f 4e 53 22 0a 20  ONSIDERATIONS". 
0f30: 2e 50 50 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72  .PP.Index: gener
0f40: 69 63 2f 74 63 6c 43 6f 6d 70 45 78 70 72 2e 63  ic/tclCompExpr.c
0f50: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .===============
0f60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0f70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0f80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0f90: 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f  ====.RCS file: /
0fa0: 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f  cvsroot/tcl/tcl/
0fb0: 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70 45  generic/tclCompE
0fc0: 78 70 72 2e 63 2c 76 0a 72 65 74 72 69 65 76 69  xpr.c,v.retrievi
0fd0: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 34  ng revision 1.14
0fe0: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 31 34 20  .diff -u -r1.14 
0ff0: 74 63 6c 43 6f 6d 70 45 78 70 72 2e 63 0a 2d 2d  tclCompExpr.c.--
1000: 2d 20 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d  - generic/tclCom
1010: 70 45 78 70 72 2e 63 09 31 33 20 4d 61 72 20 32  pExpr.c.13 Mar 2
1020: 30 30 33 20 30 32 3a 34 38 3a 35 32 20 2d 30 30  003 02:48:52 -00
1030: 30 30 09 31 2e 31 34 0a 2b 2b 2b 20 67 65 6e 65  00.1.14.+++ gene
1040: 72 69 63 2f 74 63 6c 43 6f 6d 70 45 78 70 72 2e  ric/tclCompExpr.
1050: 63 09 31 32 20 53 65 70 20 32 30 30 33 20 32 33  c.12 Sep 2003 23
1060: 3a 34 31 3a 30 36 20 2d 30 30 30 30 0a 40 40 20  :41:06 -0000.@@ 
1070: 2d 39 32 2c 36 20 2b 39 32 2c 37 20 40 40 0a 20  -92,6 +92,7 @@. 
1080: 23 64 65 66 69 6e 65 20 4f 50 5f 42 49 54 4e 4f  #define OP_BITNO
1090: 54 09 32 30 0a 20 23 64 65 66 69 6e 65 20 4f 50  T.20. #define OP
10a0: 5f 53 54 52 45 51 09 32 31 0a 20 23 64 65 66 69  _STREQ.21. #defi
10b0: 6e 65 20 4f 50 5f 53 54 52 4e 45 51 09 32 32 0a  ne OP_STRNEQ.22.
10c0: 2b 23 64 65 66 69 6e 65 20 4f 50 5f 45 58 50 4f  +#define OP_EXPO
10d0: 4e 09 32 33 0a 20 0a 20 2f 2a 0a 20 20 2a 20 54  N.23. . /*.  * T
10e0: 61 62 6c 65 20 64 65 73 63 72 69 62 69 6e 67 20  able describing 
10f0: 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 6f  the expression o
1100: 70 65 72 61 74 6f 72 73 2e 20 45 6e 74 72 69 65  perators. Entrie
1110: 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20  s in this table 
1120: 6d 75 73 74 0a 40 40 20 2d 31 33 34 2c 36 20 2b  must.@@ -134,6 +
1130: 31 33 35 2c 37 20 40 40 0a 20 20 20 20 20 7b 22  135,7 @@.     {"
1140: 7e 22 2c 20 20 20 31 2c 20 20 49 4e 53 54 5f 42  ~",   1,  INST_B
1150: 49 54 4e 4f 54 7d 2c 0a 20 20 20 20 20 7b 22 65  ITNOT},.     {"e
1160: 71 22 2c 20 20 32 2c 20 20 49 4e 53 54 5f 53 54  q",  2,  INST_ST
1170: 52 5f 45 51 7d 2c 0a 20 20 20 20 20 7b 22 6e 65  R_EQ},.     {"ne
1180: 22 2c 20 20 32 2c 20 20 49 4e 53 54 5f 53 54 52  ",  2,  INST_STR
1190: 5f 4e 45 51 7d 2c 0a 2b 20 20 20 20 7b 22 2a 2a  _NEQ},.+    {"**
11a0: 22 2c 20 20 32 2c 09 49 4e 53 54 5f 45 58 50 4f  ",  2,.INST_EXPO
11b0: 4e 7d 2c 0a 20 20 20 20 20 7b 4e 55 4c 4c 7d 0a  N},.     {NULL}.
11c0: 20 7d 3b 0a 20 0a 49 6e 64 65 78 3a 20 67 65 6e   };. .Index: gen
11d0: 65 72 69 63 2f 74 63 6c 43 6f 6d 70 69 6c 65 2e  eric/tclCompile.
11e0: 63 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  c.==============
11f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1220: 3d 3d 3d 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20  =====.RCS file: 
1230: 2f 63 76 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c  /cvsroot/tcl/tcl
1240: 2f 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70  /generic/tclComp
1250: 69 6c 65 2e 63 2c 76 0a 72 65 74 72 69 65 76 69  ile.c,v.retrievi
1260: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 34 39  ng revision 1.49
1270: 0a 64 69 66 66 20 2d 75 20 2d 72 31 2e 34 39 20  .diff -u -r1.49 
1280: 74 63 6c 43 6f 6d 70 69 6c 65 2e 63 0a 2d 2d 2d  tclCompile.c.---
1290: 20 67 65 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70   generic/tclComp
12a0: 69 6c 65 2e 63 09 39 20 4d 61 79 20 32 30 30 33  ile.c.9 May 2003
12b0: 20 31 33 3a 35 33 3a 34 32 20 2d 30 30 30 30 09   13:53:42 -0000.
12c0: 31 2e 34 39 0a 2b 2b 2b 20 67 65 6e 65 72 69 63  1.49.+++ generic
12d0: 2f 74 63 6c 43 6f 6d 70 69 6c 65 2e 63 09 31 32  /tclCompile.c.12
12e0: 20 53 65 70 20 32 30 30 33 20 32 33 3a 34 31 3a   Sep 2003 23:41:
12f0: 30 36 20 2d 30 30 30 30 0a 40 40 20 2d 32 37 31  06 -0000.@@ -271
1300: 2c 36 20 2b 32 37 31 2c 38 20 40 40 0a 20 09 20  ,6 +271,8 @@. . 
1310: 2a 2f 0a 20 20 20 20 20 7b 22 72 65 74 75 72 6e  */.     {"return
1320: 22 2c 09 09 20 20 31 2c 20 20 20 2d 31 2c 20 20  ",..  1,   -1,  
1330: 20 20 20 20 20 20 20 20 30 2c 20 20 20 7b 4f 50          0,   {OP
1340: 45 52 41 4e 44 5f 4e 4f 4e 45 7d 7d 2c 0a 20 09  ERAND_NONE}},. .
1350: 2f 2a 20 72 65 74 75 72 6e 20 54 43 4c 5f 52 45  /* return TCL_RE
1360: 54 55 52 4e 20 63 6f 64 65 2e 20 2a 2f 0a 2b 20  TURN code. */.+ 
1370: 20 20 20 7b 22 65 78 70 6f 6e 22 2c 09 09 20 20     {"expon",..  
1380: 31 2c 20 20 20 2d 31 2c 09 20 20 20 20 30 2c 09  1,   -1,.    0,.
1390: 20 7b 4f 50 45 52 41 4e 44 5f 4e 4f 4e 45 7d 7d   {OPERAND_NONE}}
13a0: 2c 0a 2b 09 2f 2a 20 42 69 6e 61 72 79 20 65 78  ,.+./* Binary ex
13b0: 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 20 6f 70 65  ponentiation ope
13c0: 72 61 74 6f 72 3a 20 70 75 73 68 20 28 73 74 6b  rator: push (stk
13d0: 6e 65 78 74 20 2a 2a 20 73 74 6b 74 6f 70 29 20  next ** stktop) 
13e0: 2a 2f 0a 20 20 20 20 20 7b 30 7d 0a 20 7d 3b 0a  */.     {0}. };.
13f0: 20 0a 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63   .Index: generic
1400: 2f 74 63 6c 43 6f 6d 70 69 6c 65 2e 68 0a 3d 3d  /tclCompile.h.==
1410: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1420: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1430: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1440: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1450: 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73  =.RCS file: /cvs
1460: 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e  root/tcl/tcl/gen
1470: 65 72 69 63 2f 74 63 6c 43 6f 6d 70 69 6c 65 2e  eric/tclCompile.
1480: 68 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72  h,v.retrieving r
1490: 65 76 69 73 69 6f 6e 20 31 2e 33 36 0a 64 69 66  evision 1.36.dif
14a0: 66 20 2d 75 20 2d 72 31 2e 33 36 20 74 63 6c 43  f -u -r1.36 tclC
14b0: 6f 6d 70 69 6c 65 2e 68 0a 2d 2d 2d 20 67 65 6e  ompile.h.--- gen
14c0: 65 72 69 63 2f 74 63 6c 43 6f 6d 70 69 6c 65 2e  eric/tclCompile.
14d0: 68 09 31 39 20 4d 61 72 20 32 30 30 33 20 31 36  h.19 Mar 2003 16
14e0: 3a 35 31 3a 34 32 20 2d 30 30 30 30 09 31 2e 33  :51:42 -0000.1.3
14f0: 36 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63  6.+++ generic/tc
1500: 6c 43 6f 6d 70 69 6c 65 2e 68 09 31 32 20 53 65  lCompile.h.12 Se
1510: 70 20 32 30 30 33 20 32 33 3a 34 31 3a 30 37 20  p 2003 23:41:07 
1520: 2d 30 30 30 30 0a 40 40 20 2d 35 32 34 2c 36 20  -0000.@@ -524,6 
1530: 2b 35 32 34 2c 38 20 40 40 0a 20 0a 20 23 64 65  +524,8 @@. . #de
1540: 66 69 6e 65 20 49 4e 53 54 5f 52 45 54 55 52 4e  fine INST_RETURN
1550: 09 09 09 39 38 0a 20 0a 2b 23 64 65 66 69 6e 65  ...98. .+#define
1560: 20 49 4e 53 54 5f 45 58 50 4f 4e 09 09 09 39 39   INST_EXPON...99
1570: 20 2f 2a 20 54 49 50 23 31 32 33 20 2d 20 65 78   /* TIP#123 - ex
1580: 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 20 2a 2f 0a  ponentiation */.
1590: 2b 0a 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 6f  +. /* The last o
15a0: 70 63 6f 64 65 20 2a 2f 0a 20 23 64 65 66 69 6e  pcode */. #defin
15b0: 65 20 4c 41 53 54 5f 49 4e 53 54 5f 4f 50 43 4f  e LAST_INST_OPCO
15c0: 44 45 20 20 20 20 20 20 20 20 09 39 38 0a 20 0a  DE        .98. .
15d0: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74  Index: generic/t
15e0: 63 6c 45 78 65 63 75 74 65 2e 63 0a 3d 3d 3d 3d  clExecute.c.====
15f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1600: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1610: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1620: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
1630: 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72 6f  RCS file: /cvsro
1640: 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65 72  ot/tcl/tcl/gener
1650: 69 63 2f 74 63 6c 45 78 65 63 75 74 65 2e 63 2c  ic/tclExecute.c,
1660: 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72 65 76  v.retrieving rev
1670: 69 73 69 6f 6e 20 31 2e 31 30 35 0a 64 69 66 66  ision 1.105.diff
1680: 20 2d 75 20 2d 72 31 2e 31 30 35 20 74 63 6c 45   -u -r1.105 tclE
1690: 78 65 63 75 74 65 2e 63 0a 2d 2d 2d 20 67 65 6e  xecute.c.--- gen
16a0: 65 72 69 63 2f 74 63 6c 45 78 65 63 75 74 65 2e  eric/tclExecute.
16b0: 63 09 35 20 41 75 67 20 32 30 30 33 20 31 35 3a  c.5 Aug 2003 15:
16c0: 35 39 3a 31 35 20 2d 30 30 30 30 09 31 2e 31 30  59:15 -0000.1.10
16d0: 35 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f 74 63  5.+++ generic/tc
16e0: 6c 45 78 65 63 75 74 65 2e 63 09 31 32 20 53 65  lExecute.c.12 Se
16f0: 70 20 32 30 30 33 20 32 33 3a 34 31 3a 30 37 20  p 2003 23:41:07 
1700: 2d 30 30 30 30 0a 40 40 20 2d 38 37 2c 31 33 20  -0000.@@ -87,13 
1710: 2b 38 37 2c 31 36 20 40 40 0a 20 20 2a 20 4d 61  +87,16 @@.  * Ma
1720: 70 70 69 6e 67 20 66 72 6f 6d 20 65 78 70 72 65  pping from expre
1730: 73 73 69 6f 6e 20 69 6e 73 74 72 75 63 74 69 6f  ssion instructio
1740: 6e 20 6f 70 63 6f 64 65 73 20 74 6f 20 73 74 72  n opcodes to str
1750: 69 6e 67 73 3b 20 75 73 65 64 20 66 6f 72 20 65  ings; used for e
1760: 72 72 6f 72 0a 20 20 2a 20 6d 65 73 73 61 67 65  rror.  * message
1770: 73 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  s. Note that the
1780: 73 65 20 65 6e 74 72 69 65 73 20 6d 75 73 74 20  se entries must 
1790: 6d 61 74 63 68 20 74 68 65 20 6f 72 64 65 72 20  match the order 
17a0: 61 6e 64 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  and number of th
17b0: 65 0a 20 20 2a 20 65 78 70 72 65 73 73 69 6f 6e  e.  * expression
17c0: 20 6f 70 63 6f 64 65 73 20 28 65 2e 67 2e 2c 20   opcodes (e.g., 
17d0: 49 4e 53 54 5f 4c 4f 52 29 20 69 6e 20 74 63 6c  INST_LOR) in tcl
17e0: 43 6f 6d 70 69 6c 65 2e 68 2e 0a 2b 20 2a 0a 2b  Compile.h..+ *.+
17f0: 20 2a 20 44 6f 65 73 20 6e 6f 74 20 69 6e 63 6c   * Does not incl
1800: 75 64 65 20 74 68 65 20 73 74 72 69 6e 67 20 66  ude the string f
1810: 6f 72 20 49 4e 53 54 5f 45 58 50 4f 4e 20 28 61  or INST_EXPON (a
1820: 6e 64 20 62 65 79 6f 6e 64 29 2c 20 61 73 20 74  nd beyond), as t
1830: 68 61 74 20 69 73 0a 2b 20 2a 20 64 69 73 6a 6f  hat is.+ * disjo
1840: 69 6e 74 20 66 6f 72 20 62 61 63 6b 77 61 72 64  int for backward
1850: 2d 63 6f 6d 70 61 74 61 62 69 6c 69 74 79 20 72  -compatability r
1860: 65 61 73 6f 6e 73 0a 20 20 2a 2f 0a 20 0a 2d 73  easons.  */. .-s
1870: 74 61 74 69 63 20 63 68 61 72 20 2a 6f 70 65 72  tatic char *oper
1880: 61 74 6f 72 53 74 72 69 6e 67 73 5b 5d 20 3d 20  atorStrings[] = 
1890: 7b 0a 2b 73 74 61 74 69 63 20 43 4f 4e 53 54 20  {.+static CONST 
18a0: 63 68 61 72 20 2a 6f 70 65 72 61 74 6f 72 53 74  char *operatorSt
18b0: 72 69 6e 67 73 5b 5d 20 3d 20 7b 0a 20 20 20 20  rings[] = {.    
18c0: 20 22 7c 7c 22 2c 20 22 26 26 22 2c 20 22 7c 22   "||", "&&", "|"
18d0: 2c 20 22 5e 22 2c 20 22 26 22 2c 20 22 3d 3d 22  , "^", "&", "=="
18e0: 2c 20 22 21 3d 22 2c 20 22 3c 22 2c 20 22 3e 22  , "!=", "<", ">"
18f0: 2c 20 22 3c 3d 22 2c 20 22 3e 3d 22 2c 20 22 3c  , "<=", ">=", "<
1900: 3c 22 2c 20 22 3e 3e 22 2c 0a 20 20 20 20 20 22  <", ">>",.     "
1910: 2b 22 2c 20 22 2d 22 2c 20 22 2a 22 2c 20 22 2f  +", "-", "*", "/
1920: 22 2c 20 22 25 22 2c 20 22 2b 22 2c 20 22 2d 22  ", "%", "+", "-"
1930: 2c 20 22 7e 22 2c 20 22 21 22 2c 0a 20 20 20 20  , "~", "!",.    
1940: 20 22 42 55 49 4c 54 49 4e 20 46 55 4e 43 54 49   "BUILTIN FUNCTI
1950: 4f 4e 22 2c 20 22 46 55 4e 43 54 49 4f 4e 22 2c  ON", "FUNCTION",
1960: 0a 2d 20 20 20 20 22 22 2c 20 22 22 2c 20 22 22  .-    "", "", ""
1970: 2c 20 22 22 2c 20 22 22 2c 20 22 22 2c 20 22 22  , "", "", "", ""
1980: 2c 20 22 22 2c 20 22 65 71 22 2c 20 22 6e 65 22  , "", "eq", "ne"
1990: 2c 0a 2b 20 20 20 20 22 22 2c 20 22 22 2c 20 22  ,.+    "", "", "
19a0: 22 2c 20 22 22 2c 20 22 22 2c 20 22 22 2c 20 22  ", "", "", "", "
19b0: 22 2c 20 22 22 2c 20 22 65 71 22 2c 20 22 6e 65  ", "", "eq", "ne
19c0: 22 0a 20 7d 3b 0a 20 0a 20 2f 2a 0a 40 40 20 2d  ". };. . /*.@@ -
19d0: 33 37 38 2c 36 20 2b 33 38 31 2c 31 30 20 40 40  378,6 +381,10 @@
19e0: 0a 20 23 65 6e 64 69 66 20 2f 2a 20 54 43 4c 5f  . #endif /* TCL_
19f0: 43 4f 4d 50 49 4c 45 5f 44 45 42 55 47 20 2a 2f  COMPILE_DEBUG */
1a00: 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 56 65  . static int..Ve
1a10: 72 69 66 79 45 78 70 72 4f 62 6a 54 79 70 65 20  rifyExprObjType 
1a20: 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 54 63 6c  _ANSI_ARGS_((Tcl
1a30: 5f 49 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c  _Interp *interp,
1a40: 0a 20 09 09 09 20 20 20 20 54 63 6c 5f 4f 62 6a  . ...    Tcl_Obj
1a50: 20 2a 6f 62 6a 50 74 72 29 29 3b 0a 2b 73 74 61   *objPtr));.+sta
1a60: 74 69 63 20 54 63 6c 5f 57 69 64 65 49 6e 74 09  tic Tcl_WideInt.
1a70: 45 78 70 6f 6e 57 69 64 65 20 5f 41 4e 53 49 5f  ExponWide _ANSI_
1a80: 41 52 47 53 5f 28 28 54 63 6c 5f 57 69 64 65 49  ARGS_((Tcl_WideI
1a90: 6e 74 20 77 2c 20 54 63 6c 5f 57 69 64 65 49 6e  nt w, Tcl_WideIn
1aa0: 74 20 77 32 2c 0a 2b 09 09 09 20 20 20 20 69 6e  t w2,.+...    in
1ab0: 74 20 2a 65 72 72 45 78 70 6f 6e 29 29 3b 0a 2b  t *errExpon));.+
1ac0: 73 74 61 74 69 63 20 6c 6f 6e 67 09 09 45 78 70  static long..Exp
1ad0: 6f 6e 4c 6f 6e 67 20 5f 41 4e 53 49 5f 41 52 47  onLong _ANSI_ARG
1ae0: 53 5f 28 28 6c 6f 6e 67 20 69 2c 20 6c 6f 6e 67  S_((long i, long
1af0: 20 69 32 2c 0a 2b 09 09 09 20 20 20 20 69 6e 74   i2,.+...    int
1b00: 20 2a 65 72 72 45 78 70 6f 6e 29 29 3b 0a 20 0a   *errExpon));. .
1b10: 20 2f 2a 0a 20 20 2a 20 54 61 62 6c 65 20 64 65   /*.  * Table de
1b20: 73 63 72 69 62 69 6e 67 20 74 68 65 20 62 75 69  scribing the bui
1b30: 6c 74 2d 69 6e 20 6d 61 74 68 20 66 75 6e 63 74  lt-in math funct
1b40: 69 6f 6e 73 2e 20 45 6e 74 72 69 65 73 20 69 6e  ions. Entries in
1b50: 20 74 68 69 73 20 74 61 62 6c 65 20 61 72 65 0a   this table are.
1b60: 40 40 20 2d 33 31 35 39 2c 36 20 2b 33 31 36 36  @@ -3159,6 +3166
1b70: 2c 37 20 40 40 0a 20 20 20 20 20 63 61 73 65 20  ,7 @@.     case 
1b80: 49 4e 53 54 5f 53 55 42 3a 0a 20 20 20 20 20 63  INST_SUB:.     c
1b90: 61 73 65 20 49 4e 53 54 5f 4d 55 4c 54 3a 0a 20  ase INST_MULT:. 
1ba0: 20 20 20 20 63 61 73 65 20 49 4e 53 54 5f 44 49      case INST_DI
1bb0: 56 3a 0a 2b 20 20 20 20 63 61 73 65 20 49 4e 53  V:.+    case INS
1bc0: 54 5f 45 58 50 4f 4e 3a 0a 20 20 20 20 20 7b 0a  T_EXPON:.     {.
1bd0: 20 09 2f 2a 0a 20 09 20 2a 20 4f 70 65 72 61 6e   ./*. . * Operan
1be0: 64 73 20 6d 75 73 74 20 62 65 20 6e 75 6d 65 72  ds must be numer
1bf0: 69 63 20 61 6e 64 20 69 6e 74 73 20 67 65 74 20  ic and ints get 
1c00: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 66 6c 6f  converted to flo
1c10: 61 74 73 0a 40 40 20 2d 33 32 37 35 2c 36 20 2b  ats.@@ -3275,6 +
1c20: 33 32 38 33 2c 31 33 20 40 40 0a 20 09 09 20 20  3283,13 @@. ..  
1c30: 20 20 7d 0a 20 09 09 20 20 20 20 64 52 65 73 75    }. ..    dResu
1c40: 6c 74 20 3d 20 64 31 20 2f 20 64 32 3b 0a 20 09  lt = d1 / d2;. .
1c50: 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 09 63  .    break;.+..c
1c60: 61 73 65 20 49 4e 53 54 5f 45 58 50 4f 4e 3a 0a  ase INST_EXPON:.
1c70: 2b 09 09 20 20 20 20 69 66 20 28 64 31 3d 3d 30  +..    if (d1==0
1c80: 2e 30 20 26 26 20 64 32 3c 30 2e 30 29 20 7b 0a  .0 && d2<0.0) {.
1c90: 2b 09 09 09 54 52 41 43 45 28 28 22 25 2e 36 67  +...TRACE(("%.6g
1ca0: 20 25 2e 36 67 20 3d 3e 20 45 58 50 4f 4e 45 4e   %.6g => EXPONEN
1cb0: 54 20 4f 46 20 5a 45 52 4f 5c 6e 22 2c 20 64 31  T OF ZERO\n", d1
1cc0: 2c 20 64 32 29 29 3b 0a 2b 09 09 09 67 6f 74 6f  , d2));.+...goto
1cd0: 20 65 78 70 6f 6e 4f 66 5a 65 72 6f 3b 0a 2b 09   exponOfZero;.+.
1ce0: 09 20 20 20 20 7d 0a 2b 09 09 20 20 20 20 64 52  .    }.+..    dR
1cf0: 65 73 75 6c 74 20 3d 20 70 6f 77 28 64 31 2c 20  esult = pow(d1, 
1d00: 64 32 29 3b 0a 2b 09 09 20 20 20 20 62 72 65 61  d2);.+..    brea
1d10: 6b 3b 0a 20 09 20 20 20 20 7d 0a 20 09 09 20 20  k;. .    }. ..  
1d20: 20 20 0a 20 09 20 20 20 20 2f 2a 0a 40 40 20 2d    . .    /*.@@ -
1d30: 33 33 33 31 2c 31 31 20 2b 33 33 34 36 2c 32 31  3331,11 +3346,21
1d40: 20 40 40 0a 20 09 09 20 20 20 20 7d 0a 20 09 09   @@. ..    }. ..
1d50: 20 20 20 20 77 52 65 73 75 6c 74 20 3d 20 77 71      wResult = wq
1d60: 75 6f 74 3b 0a 20 09 09 20 20 20 20 62 72 65 61  uot;. ..    brea
1d70: 6b 3b 0a 2b 09 09 63 61 73 65 20 49 4e 53 54 5f  k;.+..case INST_
1d80: 45 58 50 4f 4e 3a 20 7b 0a 2b 09 09 20 20 20 20  EXPON: {.+..    
1d90: 69 6e 74 20 65 72 72 45 78 70 6f 6e 3b 0a 2b 0a  int errExpon;.+.
1da0: 2b 09 09 20 20 20 20 77 52 65 73 75 6c 74 20 3d  +..    wResult =
1db0: 20 45 78 70 6f 6e 57 69 64 65 28 77 2c 20 77 32   ExponWide(w, w2
1dc0: 2c 20 26 65 72 72 45 78 70 6f 6e 29 3b 0a 2b 09  , &errExpon);.+.
1dd0: 09 20 20 20 20 69 66 20 28 65 72 72 45 78 70 6f  .    if (errExpo
1de0: 6e 29 20 7b 0a 2b 09 09 09 54 52 41 43 45 28 28  n) {.+...TRACE((
1df0: 4c 4c 44 22 20 22 4c 4c 44 22 20 3d 3e 20 45 58  LLD" "LLD" => EX
1e00: 50 4f 4e 45 4e 54 20 4f 46 20 5a 45 52 4f 5c 6e  PONENT OF ZERO\n
1e10: 22 2c 20 77 2c 20 77 32 29 29 3b 0a 2b 09 09 09  ", w, w2));.+...
1e20: 67 6f 74 6f 20 65 78 70 6f 6e 4f 66 5a 65 72 6f  goto exponOfZero
1e30: 3b 0a 2b 09 09 20 20 20 20 7d 0a 2b 09 09 20 20  ;.+..    }.+..  
1e40: 20 20 62 72 65 61 6b 3b 0a 2b 09 09 7d 0a 20 09    break;.+..}. .
1e50: 20 20 20 20 7d 0a 20 09 7d 20 65 6c 73 65 20 7b      }. .} else {
1e60: 0a 20 09 20 20 20 20 2f 2a 0a 2d 09 09 20 20 20  . .    /*.-..   
1e70: 20 20 2a 20 44 6f 20 69 6e 74 65 67 65 72 20 61    * Do integer a
1e80: 72 69 74 68 6d 65 74 69 63 2e 0a 2d 09 09 20 20  rithmetic..-..  
1e90: 20 20 20 2a 2f 0a 2b 09 20 20 20 20 20 2a 20 44     */.+.     * D
1ea0: 6f 20 69 6e 74 65 67 65 72 20 61 72 69 74 68 6d  o integer arithm
1eb0: 65 74 69 63 2e 0a 2b 09 20 20 20 20 20 2a 2f 0a  etic..+.     */.
1ec0: 20 09 20 20 20 20 73 77 69 74 63 68 20 28 2a 70   .    switch (*p
1ed0: 63 29 20 7b 0a 20 09 20 20 20 20 20 20 20 20 63  c) {. .        c
1ee0: 61 73 65 20 49 4e 53 54 5f 41 44 44 3a 0a 20 09  ase INST_ADD:. .
1ef0: 09 20 20 20 20 69 52 65 73 75 6c 74 20 3d 20 69  .    iResult = i
1f00: 20 2b 20 69 32 3b 0a 40 40 20 2d 33 33 36 38 2c   + i2;.@@ -3368,
1f10: 36 20 2b 33 33 39 33 2c 31 36 20 40 40 0a 20 09  6 +3393,16 @@. .
1f20: 09 20 20 20 20 7d 0a 20 09 09 20 20 20 20 69 52  .    }. ..    iR
1f30: 65 73 75 6c 74 20 3d 20 71 75 6f 74 3b 0a 20 09  esult = quot;. .
1f40: 09 20 20 20 20 62 72 65 61 6b 3b 0a 2b 09 09 63  .    break;.+..c
1f50: 61 73 65 20 49 4e 53 54 5f 45 58 50 4f 4e 3a 20  ase INST_EXPON: 
1f60: 7b 0a 2b 09 09 20 20 20 20 69 6e 74 20 65 72 72  {.+..    int err
1f70: 45 78 70 6f 6e 3b 0a 2b 0a 2b 09 09 20 20 20 20  Expon;.+.+..    
1f80: 69 52 65 73 75 6c 74 20 3d 20 45 78 70 6f 6e 4c  iResult = ExponL
1f90: 6f 6e 67 28 69 2c 20 69 32 2c 20 26 65 72 72 45  ong(i, i2, &errE
1fa0: 78 70 6f 6e 29 3b 0a 2b 09 09 20 20 20 20 69 66  xpon);.+..    if
1fb0: 20 28 65 72 72 45 78 70 6f 6e 29 20 7b 0a 2b 09   (errExpon) {.+.
1fc0: 09 09 54 52 41 43 45 28 28 22 25 6c 64 20 25 6c  ..TRACE(("%ld %l
1fd0: 64 20 3d 3e 20 45 58 50 4f 4e 45 4e 54 20 4f 46  d => EXPONENT OF
1fe0: 20 5a 45 52 4f 5c 6e 22 2c 20 69 2c 20 69 32 29   ZERO\n", i, i2)
1ff0: 29 3b 0a 2b 09 09 09 67 6f 74 6f 20 65 78 70 6f  );.+...goto expo
2000: 6e 4f 66 5a 65 72 6f 3b 0a 2b 09 09 20 20 20 20  nOfZero;.+..    
2010: 7d 0a 2b 09 09 20 20 20 20 62 72 65 61 6b 3b 0a  }.+..    break;.
2020: 2b 09 09 7d 0a 20 09 20 20 20 20 7d 0a 20 09 7d  +..}. .    }. .}
2030: 0a 20 0a 40 40 20 2d 34 30 34 34 2c 37 20 2b 34  . .@@ -4044,7 +4
2040: 30 37 39 2c 32 31 20 40 40 0a 20 20 20 20 20 20  079,21 @@.      
2050: 20 20 20 20 20 20 20 28 63 68 61 72 20 2a 29 20         (char *) 
2060: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 72 65 73 75  NULL);.     resu
2070: 6c 74 20 3d 20 54 43 4c 5f 45 52 52 4f 52 3b 0a  lt = TCL_ERROR;.
2080: 20 20 20 20 20 67 6f 74 6f 20 63 68 65 63 6b 46       goto checkF
2090: 6f 72 43 61 74 63 68 3b 0a 2d 09 0a 2b 0a 2b 20  orCatch;.-..+.+ 
20a0: 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 45 78     /*.+     * Ex
20b0: 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 20 6f 66 20  ponentiation of 
20c0: 7a 65 72 6f 20 62 79 20 6e 65 67 61 74 69 76 65  zero by negative
20d0: 20 6e 75 6d 62 65 72 20 69 6e 20 61 6e 20 65 78   number in an ex
20e0: 70 72 65 73 73 69 6f 6e 2e 0a 2b 20 20 20 20 20  pression..+     
20f0: 2a 20 43 6f 6e 74 72 6f 6c 20 6f 6e 6c 79 20 72  * Control only r
2100: 65 61 63 68 65 73 20 74 68 69 73 20 70 6f 69 6e  eaches this poin
2110: 74 20 62 79 20 22 67 6f 74 6f 20 65 78 70 6f 6e  t by "goto expon
2120: 4f 66 5a 65 72 6f 22 2e 0a 2b 20 20 20 20 20 2a  OfZero"..+     *
2130: 2f 0a 2b 0a 2b 20 65 78 70 6f 6e 4f 66 5a 65 72  /.+.+ exponOfZer
2140: 6f 3a 0a 2b 20 20 20 20 54 63 6c 5f 52 65 73 65  o:.+    Tcl_Rese
2150: 74 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 3b  tResult(interp);
2160: 0a 2b 20 20 20 20 54 63 6c 5f 41 70 70 65 6e 64  .+    Tcl_Append
2170: 54 6f 4f 62 6a 28 54 63 6c 5f 47 65 74 4f 62 6a  ToObj(Tcl_GetObj
2180: 52 65 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 0a  Result(interp),.
2190: 2b 09 20 20 20 20 22 65 78 70 6f 6e 65 6e 74 69  +.    "exponenti
21a0: 61 74 69 6f 6e 20 6f 66 20 7a 65 72 6f 20 62 79  ation of zero by
21b0: 20 6e 65 67 61 74 69 76 65 20 70 6f 77 65 72 22   negative power"
21c0: 2c 20 2d 31 29 3b 0a 2b 20 20 20 20 54 63 6c 5f  , -1);.+    Tcl_
21d0: 53 65 74 45 72 72 6f 72 43 6f 64 65 28 69 6e 74  SetErrorCode(int
21e0: 65 72 70 2c 20 22 41 52 49 54 48 22 2c 20 22 44  erp, "ARITH", "D
21f0: 4f 4d 41 49 4e 22 2c 0a 2b 09 20 20 20 20 22 65  OMAIN",.+.    "e
2200: 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 20 6f 66  xponentiation of
2210: 20 7a 65 72 6f 20 62 79 20 6e 65 67 61 74 69 76   zero by negativ
2220: 65 20 70 6f 77 65 72 22 2c 20 28 63 68 61 72 20  e power", (char 
2230: 2a 29 20 4e 55 4c 4c 29 3b 0a 2b 20 20 20 20 72  *) NULL);.+    r
2240: 65 73 75 6c 74 20 3d 20 54 43 4c 5f 45 52 52 4f  esult = TCL_ERRO
2250: 52 3b 0a 2b 20 20 20 20 67 6f 74 6f 20 63 68 65  R;.+    goto che
2260: 63 6b 46 6f 72 43 61 74 63 68 3b 0a 2b 0a 20 20  ckForCatch;.+.  
2270: 20 20 20 2f 2a 0a 20 20 20 20 20 20 2a 20 41 6e     /*.      * An
2280: 20 65 78 74 65 72 6e 61 6c 20 65 76 61 6c 75 61   external evalua
2290: 74 69 6f 6e 20 28 49 4e 53 54 5f 49 4e 56 4f 4b  tion (INST_INVOK
22a0: 45 20 6f 72 20 49 4e 53 54 5f 45 56 41 4c 29 20  E or INST_EVAL) 
22b0: 72 65 74 75 72 6e 65 64 20 0a 20 20 20 20 20 20  returned .      
22c0: 2a 20 73 6f 6d 65 74 68 69 6e 67 20 64 69 66 66  * something diff
22d0: 65 72 65 6e 74 20 66 72 6f 6d 20 54 43 4c 5f 4f  erent from TCL_O
22e0: 4b 2c 20 6f 72 20 65 6c 73 65 20 49 4e 53 54 5f  K, or else INST_
22f0: 42 52 45 41 4b 20 6f 72 20 0a 40 40 20 2d 34 33  BREAK or .@@ -43
2300: 38 31 2c 31 32 20 2b 34 34 33 30 2c 31 36 20 40  81,12 +4430,16 @
2310: 40 0a 20 09 09 09 09 20 2a 20 77 69 74 68 20 74  @. .... * with t
2320: 68 65 20 69 6c 6c 65 67 61 6c 20 74 79 70 65 2e  he illegal type.
2330: 20 2a 2f 0a 20 7b 0a 20 20 20 20 20 75 6e 73 69   */. {.     unsi
2340: 67 6e 65 64 20 63 68 61 72 20 6f 70 43 6f 64 65  gned char opCode
2350: 20 3d 20 2a 70 63 3b 0a 2d 20 20 20 20 0a 2b 20   = *pc;.-    .+ 
2360: 20 20 20 43 4f 4e 53 54 20 63 68 61 72 20 2a 6f     CONST char *o
2370: 70 65 72 61 74 6f 72 20 3d 20 6f 70 65 72 61 74  perator = operat
2380: 6f 72 53 74 72 69 6e 67 73 5b 6f 70 43 6f 64 65  orStrings[opCode
2390: 20 2d 20 49 4e 53 54 5f 4c 4f 52 5d 3b 0a 2b 20   - INST_LOR];.+ 
23a0: 20 20 20 69 66 20 28 6f 70 43 6f 64 65 20 3d 3d     if (opCode ==
23b0: 20 49 4e 53 54 5f 45 58 50 4f 4e 29 20 7b 0a 2b   INST_EXPON) {.+
23c0: 09 6f 70 65 72 61 74 6f 72 20 3d 20 22 2a 2a 22  .operator = "**"
23d0: 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 20 20 20 20 20  ;.+    }.+.     
23e0: 54 63 6c 5f 52 65 73 65 74 52 65 73 75 6c 74 28  Tcl_ResetResult(
23f0: 69 6e 74 65 72 70 29 3b 0a 20 20 20 20 20 69 66  interp);.     if
2400: 20 28 28 6f 70 6e 64 50 74 72 2d 3e 62 79 74 65   ((opndPtr->byte
2410: 73 20 3d 3d 20 4e 55 4c 4c 29 20 7c 7c 20 28 6f  s == NULL) || (o
2420: 70 6e 64 50 74 72 2d 3e 6c 65 6e 67 74 68 20 3d  pndPtr->length =
2430: 3d 20 30 29 29 20 7b 0a 20 09 54 63 6c 5f 41 70  = 0)) {. .Tcl_Ap
2440: 70 65 6e 64 53 74 72 69 6e 67 73 54 6f 4f 62 6a  pendStringsToObj
2450: 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65 73 75 6c  (Tcl_GetObjResul
2460: 74 28 69 6e 74 65 72 70 29 2c 0a 2d 09 09 22 63  t(interp),.-.."c
2470: 61 6e 27 74 20 75 73 65 20 65 6d 70 74 79 20 73  an't use empty s
2480: 74 72 69 6e 67 20 61 73 20 6f 70 65 72 61 6e 64  tring as operand
2490: 20 6f 66 20 5c 22 22 2c 0a 2d 09 09 6f 70 65 72   of \"",.-..oper
24a0: 61 74 6f 72 53 74 72 69 6e 67 73 5b 6f 70 43 6f  atorStrings[opCo
24b0: 64 65 20 2d 20 49 4e 53 54 5f 4c 4f 52 5d 2c 20  de - INST_LOR], 
24c0: 22 5c 22 22 2c 20 28 63 68 61 72 20 2a 29 20 4e  "\"", (char *) N
24d0: 55 4c 4c 29 3b 0a 2b 09 09 22 63 61 6e 27 74 20  ULL);.+.."can't 
24e0: 75 73 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67  use empty string
24f0: 20 61 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 5c   as operand of \
2500: 22 22 2c 20 6f 70 65 72 61 74 6f 72 2c 20 22 5c  "", operator, "\
2510: 22 22 2c 0a 2b 09 09 28 63 68 61 72 20 2a 29 20  "",.+..(char *) 
2520: 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 7d 20 65 6c  NULL);.     } el
2530: 73 65 20 7b 0a 20 09 63 68 61 72 20 2a 6d 73 67  se {. .char *msg
2540: 20 3d 20 22 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20   = "non-numeric 
2550: 73 74 72 69 6e 67 22 3b 0a 20 09 63 68 61 72 20  string";. .char 
2560: 2a 73 2c 20 2a 70 3b 0a 40 40 20 2d 34 34 38 35  *s, *p;.@@ -4485
2570: 2c 38 20 2b 34 35 33 38 2c 37 20 40 40 0a 20 09  ,8 +4538,7 @@. .
2580: 7d 0a 20 20 20 20 20 20 20 6d 61 6b 65 45 72 72  }.       makeErr
2590: 6f 72 4d 65 73 73 61 67 65 3a 0a 20 09 54 63 6c  orMessage:. .Tcl
25a0: 5f 41 70 70 65 6e 64 53 74 72 69 6e 67 73 54 6f  _AppendStringsTo
25b0: 4f 62 6a 28 54 63 6c 5f 47 65 74 4f 62 6a 52 65  Obj(Tcl_GetObjRe
25c0: 73 75 6c 74 28 69 6e 74 65 72 70 29 2c 20 22 63  sult(interp), "c
25d0: 61 6e 27 74 20 75 73 65 20 22 2c 0a 2d 09 09 6d  an't use ",.-..m
25e0: 73 67 2c 20 22 20 61 73 20 6f 70 65 72 61 6e 64  sg, " as operand
25f0: 20 6f 66 20 5c 22 22 2c 20 6f 70 65 72 61 74 6f   of \"", operato
2600: 72 53 74 72 69 6e 67 73 5b 6f 70 43 6f 64 65 20  rStrings[opCode 
2610: 2d 20 49 4e 53 54 5f 4c 4f 52 5d 2c 0a 2d 09 09  - INST_LOR],.-..
2620: 22 5c 22 22 2c 20 28 63 68 61 72 20 2a 29 20 4e  "\"", (char *) N
2630: 55 4c 4c 29 3b 0a 2b 09 09 6d 73 67 2c 20 22 20  ULL);.+..msg, " 
2640: 61 73 20 6f 70 65 72 61 6e 64 20 6f 66 20 5c 22  as operand of \"
2650: 22 2c 20 6f 70 65 72 61 74 6f 72 2c 20 22 5c 22  ", operator, "\"
2660: 22 2c 20 28 63 68 61 72 20 2a 29 20 4e 55 4c 4c  ", (char *) NULL
2670: 29 3b 0a 20 20 20 20 20 7d 0a 20 7d 0a 20 0c 0a  );.     }. }. ..
2680: 40 40 20 2d 36 31 38 30 2c 33 20 2b 36 32 33 32  @@ -6180,3 +6232
2690: 2c 31 34 30 20 40 40 0a 20 20 20 20 20 72 65 74  ,140 @@.     ret
26a0: 75 72 6e 20 62 75 66 3b 0a 20 7d 0a 20 23 65 6e  urn buf;. }. #en
26b0: 64 69 66 20 2f 2a 20 54 43 4c 5f 43 4f 4d 50 49  dif /* TCL_COMPI
26c0: 4c 45 5f 44 45 42 55 47 20 2a 2f 0a 2b 0c 0a 2b  LE_DEBUG */.+..+
26d0: 2f 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  /*.+ *----------
26e0: 2d 2d 2d 2d 2d 2d 2d 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 0a 2b 20 2a  ------------.+ *
2720: 0a 2b 20 2a 20 45 78 70 6f 6e 57 69 64 65 20 2d  .+ * ExponWide -
2730: 2d 0a 2b 20 2a 0a 2b 20 2a 09 50 72 6f 63 65 64  -.+ *.+ *.Proced
2740: 75 72 65 20 74 6f 20 72 65 74 75 72 6e 20 77 2a  ure to return w*
2750: 2a 77 32 20 61 73 20 77 69 64 65 20 69 6e 74 65  *w2 as wide inte
2760: 67 65 72 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75  ger.+ *.+ * Resu
2770: 6c 74 73 3a 0a 2b 20 2a 09 52 65 74 75 72 6e 20  lts:.+ *.Return 
2780: 76 61 6c 75 65 20 69 73 20 77 20 74 6f 20 74 68  value is w to th
2790: 65 20 70 6f 77 65 72 20 77 32 2c 20 75 6e 6c 65  e power w2, unle
27a0: 73 73 20 74 68 65 20 63 6f 6d 70 75 74 61 74 69  ss the computati
27b0: 6f 6e 0a 2b 20 2a 09 6d 61 6b 65 73 20 6e 6f 20  on.+ *.makes no 
27c0: 73 65 6e 73 65 20 6d 61 74 68 65 6d 61 74 69 63  sense mathematic
27d0: 61 6c 6c 79 2e 20 49 6e 20 74 68 61 74 20 63 61  ally. In that ca
27e0: 73 65 20 2a 65 72 72 45 78 70 6f 6e 20 69 73 0a  se *errExpon is.
27f0: 2b 20 2a 09 73 65 74 20 74 6f 20 31 2e 0a 2b 20  + *.set to 1..+ 
2800: 2a 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63  *.+ * Side effec
2810: 74 73 3a 0a 2b 20 2a 09 4e 6f 6e 65 2e 0a 2b 20  ts:.+ *.None..+ 
2820: 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.+ *-----------
2830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f  -----------.+ */
2870: 0a 2b 0a 2b 73 74 61 74 69 63 20 54 63 6c 5f 57  .+.+static Tcl_W
2880: 69 64 65 49 6e 74 0a 2b 45 78 70 6f 6e 57 69 64  ideInt.+ExponWid
2890: 65 28 77 2c 20 77 32 2c 20 65 72 72 45 78 70 6f  e(w, w2, errExpo
28a0: 6e 29 0a 2b 20 20 20 20 54 63 6c 5f 57 69 64 65  n).+    Tcl_Wide
28b0: 49 6e 74 20 77 3b 09 09 2f 2a 20 54 68 65 20 76  Int w;../* The v
28c0: 61 6c 75 65 20 74 68 61 74 20 6d 75 73 74 20 62  alue that must b
28d0: 65 20 65 78 70 6f 6e 65 6e 74 69 61 74 65 64 20  e exponentiated 
28e0: 2a 2f 0a 2b 20 20 20 20 54 63 6c 5f 57 69 64 65  */.+    Tcl_Wide
28f0: 49 6e 74 20 77 32 3b 09 09 2f 2a 20 54 68 65 20  Int w2;../* The 
2900: 65 78 70 6f 6e 65 6e 74 20 2a 2f 0a 2b 20 20 20  exponent */.+   
2910: 20 69 6e 74 20 2a 65 72 72 45 78 70 6f 6e 3b 09   int *errExpon;.
2920: 09 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20 2a  ./* Error code *
2930: 2f 0a 2b 7b 0a 2b 20 20 20 20 54 63 6c 5f 57 69  /.+{.+    Tcl_Wi
2940: 64 65 49 6e 74 20 72 65 73 75 6c 74 3b 0a 2b 0a  deInt result;.+.
2950: 2b 20 20 20 20 2a 65 72 72 45 78 70 6f 6e 20 3d  +    *errExpon =
2960: 20 30 3b 0a 2b 0a 2b 20 20 20 20 2f 2a 0a 2b 20   0;.+.+    /*.+ 
2970: 20 20 20 20 2a 20 43 68 65 63 6b 20 66 6f 72 20      * Check for 
2980: 70 6f 73 73 69 62 6c 65 20 65 72 72 6f 72 73 20  possible errors 
2990: 61 6e 64 20 73 69 6d 70 6c 65 2f 65 64 67 65 20  and simple/edge 
29a0: 63 61 73 65 73 0a 2b 20 20 20 20 20 2a 2f 0a 2b  cases.+     */.+
29b0: 0a 2b 20 20 20 20 69 66 20 28 77 20 3d 3d 20 30  .+    if (w == 0
29c0: 29 20 7b 0a 2b 09 69 66 20 28 77 32 20 3c 20 30  ) {.+.if (w2 < 0
29d0: 29 20 7b 0a 2b 09 20 20 20 20 2a 65 72 72 45 78  ) {.+.    *errEx
29e0: 70 6f 6e 20 3d 20 31 3b 0a 2b 09 20 20 20 20 72  pon = 1;.+.    r
29f0: 65 74 75 72 6e 20 57 30 3b 0a 2b 09 7d 20 65 6c  eturn W0;.+.} el
2a00: 73 65 20 69 66 20 28 77 32 20 3e 20 30 29 20 7b  se if (w2 > 0) {
2a10: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 57 30  .+.    return W0
2a20: 3b 0a 2b 09 7d 0a 2b 09 72 65 74 75 72 6e 20 54  ;.+.}.+.return T
2a30: 63 6c 5f 4c 6f 6e 67 41 73 57 69 64 65 28 31 29  cl_LongAsWide(1)
2a40: 3b 20 2f 2a 20 42 79 20 64 65 66 69 6e 69 74 69  ; /* By definiti
2a50: 6f 6e 20 61 6e 64 20 61 6e 61 6c 79 73 69 73 20  on and analysis 
2a60: 2a 2f 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69  */.+    } else i
2a70: 66 20 28 77 20 3c 20 2d 31 29 20 7b 0a 2b 09 69  f (w < -1) {.+.i
2a80: 66 20 28 77 32 20 3c 20 30 29 20 7b 0a 2b 09 20  f (w2 < 0) {.+. 
2a90: 20 20 20 72 65 74 75 72 6e 20 57 30 3b 0a 2b 09     return W0;.+.
2aa0: 7d 20 65 6c 73 65 20 69 66 20 28 77 32 20 3d 3d  } else if (w2 ==
2ab0: 20 30 29 20 7b 0a 2b 09 20 20 20 20 72 65 74 75   0) {.+.    retu
2ac0: 72 6e 20 54 63 6c 5f 4c 6f 6e 67 41 73 57 69 64  rn Tcl_LongAsWid
2ad0: 65 28 31 29 3b 0a 2b 09 7d 0a 2b 20 20 20 20 7d  e(1);.+.}.+    }
2ae0: 20 65 6c 73 65 20 69 66 20 28 77 20 3d 3d 20 2d   else if (w == -
2af0: 31 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 28 77  1) {.+.return (w
2b00: 32 20 26 20 31 29 20 3f 20 54 63 6c 5f 4c 6f 6e  2 & 1) ? Tcl_Lon
2b10: 67 41 73 57 69 64 65 28 2d 31 29 20 3a 20 20 54  gAsWide(-1) :  T
2b20: 63 6c 5f 4c 6f 6e 67 41 73 57 69 64 65 28 31 29  cl_LongAsWide(1)
2b30: 3b 0a 2b 20 20 20 20 7d 20 65 6c 73 65 20 69 66  ;.+    } else if
2b40: 20 28 77 20 3d 3d 20 31 29 20 7b 0a 2b 09 72 65   (w == 1) {.+.re
2b50: 74 75 72 6e 20 54 63 6c 5f 4c 6f 6e 67 41 73 57  turn Tcl_LongAsW
2b60: 69 64 65 28 31 29 3b 0a 2b 20 20 20 20 7d 20 65  ide(1);.+    } e
2b70: 6c 73 65 20 69 66 20 28 77 3e 31 20 26 26 20 77  lse if (w>1 && w
2b80: 32 3c 30 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20  2<0) {.+.return 
2b90: 57 30 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20  W0;.+    }.+.+  
2ba0: 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20 54 68 65    /*.+     * The
2bb0: 20 67 65 6e 65 72 61 6c 20 63 61 73 65 2e 20 20   general case.  
2bc0: 0a 2b 20 20 20 20 20 2a 2f 0a 2b 0a 2b 20 20 20  .+     */.+.+   
2bd0: 20 72 65 73 75 6c 74 20 3d 20 54 63 6c 5f 4c 6f   result = Tcl_Lo
2be0: 6e 67 41 73 57 69 64 65 28 31 29 3b 0a 2b 20 20  ngAsWide(1);.+  
2bf0: 20 20 66 6f 72 20 28 3b 20 77 32 3e 54 63 6c 5f    for (; w2>Tcl_
2c00: 4c 6f 6e 67 41 73 57 69 64 65 28 31 29 20 3b 20  LongAsWide(1) ; 
2c10: 77 2a 3d 77 2c 77 32 2f 3d 32 29 20 7b 0a 2b 09  w*=w,w2/=2) {.+.
2c20: 69 66 20 28 77 32 20 26 20 31 29 20 7b 0a 2b 09  if (w2 & 1) {.+.
2c30: 20 20 20 20 72 65 73 75 6c 74 20 2a 3d 20 77 3b      result *= w;
2c40: 0a 2b 09 7d 0a 2b 20 20 20 20 7d 0a 2b 20 20 20  .+.}.+    }.+   
2c50: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 20 2a   return result *
2c60: 20 77 3b 0a 2b 7d 0a 2b 0c 0a 2b 2f 2a 0a 2b 20   w;.+}.+..+/*.+ 
2c70: 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *---------------
2c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ca0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2cb0: 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 2b 20 2a 20  -------.+ *.+ * 
2cc0: 45 78 70 6f 6e 4c 6f 6e 67 20 2d 2d 0a 2b 20 2a  ExponLong --.+ *
2cd0: 0a 2b 20 2a 20 20 20 20 20 20 50 72 6f 63 65 64  .+ *      Proced
2ce0: 75 72 65 20 74 6f 20 72 65 74 75 72 6e 20 69 2a  ure to return i*
2cf0: 2a 69 32 20 61 73 20 6c 6f 6e 67 20 69 6e 74 65  *i2 as long inte
2d00: 67 65 72 0a 2b 20 2a 0a 2b 20 2a 20 52 65 73 75  ger.+ *.+ * Resu
2d10: 6c 74 73 3a 0a 2b 20 2a 20 20 20 20 20 20 52 65  lts:.+ *      Re
2d20: 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 69 20  turn value is i 
2d30: 74 6f 20 74 68 65 20 70 6f 77 65 72 20 69 32 2c  to the power i2,
2d40: 20 75 6e 6c 65 73 73 20 74 68 65 20 63 6f 6d 70   unless the comp
2d50: 75 74 61 74 69 6f 6e 0a 2b 20 2a 20 20 20 20 20  utation.+ *     
2d60: 20 6d 61 6b 65 73 20 6e 6f 20 73 65 6e 73 65 20   makes no sense 
2d70: 6d 61 74 68 65 6d 61 74 69 63 61 6c 6c 79 2e 20  mathematically. 
2d80: 49 6e 20 74 68 61 74 20 63 61 73 65 20 2a 65 72  In that case *er
2d90: 72 45 78 70 6f 6e 20 69 73 0a 2b 20 2a 20 20 20  rExpon is.+ *   
2da0: 20 20 20 73 65 74 20 74 6f 20 31 2e 0a 2b 20 2a     set to 1..+ *
2db0: 0a 2b 20 2a 20 53 69 64 65 20 65 66 66 65 63 74  .+ * Side effect
2dc0: 73 3a 0a 2b 20 2a 20 20 20 20 20 20 4e 6f 6e 65  s:.+ *      None
2dd0: 2e 0a 2b 20 2a 0a 2b 20 2a 2d 2d 2d 2d 2d 2d 2d  ..+ *.+ *-------
2de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
2e20: 2b 20 2a 2f 0a 2b 0a 2b 73 74 61 74 69 63 20 6c  + */.+.+static l
2e30: 6f 6e 67 0a 2b 45 78 70 6f 6e 4c 6f 6e 67 28 69  ong.+ExponLong(i
2e40: 2c 20 69 32 2c 20 65 72 72 45 78 70 6f 6e 29 0a  , i2, errExpon).
2e50: 2b 20 20 20 20 6c 6f 6e 67 20 69 3b 09 09 09 2f  +    long i;.../
2e60: 2a 20 54 68 65 20 76 61 6c 75 65 20 74 68 61 74  * The value that
2e70: 20 6d 75 73 74 20 62 65 20 65 78 70 6f 6e 65 6e   must be exponen
2e80: 74 69 61 74 65 64 20 2a 2f 0a 2b 20 20 20 20 6c  tiated */.+    l
2e90: 6f 6e 67 20 69 32 3b 09 09 09 2f 2a 20 54 68 65  ong i2;.../* The
2ea0: 20 65 78 70 6f 6e 65 6e 74 20 2a 2f 0a 2b 20 20   exponent */.+  
2eb0: 20 20 69 6e 74 20 2a 65 72 72 45 78 70 6f 6e 3b    int *errExpon;
2ec0: 09 09 2f 2a 20 45 72 72 6f 72 20 63 6f 64 65 20  ../* Error code 
2ed0: 2a 2f 0a 2b 7b 0a 2b 20 20 20 20 6c 6f 6e 67 20  */.+{.+    long 
2ee0: 72 65 73 75 6c 74 3b 0a 2b 0a 2b 20 20 20 20 2a  result;.+.+    *
2ef0: 65 72 72 45 78 70 6f 6e 20 3d 20 30 3b 0a 2b 0a  errExpon = 0;.+.
2f00: 2b 20 20 20 20 2f 2a 0a 2b 20 20 20 20 20 2a 20  +    /*.+     * 
2f10: 43 68 65 63 6b 20 66 6f 72 20 70 6f 73 73 69 62  Check for possib
2f20: 6c 65 20 65 72 72 6f 72 73 20 61 6e 64 20 73 69  le errors and si
2f30: 6d 70 6c 65 20 63 61 73 65 73 0a 2b 20 20 20 20  mple cases.+    
2f40: 20 2a 2f 0a 2b 0a 2b 20 20 20 20 69 66 20 28 69   */.+.+    if (i
2f50: 20 3d 3d 20 30 29 20 7b 0a 2b 20 20 20 20 20 20   == 0) {.+      
2f60: 20 20 69 66 20 28 69 32 20 3c 20 30 29 20 7b 0a    if (i2 < 0) {.
2f70: 2b 20 20 20 20 20 20 20 20 20 20 20 20 2a 65 72  +            *er
2f80: 72 45 78 70 6f 6e 20 3d 20 31 3b 0a 2b 20 20 20  rExpon = 1;.+   
2f90: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2fa0: 30 4c 3b 0a 2b 20 20 20 20 20 20 20 20 7d 20 65  0L;.+        } e
2fb0: 6c 73 65 20 69 66 20 28 69 32 20 3e 20 30 29 20  lse if (i2 > 0) 
2fc0: 7b 0a 2b 20 20 20 20 20 20 20 20 20 20 20 20 72  {.+            r
2fd0: 65 74 75 72 6e 20 30 4c 3b 0a 2b 20 20 20 20 20  eturn 0L;.+     
2fe0: 20 20 20 7d 0a 2b 09 2f 2a 0a 2b 09 20 2a 20 42     }.+./*.+. * B
2ff0: 79 20 64 65 66 69 6e 69 74 69 6f 6e 20 61 6e 64  y definition and
3000: 20 61 6e 61 6c 79 73 69 73 2c 20 30 2a 2a 30 20   analysis, 0**0 
3010: 69 73 20 31 2e 0a 2b 09 20 2a 2f 0a 2b 09 72 65  is 1..+. */.+.re
3020: 74 75 72 6e 20 31 4c 3b 0a 2b 20 20 20 20 7d 20  turn 1L;.+    } 
3030: 65 6c 73 65 20 69 66 20 28 69 20 3c 20 2d 31 29  else if (i < -1)
3040: 20 7b 0a 2b 20 20 20 20 20 20 20 20 69 66 20 28   {.+        if (
3050: 69 32 20 3c 20 30 29 20 7b 0a 2b 20 20 20 20 20  i2 < 0) {.+     
3060: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 4c         return 0L
3070: 3b 0a 2b 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ;.+        } els
3080: 65 20 69 66 20 28 69 32 20 3d 3d 20 30 29 20 7b  e if (i2 == 0) {
3090: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 31 4c  .+.    return 1L
30a0: 3b 0a 2b 20 20 20 20 20 20 20 20 7d 0a 2b 20 20  ;.+        }.+  
30b0: 20 20 7d 20 65 6c 73 65 20 69 66 20 28 69 20 3d    } else if (i =
30c0: 3d 20 2d 31 29 20 7b 0a 2b 20 20 20 20 20 20 20  = -1) {.+       
30d0: 20 72 65 74 75 72 6e 20 28 69 32 26 31 29 20 3f   return (i2&1) ?
30e0: 20 2d 31 4c 20 3a 20 31 4c 3b 0a 2b 20 20 20 20   -1L : 1L;.+    
30f0: 7d 20 65 6c 73 65 20 69 66 20 28 69 20 3d 3d 20  } else if (i == 
3100: 31 29 20 7b 0a 2b 20 20 20 20 20 20 20 20 72 65  1) {.+        re
3110: 74 75 72 6e 20 31 4c 3b 0a 2b 20 20 20 20 7d 20  turn 1L;.+    } 
3120: 65 6c 73 65 20 69 66 20 28 69 20 3e 20 31 20 26  else if (i > 1 &
3130: 26 20 69 32 20 3c 20 30 29 20 7b 0a 2b 20 20 20  & i2 < 0) {.+   
3140: 20 20 20 20 20 72 65 74 75 72 6e 20 30 4c 3b 0a       return 0L;.
3150: 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20 20 20 2f 2a  +    }.+.+    /*
3160: 0a 2b 20 20 20 20 20 2a 20 54 68 65 20 67 65 6e  .+     * The gen
3170: 65 72 61 6c 20 63 61 73 65 0a 2b 20 20 20 20 20  eral case.+     
3180: 2a 2f 0a 2b 0a 2b 20 20 20 20 72 65 73 75 6c 74  */.+.+    result
3190: 20 3d 20 31 3b 0a 2b 20 20 20 20 66 6f 72 20 28   = 1;.+    for (
31a0: 3b 20 69 32 3e 31 20 3b 20 69 2a 3d 69 2c 69 32  ; i2>1 ; i*=i,i2
31b0: 2f 3d 32 29 20 7b 0a 2b 09 69 66 20 28 69 32 20  /=2) {.+.if (i2 
31c0: 26 20 31 29 20 7b 0a 2b 09 20 20 20 20 72 65 73  & 1) {.+.    res
31d0: 75 6c 74 20 2a 3d 20 69 3b 0a 2b 09 7d 0a 2b 20  ult *= i;.+.}.+ 
31e0: 20 20 20 7d 0a 2b 20 20 20 20 72 65 74 75 72 6e     }.+    return
31f0: 20 72 65 73 75 6c 74 20 2a 20 69 3b 0a 2b 7d 0a   result * i;.+}.
3200: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74  Index: generic/t
3210: 63 6c 50 61 72 73 65 45 78 70 72 2e 63 0a 3d 3d  clParseExpr.c.==
3220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3250: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3260: 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73  =.RCS file: /cvs
3270: 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e  root/tcl/tcl/gen
3280: 65 72 69 63 2f 74 63 6c 50 61 72 73 65 45 78 70  eric/tclParseExp
3290: 72 2e 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67  r.c,v.retrieving
32a0: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 37 0a 64   revision 1.17.d
32b0: 69 66 66 20 2d 75 20 2d 72 31 2e 31 37 20 74 63  iff -u -r1.17 tc
32c0: 6c 50 61 72 73 65 45 78 70 72 2e 63 0a 2d 2d 2d  lParseExpr.c.---
32d0: 20 67 65 6e 65 72 69 63 2f 74 63 6c 50 61 72 73   generic/tclPars
32e0: 65 45 78 70 72 2e 63 09 31 36 20 46 65 62 20 32  eExpr.c.16 Feb 2
32f0: 30 30 33 20 30 31 3a 33 36 3a 33 32 20 2d 30 30  003 01:36:32 -00
3300: 30 30 09 31 2e 31 37 0a 2b 2b 2b 20 67 65 6e 65  00.1.17.+++ gene
3310: 72 69 63 2f 74 63 6c 50 61 72 73 65 45 78 70 72  ric/tclParseExpr
3320: 2e 63 09 31 32 20 53 65 70 20 32 30 30 33 20 32  .c.12 Sep 2003 2
3330: 33 3a 34 31 3a 30 37 20 2d 30 30 30 30 0a 40 40  3:41:07 -0000.@@
3340: 20 2d 31 33 30 2c 36 20 2b 31 33 30 2c 31 32 20   -130,6 +130,12 
3350: 40 40 0a 20 23 64 65 66 69 6e 65 20 53 54 52 4e  @@. #define STRN
3360: 45 51 09 09 33 35 0a 20 0a 20 2f 2a 0a 2b 20 2a  EQ..35. . /*.+ *
3370: 20 45 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 20   Exponentiation 
3380: 6f 70 65 72 61 74 6f 72 3a 0a 2b 20 2a 2f 0a 2b  operator:.+ */.+
3390: 0a 2b 23 64 65 66 69 6e 65 20 45 58 50 4f 4e 09  .+#define EXPON.
33a0: 09 33 36 0a 2b 0a 2b 2f 2a 0a 20 20 2a 20 4d 61  .36.+.+/*.  * Ma
33b0: 70 70 69 6e 67 20 66 72 6f 6d 20 6c 65 78 65 6d  pping from lexem
33c0: 65 73 20 74 6f 20 73 74 72 69 6e 67 73 3b 20 75  es to strings; u
33d0: 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e  sed for debuggin
33e0: 67 20 6d 65 73 73 61 67 65 73 2e 20 54 68 65 73  g messages. Thes
33f0: 65 0a 20 20 2a 20 65 6e 74 72 69 65 73 20 6d 75  e.  * entries mu
3400: 73 74 20 6d 61 74 63 68 20 74 68 65 20 6f 72 64  st match the ord
3410: 65 72 20 61 6e 64 20 6e 75 6d 62 65 72 20 6f 66  er and number of
3420: 20 74 68 65 20 6c 65 78 65 6d 65 20 64 65 66 69   the lexeme defi
3430: 6e 69 74 69 6f 6e 73 20 61 62 6f 76 65 2e 0a 20  nitions above.. 
3440: 20 2a 2f 0a 40 40 20 2d 31 34 30 2c 37 20 2b 31   */.@@ -140,7 +1
3450: 34 36 2c 37 20 40 40 0a 20 20 20 20 20 22 2a 22  46,7 @@.     "*"
3460: 2c 20 22 2f 22 2c 20 22 25 22 2c 20 22 2b 22 2c  , "/", "%", "+",
3470: 20 22 2d 22 2c 0a 20 20 20 20 20 22 3c 3c 22 2c   "-",.     "<<",
3480: 20 22 3e 3e 22 2c 20 22 3c 22 2c 20 22 3e 22 2c   ">>", "<", ">",
3490: 20 22 3c 3d 22 2c 20 22 3e 3d 22 2c 20 22 3d 3d   "<=", ">=", "==
34a0: 22 2c 20 22 21 3d 22 2c 0a 20 20 20 20 20 22 26  ", "!=",.     "&
34b0: 22 2c 20 22 5e 22 2c 20 22 7c 22 2c 20 22 26 26  ", "^", "|", "&&
34c0: 22 2c 20 22 7c 7c 22 2c 20 22 3f 22 2c 20 22 3a  ", "||", "?", ":
34d0: 22 2c 0a 2d 20 20 20 20 22 21 22 2c 20 22 7e 22  ",.-    "!", "~"
34e0: 2c 20 22 65 71 22 2c 20 22 6e 65 22 2c 0a 2b 20  , "eq", "ne",.+ 
34f0: 20 20 20 22 21 22 2c 20 22 7e 22 2c 20 22 65 71     "!", "~", "eq
3500: 22 2c 20 22 6e 65 22 2c 20 22 2a 2a 22 0a 20 7d  ", "ne", "**". }
3510: 3b 0a 20 0a 20 2f 2a 0a 40 40 20 2d 31 36 34 2c  ;. . /*.@@ -164,
3520: 36 20 2b 31 37 30 2c 37 20 40 40 0a 20 73 74 61  6 +170,7 @@. sta
3530: 74 69 63 20 69 6e 74 09 09 50 61 72 73 65 50 72  tic int..ParsePr
3540: 69 6d 61 72 79 45 78 70 72 20 5f 41 4e 53 49 5f  imaryExpr _ANSI_
3550: 41 52 47 53 5f 28 28 50 61 72 73 65 49 6e 66 6f  ARGS_((ParseInfo
3560: 20 2a 69 6e 66 6f 50 74 72 29 29 3b 0a 20 73 74   *infoPtr));. st
3570: 61 74 69 63 20 69 6e 74 09 09 50 61 72 73 65 52  atic int..ParseR
3580: 65 6c 61 74 69 6f 6e 61 6c 45 78 70 72 20 5f 41  elationalExpr _A
3590: 4e 53 49 5f 41 52 47 53 5f 28 28 50 61 72 73 65  NSI_ARGS_((Parse
35a0: 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 29 29 3b  Info *infoPtr));
35b0: 0a 20 73 74 61 74 69 63 20 69 6e 74 09 09 50 61  . static int..Pa
35c0: 72 73 65 53 68 69 66 74 45 78 70 72 20 5f 41 4e  rseShiftExpr _AN
35d0: 53 49 5f 41 52 47 53 5f 28 28 50 61 72 73 65 49  SI_ARGS_((ParseI
35e0: 6e 66 6f 20 2a 69 6e 66 6f 50 74 72 29 29 3b 0a  nfo *infoPtr));.
35f0: 2b 73 74 61 74 69 63 20 69 6e 74 09 09 50 61 72  +static int..Par
3600: 73 65 45 78 70 6f 6e 65 6e 74 69 61 6c 45 78 70  seExponentialExp
3610: 72 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 50  r _ANSI_ARGS_((P
3620: 61 72 73 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 74  arseInfo *infoPt
3630: 72 29 29 3b 0a 20 73 74 61 74 69 63 20 69 6e 74  r));. static int
3640: 09 09 50 61 72 73 65 55 6e 61 72 79 45 78 70 72  ..ParseUnaryExpr
3650: 20 5f 41 4e 53 49 5f 41 52 47 53 5f 28 28 50 61   _ANSI_ARGS_((Pa
3660: 72 73 65 49 6e 66 6f 20 2a 69 6e 66 6f 50 74 72  rseInfo *infoPtr
3670: 29 29 3b 0a 20 73 74 61 74 69 63 20 76 6f 69 64  ));. static void
3680: 09 09 50 72 65 70 65 6e 64 53 75 62 45 78 70 72  ..PrependSubExpr
3690: 54 6f 6b 65 6e 73 20 5f 41 4e 53 49 5f 41 52 47  Tokens _ANSI_ARG
36a0: 53 5f 28 28 43 4f 4e 53 54 20 63 68 61 72 20 2a  S_((CONST char *
36b0: 6f 70 2c 0a 20 09 09 09 09 69 6e 74 20 6f 70 42  op,. ....int opB
36c0: 79 74 65 73 2c 20 43 4f 4e 53 54 20 63 68 61 72  ytes, CONST char
36d0: 20 2a 73 72 63 2c 20 69 6e 74 20 73 72 63 42 79   *src, int srcBy
36e0: 74 65 73 2c 0a 40 40 20 2d 39 37 36 2c 37 20 2b  tes,.@@ -976,7 +
36f0: 39 38 33 2c 37 20 40 40 0a 20 20 2a 20 50 61 72  983,7 @@.  * Par
3700: 73 65 4d 75 6c 74 69 70 6c 79 45 78 70 72 20 2d  seMultiplyExpr -
3710: 2d 0a 20 20 2a 0a 20 20 2a 09 54 68 69 73 20 70  -.  *.  *.This p
3720: 72 6f 63 65 64 75 72 65 20 70 61 72 73 65 73 20  rocedure parses 
3730: 61 20 54 63 6c 20 6d 75 6c 74 69 70 6c 79 20 65  a Tcl multiply e
3740: 78 70 72 65 73 73 69 6f 6e 3a 0a 2d 20 2a 09 6d  xpression:.- *.m
3750: 75 6c 74 69 70 6c 79 45 78 70 72 20 3a 3a 3d 20  ultiplyExpr ::= 
3760: 75 6e 61 72 79 45 78 70 72 20 7b 28 27 2a 27 20  unaryExpr {('*' 
3770: 7c 20 27 2f 27 20 7c 20 27 25 27 29 20 75 6e 61  | '/' | '%') una
3780: 72 79 45 78 70 72 7d 0a 2b 20 2a 09 6d 75 6c 74  ryExpr}.+ *.mult
3790: 69 70 6c 79 45 78 70 72 20 3a 3a 3d 20 65 78 70  iplyExpr ::= exp
37a0: 6f 6e 65 6e 74 69 61 6c 45 78 70 72 20 7b 28 27  onentialExpr {('
37b0: 2a 27 20 7c 20 27 2f 27 20 7c 20 27 25 27 29 20  *' | '/' | '%') 
37c0: 65 78 70 6f 6e 65 6e 74 69 61 6c 45 78 70 72 7d  exponentialExpr}
37d0: 0a 20 20 2a 0a 20 20 2a 20 52 65 73 75 6c 74 73  .  *.  * Results
37e0: 3a 0a 20 20 2a 09 54 68 65 20 72 65 74 75 72 6e  :.  *.The return
37f0: 20 76 61 6c 75 65 20 69 73 20 54 43 4c 5f 4f 4b   value is TCL_OK
3800: 20 6f 6e 20 61 20 73 75 63 63 65 73 73 66 75 6c   on a successful
3810: 20 70 61 72 73 65 20 61 6e 64 20 54 43 4c 5f 45   parse and TCL_E
3820: 52 52 4f 52 0a 40 40 20 2d 31 30 30 34 2c 37 20  RROR.@@ -1004,7 
3830: 2b 31 30 31 31 2c 37 20 40 40 0a 20 20 20 20 20  +1011,7 @@.     
3840: 73 72 63 53 74 61 72 74 20 3d 20 69 6e 66 6f 50  srcStart = infoP
3850: 74 72 2d 3e 73 74 61 72 74 3b 0a 20 20 20 20 20  tr->start;.     
3860: 66 69 72 73 74 49 6e 64 65 78 20 3d 20 70 61 72  firstIndex = par
3870: 73 65 50 74 72 2d 3e 6e 75 6d 54 6f 6b 65 6e 73  sePtr->numTokens
3880: 3b 0a 20 20 20 20 20 0a 2d 20 20 20 20 63 6f 64  ;.     .-    cod
3890: 65 20 3d 20 50 61 72 73 65 55 6e 61 72 79 45 78  e = ParseUnaryEx
38a0: 70 72 28 69 6e 66 6f 50 74 72 29 3b 0a 2b 20 20  pr(infoPtr);.+  
38b0: 20 20 63 6f 64 65 20 3d 20 50 61 72 73 65 45 78    code = ParseEx
38c0: 70 6f 6e 65 6e 74 69 61 6c 45 78 70 72 28 69 6e  ponentialExpr(in
38d0: 66 6f 50 74 72 29 3b 0a 20 20 20 20 20 69 66 20  foPtr);.     if 
38e0: 28 63 6f 64 65 20 21 3d 20 54 43 4c 5f 4f 4b 29  (code != TCL_OK)
38f0: 20 7b 0a 20 09 72 65 74 75 72 6e 20 63 6f 64 65   {. .return code
3900: 3b 0a 20 20 20 20 20 7d 0a 40 40 20 2d 31 30 31  ;.     }.@@ -101
3910: 36 2c 37 20 2b 31 30 32 33 2c 37 20 40 40 0a 20  6,7 +1023,7 @@. 
3920: 09 69 66 20 28 63 6f 64 65 20 21 3d 20 54 43 4c  .if (code != TCL
3930: 5f 4f 4b 29 20 7b 0a 20 09 20 20 20 20 72 65 74  _OK) {. .    ret
3940: 75 72 6e 20 63 6f 64 65 3b 0a 20 09 7d 0a 2d 09  urn code;. .}.-.
3950: 63 6f 64 65 20 3d 20 50 61 72 73 65 55 6e 61 72  code = ParseUnar
3960: 79 45 78 70 72 28 69 6e 66 6f 50 74 72 29 3b 0a  yExpr(infoPtr);.
3970: 2b 09 63 6f 64 65 20 3d 20 50 61 72 73 65 45 78  +.code = ParseEx
3980: 70 6f 6e 65 6e 74 69 61 6c 45 78 70 72 28 69 6e  ponentialExpr(in
3990: 66 6f 50 74 72 29 3b 0a 20 09 69 66 20 28 63 6f  foPtr);. .if (co
39a0: 64 65 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  de != TCL_OK) {.
39b0: 20 09 20 20 20 20 72 65 74 75 72 6e 20 63 6f 64   .    return cod
39c0: 65 3b 0a 20 09 7d 0a 40 40 20 2d 31 30 33 35 2c  e;. .}.@@ -1035,
39d0: 36 20 2b 31 30 34 32 2c 36 39 20 40 40 0a 20 2f  6 +1042,69 @@. /
39e0: 2a 0a 20 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  *.  *-----------
39f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 0a  -----------.  *.
3a30: 2b 20 2a 20 50 61 72 73 65 45 78 70 6f 6e 65 6e  + * ParseExponen
3a40: 74 69 61 6c 45 78 70 72 20 2d 2d 0a 2b 20 2a 0a  tialExpr --.+ *.
3a50: 2b 20 2a 09 54 68 69 73 20 70 72 6f 63 65 64 75  + *.This procedu
3a60: 72 65 20 70 61 72 73 65 73 20 61 20 54 63 6c 20  re parses a Tcl 
3a70: 65 78 70 6f 6e 65 6e 74 69 61 6c 20 65 78 70 72  exponential expr
3a80: 65 73 73 69 6f 6e 3a 0a 2b 20 2a 09 65 78 70 6f  ession:.+ *.expo
3a90: 6e 65 6e 74 69 61 6c 45 78 70 72 20 3a 3a 3d 20  nentialExpr ::= 
3aa0: 75 6e 61 72 79 45 78 70 72 20 7b 27 2a 2a 27 20  unaryExpr {'**' 
3ab0: 75 6e 61 72 79 45 78 70 72 7d 0a 2b 20 2a 0a 2b  unaryExpr}.+ *.+
3ac0: 20 2a 20 52 65 73 75 6c 74 73 3a 0a 2b 20 2a 09   * Results:.+ *.
3ad0: 54 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65  The return value
3ae0: 20 69 73 20 54 43 4c 5f 4f 4b 20 6f 6e 20 61 20   is TCL_OK on a 
3af0: 73 75 63 63 65 73 73 66 75 6c 20 70 61 72 73 65  successful parse
3b00: 20 61 6e 64 20 54 43 4c 5f 45 52 52 4f 52 0a 2b   and TCL_ERROR.+
3b10: 20 2a 09 6f 6e 20 66 61 69 6c 75 72 65 2e 20 49   *.on failure. I
3b20: 66 20 54 43 4c 5f 45 52 52 4f 52 20 69 73 20 72  f TCL_ERROR is r
3b30: 65 74 75 72 6e 65 64 2c 20 74 68 65 6e 20 74 68  eturned, then th
3b40: 65 20 69 6e 74 65 72 70 72 65 74 65 72 27 73 20  e interpreter's 
3b50: 72 65 73 75 6c 74 0a 2b 20 2a 09 63 6f 6e 74 61  result.+ *.conta
3b60: 69 6e 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73  ins an error mes
3b70: 73 61 67 65 2e 0a 2b 20 2a 0a 2b 20 2a 20 53 69  sage..+ *.+ * Si
3b80: 64 65 20 65 66 66 65 63 74 73 3a 0a 2b 20 2a 09  de effects:.+ *.
3b90: 49 66 20 74 68 65 72 65 20 69 73 20 69 6e 73 75  If there is insu
3ba0: 66 66 69 63 69 65 6e 74 20 73 70 61 63 65 20 69  fficient space i
3bb0: 6e 20 70 61 72 73 65 50 74 72 20 74 6f 20 68 6f  n parsePtr to ho
3bc0: 6c 64 20 61 6c 6c 20 74 68 65 0a 2b 20 2a 09 69  ld all the.+ *.i
3bd0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
3be0: 20 74 68 65 20 73 75 62 65 78 70 72 65 73 73 69   the subexpressi
3bf0: 6f 6e 2c 20 74 68 65 6e 20 61 64 64 69 74 69 6f  on, then additio
3c00: 6e 61 6c 20 73 70 61 63 65 20 69 73 0a 2b 20 2a  nal space is.+ *
3c10: 09 6d 61 6c 6c 6f 63 2d 65 64 2e 0a 2b 20 2a 0a  .malloc-ed..+ *.
3c20: 2b 20 2a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  + *-------------
3c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 2b 20 2a 2f 0a 2b  ---------.+ */.+
3c70: 0a 2b 73 74 61 74 69 63 20 69 6e 74 0a 2b 50 61  .+static int.+Pa
3c80: 72 73 65 45 78 70 6f 6e 65 6e 74 69 61 6c 45 78  rseExponentialEx
3c90: 70 72 28 69 6e 66 6f 50 74 72 29 0a 2b 20 20 20  pr(infoPtr).+   
3ca0: 20 50 61 72 73 65 49 6e 66 6f 20 2a 69 6e 66 6f   ParseInfo *info
3cb0: 50 74 72 3b 09 09 09 2f 2a 20 48 6f 6c 64 73 20  Ptr;.../* Holds 
3cc0: 74 68 65 20 70 61 72 73 65 20 73 74 61 74 65 20  the parse state 
3cd0: 66 6f 72 20 74 68 65 0a 2b 09 09 09 09 09 20 2a  for the.+..... *
3ce0: 20 65 78 70 72 65 73 73 69 6f 6e 20 62 65 69 6e   expression bein
3cf0: 67 20 70 61 72 73 65 64 2e 20 2a 2f 0a 2b 7b 0a  g parsed. */.+{.
3d00: 2b 20 20 20 20 54 63 6c 5f 50 61 72 73 65 20 2a  +    Tcl_Parse *
3d10: 70 61 72 73 65 50 74 72 20 3d 20 69 6e 66 6f 50  parsePtr = infoP
3d20: 74 72 2d 3e 70 61 72 73 65 50 74 72 3b 0a 2b 20  tr->parsePtr;.+ 
3d30: 20 20 20 69 6e 74 20 66 69 72 73 74 49 6e 64 65     int firstInde
3d40: 78 2c 20 6c 65 78 65 6d 65 2c 20 63 6f 64 65 3b  x, lexeme, code;
3d50: 0a 2b 20 20 20 20 43 4f 4e 53 54 20 63 68 61 72  .+    CONST char
3d60: 20 2a 73 72 63 53 74 61 72 74 2c 20 2a 6f 70 65   *srcStart, *ope
3d70: 72 61 74 6f 72 3b 0a 2b 0a 2b 20 20 20 20 48 45  rator;.+.+    HE
3d80: 52 45 28 22 65 78 70 6f 6e 65 6e 74 69 61 74 65  RE("exponentiate
3d90: 45 78 70 72 22 2c 20 31 32 29 3b 0a 2b 20 20 20  Expr", 12);.+   
3da0: 20 73 72 63 53 74 61 72 74 20 3d 20 69 6e 66 6f   srcStart = info
3db0: 50 74 72 2d 3e 73 74 61 72 74 3b 0a 2b 20 20 20  Ptr->start;.+   
3dc0: 20 66 69 72 73 74 49 6e 64 65 78 20 3d 20 70 61   firstIndex = pa
3dd0: 72 73 65 50 74 72 2d 3e 6e 75 6d 54 6f 6b 65 6e  rsePtr->numToken
3de0: 73 3b 0a 2b 0a 2b 20 20 20 20 63 6f 64 65 20 3d  s;.+.+    code =
3df0: 20 50 61 72 73 65 55 6e 61 72 79 45 78 70 72 28   ParseUnaryExpr(
3e00: 69 6e 66 6f 50 74 72 29 3b 0a 2b 20 20 20 20 69  infoPtr);.+    i
3e10: 66 20 28 63 6f 64 65 20 21 3d 20 54 43 4c 5f 4f  f (code != TCL_O
3e20: 4b 29 20 7b 0a 2b 09 72 65 74 75 72 6e 20 63 6f  K) {.+.return co
3e30: 64 65 3b 0a 2b 20 20 20 20 7d 0a 2b 0a 2b 20 20  de;.+    }.+.+  
3e40: 20 20 6c 65 78 65 6d 65 20 3d 20 69 6e 66 6f 50    lexeme = infoP
3e50: 74 72 2d 3e 6c 65 78 65 6d 65 3b 0a 2b 20 20 20  tr->lexeme;.+   
3e60: 20 77 68 69 6c 65 20 28 6c 65 78 65 6d 65 20 3d   while (lexeme =
3e70: 3d 20 45 58 50 4f 4e 29 20 7b 0a 2b 09 6f 70 65  = EXPON) {.+.ope
3e80: 72 61 74 6f 72 20 3d 20 69 6e 66 6f 50 74 72 2d  rator = infoPtr-
3e90: 3e 73 74 61 72 74 3b 0a 2b 09 63 6f 64 65 20 3d  >start;.+.code =
3ea0: 20 47 65 74 4c 65 78 65 6d 65 28 69 6e 66 6f 50   GetLexeme(infoP
3eb0: 74 72 29 3b 09 2f 2a 20 73 6b 69 70 20 6f 76 65  tr);./* skip ove
3ec0: 72 20 2a 2a 20 2a 2f 0a 2b 09 69 66 20 28 63 6f  r ** */.+.if (co
3ed0: 64 65 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b 0a  de != TCL_OK) {.
3ee0: 2b 09 20 20 20 20 72 65 74 75 72 6e 20 63 6f 64  +.    return cod
3ef0: 65 3b 0a 2b 09 7d 0a 2b 09 63 6f 64 65 20 3d 20  e;.+.}.+.code = 
3f00: 50 61 72 73 65 55 6e 61 72 79 45 78 70 72 28 69  ParseUnaryExpr(i
3f10: 6e 66 6f 50 74 72 29 3b 0a 2b 09 69 66 20 28 63  nfoPtr);.+.if (c
3f20: 6f 64 65 20 21 3d 20 54 43 4c 5f 4f 4b 29 20 7b  ode != TCL_OK) {
3f30: 0a 2b 09 20 20 20 20 72 65 74 75 72 6e 20 63 6f  .+.    return co
3f40: 64 65 3b 0a 2b 09 7d 0a 2b 0a 2b 09 2f 2a 0a 2b  de;.+.}.+.+./*.+
3f50: 09 20 2a 20 47 65 6e 65 72 61 74 65 20 74 6f 6b  . * Generate tok
3f60: 65 6e 73 20 66 6f 72 20 74 68 65 20 73 75 62 65  ens for the sube
3f70: 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20 2a 2a  xpression and **
3f80: 20 6f 70 65 72 61 74 6f 72 2e 0a 2b 09 20 2a 2f   operator..+. */
3f90: 0a 2b 0a 2b 09 50 72 65 70 65 6e 64 53 75 62 45  .+.+.PrependSubE
3fa0: 78 70 72 54 6f 6b 65 6e 73 28 6f 70 65 72 61 74  xprTokens(operat
3fb0: 6f 72 2c 20 32 2c 20 73 72 63 53 74 61 72 74 2c  or, 2, srcStart,
3fc0: 0a 2b 09 09 28 69 6e 66 6f 50 74 72 2d 3e 70 72  .+..(infoPtr->pr
3fd0: 65 76 45 6e 64 20 2d 20 73 72 63 53 74 61 72 74  evEnd - srcStart
3fe0: 29 2c 20 66 69 72 73 74 49 6e 64 65 78 2c 20 69  ), firstIndex, i
3ff0: 6e 66 6f 50 74 72 29 3b 0a 2b 09 6c 65 78 65 6d  nfoPtr);.+.lexem
4000: 65 20 3d 20 69 6e 66 6f 50 74 72 2d 3e 6c 65 78  e = infoPtr->lex
4010: 65 6d 65 3b 0a 2b 20 20 20 20 7d 0a 2b 20 20 20  eme;.+    }.+   
4020: 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b 3b 0a   return TCL_OK;.
4030: 2b 7d 0a 2b 0a 2b 0c 0a 2b 2f 2a 0a 2b 20 2a 2d  +}.+.+..+/*.+ *-
4040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4080: 2d 2d 2d 2d 2d 0a 2b 20 2a 0a 20 20 2a 20 50 61  -----.+ *.  * Pa
4090: 72 73 65 55 6e 61 72 79 45 78 70 72 20 2d 2d 0a  rseUnaryExpr --.
40a0: 20 20 2a 0a 20 20 2a 09 54 68 69 73 20 70 72 6f    *.  *.This pro
40b0: 63 65 64 75 72 65 20 70 61 72 73 65 73 20 61 20  cedure parses a 
40c0: 54 63 6c 20 75 6e 61 72 79 20 65 78 70 72 65 73  Tcl unary expres
40d0: 73 69 6f 6e 3a 0a 40 40 20 2d 31 30 36 32 2c 37  sion:.@@ -1062,7
40e0: 20 2b 31 31 33 32 2c 37 20 40 40 0a 20 20 20 20   +1132,7 @@.    
40f0: 20 69 6e 74 20 66 69 72 73 74 49 6e 64 65 78 2c   int firstIndex,
4100: 20 6c 65 78 65 6d 65 2c 20 63 6f 64 65 3b 0a 20   lexeme, code;. 
4110: 20 20 20 20 43 4f 4e 53 54 20 63 68 61 72 20 2a      CONST char *
4120: 73 72 63 53 74 61 72 74 2c 20 2a 6f 70 65 72 61  srcStart, *opera
4130: 74 6f 72 3b 0a 20 0a 2d 20 20 20 20 48 45 52 45  tor;. .-    HERE
4140: 28 22 75 6e 61 72 79 45 78 70 72 22 2c 20 31 32  ("unaryExpr", 12
4150: 29 3b 0a 2b 20 20 20 20 48 45 52 45 28 22 75 6e  );.+    HERE("un
4160: 61 72 79 45 78 70 72 22 2c 20 31 33 29 3b 0a 20  aryExpr", 13);. 
4170: 20 20 20 20 73 72 63 53 74 61 72 74 20 3d 20 69      srcStart = i
4180: 6e 66 6f 50 74 72 2d 3e 73 74 61 72 74 3b 0a 20  nfoPtr->start;. 
4190: 20 20 20 20 66 69 72 73 74 49 6e 64 65 78 20 3d      firstIndex =
41a0: 20 70 61 72 73 65 50 74 72 2d 3e 6e 75 6d 54 6f   parsePtr->numTo
41b0: 6b 65 6e 73 3b 0a 20 20 20 20 20 0a 40 40 20 2d  kens;.     .@@ -
41c0: 31 31 33 32 2c 37 20 2b 31 32 30 32 2c 37 20 40  1132,7 +1202,7 @
41d0: 40 0a 20 20 20 20 20 20 2a 20 57 65 20 73 69 6d  @.      * We sim
41e0: 70 6c 79 20 72 65 63 75 72 73 65 20 6f 6e 20 70  ply recurse on p
41f0: 61 72 65 6e 74 68 65 73 69 7a 65 64 20 73 75 62  arenthesized sub
4200: 65 78 70 72 65 73 73 69 6f 6e 73 2e 0a 20 20 20  expressions..   
4210: 20 20 20 2a 2f 0a 20 0a 2d 20 20 20 20 48 45 52     */. .-    HER
4220: 45 28 22 70 72 69 6d 61 72 79 45 78 70 72 22 2c  E("primaryExpr",
4230: 20 31 33 29 3b 0a 2b 20 20 20 20 48 45 52 45 28   13);.+    HERE(
4240: 22 70 72 69 6d 61 72 79 45 78 70 72 22 2c 20 31  "primaryExpr", 1
4250: 34 29 3b 0a 20 20 20 20 20 6c 65 78 65 6d 65 20  4);.     lexeme 
4260: 3d 20 69 6e 66 6f 50 74 72 2d 3e 6c 65 78 65 6d  = infoPtr->lexem
4270: 65 3b 0a 20 20 20 20 20 69 66 20 28 6c 65 78 65  e;.     if (lexe
4280: 6d 65 20 3d 3d 20 4f 50 45 4e 5f 50 41 52 45 4e  me == OPEN_PAREN
4290: 29 20 7b 0a 20 09 63 6f 64 65 20 3d 20 47 65 74  ) {. .code = Get
42a0: 4c 65 78 65 6d 65 28 69 6e 66 6f 50 74 72 29 3b  Lexeme(infoPtr);
42b0: 20 2f 2a 20 73 6b 69 70 20 6f 76 65 72 20 74 68   /* skip over th
42c0: 65 20 27 28 27 20 2a 2f 0a 40 40 20 2d 31 36 38  e '(' */.@@ -168
42d0: 31 2c 36 20 2b 31 37 35 31 2c 31 32 20 40 40 0a  1,6 +1751,12 @@.
42e0: 20 0a 20 09 63 61 73 65 20 27 2a 27 3a 0a 20 09   . .case '*':. .
42f0: 20 20 20 20 69 6e 66 6f 50 74 72 2d 3e 6c 65 78      infoPtr->lex
4300: 65 6d 65 20 3d 20 4d 55 4c 54 3b 0a 2b 09 20 20  eme = MULT;.+.  
4310: 20 20 69 66 20 28 28 69 6e 66 6f 50 74 72 2d 3e    if ((infoPtr->
4320: 6c 61 73 74 43 68 61 72 20 2d 20 73 72 63 29 3e  lastChar - src)>
4330: 31 20 20 26 26 20 20 73 72 63 5b 31 5d 3d 3d 27  1  &&  src[1]=='
4340: 2a 27 29 20 7b 0a 2b 09 09 69 6e 66 6f 50 74 72  *') {.+..infoPtr
4350: 2d 3e 6c 65 78 65 6d 65 20 3d 20 45 58 50 4f 4e  ->lexeme = EXPON
4360: 3b 0a 2b 09 09 69 6e 66 6f 50 74 72 2d 3e 73 69  ;.+..infoPtr->si
4370: 7a 65 20 3d 20 32 3b 0a 2b 09 09 69 6e 66 6f 50  ze = 2;.+..infoP
4380: 74 72 2d 3e 6e 65 78 74 20 3d 20 73 72 63 2b 32  tr->next = src+2
4390: 3b 0a 2b 09 09 70 61 72 73 65 50 74 72 2d 3e 74  ;.+..parsePtr->t
43a0: 65 72 6d 20 3d 20 69 6e 66 6f 50 74 72 2d 3e 6e  erm = infoPtr->n
43b0: 65 78 74 3b 0a 2b 09 20 20 20 20 7d 0a 20 09 20  ext;.+.    }. . 
43c0: 20 20 20 72 65 74 75 72 6e 20 54 43 4c 5f 4f 4b     return TCL_OK
43d0: 3b 0a 20 0a 20 09 63 61 73 65 20 27 2f 27 3a 0a  ;. . .case '/':.
43e0: 49 6e 64 65 78 3a 20 74 65 73 74 73 2f 63 6f 6d  Index: tests/com
43f0: 70 45 78 70 72 2d 6f 6c 64 2e 74 65 73 74 0a 3d  pExpr-old.test.=
4400: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4410: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4420: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4430: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4440: 3d 3d 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76  ==.RCS file: /cv
4450: 73 72 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65  sroot/tcl/tcl/te
4460: 73 74 73 2f 63 6f 6d 70 45 78 70 72 2d 6f 6c 64  sts/compExpr-old
4470: 2e 74 65 73 74 2c 76 0a 72 65 74 72 69 65 76 69  .test,v.retrievi
4480: 6e 67 20 72 65 76 69 73 69 6f 6e 20 31 2e 37 0a  ng revision 1.7.
4490: 64 69 66 66 20 2d 75 20 2d 72 31 2e 37 20 63 6f  diff -u -r1.7 co
44a0: 6d 70 45 78 70 72 2d 6f 6c 64 2e 74 65 73 74 0a  mpExpr-old.test.
44b0: 2d 2d 2d 20 74 65 73 74 73 2f 63 6f 6d 70 45 78  --- tests/compEx
44c0: 70 72 2d 6f 6c 64 2e 74 65 73 74 09 36 20 44 65  pr-old.test.6 De
44d0: 63 20 32 30 30 31 20 31 30 3a 35 39 3a 31 37 20  c 2001 10:59:17 
44e0: 2d 30 30 30 30 09 31 2e 37 0a 2b 2b 2b 20 74 65  -0000.1.7.+++ te
44f0: 73 74 73 2f 63 6f 6d 70 45 78 70 72 2d 6f 6c 64  sts/compExpr-old
4500: 2e 74 65 73 74 09 31 32 20 53 65 70 20 32 30 30  .test.12 Sep 200
4510: 33 20 32 33 3a 34 31 3a 30 37 20 2d 30 30 30 30  3 23:41:07 -0000
4520: 0a 40 40 20 2d 31 33 33 2c 39 20 2b 31 33 33 2c  .@@ -133,9 +133,
4530: 39 20 40 40 0a 20 20 20 20 20 65 78 70 72 20 64  9 @@.     expr d
4540: 6f 75 62 6c 65 28 35 2a 5b 6c 6c 65 6e 67 74 68  ouble(5*[llength
4550: 20 22 36 20 32 22 5d 29 0a 20 7d 20 31 30 2e 30   "6 2"]). } 10.0
4560: 0a 20 74 65 73 74 20 63 6f 6d 70 45 78 70 72 2d  . test compExpr-
4570: 6f 6c 64 2d 32 2e 32 20 7b 54 63 6c 43 6f 6d 70  old-2.2 {TclComp
4580: 69 6c 65 45 78 70 72 3a 20 65 72 72 6f 72 20 69  ileExpr: error i
4590: 6e 20 65 78 70 72 7d 20 7b 0a 2d 20 20 20 20 63  n expr} {.-    c
45a0: 61 74 63 68 20 7b 65 78 70 72 20 32 2a 2a 33 7d  atch {expr 2**3}
45b0: 20 6d 73 67 0a 2b 20 20 20 20 63 61 74 63 68 20   msg.+    catch 
45c0: 7b 65 78 70 72 20 32 2a 2a 2a 33 7d 20 6d 73 67  {expr 2***3} msg
45d0: 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d  .     set msg.-}
45e0: 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69   {syntax error i
45f0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 32 2a  n expression "2*
4600: 2a 33 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20  *3": unexpected 
4610: 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 2b 7d 20 7b  operator *}.+} {
4620: 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20  syntax error in 
4630: 65 78 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a 2a  expression "2***
4640: 33 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f  3": unexpected o
4650: 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74  perator *}. test
4660: 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 32 2e   compExpr-old-2.
4670: 33 20 7b 54 63 6c 43 6f 6d 70 69 6c 65 45 78 70  3 {TclCompileExp
4680: 72 3a 20 6a 75 6e 6b 20 61 66 74 65 72 20 6c 65  r: junk after le
4690: 67 61 6c 20 65 78 70 72 7d 20 7b 0a 20 20 20 20  gal expr} {.    
46a0: 20 63 61 74 63 68 20 7b 65 78 70 72 20 37 2a 5b   catch {expr 7*[
46b0: 6c 6c 65 6e 67 74 68 20 22 61 20 62 22 5d 66 6f  llength "a b"]fo
46c0: 6f 7d 20 6d 73 67 0a 20 20 20 20 20 73 65 74 20  o} msg.     set 
46d0: 6d 73 67 0a 40 40 20 2d 31 35 31 2c 31 34 20 2b  msg.@@ -151,14 +
46e0: 31 35 31 2c 31 34 20 40 40 0a 20 7d 20 7b 73 79  151,14 @@. } {sy
46f0: 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78  ntax error in ex
4700: 70 72 65 73 73 69 6f 6e 20 22 78 7c 7c 33 22 3a  pression "x||3":
4710: 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
4720: 6e 63 65 73 20 72 65 71 75 69 72 65 20 70 72 65  nces require pre
4730: 63 65 64 69 6e 67 20 24 7d 20 0a 20 74 65 73 74  ceding $} . test
4740: 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 33 2e   compExpr-old-3.
4750: 33 20 7b 43 6f 6d 70 69 6c 65 43 6f 6e 64 45 78  3 {CompileCondEx
4760: 70 72 3a 20 74 65 73 74 20 74 72 75 65 20 61 72  pr: test true ar
4770: 6d 7d 20 7b 65 78 70 72 20 33 3e 32 3f 34 34 3a  m} {expr 3>2?44:
4780: 36 36 7d 20 34 34 0a 20 74 65 73 74 20 63 6f 6d  66} 44. test com
4790: 70 45 78 70 72 2d 6f 6c 64 2d 33 2e 34 20 7b 43  pExpr-old-3.4 {C
47a0: 6f 6d 70 69 6c 65 43 6f 6e 64 45 78 70 72 3a 20  ompileCondExpr: 
47b0: 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20  error compiling 
47c0: 74 72 75 65 20 61 72 6d 7d 20 7b 0a 2d 20 20 20  true arm} {.-   
47d0: 20 63 61 74 63 68 20 7b 65 78 70 72 20 33 3e 32   catch {expr 3>2
47e0: 3f 32 2a 2a 33 3a 36 36 7d 20 6d 73 67 0a 2b 20  ?2**3:66} msg.+ 
47f0: 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 33     catch {expr 3
4800: 3e 32 3f 32 2a 2a 2a 33 3a 36 36 7d 20 6d 73 67  >2?2***3:66} msg
4810: 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d  .     set msg.-}
4820: 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69   {syntax error i
4830: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 33 3e  n expression "3>
4840: 32 3f 32 2a 2a 33 3a 36 36 22 3a 20 75 6e 65 78  2?2**3:66": unex
4850: 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f 72 20  pected operator 
4860: 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65 72  *}.+} {syntax er
4870: 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f  ror in expressio
4880: 6e 20 22 33 3e 32 3f 32 2a 2a 2a 33 3a 36 36 22  n "3>2?2***3:66"
4890: 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65  : unexpected ope
48a0: 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74 20 63  rator *}. test c
48b0: 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 33 2e 35 20  ompExpr-old-3.5 
48c0: 7b 43 6f 6d 70 69 6c 65 43 6f 6e 64 45 78 70 72  {CompileCondExpr
48d0: 3a 20 74 65 73 74 20 66 61 6c 73 65 20 61 72 6d  : test false arm
48e0: 7d 20 7b 65 78 70 72 20 32 3e 33 3f 34 34 3a 36  } {expr 2>3?44:6
48f0: 36 7d 20 36 36 0a 20 74 65 73 74 20 63 6f 6d 70  6} 66. test comp
4900: 45 78 70 72 2d 6f 6c 64 2d 33 2e 36 20 7b 43 6f  Expr-old-3.6 {Co
4910: 6d 70 69 6c 65 43 6f 6e 64 45 78 70 72 3a 20 65  mpileCondExpr: e
4920: 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 66  rror compiling f
4930: 61 6c 73 65 20 61 72 6d 7d 20 7b 0a 2d 20 20 20  alse arm} {.-   
4940: 20 63 61 74 63 68 20 7b 65 78 70 72 20 32 3e 33   catch {expr 2>3
4950: 3f 34 34 3a 32 2a 2a 33 7d 20 6d 73 67 0a 2b 20  ?44:2**3} msg.+ 
4960: 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 32     catch {expr 2
4970: 3e 33 3f 34 34 3a 32 2a 2a 2a 33 7d 20 6d 73 67  >3?44:2***3} msg
4980: 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d  .     set msg.-}
4990: 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69   {syntax error i
49a0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 32 3e  n expression "2>
49b0: 33 3f 34 34 3a 32 2a 2a 33 22 3a 20 75 6e 65 78  3?44:2**3": unex
49c0: 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f 72 20  pected operator 
49d0: 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65 72  *}.+} {syntax er
49e0: 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f  ror in expressio
49f0: 6e 20 22 32 3e 33 3f 34 34 3a 32 2a 2a 2a 33 22  n "2>3?44:2***3"
4a00: 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65  : unexpected ope
4a10: 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74 20 63  rator *}. test c
4a20: 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 33 2e 37 20  ompExpr-old-3.7 
4a30: 7b 43 6f 6d 70 69 6c 65 43 6f 6e 64 45 78 70 72  {CompileCondExpr
4a40: 3a 20 6c 6f 6e 67 20 61 72 6d 73 20 26 20 6e 65  : long arms & ne
4a50: 73 74 65 64 20 63 6f 6e 64 20 65 78 70 72 73 7d  sted cond exprs}
4a60: 20 7b 6e 6f 6e 50 6f 72 74 61 62 6c 65 7d 20 7b   {nonPortable} {
4a70: 0a 20 20 20 20 20 70 75 74 73 20 22 4e 6f 74 65  .     puts "Note
4a80: 3a 20 64 6f 69 6e 67 20 74 65 73 74 20 63 6f 6d  : doing test com
4a90: 70 45 78 70 72 2d 6f 6c 64 2d 33 2e 37 20 77 68  pExpr-old-3.7 wh
4aa0: 69 63 68 20 63 61 6e 20 74 61 6b 65 20 73 65 76  ich can take sev
4ab0: 65 72 61 6c 20 6d 69 6e 75 74 65 73 20 74 6f 20  eral minutes to 
4ac0: 72 75 6e 22 0a 20 20 20 20 20 68 65 6c 6c 6f 5f  run".     hello_
4ad0: 77 6f 72 6c 64 0a 40 40 20 2d 31 37 39 2c 31 33  world.@@ -179,13
4ae0: 20 2b 31 37 39 2c 31 33 20 40 40 0a 20 74 65 73   +179,13 @@. tes
4af0: 74 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 34  t compExpr-old-4
4b00: 2e 34 20 7b 43 6f 6d 70 69 6c 65 4c 6f 72 45 78  .4 {CompileLorEx
4b10: 70 72 3a 20 73 69 6d 70 6c 65 20 6c 6f 72 20 65  pr: simple lor e
4b20: 78 70 72 73 7d 20 7b 65 78 70 72 20 33 2e 30 7c  xprs} {expr 3.0|
4b30: 7c 30 2e 30 7d 20 31 0a 20 74 65 73 74 20 63 6f  |0.0} 1. test co
4b40: 6d 70 45 78 70 72 2d 6f 6c 64 2d 34 2e 35 20 7b  mpExpr-old-4.5 {
4b50: 43 6f 6d 70 69 6c 65 4c 6f 72 45 78 70 72 3a 20  CompileLorExpr: 
4b60: 73 69 6d 70 6c 65 20 6c 6f 72 20 65 78 70 72 73  simple lor exprs
4b70: 7d 20 7b 65 78 70 72 20 30 7c 7c 30 7c 7c 31 7d  } {expr 0||0||1}
4b80: 20 31 0a 20 74 65 73 74 20 63 6f 6d 70 45 78 70   1. test compExp
4b90: 72 2d 6f 6c 64 2d 34 2e 36 20 7b 43 6f 6d 70 69  r-old-4.6 {Compi
4ba0: 6c 65 4c 6f 72 45 78 70 72 3a 20 65 72 72 6f 72  leLorExpr: error
4bb0: 20 63 6f 6d 70 69 6c 69 6e 67 20 6c 6f 72 20 61   compiling lor a
4bc0: 72 6d 7d 20 7b 0a 2d 20 20 20 20 63 61 74 63 68  rm} {.-    catch
4bd0: 20 7b 65 78 70 72 20 32 2a 2a 33 7c 7c 34 2e 30   {expr 2**3||4.0
4be0: 7d 20 6d 73 67 0a 2b 20 20 20 20 63 61 74 63 68  } msg.+    catch
4bf0: 20 7b 65 78 70 72 20 32 2a 2a 2a 33 7c 7c 34 2e   {expr 2***3||4.
4c00: 30 7d 20 6d 73 67 0a 20 20 20 20 20 73 65 74 20  0} msg.     set 
4c10: 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74 61 78 20 65  msg.-} {syntax e
4c20: 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73 69  rror in expressi
4c30: 6f 6e 20 22 32 2a 2a 33 7c 7c 34 2e 30 22 3a 20  on "2**3||4.0": 
4c40: 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72 61  unexpected opera
4c50: 74 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61  tor *}.+} {synta
4c60: 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65  x error in expre
4c70: 73 73 69 6f 6e 20 22 32 2a 2a 2a 33 7c 7c 34 2e  ssion "2***3||4.
4c80: 30 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f  0": unexpected o
4c90: 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74  perator *}. test
4ca0: 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 34 2e   compExpr-old-4.
4cb0: 37 20 7b 43 6f 6d 70 69 6c 65 4c 6f 72 45 78 70  7 {CompileLorExp
4cc0: 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69  r: error compili
4cd0: 6e 67 20 6c 6f 72 20 61 72 6d 7d 20 7b 0a 2d 20  ng lor arm} {.- 
4ce0: 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 31     catch {expr 1
4cf0: 2e 33 7c 7c 32 2a 2a 33 7d 20 6d 73 67 0a 2b 20  .3||2**3} msg.+ 
4d00: 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 31     catch {expr 1
4d10: 2e 33 7c 7c 32 2a 2a 2a 33 7d 20 6d 73 67 0a 20  .3||2***3} msg. 
4d20: 20 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d 20 7b      set msg.-} {
4d30: 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20  syntax error in 
4d40: 65 78 70 72 65 73 73 69 6f 6e 20 22 31 2e 33 7c  expression "1.3|
4d50: 7c 32 2a 2a 33 22 3a 20 75 6e 65 78 70 65 63 74  |2**3": unexpect
4d60: 65 64 20 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 2b  ed operator *}.+
4d70: 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20  } {syntax error 
4d80: 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 31  in expression "1
4d90: 2e 33 7c 7c 32 2a 2a 2a 33 22 3a 20 75 6e 65 78  .3||2***3": unex
4da0: 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f 72 20  pected operator 
4db0: 2a 7d 0a 20 74 65 73 74 20 63 6f 6d 70 45 78 70  *}. test compExp
4dc0: 72 2d 6f 6c 64 2d 34 2e 38 20 7b 43 6f 6d 70 69  r-old-4.8 {Compi
4dd0: 6c 65 4c 6f 72 45 78 70 72 3a 20 65 72 72 6f 72  leLorExpr: error
4de0: 20 63 6f 6d 70 69 6c 69 6e 67 20 6c 6f 72 20 61   compiling lor a
4df0: 72 6d 73 7d 20 7b 0a 20 20 20 20 20 6c 69 73 74  rms} {.     list
4e00: 20 5b 63 61 74 63 68 20 7b 65 78 70 72 20 7b 22   [catch {expr {"
4e10: 61 22 7c 7c 22 62 22 7d 7d 20 6d 73 67 5d 20 24  a"||"b"}} msg] $
4e20: 6d 73 67 0a 20 7d 20 7b 31 20 7b 65 78 70 65 63  msg. } {1 {expec
4e30: 74 65 64 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  ted boolean valu
4e40: 65 20 62 75 74 20 67 6f 74 20 22 61 22 7d 7d 0a  e but got "a"}}.
4e50: 40 40 20 2d 32 30 35 2c 31 33 20 2b 32 30 35 2c  @@ -205,13 +205,
4e60: 31 33 20 40 40 0a 20 74 65 73 74 20 63 6f 6d 70  13 @@. test comp
4e70: 45 78 70 72 2d 6f 6c 64 2d 35 2e 35 20 7b 43 6f  Expr-old-5.5 {Co
4e80: 6d 70 69 6c 65 4c 61 6e 64 45 78 70 72 3a 20 73  mpileLandExpr: s
4e90: 69 6d 70 6c 65 20 6c 61 6e 64 20 65 78 70 72 73  imple land exprs
4ea0: 7d 20 7b 65 78 70 72 20 33 2e 30 26 26 31 2e 32  } {expr 3.0&&1.2
4eb0: 7d 20 31 0a 20 74 65 73 74 20 63 6f 6d 70 45 78  } 1. test compEx
4ec0: 70 72 2d 6f 6c 64 2d 35 2e 36 20 7b 43 6f 6d 70  pr-old-5.6 {Comp
4ed0: 69 6c 65 4c 61 6e 64 45 78 70 72 3a 20 73 69 6d  ileLandExpr: sim
4ee0: 70 6c 65 20 6c 61 6e 64 20 65 78 70 72 73 7d 20  ple land exprs} 
4ef0: 7b 65 78 70 72 20 31 26 26 31 26 26 32 7d 20 31  {expr 1&&1&&2} 1
4f00: 0a 20 74 65 73 74 20 63 6f 6d 70 45 78 70 72 2d  . test compExpr-
4f10: 6f 6c 64 2d 35 2e 37 20 7b 43 6f 6d 70 69 6c 65  old-5.7 {Compile
4f20: 4c 61 6e 64 45 78 70 72 3a 20 65 72 72 6f 72 20  LandExpr: error 
4f30: 63 6f 6d 70 69 6c 69 6e 67 20 6c 61 6e 64 20 61  compiling land a
4f40: 72 6d 7d 20 7b 0a 2d 20 20 20 20 63 61 74 63 68  rm} {.-    catch
4f50: 20 7b 65 78 70 72 20 32 2a 2a 33 26 26 34 2e 30   {expr 2**3&&4.0
4f60: 7d 20 6d 73 67 0a 2b 20 20 20 20 63 61 74 63 68  } msg.+    catch
4f70: 20 7b 65 78 70 72 20 32 2a 2a 2a 33 26 26 34 2e   {expr 2***3&&4.
4f80: 30 7d 20 6d 73 67 0a 20 20 20 20 20 73 65 74 20  0} msg.     set 
4f90: 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74 61 78 20 65  msg.-} {syntax e
4fa0: 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73 69  rror in expressi
4fb0: 6f 6e 20 22 32 2a 2a 33 26 26 34 2e 30 22 3a 20  on "2**3&&4.0": 
4fc0: 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72 61  unexpected opera
4fd0: 74 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61  tor *}.+} {synta
4fe0: 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65  x error in expre
4ff0: 73 73 69 6f 6e 20 22 32 2a 2a 2a 33 26 26 34 2e  ssion "2***3&&4.
5000: 30 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f  0": unexpected o
5010: 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74  perator *}. test
5020: 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 35 2e   compExpr-old-5.
5030: 38 20 7b 43 6f 6d 70 69 6c 65 4c 61 6e 64 45 78  8 {CompileLandEx
5040: 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c  pr: error compil
5050: 69 6e 67 20 6c 61 6e 64 20 61 72 6d 7d 20 7b 0a  ing land arm} {.
5060: 2d 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72  -    catch {expr
5070: 20 31 2e 33 26 26 32 2a 2a 33 7d 20 6d 73 67 0a   1.3&&2**3} msg.
5080: 2b 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72  +    catch {expr
5090: 20 31 2e 33 26 26 32 2a 2a 2a 33 7d 20 6d 73 67   1.3&&2***3} msg
50a0: 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d  .     set msg.-}
50b0: 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69   {syntax error i
50c0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 31 2e  n expression "1.
50d0: 33 26 26 32 2a 2a 33 22 3a 20 75 6e 65 78 70 65  3&&2**3": unexpe
50e0: 63 74 65 64 20 6f 70 65 72 61 74 6f 72 20 2a 7d  cted operator *}
50f0: 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f  .+} {syntax erro
5100: 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r in expression 
5110: 22 31 2e 33 26 26 32 2a 2a 2a 33 22 3a 20 75 6e  "1.3&&2***3": un
5120: 65 78 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f  expected operato
5130: 72 20 2a 7d 0a 20 74 65 73 74 20 63 6f 6d 70 45  r *}. test compE
5140: 78 70 72 2d 6f 6c 64 2d 35 2e 39 20 7b 43 6f 6d  xpr-old-5.9 {Com
5150: 70 69 6c 65 4c 61 6e 64 45 78 70 72 3a 20 65 72  pileLandExpr: er
5160: 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 6c 61  ror compiling la
5170: 6e 64 20 61 72 6d 7d 20 7b 0a 20 20 20 20 20 6c  nd arm} {.     l
5180: 69 73 74 20 5b 63 61 74 63 68 20 7b 65 78 70 72  ist [catch {expr
5190: 20 7b 22 61 22 26 26 22 62 22 7d 7d 20 6d 73 67   {"a"&&"b"}} msg
51a0: 5d 20 24 6d 73 67 0a 20 7d 20 7b 31 20 7b 65 78  ] $msg. } {1 {ex
51b0: 70 65 63 74 65 64 20 62 6f 6f 6c 65 61 6e 20 76  pected boolean v
51c0: 61 6c 75 65 20 62 75 74 20 67 6f 74 20 22 61 22  alue but got "a"
51d0: 7d 7d 0a 40 40 20 2d 32 33 31 2c 39 20 2b 32 33  }}.@@ -231,9 +23
51e0: 31 2c 39 20 40 40 0a 20 74 65 73 74 20 63 6f 6d  1,9 @@. test com
51f0: 70 45 78 70 72 2d 6f 6c 64 2d 36 2e 35 20 7b 43  pExpr-old-6.5 {C
5200: 6f 6d 70 69 6c 65 42 69 74 58 6f 72 45 78 70 72  ompileBitXorExpr
5210: 3a 20 73 69 6d 70 6c 65 20 62 69 74 78 6f 72 20  : simple bitxor 
5220: 65 78 70 72 73 7d 20 7b 65 78 70 72 20 30 5e 37  exprs} {expr 0^7
5230: 7d 20 37 0a 20 74 65 73 74 20 63 6f 6d 70 45 78  } 7. test compEx
5240: 70 72 2d 6f 6c 64 2d 36 2e 36 20 7b 43 6f 6d 70  pr-old-6.6 {Comp
5250: 69 6c 65 42 69 74 58 6f 72 45 78 70 72 3a 20 73  ileBitXorExpr: s
5260: 69 6d 70 6c 65 20 62 69 74 78 6f 72 20 65 78 70  imple bitxor exp
5270: 72 73 7d 20 7b 65 78 70 72 20 2d 31 5e 37 7d 20  rs} {expr -1^7} 
5280: 2d 38 0a 20 74 65 73 74 20 63 6f 6d 70 45 78 70  -8. test compExp
5290: 72 2d 6f 6c 64 2d 36 2e 37 20 7b 43 6f 6d 70 69  r-old-6.7 {Compi
52a0: 6c 65 42 69 74 58 6f 72 45 78 70 72 3a 20 65 72  leBitXorExpr: er
52b0: 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 62 69  ror compiling bi
52c0: 74 78 6f 72 20 61 72 6d 7d 20 7b 0a 2d 20 20 20  txor arm} {.-   
52d0: 20 63 61 74 63 68 20 7b 65 78 70 72 20 32 2a 2a   catch {expr 2**
52e0: 33 7c 36 7d 20 6d 73 67 0a 2b 20 20 20 20 63 61  3|6} msg.+    ca
52f0: 74 63 68 20 7b 65 78 70 72 20 32 2a 2a 2a 33 7c  tch {expr 2***3|
5300: 36 7d 20 6d 73 67 0a 20 20 20 20 20 73 65 74 20  6} msg.     set 
5310: 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74 61 78 20 65  msg.-} {syntax e
5320: 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73 69  rror in expressi
5330: 6f 6e 20 22 32 2a 2a 33 7c 36 22 3a 20 75 6e 65  on "2**3|6": une
5340: 78 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f 72  xpected operator
5350: 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65   *}.+} {syntax e
5360: 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73 69  rror in expressi
5370: 6f 6e 20 22 32 2a 2a 2a 33 7c 36 22 3a 20 75 6e  on "2***3|6": un
5380: 65 78 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f  expected operato
5390: 72 20 2a 7d 0a 20 74 65 73 74 20 63 6f 6d 70 45  r *}. test compE
53a0: 78 70 72 2d 6f 6c 64 2d 36 2e 38 20 7b 43 6f 6d  xpr-old-6.8 {Com
53b0: 70 69 6c 65 42 69 74 58 6f 72 45 78 70 72 3a 20  pileBitXorExpr: 
53c0: 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20  error compiling 
53d0: 62 69 74 78 6f 72 20 61 72 6d 7d 20 7b 0a 20 20  bitxor arm} {.  
53e0: 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 32     catch {expr 2
53f0: 5e 78 7d 20 6d 73 67 0a 20 20 20 20 20 73 65 74  ^x} msg.     set
5400: 20 6d 73 67 0a 40 40 20 2d 32 35 38 2c 39 20 2b   msg.@@ -258,9 +
5410: 32 35 38 2c 39 20 40 40 0a 20 74 65 73 74 20 63  258,9 @@. test c
5420: 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 37 2e 38 20  ompExpr-old-7.8 
5430: 7b 43 6f 6d 70 69 6c 65 42 69 74 41 6e 64 45 78  {CompileBitAndEx
5440: 70 72 3a 20 73 69 6d 70 6c 65 20 62 69 74 61 6e  pr: simple bitan
5450: 64 20 65 78 70 72 73 7d 20 7b 65 78 70 72 20 33  d exprs} {expr 3
5460: 26 36 7d 20 32 0a 20 74 65 73 74 20 63 6f 6d 70  &6} 2. test comp
5470: 45 78 70 72 2d 6f 6c 64 2d 37 2e 39 20 7b 43 6f  Expr-old-7.9 {Co
5480: 6d 70 69 6c 65 42 69 74 41 6e 64 45 78 70 72 3a  mpileBitAndExpr:
5490: 20 73 69 6d 70 6c 65 20 62 69 74 61 6e 64 20 65   simple bitand e
54a0: 78 70 72 73 7d 20 7b 65 78 70 72 20 2d 31 26 2d  xprs} {expr -1&-
54b0: 37 7d 20 2d 37 0a 20 74 65 73 74 20 63 6f 6d 70  7} -7. test comp
54c0: 45 78 70 72 2d 6f 6c 64 2d 37 2e 31 30 20 7b 43  Expr-old-7.10 {C
54d0: 6f 6d 70 69 6c 65 42 69 74 41 6e 64 45 78 70 72  ompileBitAndExpr
54e0: 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e  : error compilin
54f0: 67 20 62 69 74 61 6e 64 20 61 72 6d 7d 20 7b 0a  g bitand arm} {.
5500: 2d 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72  -    catch {expr
5510: 20 32 2a 2a 33 26 36 7d 20 6d 73 67 0a 2b 20 20   2**3&6} msg.+  
5520: 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 32 2a    catch {expr 2*
5530: 2a 2a 33 26 36 7d 20 6d 73 67 0a 20 20 20 20 20  **3&6} msg.     
5540: 73 65 74 20 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74  set msg.-} {synt
5550: 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72  ax error in expr
5560: 65 73 73 69 6f 6e 20 22 32 2a 2a 33 26 36 22 3a  ession "2**3&6":
5570: 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72   unexpected oper
5580: 61 74 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74  ator *}.+} {synt
5590: 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72  ax error in expr
55a0: 65 73 73 69 6f 6e 20 22 32 2a 2a 2a 33 26 36 22  ession "2***3&6"
55b0: 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65  : unexpected ope
55c0: 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74 20 63  rator *}. test c
55d0: 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 37 2e 31 31  ompExpr-old-7.11
55e0: 20 7b 43 6f 6d 70 69 6c 65 42 69 74 41 6e 64 45   {CompileBitAndE
55f0: 78 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69  xpr: error compi
5600: 6c 69 6e 67 20 62 69 74 61 6e 64 20 61 72 6d 7d  ling bitand arm}
5610: 20 7b 0a 20 20 20 20 20 63 61 74 63 68 20 7b 65   {.     catch {e
5620: 78 70 72 20 32 26 78 7d 20 6d 73 67 0a 20 20 20  xpr 2&x} msg.   
5630: 20 20 73 65 74 20 6d 73 67 0a 40 40 20 2d 32 38    set msg.@@ -28
5640: 35 2c 39 20 2b 32 38 35 2c 39 20 40 40 0a 20 74  5,9 +285,9 @@. t
5650: 65 73 74 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64  est compExpr-old
5660: 2d 38 2e 38 20 7b 43 6f 6d 70 69 6c 65 45 71 75  -8.8 {CompileEqu
5670: 61 6c 69 74 79 45 78 70 72 3a 20 73 69 6d 70 6c  alityExpr: simpl
5680: 65 20 65 71 75 61 6c 69 74 79 20 65 78 70 72 73  e equality exprs
5690: 7d 20 7b 65 78 70 72 20 7b 22 31 32 33 39 38 37  } {expr {"123987
56a0: 31 32 39 33 38 37 38 38 32 33 34 2d 31 32 39 38  12938788234-1298
56b0: 33 37 39 22 20 21 3d 20 22 22 7d 7d 20 31 0a 20  379" != ""}} 1. 
56c0: 74 65 73 74 20 63 6f 6d 70 45 78 70 72 2d 6f 6c  test compExpr-ol
56d0: 64 2d 38 2e 39 20 7b 43 6f 6d 70 69 6c 65 45 71  d-8.9 {CompileEq
56e0: 75 61 6c 69 74 79 45 78 70 72 3a 20 73 69 6d 70  ualityExpr: simp
56f0: 6c 65 20 65 71 75 61 6c 69 74 79 20 65 78 70 72  le equality expr
5700: 73 7d 20 7b 65 78 70 72 20 2d 31 21 3d 22 61 62  s} {expr -1!="ab
5710: 63 22 7d 20 31 0a 20 74 65 73 74 20 63 6f 6d 70  c"} 1. test comp
5720: 45 78 70 72 2d 6f 6c 64 2d 38 2e 31 30 20 7b 43  Expr-old-8.10 {C
5730: 6f 6d 70 69 6c 65 45 71 75 61 6c 69 74 79 45 78  ompileEqualityEx
5740: 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c  pr: error compil
5750: 69 6e 67 20 65 71 75 61 6c 69 74 79 20 61 72 6d  ing equality arm
5760: 7d 20 7b 0a 2d 20 20 20 20 63 61 74 63 68 20 7b  } {.-    catch {
5770: 65 78 70 72 20 32 2a 2a 33 3d 3d 36 7d 20 6d 73  expr 2**3==6} ms
5780: 67 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 65 78  g.+    catch {ex
5790: 70 72 20 32 2a 2a 2a 33 3d 3d 36 7d 20 6d 73 67  pr 2***3==6} msg
57a0: 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d  .     set msg.-}
57b0: 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69   {syntax error i
57c0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 32 2a  n expression "2*
57d0: 2a 33 3d 3d 36 22 3a 20 75 6e 65 78 70 65 63 74  *3==6": unexpect
57e0: 65 64 20 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 2b  ed operator *}.+
57f0: 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20  } {syntax error 
5800: 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 32  in expression "2
5810: 2a 2a 2a 33 3d 3d 36 22 3a 20 75 6e 65 78 70 65  ***3==6": unexpe
5820: 63 74 65 64 20 6f 70 65 72 61 74 6f 72 20 2a 7d  cted operator *}
5830: 0a 20 74 65 73 74 20 63 6f 6d 70 45 78 70 72 2d  . test compExpr-
5840: 6f 6c 64 2d 38 2e 31 31 20 7b 43 6f 6d 70 69 6c  old-8.11 {Compil
5850: 65 45 71 75 61 6c 69 74 79 45 78 70 72 3a 20 65  eEqualityExpr: e
5860: 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 65  rror compiling e
5870: 71 75 61 6c 69 74 79 20 61 72 6d 7d 20 7b 0a 20  quality arm} {. 
5880: 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20      catch {expr 
5890: 32 21 3d 78 7d 20 6d 73 67 0a 20 20 20 20 20 73  2!=x} msg.     s
58a0: 65 74 20 6d 73 67 0a 40 40 20 2d 33 31 38 2c 39  et msg.@@ -318,9
58b0: 20 2b 33 31 38 2c 39 20 40 40 0a 20 74 65 73 74   +318,9 @@. test
58c0: 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 39 2e   compExpr-old-9.
58d0: 37 20 7b 43 6f 6d 70 69 6c 65 52 65 6c 61 74 69  7 {CompileRelati
58e0: 6f 6e 61 6c 45 78 70 72 3a 20 73 69 6d 70 6c 65  onalExpr: simple
58f0: 20 72 65 6c 61 74 69 6f 6e 61 6c 20 65 78 70 72   relational expr
5900: 73 7d 20 7b 65 78 70 72 20 30 78 66 66 3e 3d 2b  s} {expr 0xff>=+
5910: 30 78 33 7d 20 31 0a 20 74 65 73 74 20 63 6f 6d  0x3} 1. test com
5920: 70 45 78 70 72 2d 6f 6c 64 2d 39 2e 38 20 7b 43  pExpr-old-9.8 {C
5930: 6f 6d 70 69 6c 65 52 65 6c 61 74 69 6f 6e 61 6c  ompileRelational
5940: 45 78 70 72 3a 20 73 69 6d 70 6c 65 20 72 65 6c  Expr: simple rel
5950: 61 74 69 6f 6e 61 6c 20 65 78 70 72 73 7d 20 7b  ational exprs} {
5960: 65 78 70 72 20 2d 30 78 66 32 3c 30 78 33 7d 20  expr -0xf2<0x3} 
5970: 31 0a 20 74 65 73 74 20 63 6f 6d 70 45 78 70 72  1. test compExpr
5980: 2d 6f 6c 64 2d 39 2e 39 20 7b 43 6f 6d 70 69 6c  -old-9.9 {Compil
5990: 65 52 65 6c 61 74 69 6f 6e 61 6c 45 78 70 72 3a  eRelationalExpr:
59a0: 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67   error compiling
59b0: 20 72 65 6c 61 74 69 6f 6e 61 6c 20 61 72 6d 7d   relational arm}
59c0: 20 7b 0a 2d 20 20 20 20 63 61 74 63 68 20 7b 65   {.-    catch {e
59d0: 78 70 72 20 32 2a 2a 33 3e 36 7d 20 6d 73 67 0a  xpr 2**3>6} msg.
59e0: 2b 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72  +    catch {expr
59f0: 20 32 2a 2a 2a 33 3e 36 7d 20 6d 73 67 0a 20 20   2***3>6} msg.  
5a00: 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d 20 7b 73     set msg.-} {s
5a10: 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65  yntax error in e
5a20: 78 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a 33 3e  xpression "2**3>
5a30: 36 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f  6": unexpected o
5a40: 70 65 72 61 74 6f 72 20 2a 7d 0a 2b 7d 20 7b 73  perator *}.+} {s
5a50: 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65  yntax error in e
5a60: 78 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a 2a 33  xpression "2***3
5a70: 3e 36 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20  >6": unexpected 
5a80: 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73  operator *}. tes
5a90: 74 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 39  t compExpr-old-9
5aa0: 2e 31 30 20 7b 43 6f 6d 70 69 6c 65 52 65 6c 61  .10 {CompileRela
5ab0: 74 69 6f 6e 61 6c 45 78 70 72 3a 20 65 72 72 6f  tionalExpr: erro
5ac0: 72 20 63 6f 6d 70 69 6c 69 6e 67 20 72 65 6c 61  r compiling rela
5ad0: 74 69 6f 6e 61 6c 20 61 72 6d 7d 20 7b 0a 20 20  tional arm} {.  
5ae0: 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 32     catch {expr 2
5af0: 3c 78 7d 20 6d 73 67 0a 20 20 20 20 20 73 65 74  <x} msg.     set
5b00: 20 6d 73 67 0a 40 40 20 2d 33 33 37 2c 39 20 2b   msg.@@ -337,9 +
5b10: 33 33 37 2c 39 20 40 40 0a 20 74 65 73 74 20 63  337,9 @@. test c
5b20: 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 31 30 2e 36  ompExpr-old-10.6
5b30: 20 7b 43 6f 6d 70 69 6c 65 53 68 69 66 74 45 78   {CompileShiftEx
5b40: 70 72 3a 20 73 69 6d 70 6c 65 20 73 68 69 66 74  pr: simple shift
5b50: 20 65 78 70 72 73 7d 20 7b 65 78 70 72 20 30 78   exprs} {expr 0x
5b60: 66 66 3e 3e 30 78 33 7d 20 33 31 0a 20 74 65 73  ff>>0x3} 31. tes
5b70: 74 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 31  t compExpr-old-1
5b80: 30 2e 37 20 7b 43 6f 6d 70 69 6c 65 53 68 69 66  0.7 {CompileShif
5b90: 74 45 78 70 72 3a 20 73 69 6d 70 6c 65 20 73 68  tExpr: simple sh
5ba0: 69 66 74 20 65 78 70 72 73 7d 20 7b 65 78 70 72  ift exprs} {expr
5bb0: 20 2d 30 78 66 32 3c 3c 30 78 33 7d 20 2d 31 39   -0xf2<<0x3} -19
5bc0: 33 36 0a 20 74 65 73 74 20 63 6f 6d 70 45 78 70  36. test compExp
5bd0: 72 2d 6f 6c 64 2d 31 30 2e 38 20 7b 43 6f 6d 70  r-old-10.8 {Comp
5be0: 69 6c 65 53 68 69 66 74 45 78 70 72 3a 20 65 72  ileShiftExpr: er
5bf0: 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 73 68  ror compiling sh
5c00: 69 66 74 20 61 72 6d 7d 20 7b 0a 2d 20 20 20 20  ift arm} {.-    
5c10: 63 61 74 63 68 20 7b 65 78 70 72 20 32 2a 2a 33  catch {expr 2**3
5c20: 3e 3e 36 7d 20 6d 73 67 0a 2b 20 20 20 20 63 61  >>6} msg.+    ca
5c30: 74 63 68 20 7b 65 78 70 72 20 32 2a 2a 2a 33 3e  tch {expr 2***3>
5c40: 3e 36 7d 20 6d 73 67 0a 20 20 20 20 20 73 65 74  >6} msg.     set
5c50: 20 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74 61 78 20   msg.-} {syntax 
5c60: 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73  error in express
5c70: 69 6f 6e 20 22 32 2a 2a 33 3e 3e 36 22 3a 20 75  ion "2**3>>6": u
5c80: 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72 61 74  nexpected operat
5c90: 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61 78  or *}.+} {syntax
5ca0: 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73   error in expres
5cb0: 73 69 6f 6e 20 22 32 2a 2a 2a 33 3e 3e 36 22 3a  sion "2***3>>6":
5cc0: 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72   unexpected oper
5cd0: 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74 20 63 6f  ator *}. test co
5ce0: 6d 70 45 78 70 72 2d 6f 6c 64 2d 31 30 2e 39 20  mpExpr-old-10.9 
5cf0: 7b 43 6f 6d 70 69 6c 65 53 68 69 66 74 45 78 70  {CompileShiftExp
5d00: 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69  r: error compili
5d10: 6e 67 20 73 68 69 66 74 20 61 72 6d 7d 20 7b 0a  ng shift arm} {.
5d20: 20 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72       catch {expr
5d30: 20 32 3c 3c 78 7d 20 6d 73 67 0a 20 20 20 20 20   2<<x} msg.     
5d40: 73 65 74 20 6d 73 67 0a 40 40 20 2d 33 36 32 2c  set msg.@@ -362,
5d50: 39 20 2b 33 36 32 2c 39 20 40 40 0a 20 74 65 73  9 +362,9 @@. tes
5d60: 74 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 31  t compExpr-old-1
5d70: 31 2e 36 20 7b 43 6f 6d 70 69 6c 65 41 64 64 45  1.6 {CompileAddE
5d80: 78 70 72 3a 20 73 69 6d 70 6c 65 20 61 64 64 20  xpr: simple add 
5d90: 65 78 70 72 73 7d 20 7b 65 78 70 72 20 30 78 66  exprs} {expr 0xf
5da0: 66 2b 2b 30 78 33 7d 20 32 35 38 0a 20 74 65 73  f++0x3} 258. tes
5db0: 74 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 31  t compExpr-old-1
5dc0: 31 2e 37 20 7b 43 6f 6d 70 69 6c 65 41 64 64 45  1.7 {CompileAddE
5dd0: 78 70 72 3a 20 73 69 6d 70 6c 65 20 61 64 64 20  xpr: simple add 
5de0: 65 78 70 72 73 7d 20 7b 65 78 70 72 20 2d 30 78  exprs} {expr -0x
5df0: 66 32 2d 2d 30 78 33 7d 20 2d 32 33 39 0a 20 74  f2--0x3} -239. t
5e00: 65 73 74 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64  est compExpr-old
5e10: 2d 31 31 2e 38 20 7b 43 6f 6d 70 69 6c 65 41 64  -11.8 {CompileAd
5e20: 64 45 78 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d  dExpr: error com
5e30: 70 69 6c 69 6e 67 20 61 64 64 20 61 72 6d 7d 20  piling add arm} 
5e40: 7b 0a 2d 20 20 20 20 63 61 74 63 68 20 7b 65 78  {.-    catch {ex
5e50: 70 72 20 32 2a 2a 33 2b 36 7d 20 6d 73 67 0a 2b  pr 2**3+6} msg.+
5e60: 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20      catch {expr 
5e70: 32 2a 2a 2a 33 2b 36 7d 20 6d 73 67 0a 20 20 20  2***3+6} msg.   
5e80: 20 20 73 65 74 20 6d 73 67 0a 2d 7d 20 7b 73 79    set msg.-} {sy
5e90: 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78  ntax error in ex
5ea0: 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a 33 2b 36  pression "2**3+6
5eb0: 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70  ": unexpected op
5ec0: 65 72 61 74 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79  erator *}.+} {sy
5ed0: 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78  ntax error in ex
5ee0: 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a 2a 33 2b  pression "2***3+
5ef0: 36 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f  6": unexpected o
5f00: 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74  perator *}. test
5f10: 20 63 6f 6d 70 45 78 70 72 2d 6f 6c 64 2d 31 31   compExpr-old-11
5f20: 2e 39 20 7b 43 6f 6d 70 69 6c 65 41 64 64 45 78  .9 {CompileAddEx
5f30: 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c  pr: error compil
5f40: 69 6e 67 20 61 64 64 20 61 72 6d 7d 20 7b 0a 20  ing add arm} {. 
5f50: 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20      catch {expr 
5f60: 32 2d 78 7d 20 6d 73 67 0a 20 20 20 20 20 73 65  2-x} msg.     se
5f70: 74 20 6d 73 67 0a 49 6e 64 65 78 3a 20 74 65 73  t msg.Index: tes
5f80: 74 73 2f 65 78 70 72 2e 74 65 73 74 0a 3d 3d 3d  ts/expr.test.===
5f90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5fa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5fb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5fd0: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
5fe0: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 74 65 73 74  oot/tcl/tcl/test
5ff0: 73 2f 65 78 70 72 2e 74 65 73 74 2c 76 0a 72 65  s/expr.test,v.re
6000: 74 72 69 65 76 69 6e 67 20 72 65 76 69 73 69 6f  trieving revisio
6010: 6e 20 31 2e 31 38 0a 64 69 66 66 20 2d 75 20 2d  n 1.18.diff -u -
6020: 72 31 2e 31 38 20 65 78 70 72 2e 74 65 73 74 0a  r1.18 expr.test.
6030: 2d 2d 2d 20 74 65 73 74 73 2f 65 78 70 72 2e 74  --- tests/expr.t
6040: 65 73 74 09 32 37 20 4d 61 72 20 32 30 30 33 20  est.27 Mar 2003 
6050: 31 33 3a 34 38 3a 35 39 20 2d 30 30 30 30 09 31  13:48:59 -0000.1
6060: 2e 31 38 0a 2b 2b 2b 20 74 65 73 74 73 2f 65 78  .18.+++ tests/ex
6070: 70 72 2e 74 65 73 74 09 31 32 20 53 65 70 20 32  pr.test.12 Sep 2
6080: 30 30 33 20 32 33 3a 34 31 3a 30 37 20 2d 30 30  003 23:41:07 -00
6090: 30 30 0a 40 40 20 2d 31 33 32 2c 39 20 2b 31 33  00.@@ -132,9 +13
60a0: 32 2c 39 20 40 40 0a 20 20 20 20 20 65 78 70 72  2,9 @@.     expr
60b0: 20 64 6f 75 62 6c 65 28 35 2a 5b 6c 6c 65 6e 67   double(5*[lleng
60c0: 74 68 20 22 36 20 32 22 5d 29 0a 20 7d 20 31 30  th "6 2"]). } 10
60d0: 2e 30 0a 20 74 65 73 74 20 65 78 70 72 2d 32 2e  .0. test expr-2.
60e0: 32 20 7b 54 63 6c 43 6f 6d 70 69 6c 65 45 78 70  2 {TclCompileExp
60f0: 72 3a 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72  r: error in expr
6100: 7d 20 7b 0a 2d 20 20 20 20 63 61 74 63 68 20 7b  } {.-    catch {
6110: 65 78 70 72 20 32 2a 2a 33 7d 20 6d 73 67 0a 2b  expr 2**3} msg.+
6120: 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20      catch {expr 
6130: 32 2a 2a 2a 33 7d 20 6d 73 67 0a 20 20 20 20 20  2***3} msg.     
6140: 73 65 74 20 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74  set msg.-} {synt
6150: 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72  ax error in expr
6160: 65 73 73 69 6f 6e 20 22 32 2a 2a 33 22 3a 20 75  ession "2**3": u
6170: 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72 61 74  nexpected operat
6180: 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61 78  or *}.+} {syntax
6190: 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73   error in expres
61a0: 73 69 6f 6e 20 22 32 2a 2a 2a 33 22 3a 20 75 6e  sion "2***3": un
61b0: 65 78 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f  expected operato
61c0: 72 20 2a 7d 0a 20 74 65 73 74 20 65 78 70 72 2d  r *}. test expr-
61d0: 32 2e 33 20 7b 54 63 6c 43 6f 6d 70 69 6c 65 45  2.3 {TclCompileE
61e0: 78 70 72 3a 20 6a 75 6e 6b 20 61 66 74 65 72 20  xpr: junk after 
61f0: 6c 65 67 61 6c 20 65 78 70 72 7d 20 7b 0a 20 20  legal expr} {.  
6200: 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 37     catch {expr 7
6210: 2a 5b 6c 6c 65 6e 67 74 68 20 22 61 20 62 22 5d  *[llength "a b"]
6220: 66 6f 6f 7d 20 6d 73 67 0a 20 20 20 20 20 73 65  foo} msg.     se
6230: 74 20 6d 73 67 0a 40 40 20 2d 31 35 30 2c 31 34  t msg.@@ -150,14
6240: 20 2b 31 35 30 2c 31 34 20 40 40 0a 20 7d 20 7b   +150,14 @@. } {
6250: 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20  syntax error in 
6260: 65 78 70 72 65 73 73 69 6f 6e 20 22 78 7c 7c 33  expression "x||3
6270: 22 3a 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  ": variable refe
6280: 72 65 6e 63 65 73 20 72 65 71 75 69 72 65 20 70  rences require p
6290: 72 65 63 65 64 69 6e 67 20 24 7d 0a 20 74 65 73  receding $}. tes
62a0: 74 20 65 78 70 72 2d 33 2e 33 20 7b 43 6f 6d 70  t expr-3.3 {Comp
62b0: 69 6c 65 43 6f 6e 64 45 78 70 72 3a 20 74 65 73  ileCondExpr: tes
62c0: 74 20 74 72 75 65 20 61 72 6d 7d 20 7b 65 78 70  t true arm} {exp
62d0: 72 20 33 3e 32 3f 34 34 3a 36 36 7d 20 34 34 0a  r 3>2?44:66} 44.
62e0: 20 74 65 73 74 20 65 78 70 72 2d 33 2e 34 20 7b   test expr-3.4 {
62f0: 43 6f 6d 70 69 6c 65 43 6f 6e 64 45 78 70 72 3a  CompileCondExpr:
6300: 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67   error compiling
6310: 20 74 72 75 65 20 61 72 6d 7d 20 7b 0a 2d 20 20   true arm} {.-  
6320: 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 33 3e    catch {expr 3>
6330: 32 3f 32 2a 2a 33 3a 36 36 7d 20 6d 73 67 0a 2b  2?2**3:66} msg.+
6340: 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20      catch {expr 
6350: 33 3e 32 3f 32 2a 2a 2a 33 3a 36 36 7d 20 6d 73  3>2?2***3:66} ms
6360: 67 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 2d  g.     set msg.-
6370: 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20  } {syntax error 
6380: 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 33  in expression "3
6390: 3e 32 3f 32 2a 2a 33 3a 36 36 22 3a 20 75 6e 65  >2?2**3:66": une
63a0: 78 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f 72  xpected operator
63b0: 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65   *}.+} {syntax e
63c0: 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73 69  rror in expressi
63d0: 6f 6e 20 22 33 3e 32 3f 32 2a 2a 2a 33 3a 36 36  on "3>2?2***3:66
63e0: 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70  ": unexpected op
63f0: 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74 20  erator *}. test 
6400: 65 78 70 72 2d 33 2e 35 20 7b 43 6f 6d 70 69 6c  expr-3.5 {Compil
6410: 65 43 6f 6e 64 45 78 70 72 3a 20 74 65 73 74 20  eCondExpr: test 
6420: 66 61 6c 73 65 20 61 72 6d 7d 20 7b 65 78 70 72  false arm} {expr
6430: 20 32 3e 33 3f 34 34 3a 36 36 7d 20 36 36 0a 20   2>3?44:66} 66. 
6440: 74 65 73 74 20 65 78 70 72 2d 33 2e 36 20 7b 43  test expr-3.6 {C
6450: 6f 6d 70 69 6c 65 43 6f 6e 64 45 78 70 72 3a 20  ompileCondExpr: 
6460: 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20  error compiling 
6470: 66 61 6c 73 65 20 61 72 6d 7d 20 7b 0a 2d 20 20  false arm} {.-  
6480: 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 32 3e    catch {expr 2>
6490: 33 3f 34 34 3a 32 2a 2a 33 7d 20 6d 73 67 0a 2b  3?44:2**3} msg.+
64a0: 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20      catch {expr 
64b0: 32 3e 33 3f 34 34 3a 32 2a 2a 2a 33 7d 20 6d 73  2>3?44:2***3} ms
64c0: 67 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 2d  g.     set msg.-
64d0: 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20  } {syntax error 
64e0: 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 32  in expression "2
64f0: 3e 33 3f 34 34 3a 32 2a 2a 33 22 3a 20 75 6e 65  >3?44:2**3": une
6500: 78 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f 72  xpected operator
6510: 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65   *}.+} {syntax e
6520: 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73 69  rror in expressi
6530: 6f 6e 20 22 32 3e 33 3f 34 34 3a 32 2a 2a 2a 33  on "2>3?44:2***3
6540: 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70  ": unexpected op
6550: 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74 20  erator *}. test 
6560: 65 78 70 72 2d 33 2e 37 20 7b 43 6f 6d 70 69 6c  expr-3.7 {Compil
6570: 65 43 6f 6e 64 45 78 70 72 3a 20 6c 6f 6e 67 20  eCondExpr: long 
6580: 61 72 6d 73 20 26 20 6e 65 73 74 65 64 20 63 6f  arms & nested co
6590: 6e 64 20 65 78 70 72 73 7d 20 7b 75 6e 69 78 4f  nd exprs} {unixO
65a0: 6e 6c 79 20 6e 6f 6e 50 6f 72 74 61 62 6c 65 7d  nly nonPortable}
65b0: 20 7b 0a 20 20 20 20 20 70 75 74 73 20 22 4e 6f   {.     puts "No
65c0: 74 65 3a 20 64 6f 69 6e 67 20 74 65 73 74 20 65  te: doing test e
65d0: 78 70 72 2d 33 2e 37 20 77 68 69 63 68 20 63 61  xpr-3.7 which ca
65e0: 6e 20 74 61 6b 65 20 73 65 76 65 72 61 6c 20 6d  n take several m
65f0: 69 6e 75 74 65 73 20 74 6f 20 72 75 6e 22 0a 20  inutes to run". 
6600: 20 20 20 20 68 65 6c 6c 6f 5f 77 6f 72 6c 64 0a      hello_world.
6610: 40 40 20 2d 31 37 38 2c 31 33 20 2b 31 37 38 2c  @@ -178,13 +178,
6620: 31 33 20 40 40 0a 20 74 65 73 74 20 65 78 70 72  13 @@. test expr
6630: 2d 34 2e 34 20 7b 43 6f 6d 70 69 6c 65 4c 6f 72  -4.4 {CompileLor
6640: 45 78 70 72 3a 20 73 69 6d 70 6c 65 20 6c 6f 72  Expr: simple lor
6650: 20 65 78 70 72 73 7d 20 7b 65 78 70 72 20 33 2e   exprs} {expr 3.
6660: 30 7c 7c 30 2e 30 7d 20 31 0a 20 74 65 73 74 20  0||0.0} 1. test 
6670: 65 78 70 72 2d 34 2e 35 20 7b 43 6f 6d 70 69 6c  expr-4.5 {Compil
6680: 65 4c 6f 72 45 78 70 72 3a 20 73 69 6d 70 6c 65  eLorExpr: simple
6690: 20 6c 6f 72 20 65 78 70 72 73 7d 20 7b 65 78 70   lor exprs} {exp
66a0: 72 20 30 7c 7c 30 7c 7c 31 7d 20 31 0a 20 74 65  r 0||0||1} 1. te
66b0: 73 74 20 65 78 70 72 2d 34 2e 36 20 7b 43 6f 6d  st expr-4.6 {Com
66c0: 70 69 6c 65 4c 6f 72 45 78 70 72 3a 20 65 72 72  pileLorExpr: err
66d0: 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 6c 6f 72  or compiling lor
66e0: 20 61 72 6d 7d 20 7b 0a 2d 20 20 20 20 63 61 74   arm} {.-    cat
66f0: 63 68 20 7b 65 78 70 72 20 32 2a 2a 33 7c 7c 34  ch {expr 2**3||4
6700: 2e 30 7d 20 6d 73 67 0a 2b 20 20 20 20 63 61 74  .0} msg.+    cat
6710: 63 68 20 7b 65 78 70 72 20 32 2a 2a 2a 33 7c 7c  ch {expr 2***3||
6720: 34 2e 30 7d 20 6d 73 67 0a 20 20 20 20 20 73 65  4.0} msg.     se
6730: 74 20 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74 61 78  t msg.-} {syntax
6740: 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73   error in expres
6750: 73 69 6f 6e 20 22 32 2a 2a 33 7c 7c 34 2e 30 22  sion "2**3||4.0"
6760: 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65  : unexpected ope
6770: 72 61 74 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79 6e  rator *}.+} {syn
6780: 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70  tax error in exp
6790: 72 65 73 73 69 6f 6e 20 22 32 2a 2a 2a 33 7c 7c  ression "2***3||
67a0: 34 2e 30 22 3a 20 75 6e 65 78 70 65 63 74 65 64  4.0": unexpected
67b0: 20 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65   operator *}. te
67c0: 73 74 20 65 78 70 72 2d 34 2e 37 20 7b 43 6f 6d  st expr-4.7 {Com
67d0: 70 69 6c 65 4c 6f 72 45 78 70 72 3a 20 65 72 72  pileLorExpr: err
67e0: 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 6c 6f 72  or compiling lor
67f0: 20 61 72 6d 7d 20 7b 0a 2d 20 20 20 20 63 61 74   arm} {.-    cat
6800: 63 68 20 7b 65 78 70 72 20 31 2e 33 7c 7c 32 2a  ch {expr 1.3||2*
6810: 2a 33 7d 20 6d 73 67 0a 2b 20 20 20 20 63 61 74  *3} msg.+    cat
6820: 63 68 20 7b 65 78 70 72 20 31 2e 33 7c 7c 32 2a  ch {expr 1.3||2*
6830: 2a 2a 33 7d 20 6d 73 67 0a 20 20 20 20 20 73 65  **3} msg.     se
6840: 74 20 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74 61 78  t msg.-} {syntax
6850: 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73   error in expres
6860: 73 69 6f 6e 20 22 31 2e 33 7c 7c 32 2a 2a 33 22  sion "1.3||2**3"
6870: 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65  : unexpected ope
6880: 72 61 74 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79 6e  rator *}.+} {syn
6890: 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70  tax error in exp
68a0: 72 65 73 73 69 6f 6e 20 22 31 2e 33 7c 7c 32 2a  ression "1.3||2*
68b0: 2a 2a 33 22 3a 20 75 6e 65 78 70 65 63 74 65 64  **3": unexpected
68c0: 20 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65   operator *}. te
68d0: 73 74 20 65 78 70 72 2d 34 2e 38 20 7b 43 6f 6d  st expr-4.8 {Com
68e0: 70 69 6c 65 4c 6f 72 45 78 70 72 3a 20 65 72 72  pileLorExpr: err
68f0: 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 6c 6f 72  or compiling lor
6900: 20 61 72 6d 73 7d 20 7b 0a 20 20 20 20 20 6c 69   arms} {.     li
6910: 73 74 20 5b 63 61 74 63 68 20 7b 65 78 70 72 20  st [catch {expr 
6920: 7b 22 61 22 7c 7c 22 62 22 7d 7d 20 6d 73 67 5d  {"a"||"b"}} msg]
6930: 20 24 6d 73 67 0a 20 7d 20 7b 31 20 7b 65 78 70   $msg. } {1 {exp
6940: 65 63 74 65 64 20 62 6f 6f 6c 65 61 6e 20 76 61  ected boolean va
6950: 6c 75 65 20 62 75 74 20 67 6f 74 20 22 61 22 7d  lue but got "a"}
6960: 7d 0a 40 40 20 2d 32 30 34 2c 31 33 20 2b 32 30  }.@@ -204,13 +20
6970: 34 2c 31 33 20 40 40 0a 20 74 65 73 74 20 65 78  4,13 @@. test ex
6980: 70 72 2d 35 2e 35 20 7b 43 6f 6d 70 69 6c 65 4c  pr-5.5 {CompileL
6990: 61 6e 64 45 78 70 72 3a 20 73 69 6d 70 6c 65 20  andExpr: simple 
69a0: 6c 61 6e 64 20 65 78 70 72 73 7d 20 7b 65 78 70  land exprs} {exp
69b0: 72 20 33 2e 30 26 26 31 2e 32 7d 20 31 0a 20 74  r 3.0&&1.2} 1. t
69c0: 65 73 74 20 65 78 70 72 2d 35 2e 36 20 7b 43 6f  est expr-5.6 {Co
69d0: 6d 70 69 6c 65 4c 61 6e 64 45 78 70 72 3a 20 73  mpileLandExpr: s
69e0: 69 6d 70 6c 65 20 6c 61 6e 64 20 65 78 70 72 73  imple land exprs
69f0: 7d 20 7b 65 78 70 72 20 31 26 26 31 26 26 32 7d  } {expr 1&&1&&2}
6a00: 20 31 0a 20 74 65 73 74 20 65 78 70 72 2d 35 2e   1. test expr-5.
6a10: 37 20 7b 43 6f 6d 70 69 6c 65 4c 61 6e 64 45 78  7 {CompileLandEx
6a20: 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c  pr: error compil
6a30: 69 6e 67 20 6c 61 6e 64 20 61 72 6d 7d 20 7b 0a  ing land arm} {.
6a40: 2d 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72  -    catch {expr
6a50: 20 32 2a 2a 33 26 26 34 2e 30 7d 20 6d 73 67 0a   2**3&&4.0} msg.
6a60: 2b 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72  +    catch {expr
6a70: 20 32 2a 2a 2a 33 26 26 34 2e 30 7d 20 6d 73 67   2***3&&4.0} msg
6a80: 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d  .     set msg.-}
6a90: 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69   {syntax error i
6aa0: 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22 32 2a  n expression "2*
6ab0: 2a 33 26 26 34 2e 30 22 3a 20 75 6e 65 78 70 65  *3&&4.0": unexpe
6ac0: 63 74 65 64 20 6f 70 65 72 61 74 6f 72 20 2a 7d  cted operator *}
6ad0: 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f  .+} {syntax erro
6ae0: 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r in expression 
6af0: 22 32 2a 2a 2a 33 26 26 34 2e 30 22 3a 20 75 6e  "2***3&&4.0": un
6b00: 65 78 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f  expected operato
6b10: 72 20 2a 7d 0a 20 74 65 73 74 20 65 78 70 72 2d  r *}. test expr-
6b20: 35 2e 38 20 7b 43 6f 6d 70 69 6c 65 4c 61 6e 64  5.8 {CompileLand
6b30: 45 78 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70  Expr: error comp
6b40: 69 6c 69 6e 67 20 6c 61 6e 64 20 61 72 6d 7d 20  iling land arm} 
6b50: 7b 0a 2d 20 20 20 20 63 61 74 63 68 20 7b 65 78  {.-    catch {ex
6b60: 70 72 20 31 2e 33 26 26 32 2a 2a 33 7d 20 6d 73  pr 1.3&&2**3} ms
6b70: 67 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 65 78  g.+    catch {ex
6b80: 70 72 20 31 2e 33 26 26 32 2a 2a 2a 33 7d 20 6d  pr 1.3&&2***3} m
6b90: 73 67 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a  sg.     set msg.
6ba0: 2d 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72  -} {syntax error
6bb0: 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22   in expression "
6bc0: 31 2e 33 26 26 32 2a 2a 33 22 3a 20 75 6e 65 78  1.3&&2**3": unex
6bd0: 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f 72 20  pected operator 
6be0: 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65 72  *}.+} {syntax er
6bf0: 72 6f 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f  ror in expressio
6c00: 6e 20 22 31 2e 33 26 26 32 2a 2a 2a 33 22 3a 20  n "1.3&&2***3": 
6c10: 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72 61  unexpected opera
6c20: 74 6f 72 20 2a 7d 0a 20 74 65 73 74 20 65 78 70  tor *}. test exp
6c30: 72 2d 35 2e 39 20 7b 43 6f 6d 70 69 6c 65 4c 61  r-5.9 {CompileLa
6c40: 6e 64 45 78 70 72 3a 20 65 72 72 6f 72 20 63 6f  ndExpr: error co
6c50: 6d 70 69 6c 69 6e 67 20 6c 61 6e 64 20 61 72 6d  mpiling land arm
6c60: 7d 20 7b 0a 20 20 20 20 20 6c 69 73 74 20 5b 63  } {.     list [c
6c70: 61 74 63 68 20 7b 65 78 70 72 20 7b 22 61 22 26  atch {expr {"a"&
6c80: 26 22 62 22 7d 7d 20 6d 73 67 5d 20 24 6d 73 67  &"b"}} msg] $msg
6c90: 0a 20 7d 20 7b 31 20 7b 65 78 70 65 63 74 65 64  . } {1 {expected
6ca0: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 20 62   boolean value b
6cb0: 75 74 20 67 6f 74 20 22 61 22 7d 7d 0a 40 40 20  ut got "a"}}.@@ 
6cc0: 2d 32 33 30 2c 39 20 2b 32 33 30 2c 39 20 40 40  -230,9 +230,9 @@
6cd0: 0a 20 74 65 73 74 20 65 78 70 72 2d 36 2e 35 20  . test expr-6.5 
6ce0: 7b 43 6f 6d 70 69 6c 65 42 69 74 58 6f 72 45 78  {CompileBitXorEx
6cf0: 70 72 3a 20 73 69 6d 70 6c 65 20 62 69 74 78 6f  pr: simple bitxo
6d00: 72 20 65 78 70 72 73 7d 20 7b 65 78 70 72 20 30  r exprs} {expr 0
6d10: 5e 37 7d 20 37 0a 20 74 65 73 74 20 65 78 70 72  ^7} 7. test expr
6d20: 2d 36 2e 36 20 7b 43 6f 6d 70 69 6c 65 42 69 74  -6.6 {CompileBit
6d30: 58 6f 72 45 78 70 72 3a 20 73 69 6d 70 6c 65 20  XorExpr: simple 
6d40: 62 69 74 78 6f 72 20 65 78 70 72 73 7d 20 7b 65  bitxor exprs} {e
6d50: 78 70 72 20 2d 31 5e 37 7d 20 2d 38 0a 20 74 65  xpr -1^7} -8. te
6d60: 73 74 20 65 78 70 72 2d 36 2e 37 20 7b 43 6f 6d  st expr-6.7 {Com
6d70: 70 69 6c 65 42 69 74 58 6f 72 45 78 70 72 3a 20  pileBitXorExpr: 
6d80: 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20  error compiling 
6d90: 62 69 74 78 6f 72 20 61 72 6d 7d 20 7b 0a 2d 20  bitxor arm} {.- 
6da0: 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 32     catch {expr 2
6db0: 2a 2a 33 7c 36 7d 20 6d 73 67 0a 2b 20 20 20 20  **3|6} msg.+    
6dc0: 63 61 74 63 68 20 7b 65 78 70 72 20 32 2a 2a 2a  catch {expr 2***
6dd0: 33 7c 36 7d 20 6d 73 67 0a 20 20 20 20 20 73 65  3|6} msg.     se
6de0: 74 20 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74 61 78  t msg.-} {syntax
6df0: 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73   error in expres
6e00: 73 69 6f 6e 20 22 32 2a 2a 33 7c 36 22 3a 20 75  sion "2**3|6": u
6e10: 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72 61 74  nexpected operat
6e20: 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74 61 78  or *}.+} {syntax
6e30: 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65 73   error in expres
6e40: 73 69 6f 6e 20 22 32 2a 2a 2a 33 7c 36 22 3a 20  sion "2***3|6": 
6e50: 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72 61  unexpected opera
6e60: 74 6f 72 20 2a 7d 0a 20 74 65 73 74 20 65 78 70  tor *}. test exp
6e70: 72 2d 36 2e 38 20 7b 43 6f 6d 70 69 6c 65 42 69  r-6.8 {CompileBi
6e80: 74 58 6f 72 45 78 70 72 3a 20 65 72 72 6f 72 20  tXorExpr: error 
6e90: 63 6f 6d 70 69 6c 69 6e 67 20 62 69 74 78 6f 72  compiling bitxor
6ea0: 20 61 72 6d 7d 20 7b 0a 20 20 20 20 20 63 61 74   arm} {.     cat
6eb0: 63 68 20 7b 65 78 70 72 20 32 5e 78 7d 20 6d 73  ch {expr 2^x} ms
6ec0: 67 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 40  g.     set msg.@
6ed0: 40 20 2d 32 35 37 2c 39 20 2b 32 35 37 2c 39 20  @ -257,9 +257,9 
6ee0: 40 40 0a 20 74 65 73 74 20 65 78 70 72 2d 37 2e  @@. test expr-7.
6ef0: 38 20 7b 43 6f 6d 70 69 6c 65 42 69 74 41 6e 64  8 {CompileBitAnd
6f00: 45 78 70 72 3a 20 73 69 6d 70 6c 65 20 62 69 74  Expr: simple bit
6f10: 61 6e 64 20 65 78 70 72 73 7d 20 7b 65 78 70 72  and exprs} {expr
6f20: 20 33 26 36 7d 20 32 0a 20 74 65 73 74 20 65 78   3&6} 2. test ex
6f30: 70 72 2d 37 2e 39 20 7b 43 6f 6d 70 69 6c 65 42  pr-7.9 {CompileB
6f40: 69 74 41 6e 64 45 78 70 72 3a 20 73 69 6d 70 6c  itAndExpr: simpl
6f50: 65 20 62 69 74 61 6e 64 20 65 78 70 72 73 7d 20  e bitand exprs} 
6f60: 7b 65 78 70 72 20 2d 31 26 2d 37 7d 20 2d 37 0a  {expr -1&-7} -7.
6f70: 20 74 65 73 74 20 65 78 70 72 2d 37 2e 31 30 20   test expr-7.10 
6f80: 7b 43 6f 6d 70 69 6c 65 42 69 74 41 6e 64 45 78  {CompileBitAndEx
6f90: 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c  pr: error compil
6fa0: 69 6e 67 20 62 69 74 61 6e 64 20 61 72 6d 7d 20  ing bitand arm} 
6fb0: 7b 0a 2d 20 20 20 20 63 61 74 63 68 20 7b 65 78  {.-    catch {ex
6fc0: 70 72 20 32 2a 2a 33 26 36 7d 20 6d 73 67 0a 2b  pr 2**3&6} msg.+
6fd0: 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20      catch {expr 
6fe0: 32 2a 2a 2a 33 26 36 7d 20 6d 73 67 0a 20 20 20  2***3&6} msg.   
6ff0: 20 20 73 65 74 20 6d 73 67 0a 2d 7d 20 7b 73 79    set msg.-} {sy
7000: 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78  ntax error in ex
7010: 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a 33 26 36  pression "2**3&6
7020: 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70  ": unexpected op
7030: 65 72 61 74 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79  erator *}.+} {sy
7040: 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78  ntax error in ex
7050: 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a 2a 33 26  pression "2***3&
7060: 36 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f  6": unexpected o
7070: 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74  perator *}. test
7080: 20 65 78 70 72 2d 37 2e 31 31 20 7b 43 6f 6d 70   expr-7.11 {Comp
7090: 69 6c 65 42 69 74 41 6e 64 45 78 70 72 3a 20 65  ileBitAndExpr: e
70a0: 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 62  rror compiling b
70b0: 69 74 61 6e 64 20 61 72 6d 7d 20 7b 0a 20 20 20  itand arm} {.   
70c0: 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 32 26    catch {expr 2&
70d0: 78 7d 20 6d 73 67 0a 20 20 20 20 20 73 65 74 20  x} msg.     set 
70e0: 6d 73 67 0a 40 40 20 2d 32 39 30 2c 39 20 2b 32  msg.@@ -290,9 +2
70f0: 39 30 2c 39 20 40 40 0a 20 74 65 73 74 20 65 78  90,9 @@. test ex
7100: 70 72 2d 38 2e 38 20 7b 43 6f 6d 70 69 6c 65 45  pr-8.8 {CompileE
7110: 71 75 61 6c 69 74 79 45 78 70 72 3a 20 73 69 6d  qualityExpr: sim
7120: 70 6c 65 20 65 71 75 61 6c 69 74 79 20 65 78 70  ple equality exp
7130: 72 73 7d 20 7b 65 78 70 72 20 7b 22 31 32 33 39  rs} {expr {"1239
7140: 38 37 31 32 39 33 38 37 38 38 32 33 34 2d 31 32  8712938788234-12
7150: 39 38 33 37 39 22 20 21 3d 20 22 22 7d 7d 20 31  98379" != ""}} 1
7160: 0a 20 74 65 73 74 20 65 78 70 72 2d 38 2e 39 20  . test expr-8.9 
7170: 7b 43 6f 6d 70 69 6c 65 45 71 75 61 6c 69 74 79  {CompileEquality
7180: 45 78 70 72 3a 20 73 69 6d 70 6c 65 20 65 71 75  Expr: simple equ
7190: 61 6c 69 74 79 20 65 78 70 72 73 7d 20 7b 65 78  ality exprs} {ex
71a0: 70 72 20 2d 31 21 3d 22 61 62 63 22 7d 20 31 0a  pr -1!="abc"} 1.
71b0: 20 74 65 73 74 20 65 78 70 72 2d 38 2e 31 30 20   test expr-8.10 
71c0: 7b 43 6f 6d 70 69 6c 65 45 71 75 61 6c 69 74 79  {CompileEquality
71d0: 45 78 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70  Expr: error comp
71e0: 69 6c 69 6e 67 20 65 71 75 61 6c 69 74 79 20 61  iling equality a
71f0: 72 6d 7d 20 7b 0a 2d 20 20 20 20 63 61 74 63 68  rm} {.-    catch
7200: 20 7b 65 78 70 72 20 32 2a 2a 33 3d 3d 36 7d 20   {expr 2**3==6} 
7210: 6d 73 67 0a 2b 20 20 20 20 63 61 74 63 68 20 7b  msg.+    catch {
7220: 65 78 70 72 20 32 2a 2a 2a 33 3d 3d 36 7d 20 6d  expr 2***3==6} m
7230: 73 67 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a  sg.     set msg.
7240: 2d 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f 72  -} {syntax error
7250: 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 22   in expression "
7260: 32 2a 2a 33 3d 3d 36 22 3a 20 75 6e 65 78 70 65  2**3==6": unexpe
7270: 63 74 65 64 20 6f 70 65 72 61 74 6f 72 20 2a 7d  cted operator *}
7280: 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f  .+} {syntax erro
7290: 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r in expression 
72a0: 22 32 2a 2a 2a 33 3d 3d 36 22 3a 20 75 6e 65 78  "2***3==6": unex
72b0: 70 65 63 74 65 64 20 6f 70 65 72 61 74 6f 72 20  pected operator 
72c0: 2a 7d 0a 20 74 65 73 74 20 65 78 70 72 2d 38 2e  *}. test expr-8.
72d0: 31 31 20 7b 43 6f 6d 70 69 6c 65 45 71 75 61 6c  11 {CompileEqual
72e0: 69 74 79 45 78 70 72 3a 20 65 72 72 6f 72 20 63  ityExpr: error c
72f0: 6f 6d 70 69 6c 69 6e 67 20 65 71 75 61 6c 69 74  ompiling equalit
7300: 79 20 61 72 6d 7d 20 7b 0a 20 20 20 20 20 63 61  y arm} {.     ca
7310: 74 63 68 20 7b 65 78 70 72 20 32 21 3d 78 7d 20  tch {expr 2!=x} 
7320: 6d 73 67 0a 20 20 20 20 20 73 65 74 20 6d 73 67  msg.     set msg
7330: 0a 40 40 20 2d 33 33 39 2c 39 20 2b 33 33 39 2c  .@@ -339,9 +339,
7340: 39 20 40 40 0a 20 74 65 73 74 20 65 78 70 72 2d  9 @@. test expr-
7350: 39 2e 37 20 7b 43 6f 6d 70 69 6c 65 52 65 6c 61  9.7 {CompileRela
7360: 74 69 6f 6e 61 6c 45 78 70 72 3a 20 73 69 6d 70  tionalExpr: simp
7370: 6c 65 20 72 65 6c 61 74 69 6f 6e 61 6c 20 65 78  le relational ex
7380: 70 72 73 7d 20 7b 65 78 70 72 20 30 78 66 66 3e  prs} {expr 0xff>
7390: 3d 2b 30 78 33 7d 20 31 0a 20 74 65 73 74 20 65  =+0x3} 1. test e
73a0: 78 70 72 2d 39 2e 38 20 7b 43 6f 6d 70 69 6c 65  xpr-9.8 {Compile
73b0: 52 65 6c 61 74 69 6f 6e 61 6c 45 78 70 72 3a 20  RelationalExpr: 
73c0: 73 69 6d 70 6c 65 20 72 65 6c 61 74 69 6f 6e 61  simple relationa
73d0: 6c 20 65 78 70 72 73 7d 20 7b 65 78 70 72 20 2d  l exprs} {expr -
73e0: 30 78 66 32 3c 30 78 33 7d 20 31 0a 20 74 65 73  0xf2<0x3} 1. tes
73f0: 74 20 65 78 70 72 2d 39 2e 39 20 7b 43 6f 6d 70  t expr-9.9 {Comp
7400: 69 6c 65 52 65 6c 61 74 69 6f 6e 61 6c 45 78 70  ileRelationalExp
7410: 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69  r: error compili
7420: 6e 67 20 72 65 6c 61 74 69 6f 6e 61 6c 20 61 72  ng relational ar
7430: 6d 7d 20 7b 0a 2d 20 20 20 20 63 61 74 63 68 20  m} {.-    catch 
7440: 7b 65 78 70 72 20 32 2a 2a 33 3e 36 7d 20 6d 73  {expr 2**3>6} ms
7450: 67 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 65 78  g.+    catch {ex
7460: 70 72 20 32 2a 2a 2a 33 3e 36 7d 20 6d 73 67 0a  pr 2***3>6} msg.
7470: 20 20 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d 20       set msg.-} 
7480: 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e  {syntax error in
7490: 20 65 78 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a   expression "2**
74a0: 33 3e 36 22 3a 20 75 6e 65 78 70 65 63 74 65 64  3>6": unexpected
74b0: 20 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 2b 7d 20   operator *}.+} 
74c0: 7b 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e  {syntax error in
74d0: 20 65 78 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a   expression "2**
74e0: 2a 33 3e 36 22 3a 20 75 6e 65 78 70 65 63 74 65  *3>6": unexpecte
74f0: 64 20 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74  d operator *}. t
7500: 65 73 74 20 65 78 70 72 2d 39 2e 31 30 20 7b 43  est expr-9.10 {C
7510: 6f 6d 70 69 6c 65 52 65 6c 61 74 69 6f 6e 61 6c  ompileRelational
7520: 45 78 70 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70  Expr: error comp
7530: 69 6c 69 6e 67 20 72 65 6c 61 74 69 6f 6e 61 6c  iling relational
7540: 20 61 72 6d 7d 20 7b 0a 20 20 20 20 20 63 61 74   arm} {.     cat
7550: 63 68 20 7b 65 78 70 72 20 32 3c 78 7d 20 6d 73  ch {expr 2<x} ms
7560: 67 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a 40  g.     set msg.@
7570: 40 20 2d 33 35 38 2c 39 20 2b 33 35 38 2c 39 20  @ -358,9 +358,9 
7580: 40 40 0a 20 74 65 73 74 20 65 78 70 72 2d 31 30  @@. test expr-10
7590: 2e 36 20 7b 43 6f 6d 70 69 6c 65 53 68 69 66 74  .6 {CompileShift
75a0: 45 78 70 72 3a 20 73 69 6d 70 6c 65 20 73 68 69  Expr: simple shi
75b0: 66 74 20 65 78 70 72 73 7d 20 7b 65 78 70 72 20  ft exprs} {expr 
75c0: 30 78 66 66 3e 3e 30 78 33 7d 20 33 31 0a 20 74  0xff>>0x3} 31. t
75d0: 65 73 74 20 65 78 70 72 2d 31 30 2e 37 20 7b 43  est expr-10.7 {C
75e0: 6f 6d 70 69 6c 65 53 68 69 66 74 45 78 70 72 3a  ompileShiftExpr:
75f0: 20 73 69 6d 70 6c 65 20 73 68 69 66 74 20 65 78   simple shift ex
7600: 70 72 73 7d 20 7b 65 78 70 72 20 2d 30 78 66 32  prs} {expr -0xf2
7610: 3c 3c 30 78 33 7d 20 2d 31 39 33 36 0a 20 74 65  <<0x3} -1936. te
7620: 73 74 20 65 78 70 72 2d 31 30 2e 38 20 7b 43 6f  st expr-10.8 {Co
7630: 6d 70 69 6c 65 53 68 69 66 74 45 78 70 72 3a 20  mpileShiftExpr: 
7640: 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20  error compiling 
7650: 73 68 69 66 74 20 61 72 6d 7d 20 7b 0a 2d 20 20  shift arm} {.-  
7660: 20 20 63 61 74 63 68 20 7b 65 78 70 72 20 32 2a    catch {expr 2*
7670: 2a 33 3e 3e 36 7d 20 6d 73 67 0a 2b 20 20 20 20  *3>>6} msg.+    
7680: 63 61 74 63 68 20 7b 65 78 70 72 20 32 2a 2a 2a  catch {expr 2***
7690: 33 3e 3e 36 7d 20 6d 73 67 0a 20 20 20 20 20 73  3>>6} msg.     s
76a0: 65 74 20 6d 73 67 0a 2d 7d 20 7b 73 79 6e 74 61  et msg.-} {synta
76b0: 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65  x error in expre
76c0: 73 73 69 6f 6e 20 22 32 2a 2a 33 3e 3e 36 22 3a  ssion "2**3>>6":
76d0: 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70 65 72   unexpected oper
76e0: 61 74 6f 72 20 2a 7d 0a 2b 7d 20 7b 73 79 6e 74  ator *}.+} {synt
76f0: 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72  ax error in expr
7700: 65 73 73 69 6f 6e 20 22 32 2a 2a 2a 33 3e 3e 36  ession "2***3>>6
7710: 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20 6f 70  ": unexpected op
7720: 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65 73 74 20  erator *}. test 
7730: 65 78 70 72 2d 31 30 2e 39 20 7b 43 6f 6d 70 69  expr-10.9 {Compi
7740: 6c 65 53 68 69 66 74 45 78 70 72 3a 20 65 72 72  leShiftExpr: err
7750: 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 73 68 69  or compiling shi
7760: 66 74 20 61 72 6d 7d 20 7b 0a 20 20 20 20 20 63  ft arm} {.     c
7770: 61 74 63 68 20 7b 65 78 70 72 20 32 3c 3c 78 7d  atch {expr 2<<x}
7780: 20 6d 73 67 0a 20 20 20 20 20 73 65 74 20 6d 73   msg.     set ms
7790: 67 0a 40 40 20 2d 33 38 33 2c 39 20 2b 33 38 33  g.@@ -383,9 +383
77a0: 2c 39 20 40 40 0a 20 74 65 73 74 20 65 78 70 72  ,9 @@. test expr
77b0: 2d 31 31 2e 36 20 7b 43 6f 6d 70 69 6c 65 41 64  -11.6 {CompileAd
77c0: 64 45 78 70 72 3a 20 73 69 6d 70 6c 65 20 61 64  dExpr: simple ad
77d0: 64 20 65 78 70 72 73 7d 20 7b 65 78 70 72 20 30  d exprs} {expr 0
77e0: 78 66 66 2b 2b 30 78 33 7d 20 32 35 38 0a 20 74  xff++0x3} 258. t
77f0: 65 73 74 20 65 78 70 72 2d 31 31 2e 37 20 7b 43  est expr-11.7 {C
7800: 6f 6d 70 69 6c 65 41 64 64 45 78 70 72 3a 20 73  ompileAddExpr: s
7810: 69 6d 70 6c 65 20 61 64 64 20 65 78 70 72 73 7d  imple add exprs}
7820: 20 7b 65 78 70 72 20 2d 30 78 66 32 2d 2d 30 78   {expr -0xf2--0x
7830: 33 7d 20 2d 32 33 39 0a 20 74 65 73 74 20 65 78  3} -239. test ex
7840: 70 72 2d 31 31 2e 38 20 7b 43 6f 6d 70 69 6c 65  pr-11.8 {Compile
7850: 41 64 64 45 78 70 72 3a 20 65 72 72 6f 72 20 63  AddExpr: error c
7860: 6f 6d 70 69 6c 69 6e 67 20 61 64 64 20 61 72 6d  ompiling add arm
7870: 7d 20 7b 0a 2d 20 20 20 20 63 61 74 63 68 20 7b  } {.-    catch {
7880: 65 78 70 72 20 32 2a 2a 33 2b 36 7d 20 6d 73 67  expr 2**3+6} msg
7890: 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 65 78 70  .+    catch {exp
78a0: 72 20 32 2a 2a 2a 33 2b 36 7d 20 6d 73 67 0a 20  r 2***3+6} msg. 
78b0: 20 20 20 20 73 65 74 20 6d 73 67 0a 2d 7d 20 7b      set msg.-} {
78c0: 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20  syntax error in 
78d0: 65 78 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a 33  expression "2**3
78e0: 2b 36 22 3a 20 75 6e 65 78 70 65 63 74 65 64 20  +6": unexpected 
78f0: 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 2b 7d 20 7b  operator *}.+} {
7900: 73 79 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20  syntax error in 
7910: 65 78 70 72 65 73 73 69 6f 6e 20 22 32 2a 2a 2a  expression "2***
7920: 33 2b 36 22 3a 20 75 6e 65 78 70 65 63 74 65 64  3+6": unexpected
7930: 20 6f 70 65 72 61 74 6f 72 20 2a 7d 0a 20 74 65   operator *}. te
7940: 73 74 20 65 78 70 72 2d 31 31 2e 39 20 7b 43 6f  st expr-11.9 {Co
7950: 6d 70 69 6c 65 41 64 64 45 78 70 72 3a 20 65 72  mpileAddExpr: er
7960: 72 6f 72 20 63 6f 6d 70 69 6c 69 6e 67 20 61 64  ror compiling ad
7970: 64 20 61 72 6d 7d 20 7b 0a 20 20 20 20 20 63 61  d arm} {.     ca
7980: 74 63 68 20 7b 65 78 70 72 20 32 2d 78 7d 20 6d  tch {expr 2-x} m
7990: 73 67 0a 20 20 20 20 20 73 65 74 20 6d 73 67 0a  sg.     set msg.
79a0: 40 40 20 2d 38 30 35 2c 36 20 2b 38 30 35 2c 36  @@ -805,6 +805,6
79b0: 30 20 40 40 0a 20 74 65 73 74 20 65 78 70 72 2d  0 @@. test expr-
79c0: 32 32 2e 38 20 7b 6e 6f 6e 2d 6e 75 6d 65 72 69  22.8 {non-numeri
79d0: 63 20 66 6c 6f 61 74 73 7d 20 6e 6f 6e 50 6f 72  c floats} nonPor
79e0: 74 61 62 6c 65 20 7b 0a 20 20 20 20 20 6c 69 73  table {.     lis
79f0: 74 20 5b 63 61 74 63 68 20 7b 65 78 70 72 20 7b  t [catch {expr {
7a00: 31 20 2f 20 49 6e 66 7d 7d 20 6d 73 67 5d 20 24  1 / Inf}} msg] $
7a10: 6d 73 67 0a 20 7d 20 7b 31 20 7b 63 61 6e 27 74  msg. } {1 {can't
7a20: 20 75 73 65 20 69 6e 66 69 6e 69 74 65 20 66 6c   use infinite fl
7a30: 6f 61 74 69 6e 67 2d 70 6f 69 6e 74 20 76 61 6c  oating-point val
7a40: 75 65 20 61 73 20 6f 70 65 72 61 6e 64 20 6f 66  ue as operand of
7a50: 20 22 2f 22 7d 7d 0a 2b 0a 2b 23 20 54 65 73 74   "/"}}.+.+# Test
7a60: 73 20 66 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61  s for exponentia
7a70: 74 69 6f 6e 20 68 61 6e 64 6c 69 6e 67 0a 2b 74  tion handling.+t
7a80: 65 73 74 20 65 78 70 72 2d 32 33 2e 31 20 7b 43  est expr-23.1 {C
7a90: 6f 6d 70 69 6c 65 45 78 70 6f 6e 65 6e 74 69 61  ompileExponentia
7aa0: 6c 45 78 70 72 3a 20 6a 75 73 74 20 65 78 70 6f  lExpr: just expo
7ab0: 6e 65 6e 74 69 61 6c 20 65 78 70 72 7d 20 7b 65  nential expr} {e
7ac0: 78 70 72 20 34 2a 2a 32 7d 20 31 36 0a 2b 74 65  xpr 4**2} 16.+te
7ad0: 73 74 20 65 78 70 72 2d 32 33 2e 32 20 7b 43 6f  st expr-23.2 {Co
7ae0: 6d 70 69 6c 65 45 78 70 6f 6e 65 6e 74 69 61 6c  mpileExponential
7af0: 45 78 70 72 3a 20 6a 75 73 74 20 65 78 70 6f 6e  Expr: just expon
7b00: 65 6e 74 69 61 6c 20 65 78 70 72 7d 20 7b 65 78  ential expr} {ex
7b10: 70 72 20 30 78 66 66 2a 2a 32 7d 20 36 35 30 32  pr 0xff**2} 6502
7b20: 35 0a 2b 74 65 73 74 20 65 78 70 72 2d 32 33 2e  5.+test expr-23.
7b30: 33 20 7b 43 6f 6d 70 69 6c 65 45 78 70 6f 6e 65  3 {CompileExpone
7b40: 6e 74 69 61 6c 45 78 70 72 3a 20 6a 75 73 74 20  ntialExpr: just 
7b50: 65 78 70 6f 6e 65 6e 74 69 61 6c 20 65 78 70 72  exponential expr
7b60: 7d 20 7b 65 78 70 72 20 2d 31 2a 2a 32 7d 20 31  } {expr -1**2} 1
7b70: 0a 2b 74 65 73 74 20 65 78 70 72 2d 32 33 2e 34  .+test expr-23.4
7b80: 20 7b 43 6f 6d 70 69 6c 65 45 78 70 6f 6e 65 6e   {CompileExponen
7b90: 74 69 61 6c 45 78 70 72 3a 20 6a 75 73 74 20 65  tialExpr: just e
7ba0: 78 70 6f 6e 65 6e 74 69 61 6c 20 65 78 70 72 7d  xponential expr}
7bb0: 20 7b 65 78 70 72 20 37 38 39 31 2a 2a 30 31 32   {expr 7891**012
7bc0: 33 7d 20 37 35 34 30 37 35 36 33 0a 2b 74 65 73  3} 75407563.+tes
7bd0: 74 20 65 78 70 72 2d 32 33 2e 35 20 7b 43 6f 6d  t expr-23.5 {Com
7be0: 70 69 6c 65 45 78 70 6f 6e 65 6e 74 69 61 6c 45  pileExponentialE
7bf0: 78 70 72 3a 20 65 72 72 6f 72 20 69 6e 20 65 78  xpr: error in ex
7c00: 70 6f 6e 65 6e 74 69 61 6c 20 65 78 70 72 7d 20  ponential expr} 
7c10: 7b 0a 2b 20 20 20 20 63 61 74 63 68 20 7b 65 78  {.+    catch {ex
7c20: 70 72 20 78 2a 2a 33 7d 20 6d 73 67 0a 2b 20 20  pr x**3} msg.+  
7c30: 20 20 73 65 74 20 6d 73 67 0a 2b 7d 20 7b 73 79    set msg.+} {sy
7c40: 6e 74 61 78 20 65 72 72 6f 72 20 69 6e 20 65 78  ntax error in ex
7c50: 70 72 65 73 73 69 6f 6e 20 22 78 2a 2a 33 22 3a  pression "x**3":
7c60: 20 76 61 72 69 61 62 6c 65 20 72 65 66 65 72 65   variable refere
7c70: 6e 63 65 73 20 72 65 71 75 69 72 65 20 70 72 65  nces require pre
7c80: 63 65 64 69 6e 67 20 24 7d 0a 2b 74 65 73 74 20  ceding $}.+test 
7c90: 65 78 70 72 2d 32 33 2e 36 20 7b 43 6f 6d 70 69  expr-23.6 {Compi
7ca0: 6c 65 45 78 70 6f 6e 65 6e 74 69 61 6c 45 78 70  leExponentialExp
7cb0: 72 3a 20 73 69 6d 70 6c 65 20 65 78 70 6f 20 65  r: simple expo e
7cc0: 78 70 72 73 7d 20 7b 65 78 70 72 20 30 78 66 66  xprs} {expr 0xff
7cd0: 2a 2a 30 78 33 7d 20 31 36 35 38 31 33 37 35 0a  **0x3} 16581375.
7ce0: 2b 74 65 73 74 20 65 78 70 72 2d 32 33 2e 37 20  +test expr-23.7 
7cf0: 7b 43 6f 6d 70 69 6c 65 45 78 70 6f 6e 65 6e 74  {CompileExponent
7d00: 69 61 6c 45 78 70 72 3a 20 65 72 72 6f 72 20 63  ialExpr: error c
7d10: 6f 6d 70 69 6c 69 6e 67 20 65 78 70 6f 20 61 72  ompiling expo ar
7d20: 6d 7d 20 7b 0a 2b 20 20 20 20 63 61 74 63 68 20  m} {.+    catch 
7d30: 7b 65 78 70 72 20 28 2d 33 2d 29 2a 2a 36 7d 20  {expr (-3-)**6} 
7d40: 6d 73 67 0a 2b 20 20 20 20 73 65 74 20 6d 73 67  msg.+    set msg
7d50: 0a 2b 7d 20 7b 73 79 6e 74 61 78 20 65 72 72 6f  .+} {syntax erro
7d60: 72 20 69 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r in expression 
7d70: 22 28 2d 33 2d 29 2a 2a 36 22 3a 20 75 6e 65 78  "(-3-)**6": unex
7d80: 70 65 63 74 65 64 20 63 6c 6f 73 65 20 70 61 72  pected close par
7d90: 65 6e 74 68 65 73 69 73 7d 0a 2b 74 65 73 74 20  enthesis}.+test 
7da0: 65 78 70 72 2d 32 33 2e 38 20 7b 43 6f 6d 70 69  expr-23.8 {Compi
7db0: 6c 65 45 78 70 6f 6e 65 6e 74 69 61 6c 45 78 70  leExponentialExp
7dc0: 72 3a 20 65 72 72 6f 72 20 63 6f 6d 70 69 6c 69  r: error compili
7dd0: 6e 67 20 65 78 70 6f 20 61 72 6d 7d 20 7b 0a 2b  ng expo arm} {.+
7de0: 20 20 20 20 63 61 74 63 68 20 7b 65 78 70 72 20      catch {expr 
7df0: 32 2a 2a 78 7d 20 6d 73 67 0a 2b 20 20 20 20 73  2**x} msg.+    s
7e00: 65 74 20 6d 73 67 0a 2b 7d 20 7b 73 79 6e 74 61  et msg.+} {synta
7e10: 78 20 65 72 72 6f 72 20 69 6e 20 65 78 70 72 65  x error in expre
7e20: 73 73 69 6f 6e 20 22 32 2a 2a 78 22 3a 20 76 61  ssion "2**x": va
7e30: 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
7e40: 73 20 72 65 71 75 69 72 65 20 70 72 65 63 65 64  s require preced
7e50: 69 6e 67 20 24 7d 0a 2b 74 65 73 74 20 65 78 70  ing $}.+test exp
7e60: 72 2d 32 33 2e 39 20 7b 43 6f 6d 70 69 6c 65 45  r-23.9 {CompileE
7e70: 78 70 6f 6e 65 6e 74 69 61 6c 45 78 70 72 3a 20  xponentialExpr: 
7e80: 72 75 6e 74 69 6d 65 20 65 72 72 6f 72 7d 20 7b  runtime error} {
7e90: 0a 2b 20 20 20 20 6c 69 73 74 20 5b 63 61 74 63  .+    list [catc
7ea0: 68 20 7b 65 78 70 72 20 7b 32 34 2e 30 2a 2a 22  h {expr {24.0**"
7eb0: 78 78 22 7d 7d 20 6d 73 67 5d 20 24 6d 73 67 0a  xx"}} msg] $msg.
7ec0: 2b 7d 20 7b 31 20 7b 63 61 6e 27 74 20 75 73 65  +} {1 {can't use
7ed0: 20 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20 73 74 72   non-numeric str
7ee0: 69 6e 67 20 61 73 20 6f 70 65 72 61 6e 64 20 6f  ing as operand o
7ef0: 66 20 22 2a 2a 22 7d 7d 0a 2b 74 65 73 74 20 65  f "**"}}.+test e
7f00: 78 70 72 2d 32 33 2e 31 30 20 7b 43 6f 6d 70 69  xpr-23.10 {Compi
7f10: 6c 65 45 78 70 6f 6e 65 6e 74 69 61 6c 45 78 70  leExponentialExp
7f20: 72 3a 20 72 75 6e 74 69 6d 65 20 65 72 72 6f 72  r: runtime error
7f30: 7d 20 7b 0a 2b 20 20 20 20 6c 69 73 74 20 5b 63  } {.+    list [c
7f40: 61 74 63 68 20 7b 65 78 70 72 20 7b 22 61 22 2a  atch {expr {"a"*
7f50: 2a 32 7d 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2b  *2}} msg] $msg.+
7f60: 7d 20 7b 31 20 7b 63 61 6e 27 74 20 75 73 65 20  } {1 {can't use 
7f70: 6e 6f 6e 2d 6e 75 6d 65 72 69 63 20 73 74 72 69  non-numeric stri
7f80: 6e 67 20 61 73 20 6f 70 65 72 61 6e 64 20 6f 66  ng as operand of
7f90: 20 22 2a 2a 22 7d 7d 0a 2b 74 65 73 74 20 65 78   "**"}}.+test ex
7fa0: 70 72 2d 32 33 2e 31 31 20 7b 43 6f 6d 70 69 6c  pr-23.11 {Compil
7fb0: 65 45 78 70 6f 6e 65 6e 74 69 61 6c 45 78 70 72  eExponentialExpr
7fc0: 3a 20 72 75 6e 74 69 6d 65 20 65 72 72 6f 72 7d  : runtime error}
7fd0: 20 7b 0a 2b 20 20 20 20 6c 69 73 74 20 5b 63 61   {.+    list [ca
7fe0: 74 63 68 20 7b 65 78 70 72 20 7b 30 2a 2a 2d 31  tch {expr {0**-1
7ff0: 7d 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 7d 20  }} msg] $msg.+} 
8000: 7b 31 20 7b 65 78 70 6f 6e 65 6e 74 69 61 74 69  {1 {exponentiati
8010: 6f 6e 20 6f 66 20 7a 65 72 6f 20 62 79 20 6e 65  on of zero by ne
8020: 67 61 74 69 76 65 20 70 6f 77 65 72 7d 7d 0a 2b  gative power}}.+
8030: 74 65 73 74 20 65 78 70 72 2d 32 33 2e 31 32 20  test expr-23.12 
8040: 7b 43 6f 6d 70 69 6c 65 45 78 70 6f 6e 65 6e 74  {CompileExponent
8050: 69 61 6c 45 78 70 72 3a 20 72 75 6e 74 69 6d 65  ialExpr: runtime
8060: 20 65 72 72 6f 72 7d 20 7b 0a 2b 20 20 20 20 6c   error} {.+    l
8070: 69 73 74 20 5b 63 61 74 63 68 20 7b 65 78 70 72  ist [catch {expr
8080: 20 7b 30 2e 30 2a 2a 2d 31 2e 30 7d 7d 20 6d 73   {0.0**-1.0}} ms
8090: 67 5d 20 24 6d 73 67 0a 2b 7d 20 7b 31 20 7b 65  g] $msg.+} {1 {e
80a0: 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e 20 6f 66  xponentiation of
80b0: 20 7a 65 72 6f 20 62 79 20 6e 65 67 61 74 69 76   zero by negativ
80c0: 65 20 70 6f 77 65 72 7d 7d 0a 2b 74 65 73 74 20  e power}}.+test 
80d0: 65 78 70 72 2d 32 33 2e 31 33 20 7b 43 6f 6d 70  expr-23.13 {Comp
80e0: 69 6c 65 45 78 70 6f 6e 65 6e 74 69 61 6c 45 78  ileExponentialEx
80f0: 70 72 3a 20 72 75 6e 74 69 6d 65 20 65 72 72 6f  pr: runtime erro
8100: 72 7d 20 7b 0a 2b 20 20 20 20 6c 69 73 74 20 5b  r} {.+    list [
8110: 63 61 74 63 68 20 7b 65 78 70 72 20 7b 77 69 64  catch {expr {wid
8120: 65 28 30 29 2a 2a 77 69 64 65 28 2d 31 29 7d 7d  e(0)**wide(-1)}}
8130: 20 6d 73 67 5d 20 24 6d 73 67 0a 2b 7d 20 7b 31   msg] $msg.+} {1
8140: 20 7b 65 78 70 6f 6e 65 6e 74 69 61 74 69 6f 6e   {exponentiation
8150: 20 6f 66 20 7a 65 72 6f 20 62 79 20 6e 65 67 61   of zero by nega
8160: 74 69 76 65 20 70 6f 77 65 72 7d 7d 0a 2b 74 65  tive power}}.+te
8170: 73 74 20 65 70 78 72 2d 32 33 2e 31 34 20 7b 49  st epxr-23.14 {I
8180: 4e 53 54 5f 45 58 50 4f 4e 3a 20 73 70 65 63 69  NST_EXPON: speci
8190: 61 6c 20 63 61 73 65 73 7d 20 7b 65 78 70 72 20  al cases} {expr 
81a0: 7b 30 2a 2a 31 7d 7d 20 30 0a 2b 74 65 73 74 20  {0**1}} 0.+test 
81b0: 65 70 78 72 2d 32 33 2e 31 35 20 7b 49 4e 53 54  epxr-23.15 {INST
81c0: 5f 45 58 50 4f 4e 3a 20 73 70 65 63 69 61 6c 20  _EXPON: special 
81d0: 63 61 73 65 73 7d 20 7b 65 78 70 72 20 7b 30 2a  cases} {expr {0*
81e0: 2a 30 7d 7d 20 31 0a 2b 74 65 73 74 20 65 70 78  *0}} 1.+test epx
81f0: 72 2d 32 33 2e 31 36 20 7b 49 4e 53 54 5f 45 58  r-23.16 {INST_EX
8200: 50 4f 4e 3a 20 73 70 65 63 69 61 6c 20 63 61 73  PON: special cas
8210: 65 73 7d 20 7b 65 78 70 72 20 7b 2d 32 2a 2a 2d  es} {expr {-2**-
8220: 31 7d 7d 20 30 0a 2b 74 65 73 74 20 65 70 78 72  1}} 0.+test epxr
8230: 2d 32 33 2e 31 37 20 7b 49 4e 53 54 5f 45 58 50  -23.17 {INST_EXP
8240: 4f 4e 3a 20 73 70 65 63 69 61 6c 20 63 61 73 65  ON: special case
8250: 73 7d 20 7b 65 78 70 72 20 7b 2d 32 2a 2a 30 7d  s} {expr {-2**0}
8260: 7d 20 31 0a 2b 74 65 73 74 20 65 70 78 72 2d 32  } 1.+test epxr-2
8270: 33 2e 31 38 20 7b 49 4e 53 54 5f 45 58 50 4f 4e  3.18 {INST_EXPON
8280: 3a 20 73 70 65 63 69 61 6c 20 63 61 73 65 73 7d  : special cases}
8290: 20 7b 65 78 70 72 20 7b 2d 31 2a 2a 31 7d 7d 20   {expr {-1**1}} 
82a0: 2d 31 0a 2b 74 65 73 74 20 65 70 78 72 2d 32 33  -1.+test epxr-23
82b0: 2e 31 39 20 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a  .19 {INST_EXPON:
82c0: 20 73 70 65 63 69 61 6c 20 63 61 73 65 73 7d 20   special cases} 
82d0: 7b 65 78 70 72 20 7b 2d 31 2a 2a 30 7d 7d 20 31  {expr {-1**0}} 1
82e0: 0a 2b 74 65 73 74 20 65 70 78 72 2d 32 33 2e 32  .+test epxr-23.2
82f0: 30 20 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a 20 73  0 {INST_EXPON: s
8300: 70 65 63 69 61 6c 20 63 61 73 65 73 7d 20 7b 65  pecial cases} {e
8310: 78 70 72 20 7b 2d 31 2a 2a 32 7d 7d 20 31 0a 2b  xpr {-1**2}} 1.+
8320: 74 65 73 74 20 65 70 78 72 2d 32 33 2e 32 31 20  test epxr-23.21 
8330: 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a 20 73 70 65  {INST_EXPON: spe
8340: 63 69 61 6c 20 63 61 73 65 73 7d 20 7b 65 78 70  cial cases} {exp
8350: 72 20 7b 2d 31 2a 2a 2d 31 7d 7d 20 2d 31 0a 2b  r {-1**-1}} -1.+
8360: 74 65 73 74 20 65 70 78 72 2d 32 33 2e 32 32 20  test epxr-23.22 
8370: 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a 20 73 70 65  {INST_EXPON: spe
8380: 63 69 61 6c 20 63 61 73 65 73 7d 20 7b 65 78 70  cial cases} {exp
8390: 72 20 7b 31 2a 2a 31 32 33 34 35 36 37 7d 7d 20  r {1**1234567}} 
83a0: 31 0a 2b 74 65 73 74 20 65 70 78 72 2d 32 33 2e  1.+test epxr-23.
83b0: 32 33 20 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a 20  23 {INST_EXPON: 
83c0: 73 70 65 63 69 61 6c 20 63 61 73 65 73 7d 20 7b  special cases} {
83d0: 65 78 70 72 20 7b 32 2a 2a 2d 32 7d 7d 20 30 0a  expr {2**-2}} 0.
83e0: 2b 74 65 73 74 20 65 70 78 72 2d 32 33 2e 32 34  +test epxr-23.24
83f0: 20 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a 20 73 70   {INST_EXPON: sp
8400: 65 63 69 61 6c 20 63 61 73 65 73 7d 20 7b 65 78  ecial cases} {ex
8410: 70 72 20 7b 77 69 64 65 28 30 29 2a 2a 77 69 64  pr {wide(0)**wid
8420: 65 28 31 29 7d 7d 20 30 0a 2b 74 65 73 74 20 65  e(1)}} 0.+test e
8430: 70 78 72 2d 32 33 2e 32 35 20 7b 49 4e 53 54 5f  pxr-23.25 {INST_
8440: 45 58 50 4f 4e 3a 20 73 70 65 63 69 61 6c 20 63  EXPON: special c
8450: 61 73 65 73 7d 20 7b 65 78 70 72 20 7b 77 69 64  ases} {expr {wid
8460: 65 28 30 29 2a 2a 77 69 64 65 28 30 29 7d 7d 20  e(0)**wide(0)}} 
8470: 31 0a 2b 74 65 73 74 20 65 70 78 72 2d 32 33 2e  1.+test epxr-23.
8480: 32 36 20 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a 20  26 {INST_EXPON: 
8490: 73 70 65 63 69 61 6c 20 63 61 73 65 73 7d 20 7b  special cases} {
84a0: 65 78 70 72 20 7b 77 69 64 65 28 2d 32 29 2a 2a  expr {wide(-2)**
84b0: 77 69 64 65 28 2d 31 29 7d 7d 20 30 0a 2b 74 65  wide(-1)}} 0.+te
84c0: 73 74 20 65 70 78 72 2d 32 33 2e 32 37 20 7b 49  st epxr-23.27 {I
84d0: 4e 53 54 5f 45 58 50 4f 4e 3a 20 73 70 65 63 69  NST_EXPON: speci
84e0: 61 6c 20 63 61 73 65 73 7d 20 7b 65 78 70 72 20  al cases} {expr 
84f0: 7b 77 69 64 65 28 2d 32 29 2a 2a 77 69 64 65 28  {wide(-2)**wide(
8500: 30 29 7d 7d 20 31 0a 2b 74 65 73 74 20 65 70 78  0)}} 1.+test epx
8510: 72 2d 32 33 2e 32 38 20 7b 49 4e 53 54 5f 45 58  r-23.28 {INST_EX
8520: 50 4f 4e 3a 20 73 70 65 63 69 61 6c 20 63 61 73  PON: special cas
8530: 65 73 7d 20 7b 65 78 70 72 20 7b 77 69 64 65 28  es} {expr {wide(
8540: 2d 31 29 2a 2a 77 69 64 65 28 31 29 7d 7d 20 2d  -1)**wide(1)}} -
8550: 31 0a 2b 74 65 73 74 20 65 70 78 72 2d 32 33 2e  1.+test epxr-23.
8560: 32 39 20 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a 20  29 {INST_EXPON: 
8570: 73 70 65 63 69 61 6c 20 63 61 73 65 73 7d 20 7b  special cases} {
8580: 65 78 70 72 20 7b 77 69 64 65 28 2d 31 29 2a 2a  expr {wide(-1)**
8590: 77 69 64 65 28 30 29 7d 7d 20 31 0a 2b 74 65 73  wide(0)}} 1.+tes
85a0: 74 20 65 70 78 72 2d 32 33 2e 33 30 20 7b 49 4e  t epxr-23.30 {IN
85b0: 53 54 5f 45 58 50 4f 4e 3a 20 73 70 65 63 69 61  ST_EXPON: specia
85c0: 6c 20 63 61 73 65 73 7d 20 7b 65 78 70 72 20 7b  l cases} {expr {
85d0: 77 69 64 65 28 2d 31 29 2a 2a 77 69 64 65 28 32  wide(-1)**wide(2
85e0: 29 7d 7d 20 31 0a 2b 74 65 73 74 20 65 70 78 72  )}} 1.+test epxr
85f0: 2d 32 33 2e 33 31 20 7b 49 4e 53 54 5f 45 58 50  -23.31 {INST_EXP
8600: 4f 4e 3a 20 73 70 65 63 69 61 6c 20 63 61 73 65  ON: special case
8610: 73 7d 20 7b 65 78 70 72 20 7b 77 69 64 65 28 2d  s} {expr {wide(-
8620: 31 29 2a 2a 77 69 64 65 28 2d 31 29 7d 7d 20 2d  1)**wide(-1)}} -
8630: 31 0a 2b 74 65 73 74 20 65 70 78 72 2d 32 33 2e  1.+test epxr-23.
8640: 33 32 20 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a 20  32 {INST_EXPON: 
8650: 73 70 65 63 69 61 6c 20 63 61 73 65 73 7d 20 7b  special cases} {
8660: 65 78 70 72 20 7b 77 69 64 65 28 31 29 2a 2a 77  expr {wide(1)**w
8670: 69 64 65 28 31 32 33 34 35 36 37 29 7d 7d 20 31  ide(1234567)}} 1
8680: 0a 2b 74 65 73 74 20 65 70 78 72 2d 32 33 2e 33  .+test epxr-23.3
8690: 33 20 7b 49 4e 53 54 5f 45 58 50 4f 4e 3a 20 73  3 {INST_EXPON: s
86a0: 70 65 63 69 61 6c 20 63 61 73 65 73 7d 20 7b 65  pecial cases} {e
86b0: 78 70 72 20 7b 77 69 64 65 28 32 29 2a 2a 77 69  xpr {wide(2)**wi
86c0: 64 65 28 2d 32 29 7d 7d 20 30 0a 20 0a 20 23 20  de(-2)}} 0. . # 
86d0: 63 6c 65 61 6e 75 70 0a 20 69 66 20 7b 5b 69 6e  cleanup. if {[in
86e0: 66 6f 20 65 78 69 73 74 73 20 61 5d 7d 20 7b 0a  fo exists a]} {.