The order of iseq may differ from the order of tokens, typically while/until conditions are put after the body.
These orders can match by using line numbers as builtin-indexes, but
at the same time, it introduces the restriction that multiple cexpr!
and cstmt! cannot appear in the same line.
Another possible idea is to use RubyVM::AbstractSyntaxTree and node_id instead of ripper, with making BASERUBY 3.1 or later.
Use line numbers as builtin-index
The order of iseq may differ from the order of tokens, typically
while
/until
conditions are put after the body.These orders can match by using line numbers as builtin-indexes, but
at the same time, it introduces the restriction that multiple
cexpr!
and
cstmt!
cannot appear in the same line.Another possible idea is to use
RubyVM::AbstractSyntaxTree
andnode_id
instead of ripper, with making BASERUBY 3.1 or later.