Skip to content

Commit d2d992b

Browse files
committed
Use raw Lexer::Elem
Related to ruby/ruby#5093 Instead of building a bunch of objects then converting them into arrays, we can natively use the objects. Total allocated: 25407256 bytes (261284 objects) Total retained: 1937110 bytes (30266 objects) allocated memory by location ----------------------------------- 10045332 <internal:kernel>:90 5273752 Documents/projects/dead_end/lib/dead_end/code_frontier.rb:131 2267256 Documents/projects/dead_end/lib/dead_end.rb:65 986760 .rubies/ruby-3.0.2/lib/ruby/3.0.0/ripper/lexer.rb:189 938301 .rubies/ruby-3.0.2/lib/ruby/3.0.0/ripper/lexer.rb:132 734800 Documents/projects/dead_end/lib/dead_end/lex_all.rb:24 668000 .rubies/ruby-3.0.2/lib/ruby/3.0.0/ripper/lexer.rb:97 <== HERE 471980 Documents/projects/dead_end/lib/dead_end.rb:97 334040 .rubies/ruby-3.0.2/lib/ruby/3.0.0/ripper/lexer.rb:58 334040 .rubies/ruby-3.0.2/lib/ruby/3.0.0/ripper/lexer.rb:72 After Total allocated: 19648672 bytes (252933 objects) Total retained: 1944374 bytes (30266 objects) allocated memory by location ----------------------------------- 10045332 <internal:kernel>:90 5273752 Documents/projects/dead_end/lib/dead_end/code_frontier.rb:131 2267256 Documents/projects/dead_end/lib/dead_end.rb:65 986760 .rubies/ruby-3.0.2/lib/ruby/3.0.0/ripper/lexer.rb:189 938301 .rubies/ruby-3.0.2/lib/ruby/3.0.0/ripper/lexer.rb:132 734800 Documents/projects/dead_end/lib/dead_end/lex_all.rb:26 471980 Documents/projects/dead_end/lib/dead_end.rb:97 334040 .rubies/ruby-3.0.2/lib/ruby/3.0.0/ripper/lexer.rb:58 334040 .rubies/ruby-3.0.2/lib/ruby/3.0.0/ripper/lexer.rb:72 329051 Documents/projects/dead_end/lib/dead_end/code_line.rb:31 218144 Documents/projects/dead_end/lib/dead_end/code_line.rb:30
1 parent 6eddfaf commit d2d992b

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

lib/dead_end/lex_all.rb

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# frozen_string_literal: true
2+
13
module DeadEnd
24
# Ripper.lex is not guaranteed to lex the entire source document
35
#
@@ -9,19 +11,21 @@ class LexAll
911
include Enumerable
1012

1113
def initialize(source:, source_lines: nil)
12-
@lex = Ripper.lex(source)
13-
lineno = @lex.last.first.first + 1
14+
@lex = Ripper::Lexer.new(source, "-", 1).parse.sort_by(&:pos)
15+
lineno = @lex.last.pos.first + 1
1416
source_lines ||= source.lines
1517
last_lineno = source_lines.length
1618

1719
until lineno >= last_lineno
1820
lines = source_lines[lineno..-1]
1921

20-
@lex.concat(Ripper.lex(lines.join, "-", lineno + 1))
21-
lineno = @lex.last.first.first + 1
22+
@lex.concat(
23+
Ripper::Lexer.new(lines.join, "-", lineno + 1).parse.sort_by(&:pos)
24+
)
25+
lineno = @lex.last.pos.first + 1
2226
end
2327

24-
@lex.map! { |(line, _), type, token, state| LexValue.new(line, type, token, state) }
28+
@lex.map! { |elem| LexValue.new(elem.pos.first, elem.event, elem.tok, elem.state) }
2529
end
2630

2731
def to_a

lib/dead_end/lex_value.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# frozen_string_literal: true
2+
13
module DeadEnd
24
# Value object for accessing lex values
35
#

0 commit comments

Comments
 (0)