RFC: Support for future compilers in base

Ryan Schmidt ryandesign at macports.org
Mon Feb 18 21:41:58 PST 2013


On Feb 18, 2013, at 23:27, Lawrence Velázquez <larryv at macports.org> wrote:

> On Feb 18, 2013, at 8:02 PM, Lawrence Velázquez <larryv at macports.org> wrote:
> 
>> I don't think return is behaving like you (or I) expect.
> 
> The following is somewhat academic, but some might find it instructive. And it will almost certainly make Jeremy hate Tcl more than he already does.
> 
> The Tcl "return" command[1] takes the form
> 
>    return [option value]* [result]?
> 
> - If you use "return", the proc just returns an empty string.
> - If you use "return a", the proc returns "a". This is the common case.
> - If you use "return a b", the proc again returns an empty string. It also produces a dictionary containing the key/value pair "a : b"; this dictionary can be captured by a "catch" command.
> - If you use "return a b c", the proc returns "c" and produces the same dictionary as before.
> - If you use "return a b c d", the proc returns an empty string and produces the dictionary "a : b, c : d".
> - Ad nauseam. Some options, like "-code", are treated specially by Tcl.
> 
> Also note that Tcl does not evaluate expressions unless explicitly asked to. The "if", "while", and "for" commands evaluate their conditionals (but not their bodies); there may be other examples. Otherwise, you're on your own. (NB: Expression evaluation is distinct from variable and command substitution.)
> 
> Now we see what compiler_is_port actually does.
> 
>> proc portconfigure::compiler_is_port {compiler} {
>>    return [portconfigure::compiler_port_name ${compiler}] != ""
>> }
> 
> The compiler_port_name command is substituted, and its return value becomes a key in the results dictionary with the associated value "!=". The proc *always* returns the empty string. Similar issues would have come up with arch_flag_supported.
> 
> The boolean expressions must be explicitly evaluated with "expr"; I committed this in r103219.
> 
> Whoo, Tcl!

Whoo indeed. Thanks very much for the lesson! Now to see if I can remember it in 6 months...




More information about the macports-dev mailing list