From: "David A. Black" Date: 2005-11-22T22:11:47+09:00 Subject: Re: semenatics of if/unless/while statement modifiers Hi -- On Tue, 22 Nov 2005, Stefan Kaes wrote: > Yukihiro Matsumoto wrote: > >> Hi, >> >> In message "Re: semenatics of if/unless/while statement modifiers" >> on Tue, 22 Nov 2005 09:54:46 +0900, Stefan Kaes writes: >> >> |So this behaviour is caused by intermingling parsing with semantic >> |analysis. Much like forward procedure declarations were required for old >> |Pascal compilers. >> >> I believe it's a strict application of the "local variables should be >> assigned first" rule. Not a compromise for the compiler. >> > It is definitely a compiler issue. Just like the recent discussion of the > syntax for block parameters is only a compiler issue. > > In both forms, the v=expr gets evaluated first. So during evaluation, the > assignment v=expr is always seen first, which means to me, a local variable > gets created and assigned in the current binding. Any decent formal semantics > writer would like to treat both forms identically too, simply by stating > that "expr1 if expr2" is equivalent to "if expr2 then expr1" end. > > If the resolution of local variable assignment vs. function call were > implemented as a second pass on the abstract syntax tree or using some form > of back patching, there would be no difference between the 2 forms to begin > with. What would you want to happen here? def x puts "method x" end x if x = 1 # method x puts x # 1 David -- David A. Black dblack@wobblini.net