module Byebug::VarFunctions

def var_class_self

def var_class_self
  obj = bb_eval('self')
  var_list(obj.class.class_variables, get_binding)
end

def var_global

def var_global
  globals = global_variables.reject do |v|
    [:$IGNORECASE, :$=, :$KCODE, :$-K, :$binding].include?(v)
  end
  var_list(globals)
end

def var_instance(where)

def var_instance(where)
  obj = bb_eval(where)
  var_list(obj.instance_variables, obj.instance_eval { binding })
end

def var_list(ary, b = get_binding)

def var_list(ary, b = get_binding)
  ary.sort!
  ary.each do |v|
    begin
      s = bb_eval(v.to_s, b).inspect
    rescue
      begin
        s = bb_eval(v.to_s, b).to_s
      rescue
        s = '*Error in evaluation*'
      end
    end
    s = "#{v} = #{s}"
    s[Setting[:width] - 3..-1] = '...' if s.size > Setting[:width]
    puts s
  end
end

def var_local

def var_local
  _self = @state.context.frame_self(@state.frame_pos)
  locals = @state.context.frame_locals
  locals.keys.sort.each do |name|
    puts format('  %s => %p', name, locals[name])
  end
end