Tcl Source Code

Hex Artifact Content
Login

Artifact 027ebed225bbeca24f4306a7e8cb3d6758e1fda4:

Attachment "tip282-2.patch" to ticket [1969722fff] added by dgp 2008-05-23 03:40:53.
0000: 49 6e 64 65 78 3a 20 67 65 6e 65 72 69 63 2f 74  Index: generic/t
0010: 63 6c 43 6f 6d 70 45 78 70 72 2e 63 0a 3d 3d 3d  clCompExpr.c.===
0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0060: 0a 52 43 53 20 66 69 6c 65 3a 20 2f 63 76 73 72  .RCS file: /cvsr
0070: 6f 6f 74 2f 74 63 6c 2f 74 63 6c 2f 67 65 6e 65  oot/tcl/tcl/gene
0080: 72 69 63 2f 74 63 6c 43 6f 6d 70 45 78 70 72 2e  ric/tclCompExpr.
0090: 63 2c 76 0a 72 65 74 72 69 65 76 69 6e 67 20 72  c,v.retrieving r
00a0: 65 76 69 73 69 6f 6e 20 31 2e 39 37 0a 64 69 66  evision 1.97.dif
00b0: 66 20 2d 75 20 2d 72 31 2e 39 37 20 74 63 6c 43  f -u -r1.97 tclC
00c0: 6f 6d 70 45 78 70 72 2e 63 0a 2d 2d 2d 20 67 65  ompExpr.c.--- ge
00d0: 6e 65 72 69 63 2f 74 63 6c 43 6f 6d 70 45 78 70  neric/tclCompExp
00e0: 72 2e 63 09 32 38 20 46 65 62 20 32 30 30 38 20  r.c.28 Feb 2008 
00f0: 32 30 3a 34 30 3a 32 34 20 2d 30 30 30 30 09 31  20:40:24 -0000.1
0100: 2e 39 37 0a 2b 2b 2b 20 67 65 6e 65 72 69 63 2f  .97.+++ generic/
0110: 74 63 6c 43 6f 6d 70 45 78 70 72 2e 63 09 32 32  tclCompExpr.c.22
0120: 20 4d 61 79 20 32 30 30 38 20 32 30 3a 32 36 3a   May 2008 20:26:
0130: 35 34 20 2d 30 30 30 30 0a 40 40 20 2d 32 39 32  54 -0000.@@ -292
0140: 2c 36 20 2b 32 39 32 2c 31 31 20 40 40 0a 20 09  ,6 +292,11 @@. .
0150: 09 09 09 09 20 2a 20 61 6e 64 20 45 4e 44 20 70  .... * and END p
0160: 61 69 72 73 20 77 69 74 68 20 53 54 41 52 54 2c  airs with START,
0170: 20 69 6e 20 74 68 65 0a 20 09 09 09 09 09 20 2a   in the. ..... *
0180: 20 73 61 6d 65 20 77 61 79 20 74 68 61 74 20 43   same way that C
0190: 4c 4f 53 45 5f 50 41 52 45 4e 20 70 61 69 72 73  LOSE_PAREN pairs
01a0: 20 77 69 74 68 0a 20 09 09 09 09 09 20 2a 20 4f   with. ..... * O
01b0: 50 45 4e 5f 50 41 52 45 4e 2e 20 2a 2f 0a 2b 23  PEN_PAREN. */.+#
01c0: 64 65 66 69 6e 65 20 53 45 50 41 52 41 54 4f 52  define SEPARATOR
01d0: 09 28 20 42 49 4e 41 52 59 20 7c 20 32 39 29 0a  .( BINARY | 29).
01e0: 2b 23 64 65 66 69 6e 65 20 41 53 53 49 47 4e 09  +#define ASSIGN.
01f0: 09 28 20 42 49 4e 41 52 59 20 7c 20 33 30 29 09  .( BINARY | 30).
0200: 2f 2a 20 41 53 53 49 47 4e 2c 20 6c 69 6b 65 20  /* ASSIGN, like 
0210: 45 58 50 4f 4e 2c 20 69 73 20 72 69 67 68 74 0a  EXPON, is right.
0220: 2b 09 09 09 09 09 20 2a 20 61 73 73 6f 63 69 61  +..... * associa
0230: 74 69 76 65 2c 20 61 6e 64 20 74 68 69 73 20 64  tive, and this d
0240: 69 73 74 69 6e 63 74 69 6f 6e 0a 2b 09 09 09 09  istinction.+....
0250: 09 20 2a 20 69 73 20 63 6f 64 65 64 20 64 69 72  . * is coded dir
0260: 65 63 74 6c 79 20 69 6e 20 50 61 72 73 65 45 78  ectly in ParseEx
0270: 70 72 28 29 20 2a 2f 0a 2b 0a 20 2f 2a 0a 20 20  pr() */.+. /*.  
0280: 2a 20 57 68 65 6e 20 50 61 72 73 65 45 78 70 72  * When ParseExpr
0290: 28 29 20 62 75 69 6c 64 73 20 74 68 65 20 70 61  () builds the pa
02a0: 72 73 65 20 74 72 65 65 20 69 74 20 6d 75 73 74  rse tree it must
02b0: 20 63 68 6f 6f 73 65 20 77 68 69 63 68 20 6f 70   choose which op
02c0: 65 72 61 6e 64 73 20 74 6f 0a 20 20 2a 20 63 6f  erands to.  * co
02d0: 6e 6e 65 63 74 20 74 6f 20 77 68 69 63 68 20 6f  nnect to which o
02e0: 70 65 72 61 74 6f 72 73 2e 20 20 54 68 69 73 20  perators.  This 
02f0: 69 73 20 64 6f 6e 65 20 61 63 63 6f 72 64 69 6e  is done accordin
0300: 67 20 74 6f 20 6f 70 65 72 61 74 6f 72 20 70 72  g to operator pr
0310: 65 63 65 64 65 6e 63 65 2e 0a 40 40 20 2d 33 30  ecedence..@@ -30
0320: 38 2c 36 20 2b 33 31 33 2c 38 20 40 40 0a 20 20  8,6 +313,8 @@.  
0330: 20 20 20 50 52 45 43 5f 43 4c 4f 53 45 5f 50 41     PREC_CLOSE_PA
0340: 52 45 4e 2c 09 2f 2a 20 22 29 22 20 2a 2f 0a 20  REN,./* ")" */. 
0350: 20 20 20 20 50 52 45 43 5f 4f 50 45 4e 5f 50 41      PREC_OPEN_PA
0360: 52 45 4e 2c 09 2f 2a 20 22 28 22 20 2a 2f 0a 20  REN,./* "(" */. 
0370: 20 20 20 20 50 52 45 43 5f 43 4f 4d 4d 41 2c 09      PREC_COMMA,.
0380: 09 2f 2a 20 22 2c 22 20 2a 2f 0a 2b 20 20 20 20  ./* "," */.+    
0390: 50 52 45 43 5f 53 45 50 41 52 41 54 4f 52 2c 09  PREC_SEPARATOR,.
03a0: 2f 2a 20 22 3b 22 20 2a 2f 0a 2b 20 20 20 20 50  /* ";" */.+    P
03b0: 52 45 43 5f 41 53 53 49 47 4e 2c 09 2f 2a 20 22  REC_ASSIGN,./* "
03c0: 3d 22 20 2a 2f 0a 20 20 20 20 20 50 52 45 43 5f  =" */.     PREC_
03d0: 43 4f 4e 44 49 54 49 4f 4e 41 4c 2c 09 2f 2a 20  CONDITIONAL,./* 
03e0: 22 3f 22 2c 20 22 3a 22 20 2a 2f 0a 20 20 20 20  "?", ":" */.    
03f0: 20 50 52 45 43 5f 4f 52 2c 09 09 2f 2a 20 22 7c   PREC_OR,../* "|
0400: 7c 22 20 2a 2f 0a 20 20 20 20 20 50 52 45 43 5f  |" */.     PREC_
0410: 41 4e 44 2c 09 09 2f 2a 20 22 26 26 22 20 2a 2f  AND,../* "&&" */
0420: 0a 40 40 20 2d 33 36 35 2c 38 20 2b 33 37 32 2c  .@@ -365,8 +372,
0430: 31 30 20 40 40 0a 20 20 20 20 20 50 52 45 43 5f  10 @@.     PREC_
0440: 45 51 55 41 4c 2c 09 09 2f 2a 20 4e 4f 54 5f 49  EQUAL,../* NOT_I
0450: 4e 5f 4c 49 53 54 20 2a 2f 0a 20 20 20 20 20 50  N_LIST */.     P
0460: 52 45 43 5f 43 4c 4f 53 45 5f 50 41 52 45 4e 2c  REC_CLOSE_PAREN,
0470: 09 2f 2a 20 43 4c 4f 53 45 5f 50 41 52 45 4e 20  ./* CLOSE_PAREN 
0480: 2a 2f 0a 20 20 20 20 20 50 52 45 43 5f 45 4e 44  */.     PREC_END
0490: 2c 09 09 2f 2a 20 45 4e 44 20 2a 2f 0a 2b 20 20  ,../* END */.+  
04a0: 20 20 50 52 45 43 5f 53 45 50 41 52 41 54 4f 52    PREC_SEPARATOR
04b0: 2c 09 2f 2a 20 53 45 50 41 52 41 54 4f 52 20 2a  ,./* SEPARATOR *
04c0: 2f 0a 2b 20 20 20 20 50 52 45 43 5f 41 53 53 49  /.+    PREC_ASSI
04d0: 47 4e 2c 09 2f 2a 20 41 53 53 49 47 4e 20 2a 2f  GN,./* ASSIGN */
04e0: 0a 20 20 20 20 20 2f 2a 20 45 78 70 61 6e 73 69  .     /* Expansi
04f0: 6f 6e 20 72 6f 6f 6d 20 66 6f 72 20 6d 6f 72 65  on room for more
0500: 20 62 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72   binary operator
0510: 73 20 2a 2f 0a 2d 20 20 20 20 30 2c 20 20 30 2c  s */.-    0,  0,
0520: 20 20 30 2c 0a 2b 20 20 20 20 30 2c 0a 20 20 20    0,.+    0,.   
0530: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0540: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0550: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0560: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0570: 0a 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 2c  .     0,  0,  0,
0580: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
0590: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
05a0: 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c    0,  0,  0,  0,
05b0: 20 20 30 2c 0a 20 20 20 20 20 30 2c 20 20 0a 40    0,.     0,  .@
05c0: 40 20 2d 34 32 30 2c 38 20 2b 34 32 39 2c 31 30  @ -420,8 +429,10
05d0: 20 40 40 0a 20 20 20 20 20 49 4e 53 54 5f 4c 49   @@.     INST_LI
05e0: 53 54 5f 4e 4f 54 5f 49 4e 2c 09 2f 2a 20 4e 4f  ST_NOT_IN,./* NO
05f0: 54 5f 49 4e 5f 4c 49 53 54 20 2a 2f 0a 20 20 20  T_IN_LIST */.   
0600: 20 20 30 2c 09 09 09 2f 2a 20 43 4c 4f 53 45 5f    0,.../* CLOSE_
0610: 50 41 52 45 4e 20 2a 2f 0a 20 20 20 20 20 30 2c  PAREN */.     0,
0620: 09 09 09 2f 2a 20 45 4e 44 20 2a 2f 0a 2b 20 20  .../* END */.+  
0630: 20 20 30 2c 09 09 09 2f 2a 20 53 45 50 41 52 41    0,.../* SEPARA
0640: 54 4f 52 20 2a 2f 0a 2b 20 20 20 20 30 2c 09 09  TOR */.+    0,..
0650: 09 2f 2a 20 41 53 53 49 47 4e 20 2a 2f 0a 20 20  ./* ASSIGN */.  
0660: 20 20 20 2f 2a 20 45 78 70 61 6e 73 69 6f 6e 20     /* Expansion 
0670: 72 6f 6f 6d 20 66 6f 72 20 6d 6f 72 65 20 62 69  room for more bi
0680: 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 73 20 2a  nary operators *
0690: 2f 0a 2d 20 20 20 20 30 2c 20 20 30 2c 20 20 30  /.-    0,  0,  0
06a0: 2c 0a 2b 20 20 20 20 30 2c 0a 20 20 20 20 20 30  ,.+    0,.     0
06b0: 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30  ,  0,  0,  0,  0
06c0: 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30  ,  0,  0,  0,  0
06d0: 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30  ,  0,  0,  0,  0
06e0: 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c 0a 20 20  ,  0,  0,  0,.  
06f0: 20 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30     0,  0,  0,  0
0700: 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30  ,  0,  0,  0,  0
0710: 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30  ,  0,  0,  0,  0
0720: 2c 20 20 30 2c 20 20 30 2c 20 20 30 2c 20 20 30  ,  0,  0,  0,  0
0730: 2c 0a 20 20 20 20 20 30 2c 20 20 0a 40 40 20 2d  ,.     0,  .@@ -
0740: 34 36 36 2c 39 20 2b 34 37 37 2c 39 20 40 40 0a  466,9 +477,9 @@.
0750: 20 09 43 4f 4d 4d 41 09 09 2f 2a 20 2c 20 2a 2f   .COMMA../* , */
0760: 2c 09 4d 49 4e 55 53 09 09 2f 2a 20 2d 20 2a 2f  ,.MINUS../* - */
0770: 2c 0a 20 09 30 09 09 2f 2a 20 2e 20 2a 2f 2c 09  ,. .0../* . */,.
0780: 44 49 56 49 44 45 09 09 2f 2a 20 2f 20 2a 2f 2c  DIVIDE../* / */,
0790: 0a 20 09 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  . .0, 0, 0, 0, 0
07a0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
07b0: 09 09 09 2f 2a 20 30 2d 39 20 2a 2f 0a 2d 09 43  .../* 0-9 */.-.C
07c0: 4f 4c 4f 4e 09 09 2f 2a 20 3a 20 2a 2f 2c 09 49  OLON../* : */,.I
07d0: 4e 56 41 4c 49 44 09 09 2f 2a 20 3b 20 2a 2f 2c  NVALID../* ; */,
07e0: 0a 2b 09 43 4f 4c 4f 4e 09 09 2f 2a 20 3a 20 2a  .+.COLON../* : *
07f0: 2f 2c 09 53 45 50 41 52 41 54 4f 52 09 2f 2a 20  /,.SEPARATOR./* 
0800: 3b 20 2a 2f 2c 0a 20 09 30 09 09 2f 2a 20 3c 20  ; */,. .0../* < 
0810: 6f 72 20 3c 3c 20 6f 72 20 3c 3d 20 2a 2f 2c 0a  or << or <= */,.
0820: 2d 09 30 09 09 2f 2a 20 3d 3d 20 6f 72 20 49 4e  -.0../* == or IN
0830: 56 41 4c 49 44 20 2a 2f 2c 0a 2b 09 30 09 09 2f  VALID */,.+.0../
0840: 2a 20 3d 20 6f 72 20 3d 3d 20 2a 2f 2c 0a 20 09  * = or == */,. .
0850: 30 09 09 2f 2a 20 3e 20 6f 72 20 3e 3e 20 6f 72  0../* > or >> or
0860: 20 3e 3d 20 2a 2f 2c 0a 20 09 51 55 45 53 54 49   >= */,. .QUESTI
0870: 4f 4e 09 2f 2a 20 3f 20 2a 2f 2c 09 49 4e 56 41  ON./* ? */,.INVA
0880: 4c 49 44 09 09 2f 2a 20 40 20 2a 2f 2c 0a 20 09  LID../* @ */,. .
0890: 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30  0, 0, 0, 0, 0, 0
08a0: 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c 20 30 2c  , 0, 0, 0, 0, 0,
08b0: 20 30 2c 20 30 2c 09 09 2f 2a 20 41 2d 4d 20 2a   0, 0,../* A-M *
08c0: 2f 0a 40 40 20 2d 31 31 35 35 2c 36 20 2b 31 31  /.@@ -1155,6 +11
08d0: 36 36 2c 31 31 20 40 40 0a 20 09 09 09 62 72 65  66,11 @@. ...bre
08e0: 61 6b 3b 0a 20 09 09 20 20 20 20 7d 0a 20 0a 2b  ak;. ..    }. .+
08f0: 09 09 20 20 20 20 2f 2a 20 52 69 67 68 74 20 61  ..    /* Right a
0900: 73 73 6f 63 69 61 74 69 6f 6e 20 72 75 6c 65 73  ssociation rules
0910: 20 66 6f 72 20 61 73 73 69 67 6e 6d 65 6e 74 2e   for assignment.
0920: 20 2a 2f 0a 2b 09 09 20 20 20 20 69 66 20 28 6c   */.+..    if (l
0930: 65 78 65 6d 65 20 3d 3d 20 41 53 53 49 47 4e 29  exeme == ASSIGN)
0940: 20 7b 0a 2b 09 09 09 62 72 65 61 6b 3b 0a 2b 09   {.+...break;.+.
0950: 09 20 20 20 20 7d 0a 2b 0a 20 09 09 20 20 20 20  .    }.+. ..    
0960: 2f 2a 0a 20 09 09 20 20 20 20 20 2a 20 53 70 65  /*. ..     * Spe
0970: 63 69 61 6c 20 61 73 73 6f 63 69 61 74 69 6f 6e  cial association
0980: 20 72 75 6c 65 73 20 66 6f 72 20 74 68 65 20 63   rules for the c
0990: 6f 6e 64 69 74 69 6f 6e 61 6c 20 6f 70 65 72 61  onditional opera
09a0: 74 6f 72 73 2e 0a 20 09 09 20 20 20 20 20 2a 20  tors.. ..     * 
09b0: 54 68 65 20 22 3f 22 20 61 6e 64 20 22 3a 22 20  The "?" and ":" 
09c0: 6f 70 65 72 61 74 6f 72 73 20 68 61 76 65 20 65  operators have e
09d0: 71 75 61 6c 20 70 72 65 63 65 64 65 6e 63 65 2c  qual precedence,
09e0: 20 62 75 74 0a 40 40 20 2d 31 32 32 39 2c 36 20   but.@@ -1229,6 
09f0: 2b 31 32 34 35 2c 31 36 20 40 40 0a 20 09 09 20  +1245,16 @@. .. 
0a00: 20 20 20 6e 6f 64 65 73 5b 63 6f 6d 70 6c 65 74     nodes[complet
0a10: 65 5d 2e 63 6f 6e 73 74 61 6e 74 20 3d 20 69 6e  e].constant = in
0a20: 63 6f 6d 70 6c 65 74 65 50 74 72 2d 3e 63 6f 6e  completePtr->con
0a30: 73 74 61 6e 74 3b 0a 20 09 09 7d 0a 20 0a 2b 09  stant;. ..}. .+.
0a40: 09 2f 2a 0a 2b 09 09 20 2a 20 57 65 20 64 65 63  ./*.+.. * We dec
0a50: 6c 61 72 65 20 61 6c 6c 20 41 53 53 49 47 4e 20  lare all ASSIGN 
0a60: 6f 70 65 72 61 74 6f 72 73 20 74 6f 20 62 65 20  operators to be 
0a70: 6e 6f 6e 2d 63 6f 6e 73 74 61 6e 74 0a 2b 09 09  non-constant.+..
0a80: 20 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 62   * expressions b
0a90: 65 63 61 75 73 65 20 77 65 20 64 6f 20 6e 6f 74  ecause we do not
0aa0: 20 77 61 6e 74 20 74 6f 20 6f 70 74 69 6d 69 7a   want to optimiz
0ab0: 65 20 74 68 65 69 72 0a 2b 09 09 20 2a 20 76 61  e their.+.. * va
0ac0: 72 69 61 62 6c 65 2d 73 65 74 74 69 6e 67 20 73  riable-setting s
0ad0: 69 64 65 20 65 66 66 65 63 74 73 20 6f 75 74 20  ide effects out 
0ae0: 6f 66 20 65 78 69 73 74 65 6e 63 65 2e 0a 2b 09  of existence..+.
0af0: 09 20 2a 2f 0a 2b 0a 2b 09 09 69 66 20 28 69 6e  . */.+.+..if (in
0b00: 63 6f 6d 70 6c 65 74 65 50 74 72 2d 3e 6c 65 78  completePtr->lex
0b10: 65 6d 65 20 3d 3d 20 41 53 53 49 47 4e 29 20 7b  eme == ASSIGN) {
0b20: 0a 2b 09 09 20 20 20 20 69 6e 63 6f 6d 70 6c 65  .+..    incomple
0b30: 74 65 50 74 72 2d 3e 63 6f 6e 73 74 61 6e 74 20  tePtr->constant 
0b40: 3d 20 30 3b 0a 2b 09 09 7d 0a 2b 0a 20 09 09 69  = 0;.+..}.+. ..i
0b50: 66 20 28 69 6e 63 6f 6d 70 6c 65 74 65 50 74 72  f (incompletePtr
0b60: 2d 3e 6c 65 78 65 6d 65 20 3d 3d 20 53 54 41 52  ->lexeme == STAR
0b70: 54 29 20 7b 0a 20 0a 20 09 09 20 20 20 20 2f 2a  T) {. . ..    /*
0b80: 0a 40 40 20 2d 31 38 34 32 2c 37 20 2b 31 38 36  .@@ -1842,7 +186
0b90: 38 2c 37 20 40 40 0a 20 09 20 20 20 20 2a 6c 65  8,7 @@. .    *le
0ba0: 78 65 6d 65 50 74 72 20 3d 20 45 51 55 41 4c 3b  xemePtr = EQUAL;
0bb0: 0a 20 09 20 20 20 20 72 65 74 75 72 6e 20 32 3b  . .    return 2;
0bc0: 0a 20 09 7d 0a 2d 09 2a 6c 65 78 65 6d 65 50 74  . .}.-.*lexemePt
0bd0: 72 20 3d 20 49 4e 43 4f 4d 50 4c 45 54 45 3b 0a  r = INCOMPLETE;.
0be0: 2b 09 2a 6c 65 78 65 6d 65 50 74 72 20 3d 20 41  +.*lexemePtr = A
0bf0: 53 53 49 47 4e 3b 0a 20 09 72 65 74 75 72 6e 20  SSIGN;. .return 
0c00: 31 3b 0a 20 0a 20 20 20 20 20 63 61 73 65 20 27  1;. .     case '
0c10: 21 27 3a 0a 40 40 20 2d 32 32 31 33 2c 36 20 2b  !':.@@ -2213,6 +
0c20: 32 32 33 39 2c 39 20 40 40 0a 20 09 20 20 20 20  2239,9 @@. .    
0c30: 63 61 73 65 20 4f 52 3a 0a 20 09 09 54 63 6c 45  case OR:. ..TclE
0c40: 6d 69 74 46 6f 72 77 61 72 64 4a 75 6d 70 28 65  mitForwardJump(e
0c50: 6e 76 50 74 72 2c 20 54 43 4c 5f 54 52 55 45 5f  nvPtr, TCL_TRUE_
0c60: 4a 55 4d 50 2c 20 26 28 6a 75 6d 70 50 74 72 2d  JUMP, &(jumpPtr-
0c70: 3e 6a 75 6d 70 29 29 3b 0a 20 09 09 62 72 65 61  >jump));. ..brea
0c80: 6b 3b 0a 2b 09 20 20 20 20 63 61 73 65 20 53 45  k;.+.    case SE
0c90: 50 41 52 41 54 4f 52 3a 0a 2b 09 09 54 63 6c 45  PARATOR:.+..TclE
0ca0: 6d 69 74 4f 70 63 6f 64 65 28 49 4e 53 54 5f 50  mitOpcode(INST_P
0cb0: 4f 50 2c 20 65 6e 76 50 74 72 29 3b 0a 2b 09 09  OP, envPtr);.+..
0cc0: 62 72 65 61 6b 3b 0a 20 09 20 20 20 20 7d 0a 20  break;. .    }. 
0cd0: 09 7d 20 65 6c 73 65 20 7b 0a 20 09 20 20 20 20  .} else {. .    
0ce0: 73 77 69 74 63 68 20 28 6e 6f 64 65 50 74 72 2d  switch (nodePtr-
0cf0: 3e 6c 65 78 65 6d 65 29 20 7b 0a 40 40 20 2d 32  >lexeme) {.@@ -2
0d00: 32 32 32 2c 37 20 2b 32 32 35 31 2c 31 38 20 40  222,7 +2251,18 @
0d10: 40 0a 20 09 09 20 20 20 20 54 63 6c 45 6d 69 74  @. ..    TclEmit
0d20: 4f 70 63 6f 64 65 28 49 4e 53 54 5f 54 52 59 5f  Opcode(INST_TRY_
0d30: 43 56 54 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20  CVT_TO_NUMERIC, 
0d40: 65 6e 76 50 74 72 29 3b 0a 20 09 09 7d 0a 20 09  envPtr);. ..}. .
0d50: 09 62 72 65 61 6b 3b 0a 2b 09 20 20 20 20 63 61  .break;.+.    ca
0d60: 73 65 20 41 53 53 49 47 4e 3a 0a 2b 09 09 69 66  se ASSIGN:.+..if
0d70: 20 28 63 6f 6e 76 65 72 74 29 20 7b 0a 2b 09 09   (convert) {.+..
0d80: 20 20 20 20 2f 2a 0a 2b 09 09 20 20 20 20 20 2a      /*.+..     *
0d90: 20 4d 61 6b 65 20 73 75 72 65 20 77 65 20 61 73   Make sure we as
0da0: 73 69 67 6e 20 74 6f 20 61 20 76 61 72 69 61 62  sign to a variab
0db0: 6c 65 20 6f 6e 6c 79 20 76 61 6c 75 65 73 20 74  le only values t
0dc0: 68 61 74 0a 2b 09 09 20 20 20 20 20 2a 20 68 61  hat.+..     * ha
0dd0: 76 65 20 62 65 65 6e 20 6e 75 6d 65 72 69 63 61  ve been numerica
0de0: 6c 6c 79 20 6e 6f 72 6d 61 6c 69 7a 65 64 20 69  lly normalized i
0df0: 6e 20 74 68 65 20 65 78 70 72 20 77 61 79 2e 0a  n the expr way..
0e00: 2b 09 09 20 20 20 20 20 2a 2f 0a 2b 09 09 20 20  +..     */.+..  
0e10: 20 20 54 63 6c 45 6d 69 74 4f 70 63 6f 64 65 28    TclEmitOpcode(
0e20: 49 4e 53 54 5f 54 52 59 5f 43 56 54 5f 54 4f 5f  INST_TRY_CVT_TO_
0e30: 4e 55 4d 45 52 49 43 2c 20 65 6e 76 50 74 72 29  NUMERIC, envPtr)
0e40: 3b 0a 2b 09 09 7d 0a 2b 09 09 54 63 6c 45 6d 69  ;.+..}.+..TclEmi
0e50: 74 4f 70 63 6f 64 65 28 49 4e 53 54 5f 53 54 4f  tOpcode(INST_STO
0e60: 52 45 5f 53 54 4b 2c 20 65 6e 76 50 74 72 29 3b  RE_STK, envPtr);
0e70: 0a 2b 09 09 62 72 65 61 6b 3b 0a 20 09 20 20 20  .+..break;. .   
0e80: 20 63 61 73 65 20 4f 50 45 4e 5f 50 41 52 45 4e   case OPEN_PAREN
0e90: 3a 0a 2b 09 20 20 20 20 63 61 73 65 20 53 45 50  :.+.    case SEP
0ea0: 41 52 41 54 4f 52 3a 0a 20 0a 20 09 09 2f 2a 20  ARATOR:. . ../* 
0eb0: 64 6f 20 6e 6f 74 68 69 6e 67 20 2a 2f 0a 20 09  do nothing */. .
0ec0: 09 62 72 65 61 6b 3b 0a                          .break;.