今日は主に rescue 節がないのに else 節を使っているのを SyntaxError にする変更などがありました。
kazu: r62898 2018-03-22 22:01:17 +0900
sample/timeout.rb で Integer#times のブロック内でインデックスを無駄にインクリメントしていたのを消しています。
nobu: r62899 2018-03-23 01:05:04 +0900
Exception#full_message のテストで Exception.to_tty? をみてハイライトやバックトレースの順序のテストを入れ替えるようにしています。なるほどテスト用か。
svn: r62900 2018-03-23 01:05:05 +0900
version.h の日付更新。
nobu: r62901 2018-03-23 09:40:08 +0900
begin ... rescue ... else ... end のように else 節を書くと例外発生しなかった時だけ else 節が実行されるという仕様がありますが、rescue がないのに else だけあるのは意味がないため、そのような記法を文法エラーにするという変更をしています。元々警告は出してたみたいですね。
Rubyでdo-rescue-endが出来る様になった余波か、do-else-endがSyntaxエラーにならなくなっており、問答無用でelseの中も実行されて、は??みたいになった。暗黙的にbeginが入ってるみたいなもんと考えると確かに。
— ジョーカー 1007 (@joker1007) 2018年3月15日
rescueの無いelseってSyntaxエラーにしてしまって良い様な気がするのだが。
— ジョーカー 1007 (@joker1007) 2018年3月15日
仕組みを考えるとバグとも言えないというか、begin-else-endって書いた時と同じwarningが出るので、理屈上はそうなんですが……。危ないですよねw
— ジョーカー 1007 (@joker1007) 2018年3月15日
nobu: r62902 2018-03-23 10:09:57 +0900
62901 の続き。 parse.y の bodystmt で opt_else という省略可能な else 節のルールを参照していたのを、直接 k_else トークンを参照して rescue がなかった時はエラーにするようにルール部を書き変えています。