processor/command/info_subcmd/locals.rb in trepanning-0.1.3 vs processor/command/info_subcmd/locals.rb in trepanning-0.1.4
- old
+ new
@@ -1,88 +1,21 @@
# -*- coding: utf-8 -*-
-# Copyright (C) 2010, 2011 Rocky Bernstein <rockyb@rubyforge.net>
-require 'columnize'
+# Copyright (C) 2011 Rocky Bernstein <rockyb@rubyforge.net>
require_relative '../base/subcmd'
-require_relative '../../../app/frame'
class Trepan::Subcommand::InfoLocals < Trepan::Subcommand
unless defined?(HELP)
Trepanning::Subcommand.set_name_prefix(__FILE__, self)
- HELP = <<-EOH
-#{CMD}
-#{CMD} [names]
+ HELP = 'Same thing as "info locals"'
+ NEED_LOCALS = true
+ end
-Show local variables including parameters of the current stack frame.
-Normally for each which show both the name and value. If you just
-want a list of names add parameter 'names'.
-EOH
- SHORT_HELP = 'Show local variables of the current stack frame'
- MIN_ARGS = 0
- MAX_ARGS = 1
- MIN_ABBREV = 'lo'.size
- NEED_STACK = true
- end
-
- def get_local_names
- iseq = @proc.frame.iseq
- 0.upto(iseq.local_size-2).map do
- |i|
- iseq.local_name(i)
- end
- end
-
def run(args)
- if args.size == 3
- if 0 == 'names'.index(args[-1].downcase)
- if 'CFUNC' == @proc.frame.type
- errmsg('info local names not supported for C frames')
- else
- local_names = get_local_names()
- if local_names.empty?
- msg "No local variables defined."
- else
- section "Local variable names:"
- width = settings[:maxwidth]
- mess = Columnize::columnize(local_names,
- @proc.settings[:maxwidth], ' ',
- false, true, ' ' * 2).chomp
- msg mess
- end
- end
- else
- errmsg("unrecognized argument #{args[2]}")
- end
- elsif args.size == 2
- if 'CFUNC' == @proc.frame.type
- argc = @proc.frame.argc
- if argc > 0
- 1.upto(argc).each do |i|
- msg "#{i}: #{@proc.frame.sp(argc-i+3).inspect}"
- end
- else
- msg("No parameters in C call; showing other C locals is not supported.")
- end
- else
- local_names = get_local_names
- if local_names.empty?
- msg "No local variables defined."
- else
- section "Local variables:"
- get_local_names.each_with_index do |var_name, i|
- var_value = @proc.safe_rep(@proc.debug_eval_no_errmsg(var_name).inspect)
- msg("#{var_name} = #{var_value}")
- end
- end
- end
- else
- errmsg("Wrong number of arguments #{args.size}")
- end
+ @proc.commands['info'].run(%w(info variables locals))
end
end
if __FILE__ == $0
# Demo it.
require_relative '../../mock'
- cmd = MockDebugger::sub_setup(Trepan::Subcommand::InfoLocals, false)
- cmd.run(cmd.prefix)
- cmd.run(cmd.prefix + ['name'])
+ # ???
end