@@ -69,7 +69,7 @@ def self.parse(src, filename = "(ripper)", lineno = 1)
6969 # [[1, 13], :on_kw, "end", END ]]
7070 #
7171 def self . lex ( src , filename = "-" , lineno = 1 , raise_errors : false )
72- result = Prism . lex_compat ( src , filepath : filename , line : lineno , version : "current" )
72+ result = Prism . lex_compat ( coerce_source ( src ) , filepath : filename , line : lineno , version : "current" )
7373
7474 if result . failure? && raise_errors
7575 raise SyntaxError , result . errors . first . message
@@ -91,6 +91,21 @@ def self.tokenize(...)
9191 lex ( ...) . map { |token | token [ 2 ] }
9292 end
9393
94+ # Mirros the various lex_types that ripper supports
95+ def self . coerce_source ( source ) # :nodoc:
96+ if source . is_a? ( IO )
97+ source . read
98+ elsif source . respond_to? ( :gets )
99+ src = +""
100+ while line = source . gets
101+ src << line
102+ end
103+ src
104+ else
105+ source . to_str
106+ end
107+ end
108+
94109 # This contains a table of all of the parser events and their
95110 # corresponding arity.
96111 PARSER_EVENT_TABLE = {
@@ -480,17 +495,7 @@ def self.lex_state_name(state)
480495
481496 # Create a new Translation::Ripper object with the given source.
482497 def initialize ( source , filename = "(ripper)" , lineno = 1 )
483- if source . is_a? ( IO )
484- @source = source . read
485- elsif source . respond_to? ( :gets )
486- @source = +""
487- while line = source . gets
488- @source << line
489- end
490- else
491- @source = source . to_str
492- end
493-
498+ @source = Ripper . coerce_source ( source )
494499 @filename = filename
495500 @lineno = lineno
496501 @column = 0
0 commit comments