Project

General

Profile

Actions

Feature #14683

closed

IRB with Ripper

Added by aycabta (aycabta .) over 3 years ago. Updated over 2 years ago.

Status:
Closed
Priority:
Normal
Target version:
-
[ruby-core:<unknown>]

Description

I replaced lexical analyzer with Ripper. It's important for supporting new syntax.

I explain what I did.

Replace with Ripper

I talked with matz (Yukihiro Matsumoto) about it and I decided to use mirb of mruby as a reference.
https://github.com/mruby/mruby/blob/1905091634a6a2925c911484434448e568330626/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c#L118-L217

The mirb uses compile error messages and token information such as token type and lex_state for that whether or not inputted code continues(and PROMPT_N). I used RubyVM::InstructionSequence#compile and Ripper for the same action.

ref. IRB#each_top_level_statement, IRB#lex and IRB#check_code_block

Continue(PROMPT_N), literal type(PROMPT_S), nesting level(%NNi)

IRB needs statuses of code snippets. nobu (Nobuyoshi Nakada) implemented it as Ripper's features at irb-ripper branch on GitHub.
https://github.com/nobu/ruby/commits/feature/irb-ripper

I implemented by pure Ruby because I heard what nobu (Nobuyoshi Nakada) thinks pure Ruby implementation for it. I think that it's the best way for that Ripper keeps simple.

ref. IRB#process_continue, IRB#process_nesting_level, IRB#check_string_literal and IRB#process_literal_type

Erase --irb_debug option

Because this is just for pure Ruby lexical analyzer.


Files

irb.patch (51.8 KB) irb.patch aycabta (aycabta .), 04/12/2018 03:06 PM
Actions

Also available in: Atom PDF