author | sl@SLION-WIN7.fritz.box |
Fri, 15 Jun 2012 03:10:57 +0200 | |
changeset 0 | bde4ae8d615e |
permissions | -rw-r--r-- |
sl@0 | 1 |
# Commands covered: if |
sl@0 | 2 |
# |
sl@0 | 3 |
# This file contains a collection of tests for one or more of the Tcl |
sl@0 | 4 |
# built-in commands. Sourcing this file into Tcl runs the tests and |
sl@0 | 5 |
# generates output for errors. No output means no errors were found. |
sl@0 | 6 |
# |
sl@0 | 7 |
# Copyright (c) 1996 Sun Microsystems, Inc. |
sl@0 | 8 |
# Copyright (c) 1998-1999 by Scriptics Corporation. |
sl@0 | 9 |
# |
sl@0 | 10 |
# See the file "license.terms" for information on usage and redistribution |
sl@0 | 11 |
# of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
sl@0 | 12 |
# |
sl@0 | 13 |
# RCS: @(#) $Id: if.test,v 1.7 2001/12/04 15:36:29 dkf Exp $ |
sl@0 | 14 |
|
sl@0 | 15 |
if {[lsearch [namespace children] ::tcltest] == -1} { |
sl@0 | 16 |
package require tcltest |
sl@0 | 17 |
namespace import -force ::tcltest::* |
sl@0 | 18 |
} |
sl@0 | 19 |
|
sl@0 | 20 |
# Basic "if" operation. |
sl@0 | 21 |
|
sl@0 | 22 |
catch {unset a} |
sl@0 | 23 |
test if-1.1 {TclCompileIfCmd: missing if/elseif test} { |
sl@0 | 24 |
list [catch {if} msg] $msg |
sl@0 | 25 |
} {1 {wrong # args: no expression after "if" argument}} |
sl@0 | 26 |
test if-1.2 {TclCompileIfCmd: error in if/elseif test} { |
sl@0 | 27 |
list [catch {if {[error "error in condition"]} foo} msg] $msg |
sl@0 | 28 |
} {1 {error in condition}} |
sl@0 | 29 |
test if-1.3 {TclCompileIfCmd: error in if/elseif test} { |
sl@0 | 30 |
list [catch {if {1+}} msg] $msg $errorInfo |
sl@0 | 31 |
} {1 {syntax error in expression "1+": premature end of expression} {syntax error in expression "1+": premature end of expression |
sl@0 | 32 |
("if" test expression) |
sl@0 | 33 |
while compiling |
sl@0 | 34 |
"if {1+}"}} |
sl@0 | 35 |
test if-1.4 {TclCompileIfCmd: if/elseif test in braces} { |
sl@0 | 36 |
set a {} |
sl@0 | 37 |
if {1<2} {set a 1} |
sl@0 | 38 |
set a |
sl@0 | 39 |
} {1} |
sl@0 | 40 |
test if-1.5 {TclCompileIfCmd: if/elseif test not in braces} { |
sl@0 | 41 |
set a {} |
sl@0 | 42 |
if 1<2 {set a 1} |
sl@0 | 43 |
set a |
sl@0 | 44 |
} {1} |
sl@0 | 45 |
test if-1.6 {TclCompileIfCmd: multiline test expr} { |
sl@0 | 46 |
set a {} |
sl@0 | 47 |
if {($tcl_platform(platform) != "foobar1") && \ |
sl@0 | 48 |
($tcl_platform(platform) != "foobar2")} {set a 3} else {set a 4} |
sl@0 | 49 |
set a |
sl@0 | 50 |
} 3 |
sl@0 | 51 |
test if-1.7 {TclCompileIfCmd: "then" after if/elseif test} { |
sl@0 | 52 |
set a {} |
sl@0 | 53 |
if 4>3 then {set a 1} |
sl@0 | 54 |
set a |
sl@0 | 55 |
} {1} |
sl@0 | 56 |
test if-1.8 {TclCompileIfCmd: keyword other than "then" after if/elseif test} { |
sl@0 | 57 |
set a {} |
sl@0 | 58 |
catch {if 1<2 therefore {set a 1}} msg |
sl@0 | 59 |
set msg |
sl@0 | 60 |
} {invalid command name "therefore"} |
sl@0 | 61 |
test if-1.9 {TclCompileIfCmd: missing "then" body} { |
sl@0 | 62 |
set a {} |
sl@0 | 63 |
catch {if 1<2 then} msg |
sl@0 | 64 |
set msg |
sl@0 | 65 |
} {wrong # args: no script following "then" argument} |
sl@0 | 66 |
test if-1.10 {TclCompileIfCmd: error in "then" body} { |
sl@0 | 67 |
set a {} |
sl@0 | 68 |
list [catch {if {$a!="xxx"} then {set}} msg] $msg $errorInfo |
sl@0 | 69 |
} {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" |
sl@0 | 70 |
while compiling |
sl@0 | 71 |
"set" |
sl@0 | 72 |
("if" then script line 1) |
sl@0 | 73 |
while compiling |
sl@0 | 74 |
"if {$a!="xxx"} then {set}"}} |
sl@0 | 75 |
test if-1.11 {TclCompileIfCmd: error in "then" body} { |
sl@0 | 76 |
list [catch {if 2 then {[error "error in then clause"]}} msg] $msg |
sl@0 | 77 |
} {1 {error in then clause}} |
sl@0 | 78 |
test if-1.12 {TclCompileIfCmd: "then" body in quotes} { |
sl@0 | 79 |
set a {} |
sl@0 | 80 |
if 27>17 "append a x" |
sl@0 | 81 |
set a |
sl@0 | 82 |
} {x} |
sl@0 | 83 |
test if-1.13 {TclCompileIfCmd: computed "then" body} { |
sl@0 | 84 |
catch {unset x1} |
sl@0 | 85 |
catch {unset x2} |
sl@0 | 86 |
set a {} |
sl@0 | 87 |
set x1 {append a x1} |
sl@0 | 88 |
set x2 {; append a x2} |
sl@0 | 89 |
set a {} |
sl@0 | 90 |
if 1 $x1$x2 |
sl@0 | 91 |
set a |
sl@0 | 92 |
} {x1x2} |
sl@0 | 93 |
test if-1.14 {TclCompileIfCmd: taking proper branch} { |
sl@0 | 94 |
set a {} |
sl@0 | 95 |
if 1<2 {set a 1} |
sl@0 | 96 |
set a |
sl@0 | 97 |
} 1 |
sl@0 | 98 |
test if-1.15 {TclCompileIfCmd: taking proper branch} { |
sl@0 | 99 |
set a {} |
sl@0 | 100 |
if 1>2 {set a 1} |
sl@0 | 101 |
set a |
sl@0 | 102 |
} {} |
sl@0 | 103 |
test if-1.16 {TclCompileIfCmd: test jumpFalse instruction replacement after long "then" body} { |
sl@0 | 104 |
catch {unset i} |
sl@0 | 105 |
set a {} |
sl@0 | 106 |
if 1<2 { |
sl@0 | 107 |
set a 1 |
sl@0 | 108 |
while {$a != "xxx"} { |
sl@0 | 109 |
break; |
sl@0 | 110 |
while {$i >= 0} { |
sl@0 | 111 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 112 |
set i $i |
sl@0 | 113 |
set i [lindex $s $i] |
sl@0 | 114 |
} |
sl@0 | 115 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 116 |
set i $i |
sl@0 | 117 |
set i [lindex $s $i] |
sl@0 | 118 |
} |
sl@0 | 119 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 120 |
set i $i |
sl@0 | 121 |
set i [lindex $s $i] |
sl@0 | 122 |
} |
sl@0 | 123 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 124 |
set i $i |
sl@0 | 125 |
set i [lindex $s $i] |
sl@0 | 126 |
} |
sl@0 | 127 |
set i [expr $i-1] |
sl@0 | 128 |
} |
sl@0 | 129 |
} |
sl@0 | 130 |
set a 2 |
sl@0 | 131 |
while {$a != "xxx"} { |
sl@0 | 132 |
break; |
sl@0 | 133 |
while {$i >= 0} { |
sl@0 | 134 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 135 |
set i $i |
sl@0 | 136 |
set i [lindex $s $i] |
sl@0 | 137 |
} |
sl@0 | 138 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 139 |
set i $i |
sl@0 | 140 |
set i [lindex $s $i] |
sl@0 | 141 |
} |
sl@0 | 142 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 143 |
set i $i |
sl@0 | 144 |
set i [lindex $s $i] |
sl@0 | 145 |
} |
sl@0 | 146 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 147 |
set i $i |
sl@0 | 148 |
set i [lindex $s $i] |
sl@0 | 149 |
} |
sl@0 | 150 |
set i [expr $i-1] |
sl@0 | 151 |
} |
sl@0 | 152 |
} |
sl@0 | 153 |
set a 3 |
sl@0 | 154 |
} |
sl@0 | 155 |
set a |
sl@0 | 156 |
} 3 |
sl@0 | 157 |
test if-1.17 {TclCompileIfCmd: if/elseif test in quotes} { |
sl@0 | 158 |
set a {} |
sl@0 | 159 |
list [catch {if {"0 < 3"} {set a 1}} msg] $msg |
sl@0 | 160 |
} {1 {expected boolean value but got "0 < 3"}} |
sl@0 | 161 |
|
sl@0 | 162 |
|
sl@0 | 163 |
test if-2.1 {TclCompileIfCmd: "elseif" after if/elseif test} { |
sl@0 | 164 |
set a {} |
sl@0 | 165 |
if 3>4 {set a 1} elseif 1 {set a 2} |
sl@0 | 166 |
set a |
sl@0 | 167 |
} {2} |
sl@0 | 168 |
# Since "else" is optional, the "elwood" below is treated as a command. |
sl@0 | 169 |
# But then there shouldn't be any additional argument words for the "if". |
sl@0 | 170 |
test if-2.2 {TclCompileIfCmd: keyword other than "elseif"} { |
sl@0 | 171 |
set a {} |
sl@0 | 172 |
catch {if 1<2 {set a 1} elwood {set a 2}} msg |
sl@0 | 173 |
set msg |
sl@0 | 174 |
} {wrong # args: extra words after "else" clause in "if" command} |
sl@0 | 175 |
test if-2.3 {TclCompileIfCmd: missing expression after "elseif"} { |
sl@0 | 176 |
set a {} |
sl@0 | 177 |
catch {if 1<2 {set a 1} elseif} msg |
sl@0 | 178 |
set msg |
sl@0 | 179 |
} {wrong # args: no expression after "elseif" argument} |
sl@0 | 180 |
test if-2.4 {TclCompileIfCmd: error in expression after "elseif"} { |
sl@0 | 181 |
set a {} |
sl@0 | 182 |
list [catch {if 3>4 {set a 1} elseif {1>}} msg] $msg $errorInfo |
sl@0 | 183 |
} {1 {syntax error in expression "1>": premature end of expression} {syntax error in expression "1>": premature end of expression |
sl@0 | 184 |
("if" test expression) |
sl@0 | 185 |
while compiling |
sl@0 | 186 |
"if 3>4 {set a 1} elseif {1>}"}} |
sl@0 | 187 |
test if-2.5 {TclCompileIfCmd: test jumpFalse instruction replacement after long "elseif" body} { |
sl@0 | 188 |
catch {unset i} |
sl@0 | 189 |
set a {} |
sl@0 | 190 |
if 1>2 { |
sl@0 | 191 |
set a 1 |
sl@0 | 192 |
while {$a != "xxx"} { |
sl@0 | 193 |
break; |
sl@0 | 194 |
while {$i >= 0} { |
sl@0 | 195 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 196 |
set i $i |
sl@0 | 197 |
set i [lindex $s $i] |
sl@0 | 198 |
} |
sl@0 | 199 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 200 |
set i $i |
sl@0 | 201 |
set i [lindex $s $i] |
sl@0 | 202 |
} |
sl@0 | 203 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 204 |
set i $i |
sl@0 | 205 |
set i [lindex $s $i] |
sl@0 | 206 |
} |
sl@0 | 207 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 208 |
set i $i |
sl@0 | 209 |
set i [lindex $s $i] |
sl@0 | 210 |
} |
sl@0 | 211 |
set i [expr $i-1] |
sl@0 | 212 |
} |
sl@0 | 213 |
} |
sl@0 | 214 |
set a 2 |
sl@0 | 215 |
while {$a != "xxx"} { |
sl@0 | 216 |
break; |
sl@0 | 217 |
while {$i >= 0} { |
sl@0 | 218 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 219 |
set i $i |
sl@0 | 220 |
set i [lindex $s $i] |
sl@0 | 221 |
} |
sl@0 | 222 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 223 |
set i $i |
sl@0 | 224 |
set i [lindex $s $i] |
sl@0 | 225 |
} |
sl@0 | 226 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 227 |
set i $i |
sl@0 | 228 |
set i [lindex $s $i] |
sl@0 | 229 |
} |
sl@0 | 230 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 231 |
set i $i |
sl@0 | 232 |
set i [lindex $s $i] |
sl@0 | 233 |
} |
sl@0 | 234 |
set i [expr $i-1] |
sl@0 | 235 |
} |
sl@0 | 236 |
} |
sl@0 | 237 |
set a 3 |
sl@0 | 238 |
} elseif 1<2 then { #; this if arm should be taken |
sl@0 | 239 |
set a 4 |
sl@0 | 240 |
while {$a != "xxx"} { |
sl@0 | 241 |
break; |
sl@0 | 242 |
while {$i >= 0} { |
sl@0 | 243 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 244 |
set i $i |
sl@0 | 245 |
set i [lindex $s $i] |
sl@0 | 246 |
} |
sl@0 | 247 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 248 |
set i $i |
sl@0 | 249 |
set i [lindex $s $i] |
sl@0 | 250 |
} |
sl@0 | 251 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 252 |
set i $i |
sl@0 | 253 |
set i [lindex $s $i] |
sl@0 | 254 |
} |
sl@0 | 255 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 256 |
set i $i |
sl@0 | 257 |
set i [lindex $s $i] |
sl@0 | 258 |
} |
sl@0 | 259 |
set i [expr $i-1] |
sl@0 | 260 |
} |
sl@0 | 261 |
} |
sl@0 | 262 |
set a 5 |
sl@0 | 263 |
while {$a != "xxx"} { |
sl@0 | 264 |
break; |
sl@0 | 265 |
while {$i >= 0} { |
sl@0 | 266 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 267 |
set i $i |
sl@0 | 268 |
set i [lindex $s $i] |
sl@0 | 269 |
} |
sl@0 | 270 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 271 |
set i $i |
sl@0 | 272 |
set i [lindex $s $i] |
sl@0 | 273 |
} |
sl@0 | 274 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 275 |
set i $i |
sl@0 | 276 |
set i [lindex $s $i] |
sl@0 | 277 |
} |
sl@0 | 278 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 279 |
set i $i |
sl@0 | 280 |
set i [lindex $s $i] |
sl@0 | 281 |
} |
sl@0 | 282 |
set i [expr $i-1] |
sl@0 | 283 |
} |
sl@0 | 284 |
} |
sl@0 | 285 |
set a 6 |
sl@0 | 286 |
} |
sl@0 | 287 |
set a |
sl@0 | 288 |
} 6 |
sl@0 | 289 |
|
sl@0 | 290 |
test if-3.1 {TclCompileIfCmd: "else" clause} { |
sl@0 | 291 |
set a {} |
sl@0 | 292 |
if 3>4 {set a 1} elseif {$a == "foo"} {set a 2} else {set a 3} |
sl@0 | 293 |
set a |
sl@0 | 294 |
} 3 |
sl@0 | 295 |
# Since "else" is optional, the "elsex" below is treated as a command. |
sl@0 | 296 |
# But then there shouldn't be any additional argument words for the "if". |
sl@0 | 297 |
test if-3.2 {TclCompileIfCmd: keyword other than "else"} { |
sl@0 | 298 |
set a {} |
sl@0 | 299 |
catch {if 1<2 then {set a 1} elsex {set a 2}} msg |
sl@0 | 300 |
set msg |
sl@0 | 301 |
} {wrong # args: extra words after "else" clause in "if" command} |
sl@0 | 302 |
test if-3.3 {TclCompileIfCmd: missing body after "else"} { |
sl@0 | 303 |
set a {} |
sl@0 | 304 |
catch {if 2<1 {set a 1} else} msg |
sl@0 | 305 |
set msg |
sl@0 | 306 |
} {wrong # args: no script following "else" argument} |
sl@0 | 307 |
test if-3.4 {TclCompileIfCmd: error compiling body after "else"} { |
sl@0 | 308 |
set a {} |
sl@0 | 309 |
catch {if 2<1 {set a 1} else {set}} msg |
sl@0 | 310 |
set errorInfo |
sl@0 | 311 |
} {wrong # args: should be "set varName ?newValue?" |
sl@0 | 312 |
while compiling |
sl@0 | 313 |
"set" |
sl@0 | 314 |
("if" else script line 1) |
sl@0 | 315 |
while compiling |
sl@0 | 316 |
"if 2<1 {set a 1} else {set}"} |
sl@0 | 317 |
test if-3.5 {TclCompileIfCmd: extra arguments after "else" argument} { |
sl@0 | 318 |
set a {} |
sl@0 | 319 |
catch {if 2<1 {set a 1} else {set a 2} or something} msg |
sl@0 | 320 |
set msg |
sl@0 | 321 |
} {wrong # args: extra words after "else" clause in "if" command} |
sl@0 | 322 |
# The following test also checks whether contained loops and other |
sl@0 | 323 |
# commands are properly relocated because a short jump must be replaced |
sl@0 | 324 |
# by a "long distance" one. |
sl@0 | 325 |
test if-3.6 {TclCompileIfCmd: test jumpFalse instruction replacement after long "else" clause} { |
sl@0 | 326 |
catch {unset i} |
sl@0 | 327 |
set a {} |
sl@0 | 328 |
if 1>2 { |
sl@0 | 329 |
set a 1 |
sl@0 | 330 |
while {$a != "xxx"} { |
sl@0 | 331 |
break; |
sl@0 | 332 |
while {$i >= 0} { |
sl@0 | 333 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 334 |
set i $i |
sl@0 | 335 |
set i [lindex $s $i] |
sl@0 | 336 |
} |
sl@0 | 337 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 338 |
set i $i |
sl@0 | 339 |
set i [lindex $s $i] |
sl@0 | 340 |
} |
sl@0 | 341 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 342 |
set i $i |
sl@0 | 343 |
set i [lindex $s $i] |
sl@0 | 344 |
} |
sl@0 | 345 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 346 |
set i $i |
sl@0 | 347 |
set i [lindex $s $i] |
sl@0 | 348 |
} |
sl@0 | 349 |
set i [expr $i-1] |
sl@0 | 350 |
} |
sl@0 | 351 |
} |
sl@0 | 352 |
set a 2 |
sl@0 | 353 |
while {$a != "xxx"} { |
sl@0 | 354 |
break; |
sl@0 | 355 |
while {$i >= 0} { |
sl@0 | 356 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 357 |
set i $i |
sl@0 | 358 |
set i [lindex $s $i] |
sl@0 | 359 |
} |
sl@0 | 360 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 361 |
set i $i |
sl@0 | 362 |
set i [lindex $s $i] |
sl@0 | 363 |
} |
sl@0 | 364 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 365 |
set i $i |
sl@0 | 366 |
set i [lindex $s $i] |
sl@0 | 367 |
} |
sl@0 | 368 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 369 |
set i $i |
sl@0 | 370 |
set i [lindex $s $i] |
sl@0 | 371 |
} |
sl@0 | 372 |
set i [expr $i-1] |
sl@0 | 373 |
} |
sl@0 | 374 |
} |
sl@0 | 375 |
set a 3 |
sl@0 | 376 |
} elseif 1==2 then { #; this if arm should be taken |
sl@0 | 377 |
set a 4 |
sl@0 | 378 |
while {$a != "xxx"} { |
sl@0 | 379 |
break; |
sl@0 | 380 |
while {$i >= 0} { |
sl@0 | 381 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 382 |
set i $i |
sl@0 | 383 |
set i [lindex $s $i] |
sl@0 | 384 |
} |
sl@0 | 385 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 386 |
set i $i |
sl@0 | 387 |
set i [lindex $s $i] |
sl@0 | 388 |
} |
sl@0 | 389 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 390 |
set i $i |
sl@0 | 391 |
set i [lindex $s $i] |
sl@0 | 392 |
} |
sl@0 | 393 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 394 |
set i $i |
sl@0 | 395 |
set i [lindex $s $i] |
sl@0 | 396 |
} |
sl@0 | 397 |
set i [expr $i-1] |
sl@0 | 398 |
} |
sl@0 | 399 |
} |
sl@0 | 400 |
set a 5 |
sl@0 | 401 |
while {$a != "xxx"} { |
sl@0 | 402 |
break; |
sl@0 | 403 |
while {$i >= 0} { |
sl@0 | 404 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 405 |
set i $i |
sl@0 | 406 |
set i [lindex $s $i] |
sl@0 | 407 |
} |
sl@0 | 408 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 409 |
set i $i |
sl@0 | 410 |
set i [lindex $s $i] |
sl@0 | 411 |
} |
sl@0 | 412 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 413 |
set i $i |
sl@0 | 414 |
set i [lindex $s $i] |
sl@0 | 415 |
} |
sl@0 | 416 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 417 |
set i $i |
sl@0 | 418 |
set i [lindex $s $i] |
sl@0 | 419 |
} |
sl@0 | 420 |
set i [expr $i-1] |
sl@0 | 421 |
} |
sl@0 | 422 |
} |
sl@0 | 423 |
set a 6 |
sl@0 | 424 |
} else { |
sl@0 | 425 |
set a 7 |
sl@0 | 426 |
while {$a != "xxx"} { |
sl@0 | 427 |
break; |
sl@0 | 428 |
while {$i >= 0} { |
sl@0 | 429 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 430 |
set i $i |
sl@0 | 431 |
set i [lindex $s $i] |
sl@0 | 432 |
} |
sl@0 | 433 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 434 |
set i $i |
sl@0 | 435 |
set i [lindex $s $i] |
sl@0 | 436 |
} |
sl@0 | 437 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 438 |
set i $i |
sl@0 | 439 |
set i [lindex $s $i] |
sl@0 | 440 |
} |
sl@0 | 441 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 442 |
set i $i |
sl@0 | 443 |
set i [lindex $s $i] |
sl@0 | 444 |
} |
sl@0 | 445 |
set i [expr $i-1] |
sl@0 | 446 |
} |
sl@0 | 447 |
} |
sl@0 | 448 |
set a 8 |
sl@0 | 449 |
while {$a != "xxx"} { |
sl@0 | 450 |
break; |
sl@0 | 451 |
while {$i >= 0} { |
sl@0 | 452 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 453 |
set i $i |
sl@0 | 454 |
set i [lindex $s $i] |
sl@0 | 455 |
} |
sl@0 | 456 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 457 |
set i $i |
sl@0 | 458 |
set i [lindex $s $i] |
sl@0 | 459 |
} |
sl@0 | 460 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 461 |
set i $i |
sl@0 | 462 |
set i [lindex $s $i] |
sl@0 | 463 |
} |
sl@0 | 464 |
if {[string compare $a "bar"] < 0} { |
sl@0 | 465 |
set i $i |
sl@0 | 466 |
set i [lindex $s $i] |
sl@0 | 467 |
} |
sl@0 | 468 |
set i [expr $i-1] |
sl@0 | 469 |
} |
sl@0 | 470 |
} |
sl@0 | 471 |
set a 9 |
sl@0 | 472 |
} |
sl@0 | 473 |
set a |
sl@0 | 474 |
} 9 |
sl@0 | 475 |
|
sl@0 | 476 |
test if-4.1 {TclCompileIfCmd: "if" command result} { |
sl@0 | 477 |
set a {} |
sl@0 | 478 |
set a [if 3<4 {set i 27}] |
sl@0 | 479 |
set a |
sl@0 | 480 |
} 27 |
sl@0 | 481 |
test if-4.2 {TclCompileIfCmd: "if" command result} { |
sl@0 | 482 |
set a {} |
sl@0 | 483 |
set a [if 3>4 {set i 27}] |
sl@0 | 484 |
set a |
sl@0 | 485 |
} {} |
sl@0 | 486 |
test if-4.3 {TclCompileIfCmd: "if" command result} { |
sl@0 | 487 |
set a {} |
sl@0 | 488 |
set a [if 0 {set i 1} elseif 1 {set i 2}] |
sl@0 | 489 |
set a |
sl@0 | 490 |
} 2 |
sl@0 | 491 |
test if-4.4 {TclCompileIfCmd: "if" command result} { |
sl@0 | 492 |
set a {} |
sl@0 | 493 |
set a [if 0 {set i 1} elseif 0 {set i 2} elseif 2>5 {set i 3} else {set i 4}] |
sl@0 | 494 |
set a |
sl@0 | 495 |
} 4 |
sl@0 | 496 |
test if-4.5 {TclCompileIfCmd: return value} { |
sl@0 | 497 |
if 0 then {set a 22; concat abc} elseif 1 {concat def} {concat ghi} |
sl@0 | 498 |
} def |
sl@0 | 499 |
|
sl@0 | 500 |
# Check "if" and computed command names. |
sl@0 | 501 |
|
sl@0 | 502 |
catch {unset a} |
sl@0 | 503 |
test if-5.1 {if cmd with computed command names: missing if/elseif test} { |
sl@0 | 504 |
set z if |
sl@0 | 505 |
list [catch {$z} msg] $msg |
sl@0 | 506 |
} {1 {wrong # args: no expression after "if" argument}} |
sl@0 | 507 |
|
sl@0 | 508 |
test if-5.2 {if cmd with computed command names: error in if/elseif test} { |
sl@0 | 509 |
set z if |
sl@0 | 510 |
list [catch {$z {[error "error in condition"]} foo} msg] $msg |
sl@0 | 511 |
} {1 {error in condition}} |
sl@0 | 512 |
test if-5.3 {if cmd with computed command names: error in if/elseif test} { |
sl@0 | 513 |
set z if |
sl@0 | 514 |
list [catch {$z {1+}} msg] $msg $errorInfo |
sl@0 | 515 |
} {1 {syntax error in expression "1+": premature end of expression} {syntax error in expression "1+": premature end of expression |
sl@0 | 516 |
while executing |
sl@0 | 517 |
"$z {1+}"}} |
sl@0 | 518 |
test if-5.4 {if cmd with computed command names: if/elseif test in braces} { |
sl@0 | 519 |
set z if |
sl@0 | 520 |
set a {} |
sl@0 | 521 |
$z {1<2} {set a 1} |
sl@0 | 522 |
set a |
sl@0 | 523 |
} {1} |
sl@0 | 524 |
test if-5.5 {if cmd with computed command names: if/elseif test not in braces} { |
sl@0 | 525 |
set z if |
sl@0 | 526 |
set a {} |
sl@0 | 527 |
$z 1<2 {set a 1} |
sl@0 | 528 |
set a |
sl@0 | 529 |
} {1} |
sl@0 | 530 |
test if-5.6 {if cmd with computed command names: multiline test expr} { |
sl@0 | 531 |
set z if |
sl@0 | 532 |
set a {} |
sl@0 | 533 |
$z {($tcl_platform(platform) != "foobar1") && \ |
sl@0 | 534 |
($tcl_platform(platform) != "foobar2")} {set a 3} else {set a 4} |
sl@0 | 535 |
set a |
sl@0 | 536 |
} 3 |
sl@0 | 537 |
test if-5.7 {if cmd with computed command names: "then" after if/elseif test} { |
sl@0 | 538 |
set z if |
sl@0 | 539 |
set a {} |
sl@0 | 540 |
$z 4>3 then {set a 1} |
sl@0 | 541 |
set a |
sl@0 | 542 |
} {1} |
sl@0 | 543 |
test if-5.8 {if cmd with computed command names: keyword other than "then" after if/elseif test} { |
sl@0 | 544 |
set z if |
sl@0 | 545 |
set a {} |
sl@0 | 546 |
catch {$z 1<2 therefore {set a 1}} msg |
sl@0 | 547 |
set msg |
sl@0 | 548 |
} {invalid command name "therefore"} |
sl@0 | 549 |
test if-5.9 {if cmd with computed command names: missing "then" body} { |
sl@0 | 550 |
set z if |
sl@0 | 551 |
set a {} |
sl@0 | 552 |
catch {$z 1<2 then} msg |
sl@0 | 553 |
set msg |
sl@0 | 554 |
} {wrong # args: no script following "then" argument} |
sl@0 | 555 |
test if-5.10 {if cmd with computed command names: error in "then" body} { |
sl@0 | 556 |
set z if |
sl@0 | 557 |
set a {} |
sl@0 | 558 |
list [catch {$z {$a!="xxx"} then {set}} msg] $msg $errorInfo |
sl@0 | 559 |
} {1 {wrong # args: should be "set varName ?newValue?"} {wrong # args: should be "set varName ?newValue?" |
sl@0 | 560 |
while compiling |
sl@0 | 561 |
"set" |
sl@0 | 562 |
invoked from within |
sl@0 | 563 |
"$z {$a!="xxx"} then {set}"}} |
sl@0 | 564 |
test if-5.11 {if cmd with computed command names: error in "then" body} { |
sl@0 | 565 |
set z if |
sl@0 | 566 |
list [catch {$z 2 then {[error "error in then clause"]}} msg] $msg |
sl@0 | 567 |
} {1 {error in then clause}} |
sl@0 | 568 |
test if-5.12 {if cmd with computed command names: "then" body in quotes} { |
sl@0 | 569 |
set z if |
sl@0 | 570 |
set a {} |
sl@0 | 571 |
$z 27>17 "append a x" |
sl@0 | 572 |
set a |
sl@0 | 573 |
} {x} |
sl@0 | 574 |
test if-5.13 {if cmd with computed command names: computed "then" body} { |
sl@0 | 575 |
set z if |
sl@0 | 576 |
catch {unset x1} |
sl@0 | 577 |
catch {unset x2} |
sl@0 | 578 |
set a {} |
sl@0 | 579 |
set x1 {append a x1} |
sl@0 | 580 |
set x2 {; append a x2} |
sl@0 | 581 |
set a {} |
sl@0 | 582 |
$z 1 $x1$x2 |
sl@0 | 583 |
set a |
sl@0 | 584 |
} {x1x2} |
sl@0 | 585 |
test if-5.14 {if cmd with computed command names: taking proper branch} { |
sl@0 | 586 |
set z if |
sl@0 | 587 |
set a {} |
sl@0 | 588 |
$z 1<2 {set a 1} |
sl@0 | 589 |
set a |
sl@0 | 590 |
} 1 |
sl@0 | 591 |
test if-5.15 {if cmd with computed command names: taking proper branch} { |
sl@0 | 592 |
set z if |
sl@0 | 593 |
set a {} |
sl@0 | 594 |
$z 1>2 {set a 1} |
sl@0 | 595 |
set a |
sl@0 | 596 |
} {} |
sl@0 | 597 |
test if-5.16 {if cmd with computed command names: test jumpFalse instruction replacement after long "then" body} { |
sl@0 | 598 |
set z if |
sl@0 | 599 |
catch {unset i} |
sl@0 | 600 |
set a {} |
sl@0 | 601 |
$z 1<2 { |
sl@0 | 602 |
set a 1 |
sl@0 | 603 |
while {$a != "xxx"} { |
sl@0 | 604 |
break; |
sl@0 | 605 |
while {$i >= 0} { |
sl@0 | 606 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 607 |
set i $i |
sl@0 | 608 |
set i [lindex $s $i] |
sl@0 | 609 |
} |
sl@0 | 610 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 611 |
set i $i |
sl@0 | 612 |
set i [lindex $s $i] |
sl@0 | 613 |
} |
sl@0 | 614 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 615 |
set i $i |
sl@0 | 616 |
set i [lindex $s $i] |
sl@0 | 617 |
} |
sl@0 | 618 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 619 |
set i $i |
sl@0 | 620 |
set i [lindex $s $i] |
sl@0 | 621 |
} |
sl@0 | 622 |
set i [expr $i-1] |
sl@0 | 623 |
} |
sl@0 | 624 |
} |
sl@0 | 625 |
set a 2 |
sl@0 | 626 |
while {$a != "xxx"} { |
sl@0 | 627 |
break; |
sl@0 | 628 |
while {$i >= 0} { |
sl@0 | 629 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 630 |
set i $i |
sl@0 | 631 |
set i [lindex $s $i] |
sl@0 | 632 |
} |
sl@0 | 633 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 634 |
set i $i |
sl@0 | 635 |
set i [lindex $s $i] |
sl@0 | 636 |
} |
sl@0 | 637 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 638 |
set i $i |
sl@0 | 639 |
set i [lindex $s $i] |
sl@0 | 640 |
} |
sl@0 | 641 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 642 |
set i $i |
sl@0 | 643 |
set i [lindex $s $i] |
sl@0 | 644 |
} |
sl@0 | 645 |
set i [expr $i-1] |
sl@0 | 646 |
} |
sl@0 | 647 |
} |
sl@0 | 648 |
set a 3 |
sl@0 | 649 |
} |
sl@0 | 650 |
set a |
sl@0 | 651 |
} 3 |
sl@0 | 652 |
test if-5.17 {if cmd with computed command names: if/elseif test in quotes} { |
sl@0 | 653 |
set z if |
sl@0 | 654 |
set a {} |
sl@0 | 655 |
list [catch {$z {"0 < 3"} {set a 1}} msg] $msg |
sl@0 | 656 |
} {1 {expected boolean value but got "0 < 3"}} |
sl@0 | 657 |
|
sl@0 | 658 |
|
sl@0 | 659 |
test if-6.1 {if cmd with computed command names: "elseif" after if/elseif test} { |
sl@0 | 660 |
set z if |
sl@0 | 661 |
set a {} |
sl@0 | 662 |
$z 3>4 {set a 1} elseif 1 {set a 2} |
sl@0 | 663 |
set a |
sl@0 | 664 |
} {2} |
sl@0 | 665 |
# Since "else" is optional, the "elwood" below is treated as a command. |
sl@0 | 666 |
# But then there shouldn't be any additional argument words for the "if". |
sl@0 | 667 |
test if-6.2 {if cmd with computed command names: keyword other than "elseif"} { |
sl@0 | 668 |
set z if |
sl@0 | 669 |
set a {} |
sl@0 | 670 |
catch {$z 1<2 {set a 1} elwood {set a 2}} msg |
sl@0 | 671 |
set msg |
sl@0 | 672 |
} {wrong # args: extra words after "else" clause in "if" command} |
sl@0 | 673 |
test if-6.3 {if cmd with computed command names: missing expression after "elseif"} { |
sl@0 | 674 |
set z if |
sl@0 | 675 |
set a {} |
sl@0 | 676 |
catch {$z 1<2 {set a 1} elseif} msg |
sl@0 | 677 |
set msg |
sl@0 | 678 |
} {wrong # args: no expression after "elseif" argument} |
sl@0 | 679 |
test if-6.4 {if cmd with computed command names: error in expression after "elseif"} { |
sl@0 | 680 |
set z if |
sl@0 | 681 |
set a {} |
sl@0 | 682 |
list [catch {$z 3>4 {set a 1} elseif {1>}} msg] $msg $errorInfo |
sl@0 | 683 |
} {1 {syntax error in expression "1>": premature end of expression} {syntax error in expression "1>": premature end of expression |
sl@0 | 684 |
while executing |
sl@0 | 685 |
"$z 3>4 {set a 1} elseif {1>}"}} |
sl@0 | 686 |
test if-6.5 {if cmd with computed command names: test jumpFalse instruction replacement after long "elseif" body} { |
sl@0 | 687 |
set z if |
sl@0 | 688 |
catch {unset i} |
sl@0 | 689 |
set a {} |
sl@0 | 690 |
$z 1>2 { |
sl@0 | 691 |
set a 1 |
sl@0 | 692 |
while {$a != "xxx"} { |
sl@0 | 693 |
break; |
sl@0 | 694 |
while {$i >= 0} { |
sl@0 | 695 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 696 |
set i $i |
sl@0 | 697 |
set i [lindex $s $i] |
sl@0 | 698 |
} |
sl@0 | 699 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 700 |
set i $i |
sl@0 | 701 |
set i [lindex $s $i] |
sl@0 | 702 |
} |
sl@0 | 703 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 704 |
set i $i |
sl@0 | 705 |
set i [lindex $s $i] |
sl@0 | 706 |
} |
sl@0 | 707 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 708 |
set i $i |
sl@0 | 709 |
set i [lindex $s $i] |
sl@0 | 710 |
} |
sl@0 | 711 |
set i [expr $i-1] |
sl@0 | 712 |
} |
sl@0 | 713 |
} |
sl@0 | 714 |
set a 2 |
sl@0 | 715 |
while {$a != "xxx"} { |
sl@0 | 716 |
break; |
sl@0 | 717 |
while {$i >= 0} { |
sl@0 | 718 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 719 |
set i $i |
sl@0 | 720 |
set i [lindex $s $i] |
sl@0 | 721 |
} |
sl@0 | 722 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 723 |
set i $i |
sl@0 | 724 |
set i [lindex $s $i] |
sl@0 | 725 |
} |
sl@0 | 726 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 727 |
set i $i |
sl@0 | 728 |
set i [lindex $s $i] |
sl@0 | 729 |
} |
sl@0 | 730 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 731 |
set i $i |
sl@0 | 732 |
set i [lindex $s $i] |
sl@0 | 733 |
} |
sl@0 | 734 |
set i [expr $i-1] |
sl@0 | 735 |
} |
sl@0 | 736 |
} |
sl@0 | 737 |
set a 3 |
sl@0 | 738 |
} elseif 1<2 then { #; this if arm should be taken |
sl@0 | 739 |
set a 4 |
sl@0 | 740 |
while {$a != "xxx"} { |
sl@0 | 741 |
break; |
sl@0 | 742 |
while {$i >= 0} { |
sl@0 | 743 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 744 |
set i $i |
sl@0 | 745 |
set i [lindex $s $i] |
sl@0 | 746 |
} |
sl@0 | 747 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 748 |
set i $i |
sl@0 | 749 |
set i [lindex $s $i] |
sl@0 | 750 |
} |
sl@0 | 751 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 752 |
set i $i |
sl@0 | 753 |
set i [lindex $s $i] |
sl@0 | 754 |
} |
sl@0 | 755 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 756 |
set i $i |
sl@0 | 757 |
set i [lindex $s $i] |
sl@0 | 758 |
} |
sl@0 | 759 |
set i [expr $i-1] |
sl@0 | 760 |
} |
sl@0 | 761 |
} |
sl@0 | 762 |
set a 5 |
sl@0 | 763 |
while {$a != "xxx"} { |
sl@0 | 764 |
break; |
sl@0 | 765 |
while {$i >= 0} { |
sl@0 | 766 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 767 |
set i $i |
sl@0 | 768 |
set i [lindex $s $i] |
sl@0 | 769 |
} |
sl@0 | 770 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 771 |
set i $i |
sl@0 | 772 |
set i [lindex $s $i] |
sl@0 | 773 |
} |
sl@0 | 774 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 775 |
set i $i |
sl@0 | 776 |
set i [lindex $s $i] |
sl@0 | 777 |
} |
sl@0 | 778 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 779 |
set i $i |
sl@0 | 780 |
set i [lindex $s $i] |
sl@0 | 781 |
} |
sl@0 | 782 |
set i [expr $i-1] |
sl@0 | 783 |
} |
sl@0 | 784 |
} |
sl@0 | 785 |
set a 6 |
sl@0 | 786 |
} |
sl@0 | 787 |
set a |
sl@0 | 788 |
} 6 |
sl@0 | 789 |
|
sl@0 | 790 |
test if-7.1 {if cmd with computed command names: "else" clause} { |
sl@0 | 791 |
set z if |
sl@0 | 792 |
set a {} |
sl@0 | 793 |
$z 3>4 {set a 1} elseif {$a == "foo"} {set a 2} else {set a 3} |
sl@0 | 794 |
set a |
sl@0 | 795 |
} 3 |
sl@0 | 796 |
# Since "else" is optional, the "elsex" below is treated as a command. |
sl@0 | 797 |
# But then there shouldn't be any additional argument words for the "if". |
sl@0 | 798 |
test if-7.2 {if cmd with computed command names: keyword other than "else"} { |
sl@0 | 799 |
set z if |
sl@0 | 800 |
set a {} |
sl@0 | 801 |
catch {$z 1<2 then {set a 1} elsex {set a 2}} msg |
sl@0 | 802 |
set msg |
sl@0 | 803 |
} {wrong # args: extra words after "else" clause in "if" command} |
sl@0 | 804 |
test if-7.3 {if cmd with computed command names: missing body after "else"} { |
sl@0 | 805 |
set z if |
sl@0 | 806 |
set a {} |
sl@0 | 807 |
catch {$z 2<1 {set a 1} else} msg |
sl@0 | 808 |
set msg |
sl@0 | 809 |
} {wrong # args: no script following "else" argument} |
sl@0 | 810 |
test if-7.4 {if cmd with computed command names: error compiling body after "else"} { |
sl@0 | 811 |
set z if |
sl@0 | 812 |
set a {} |
sl@0 | 813 |
catch {$z 2<1 {set a 1} else {set}} msg |
sl@0 | 814 |
set errorInfo |
sl@0 | 815 |
} {wrong # args: should be "set varName ?newValue?" |
sl@0 | 816 |
while compiling |
sl@0 | 817 |
"set" |
sl@0 | 818 |
invoked from within |
sl@0 | 819 |
"$z 2<1 {set a 1} else {set}"} |
sl@0 | 820 |
test if-7.5 {if cmd with computed command names: extra arguments after "else" argument} { |
sl@0 | 821 |
set z if |
sl@0 | 822 |
set a {} |
sl@0 | 823 |
catch {$z 2<1 {set a 1} else {set a 2} or something} msg |
sl@0 | 824 |
set msg |
sl@0 | 825 |
} {wrong # args: extra words after "else" clause in "if" command} |
sl@0 | 826 |
# The following test also checks whether contained loops and other |
sl@0 | 827 |
# commands are properly relocated because a short jump must be replaced |
sl@0 | 828 |
# by a "long distance" one. |
sl@0 | 829 |
test if-7.6 {if cmd with computed command names: test jumpFalse instruction replacement after long "else" clause} { |
sl@0 | 830 |
set z if |
sl@0 | 831 |
catch {unset i} |
sl@0 | 832 |
set a {} |
sl@0 | 833 |
$z 1>2 { |
sl@0 | 834 |
set a 1 |
sl@0 | 835 |
while {$a != "xxx"} { |
sl@0 | 836 |
break; |
sl@0 | 837 |
while {$i >= 0} { |
sl@0 | 838 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 839 |
set i $i |
sl@0 | 840 |
set i [lindex $s $i] |
sl@0 | 841 |
} |
sl@0 | 842 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 843 |
set i $i |
sl@0 | 844 |
set i [lindex $s $i] |
sl@0 | 845 |
} |
sl@0 | 846 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 847 |
set i $i |
sl@0 | 848 |
set i [lindex $s $i] |
sl@0 | 849 |
} |
sl@0 | 850 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 851 |
set i $i |
sl@0 | 852 |
set i [lindex $s $i] |
sl@0 | 853 |
} |
sl@0 | 854 |
set i [expr $i-1] |
sl@0 | 855 |
} |
sl@0 | 856 |
} |
sl@0 | 857 |
set a 2 |
sl@0 | 858 |
while {$a != "xxx"} { |
sl@0 | 859 |
break; |
sl@0 | 860 |
while {$i >= 0} { |
sl@0 | 861 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 862 |
set i $i |
sl@0 | 863 |
set i [lindex $s $i] |
sl@0 | 864 |
} |
sl@0 | 865 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 866 |
set i $i |
sl@0 | 867 |
set i [lindex $s $i] |
sl@0 | 868 |
} |
sl@0 | 869 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 870 |
set i $i |
sl@0 | 871 |
set i [lindex $s $i] |
sl@0 | 872 |
} |
sl@0 | 873 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 874 |
set i $i |
sl@0 | 875 |
set i [lindex $s $i] |
sl@0 | 876 |
} |
sl@0 | 877 |
set i [expr $i-1] |
sl@0 | 878 |
} |
sl@0 | 879 |
} |
sl@0 | 880 |
set a 3 |
sl@0 | 881 |
} elseif 1==2 then { #; this if arm should be taken |
sl@0 | 882 |
set a 4 |
sl@0 | 883 |
while {$a != "xxx"} { |
sl@0 | 884 |
break; |
sl@0 | 885 |
while {$i >= 0} { |
sl@0 | 886 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 887 |
set i $i |
sl@0 | 888 |
set i [lindex $s $i] |
sl@0 | 889 |
} |
sl@0 | 890 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 891 |
set i $i |
sl@0 | 892 |
set i [lindex $s $i] |
sl@0 | 893 |
} |
sl@0 | 894 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 895 |
set i $i |
sl@0 | 896 |
set i [lindex $s $i] |
sl@0 | 897 |
} |
sl@0 | 898 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 899 |
set i $i |
sl@0 | 900 |
set i [lindex $s $i] |
sl@0 | 901 |
} |
sl@0 | 902 |
set i [expr $i-1] |
sl@0 | 903 |
} |
sl@0 | 904 |
} |
sl@0 | 905 |
set a 5 |
sl@0 | 906 |
while {$a != "xxx"} { |
sl@0 | 907 |
break; |
sl@0 | 908 |
while {$i >= 0} { |
sl@0 | 909 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 910 |
set i $i |
sl@0 | 911 |
set i [lindex $s $i] |
sl@0 | 912 |
} |
sl@0 | 913 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 914 |
set i $i |
sl@0 | 915 |
set i [lindex $s $i] |
sl@0 | 916 |
} |
sl@0 | 917 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 918 |
set i $i |
sl@0 | 919 |
set i [lindex $s $i] |
sl@0 | 920 |
} |
sl@0 | 921 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 922 |
set i $i |
sl@0 | 923 |
set i [lindex $s $i] |
sl@0 | 924 |
} |
sl@0 | 925 |
set i [expr $i-1] |
sl@0 | 926 |
} |
sl@0 | 927 |
} |
sl@0 | 928 |
set a 6 |
sl@0 | 929 |
} else { |
sl@0 | 930 |
set a 7 |
sl@0 | 931 |
while {$a != "xxx"} { |
sl@0 | 932 |
break; |
sl@0 | 933 |
while {$i >= 0} { |
sl@0 | 934 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 935 |
set i $i |
sl@0 | 936 |
set i [lindex $s $i] |
sl@0 | 937 |
} |
sl@0 | 938 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 939 |
set i $i |
sl@0 | 940 |
set i [lindex $s $i] |
sl@0 | 941 |
} |
sl@0 | 942 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 943 |
set i $i |
sl@0 | 944 |
set i [lindex $s $i] |
sl@0 | 945 |
} |
sl@0 | 946 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 947 |
set i $i |
sl@0 | 948 |
set i [lindex $s $i] |
sl@0 | 949 |
} |
sl@0 | 950 |
set i [expr $i-1] |
sl@0 | 951 |
} |
sl@0 | 952 |
} |
sl@0 | 953 |
set a 8 |
sl@0 | 954 |
while {$a != "xxx"} { |
sl@0 | 955 |
break; |
sl@0 | 956 |
while {$i >= 0} { |
sl@0 | 957 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 958 |
set i $i |
sl@0 | 959 |
set i [lindex $s $i] |
sl@0 | 960 |
} |
sl@0 | 961 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 962 |
set i $i |
sl@0 | 963 |
set i [lindex $s $i] |
sl@0 | 964 |
} |
sl@0 | 965 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 966 |
set i $i |
sl@0 | 967 |
set i [lindex $s $i] |
sl@0 | 968 |
} |
sl@0 | 969 |
$z {[string compare $a "bar"] < 0} { |
sl@0 | 970 |
set i $i |
sl@0 | 971 |
set i [lindex $s $i] |
sl@0 | 972 |
} |
sl@0 | 973 |
set i [expr $i-1] |
sl@0 | 974 |
} |
sl@0 | 975 |
} |
sl@0 | 976 |
set a 9 |
sl@0 | 977 |
} |
sl@0 | 978 |
set a |
sl@0 | 979 |
} 9 |
sl@0 | 980 |
|
sl@0 | 981 |
test if-8.1 {if cmd with computed command names: "if" command result} { |
sl@0 | 982 |
set z if |
sl@0 | 983 |
set a {} |
sl@0 | 984 |
set a [$z 3<4 {set i 27}] |
sl@0 | 985 |
set a |
sl@0 | 986 |
} 27 |
sl@0 | 987 |
test if-8.2 {if cmd with computed command names: "if" command result} { |
sl@0 | 988 |
set z if |
sl@0 | 989 |
set a {} |
sl@0 | 990 |
set a [$z 3>4 {set i 27}] |
sl@0 | 991 |
set a |
sl@0 | 992 |
} {} |
sl@0 | 993 |
test if-8.3 {if cmd with computed command names: "if" command result} { |
sl@0 | 994 |
set z if |
sl@0 | 995 |
set a {} |
sl@0 | 996 |
set a [$z 0 {set i 1} elseif 1 {set i 2}] |
sl@0 | 997 |
set a |
sl@0 | 998 |
} 2 |
sl@0 | 999 |
test if-8.4 {if cmd with computed command names: "if" command result} { |
sl@0 | 1000 |
set z if |
sl@0 | 1001 |
set a {} |
sl@0 | 1002 |
set a [$z 0 {set i 1} elseif 0 {set i 2} elseif 2>5 {set i 3} else {set i 4}] |
sl@0 | 1003 |
set a |
sl@0 | 1004 |
} 4 |
sl@0 | 1005 |
test if-8.5 {if cmd with computed command names: return value} { |
sl@0 | 1006 |
set z if |
sl@0 | 1007 |
$z 0 then {set a 22; concat abc} elseif 1 {concat def} {concat ghi} |
sl@0 | 1008 |
} def |
sl@0 | 1009 |
|
sl@0 | 1010 |
test if-9.1 {if cmd with namespace qualifiers} { |
sl@0 | 1011 |
::if {1} {set x 4} |
sl@0 | 1012 |
} 4 |
sl@0 | 1013 |
|
sl@0 | 1014 |
# Test for incorrect "double evaluation semantics" |
sl@0 | 1015 |
|
sl@0 | 1016 |
test if-10.1 {delayed substitution of then body} { |
sl@0 | 1017 |
set j 0 |
sl@0 | 1018 |
set if if |
sl@0 | 1019 |
# this is not compiled |
sl@0 | 1020 |
$if {[incr j] == 1} " |
sl@0 | 1021 |
set result $j |
sl@0 | 1022 |
" |
sl@0 | 1023 |
# this will be compiled |
sl@0 | 1024 |
proc p {} { |
sl@0 | 1025 |
set j 0 |
sl@0 | 1026 |
if {[incr j]} " |
sl@0 | 1027 |
set result $j |
sl@0 | 1028 |
" |
sl@0 | 1029 |
set result |
sl@0 | 1030 |
} |
sl@0 | 1031 |
append result [p] |
sl@0 | 1032 |
} {00} |
sl@0 | 1033 |
test if-10.2 {delayed substitution of elseif expression} { |
sl@0 | 1034 |
set j 0 |
sl@0 | 1035 |
set if if |
sl@0 | 1036 |
# this is not compiled |
sl@0 | 1037 |
$if {[incr j] == 0} { |
sl@0 | 1038 |
set result badthen |
sl@0 | 1039 |
} elseif "$j == 1" { |
sl@0 | 1040 |
set result badelseif |
sl@0 | 1041 |
} else { |
sl@0 | 1042 |
set result 0 |
sl@0 | 1043 |
} |
sl@0 | 1044 |
# this will be compiled |
sl@0 | 1045 |
proc p {} { |
sl@0 | 1046 |
set j 0 |
sl@0 | 1047 |
if {[incr j] == 0} { |
sl@0 | 1048 |
set result badthen |
sl@0 | 1049 |
} elseif "$j == 1" { |
sl@0 | 1050 |
set result badelseif |
sl@0 | 1051 |
} else { |
sl@0 | 1052 |
set result 0 |
sl@0 | 1053 |
} |
sl@0 | 1054 |
set result |
sl@0 | 1055 |
} |
sl@0 | 1056 |
append result [p] |
sl@0 | 1057 |
} {00} |
sl@0 | 1058 |
test if-10.3 {delayed substitution of elseif body} { |
sl@0 | 1059 |
set j 0 |
sl@0 | 1060 |
set if if |
sl@0 | 1061 |
# this is not compiled |
sl@0 | 1062 |
$if {[incr j] == 0} { |
sl@0 | 1063 |
set result badthen |
sl@0 | 1064 |
} elseif {1} " |
sl@0 | 1065 |
set result $j |
sl@0 | 1066 |
" |
sl@0 | 1067 |
# this will be compiled |
sl@0 | 1068 |
proc p {} { |
sl@0 | 1069 |
set j 0 |
sl@0 | 1070 |
if {[incr j] == 0} { |
sl@0 | 1071 |
set result badthen |
sl@0 | 1072 |
} elseif {1} " |
sl@0 | 1073 |
set result $j |
sl@0 | 1074 |
" |
sl@0 | 1075 |
} |
sl@0 | 1076 |
append result [p] |
sl@0 | 1077 |
} {00} |
sl@0 | 1078 |
test if-10.4 {delayed substitution of else body} { |
sl@0 | 1079 |
set j 0 |
sl@0 | 1080 |
if {[incr j] == 0} { |
sl@0 | 1081 |
set result badthen |
sl@0 | 1082 |
} else " |
sl@0 | 1083 |
set result $j |
sl@0 | 1084 |
" |
sl@0 | 1085 |
set result |
sl@0 | 1086 |
} {0} |
sl@0 | 1087 |
test if-10.5 {substituted control words} { |
sl@0 | 1088 |
set then then; proc then {} {return badthen} |
sl@0 | 1089 |
set else else; proc else {} {return badelse} |
sl@0 | 1090 |
set elseif elseif; proc elseif {} {return badelseif} |
sl@0 | 1091 |
list [catch {if 1 $then {if 0 {} $elseif 1 {if 0 {} $else {list ok}}}} a] $a |
sl@0 | 1092 |
} {0 ok} |
sl@0 | 1093 |
test if-10.6 {double invocation of variable traces} { |
sl@0 | 1094 |
set iftracecounter 0 |
sl@0 | 1095 |
proc iftraceproc {args} { |
sl@0 | 1096 |
upvar #0 iftracecounter counter |
sl@0 | 1097 |
set argc [llength $args] |
sl@0 | 1098 |
set extraargs [lrange $args 0 [expr {$argc - 4}]] |
sl@0 | 1099 |
set name [lindex $args [expr {$argc - 3}]] |
sl@0 | 1100 |
upvar 1 $name var |
sl@0 | 1101 |
if {[incr counter] % 2 == 1} { |
sl@0 | 1102 |
set var "$counter oops [concat $extraargs]" |
sl@0 | 1103 |
} else { |
sl@0 | 1104 |
set var "$counter + [concat $extraargs]" |
sl@0 | 1105 |
} |
sl@0 | 1106 |
} |
sl@0 | 1107 |
trace variable iftracevar r [list iftraceproc 10] |
sl@0 | 1108 |
list [catch {if "$iftracevar + 20" {}} a] $a \ |
sl@0 | 1109 |
[catch {if "$iftracevar + 20" {}} b] $b \ |
sl@0 | 1110 |
[unset iftracevar iftracecounter] |
sl@0 | 1111 |
} {1 {syntax error in expression "1 oops 10 + 20": extra tokens at end of expression} 0 {} {}} |
sl@0 | 1112 |
|
sl@0 | 1113 |
# cleanup |
sl@0 | 1114 |
::tcltest::cleanupTests |
sl@0 | 1115 |
return |