💨
[Bug #21986] リテラルのあとに if が続く RubyVM::AST の位置が正しくないというバグ報告
[Bug #21986] RubyVM::AST incorrect location for literals followed by modifier if
- リテラルのあとに
ifが続くと RubyVM::AST の位置が正しくないというバグ報告 - 以下のように
1.0if trueみたいなコードだと1.0の開始位置がおかしくなっている
# これは正しい
pp RubyVM::AbstractSyntaxTree.parse("1.0 if true")
# => (SCOPE@1:0-1:11 tbl: [] args: nil body: (IF@1:0-1:11 (TRUE@1:7-1:11) (FLOAT@1:0-1:3 1.0) nil))
# これは NG
pp RubyVM::AbstractSyntaxTree.parse("1.0if true")
# => (SCOPE@1:0-1:10 tbl: [] args: nil body: (IF@1:0-1:10 (TRUE@1:6-1:10) (FLOAT@1:3-1:3 1.0) nil))
pp RubyVM::AbstractSyntaxTree.parse("1if true")
# => (SCOPE@1:0-1:8 tbl: [] args: nil body: (IF@1:0-1:8 (TRUE@1:4-1:8) (INTEGER@1:1-1:1 1) nil))
- そもそも
1.0if trueって Ruby で有効な構文なんですね、知らなかった - この不具合は開発版の Ruby 4.1-dev で修正済
pp RubyVM::AbstractSyntaxTree.parse("1.0if true")
# Ruby 4.0 => (SCOPE@1:0-1:10 tbl: [] args: nil body: (IF@1:0-1:10 (TRUE@1:6-1:10) (FLOAT@1:3-1:3 1.0) nil))
# Ruby 4.1 => (SCOPE@1:0-1:10 tbl: [] args: nil body: (IF@1:0-1:10 (TRUE@1:6-1:10) (FLOAT@1:0-1:3 1.0) nil))
Discussion