原因
**1
のケースだと 1
の部分がリテラルとして解釈されている。
そのため compile.c
でリテラルを処理している箇所でうまく処理がされず、SEGVが起きている模様(この辺の話はコミッタのmameさんからruby-jpで聞きました。誠にありがとうございます)
なので、以下のようにHashかどうかをチェックするようにすることでSEGVを回避しているみたい。
int empty_kw = nd_type(kw) == NODE_LIT && RB_TYPE_P(kw->nd_lit, T_HASH);
RB_TYPE_P
は第一引数に渡した値と第二引数に渡した値を比較して同じものかを判定している。
今回の場合でいくとHashかどうかをチェックしている感じ。
これによりHashではない値(今回の場合だと数値のリテラルとか)を渡した場合で例外が発生するようになった。