Skip to content

Commit

Permalink
Lazily instantiate TerminalParseFailure. Saves 25ms avg.
Browse files Browse the repository at this point in the history
Speedup:
  a = 0.0257397
  b = 0.0244671
  • Loading branch information
jgarber committed Aug 2, 2009
1 parent 4b0b91f commit 6d3f810
Showing 1 changed file with 15 additions and 11 deletions.
26 changes: 15 additions & 11 deletions lib/treetop/runtime/compiled_parser.rb
Expand Up @@ -3,7 +3,7 @@ module Runtime
class CompiledParser
include Treetop::Runtime

attr_reader :input, :index, :terminal_failures, :max_terminal_failure_index
attr_reader :input, :index, :max_terminal_failure_index
attr_writer :root
attr_accessor :consume_all_input
alias :consume_all_input? :consume_all_input
Expand All @@ -25,22 +25,26 @@ def failure_index
end

def failure_line
terminal_failures && input.line_of(failure_index)
@terminal_failures && input.line_of(failure_index)
end

def failure_column
terminal_failures && input.column_of(failure_index)
@terminal_failures && input.column_of(failure_index)
end

def failure_reason
return nil unless (tf = terminal_failures) && tf.size > 0
"Expected " +
(tf.size == 1 ?
tf[0].expected_string :
"one of #{tf.map{|f| f.expected_string}.uniq*', '}"
) +
" at line #{failure_line}, column #{failure_column} (byte #{failure_index+1})" +
" after #{input[index...failure_index]}"
"Expected " +
(tf.size == 1 ?
tf[0].expected_string :
"one of #{tf.map{|f| f.expected_string}.uniq*', '}"
) +
" at line #{failure_line}, column #{failure_column} (byte #{failure_index+1})" +
" after #{input[index...failure_index]}"
end

def terminal_failures
@terminal_failures.map! {|tf_ary| TerminalParseFailure.new(*tf_ary) }
end


Expand Down Expand Up @@ -97,7 +101,7 @@ def terminal_parse_failure(expected_string)
@max_terminal_failure_index = index
@terminal_failures = []
end
terminal_failures << TerminalParseFailure.new(index, expected_string)
@terminal_failures << [index, expected_string]
return nil
end
end
Expand Down

0 comments on commit 6d3f810

Please sign in to comment.