Sanjiv Gupta wrote:
Mikhail Glushenkov wrote:
Hi Sanjiv,
Hi Sanjiv,
[...]
[Sorry, the formatting was a bit off]
The following snippet gives the expected behaviour (not tested, but
you should get the idea):
BTW, your mail has got me thinking about the semantics of 'case',
which is currently somewhat ambiguous (since it depends on context).
Probably 'case' should be modified to always mean 'if ... else if ...
else if ... [...] else ...' and the 'if (...) ... if (...) ... if
(...) ... [...]' form should be called something like 'match'. That
would be backwards-incompatible, though.
What do you think?
Another way would be to include a "break" command, to take you after the default label.
- Sanjiv
Sow we can write:
case ( (switch_on "O0") [(append_cmd "-blah0"), (break)],
(switch_on "O1")[(append_cmd "-blah1"), (break)],
(switch_on "O2")[(append_cmd "-blah2"), (break)],
(default) (append_cmd "-blah2"))
This would require generation of an unique label after each case construct, and a goto uniquelabel; in each if ( ) {...}
The other way is:
if (first_test) {
....
stop_case = true;
}
if (!stop_case && second_test) {
...
stop_case = true;
}
if (!stop_case && third_test) {
...
} else {
// default case
...
}
stop_case = false;
Also, it would be nice to have some "general predicates" to do some cleaning up of the command line.
For example: if an user specifies all -O0, -O1, -O2 on the command line, one would be able to choose only the first or last, or give an error.
option_validator ("O0", "O1", "O2"), (choose_first)
OR
option_validator ("O0", "O1", "O2"), (choose_last)
OR
option_validator ("O0", "O1", "O2"), (error "Only one of -O0, -O1, or -O2 are allowed).