class Fir::Evaluater

Attributes

error[R]
output[R]

Public Class Methods

new(output, error) click to toggle source
# File lib/fir/evaluater.rb, line 13
def initialize(output, error)
  @output = output
  @error = error
end

Public Instance Methods

perform(state) click to toggle source
# File lib/fir/evaluater.rb, line 18
def perform(state)
  return unless state.executable?
  begin
    write_result(eval(state.lines.join("\n"), state.repl_binding, 'fir'))
  rescue Exception => e
    write_error(e)
  ensure
    output.syswrite(line_prompt)
  end
end

Private Instance Methods

backtrace(exception) click to toggle source
# File lib/fir/evaluater.rb, line 45
def backtrace(exception)
  exception
    .backtrace
    .take_while { |line| line !~ %r{/fir/\S+\.rb} }
    .join("\n    ")
end
exception_output(exception) click to toggle source
# File lib/fir/evaluater.rb, line 41
def exception_output(exception)
  "#{exception.class}: #{exception.message}\n    #{backtrace(exception)}"
end
write_error(result) click to toggle source
# File lib/fir/evaluater.rb, line 36
def write_error(result)
  error.syswrite(exception_output(result))
  output.syswrite(next_line(1))
end
write_result(result) click to toggle source
# File lib/fir/evaluater.rb, line 31
def write_result(result)
  output.syswrite(result.inspect)
  output.syswrite(next_line(1))
end