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]} {.