Bug #7656 » ruby-docs-201301_PP-Debug-ENV.patch
| hash.c | ||
|---|---|---|
|     return ary; | ||
| } | ||
| /* | ||
|  * call-seq: | ||
|  *   ENV.each_key { |name| } -> Hash | ||
|  *   ENV.each_key            -> Enumerator | ||
|  * | ||
|  * Yields each environment variable name. | ||
|  * | ||
|  * An Enumerator is returned if no block is given. | ||
|  */ | ||
| static VALUE | ||
| rb_env_size(VALUE ehash) | ||
| { | ||
| ... | ... | |
|     return LONG2FIX(cnt); | ||
| } | ||
| /* | ||
|  * Document-method: ENV.each_key | ||
|  * | ||
|  * call-seq: | ||
|  *   ENV.each_key { |name| } -> Hash | ||
|  *   ENV.each_key            -> Enumerator | ||
|  * | ||
|  * Yields each environment variable name. | ||
|  * | ||
|  * An Enumerator is returned if no block is given. | ||
|  */ | ||
| static VALUE | ||
| env_each_key(VALUE ehash) | ||
| { | ||
| lib/debug.rb | ||
|---|---|---|
|   @stdout = STDOUT | ||
|   class << DEBUGGER__ | ||
|     # Returns the IO used as stdout. Defaults to STDOUT | ||
|     def stdout | ||
|       @stdout | ||
|     end | ||
|     # Sets the IO used as stdout. Defaults to STDOUT | ||
|     def stdout=(s) | ||
|       @stdout = s | ||
|     end | ||
|     # Returns the display expression list | ||
|     # | ||
|     # See DEBUGGER__ for more useage | ||
|     def display | ||
|       @display | ||
|     end | ||
|     # Returns the list of break points to stop operation at | ||
|     # | ||
|     # See DEBUGGER__ for more useage | ||
|     def break_points | ||
|       @break_points | ||
|     end | ||
|     # Returns the list of waiting threads. | ||
|     # | ||
|     # When stepping through thre traces of a function, thread gets suspended, to be resumed later. | ||
|     def waiting | ||
|       @waiting | ||
|     end | ||
| lib/pp.rb | ||
|---|---|---|
|   end | ||
|   module PPMethods | ||
|     # Yields to a block | ||
|     # and preserves the previous set of objects being printed. | ||
|     def guard_inspect_key | ||
|       if Thread.current[:__recursive_key__] == nil | ||
|         Thread.current[:__recursive_key__] = {}.untrust | ||
| ... | ... | |
|       end | ||
|     end | ||
|     # Check whether the object_id +id+ is in the current buffer of objects | ||
|     # to be pretty printed. Used to break cycles in chains of objects to be | ||
|     # pretty printed. | ||
|     # As follows: | ||
|     # | ||
|     #   obj = Object.new | ||
|     #   => #<Object:0x843a384> | ||
|     #   check_inspect_key(obj.object_id) | ||
|     #   => false | ||
|     #   push_inspect_key(obj.object_id) | ||
|     #   => true | ||
|     #   check_inspect_key(obj.object_id) | ||
|     #   => true | ||
|     # | ||
|     def check_inspect_key(id) | ||
|       Thread.current[:__recursive_key__] && | ||
|       Thread.current[:__recursive_key__][:inspect] && | ||
|       Thread.current[:__recursive_key__][:inspect].include?(id) | ||
|     end | ||
|     # Adds the object_id +id+ to the set of objects being pretty printed, so | ||
|     # as to not repeat objects. | ||
|     def push_inspect_key(id) | ||
|       Thread.current[:__recursive_key__][:inspect][id] = true | ||
|     end | ||
|     # Removes an object from the set of objects being pretty printed. | ||
|     def pop_inspect_key(id) | ||
|       Thread.current[:__recursive_key__][:inspect].delete id | ||
|     end | ||
| ... | ... | |
|       group(1, '#<' + obj.class.name, '>', &block) | ||
|     end | ||
|     # A mask used in formating object_id's into a hexadecimal id | ||
|     PointerMask = (1 << ([""].pack("p").size * 8)) - 1 | ||
|     case Object.new.inspect | ||
|     when /\A\#<Object:0x([0-9a-f]+)>\z/ | ||
|       # String Formating for hexadecimal id | ||
|       PointerFormat = "%0#{$1.length}x" | ||
|     else | ||
|       PointerFormat = "%x" | ||
|     end | ||
|     def object_address_group(obj, &block) | ||
|     # A convenience method, like object_group, but also reformats the Object's | ||
|     # object_id. | ||
|     def object_address_group(obj, &block) # :yield: | ||
|       id = PointerFormat % (obj.object_id * 2 & PointerMask) | ||
|       group(1, "\#<#{obj.class}:0x#{id}", '>', &block) | ||
|     end | ||
| ... | ... | |
|       } | ||
|     end | ||
|     # A present standard failsafe for pretty printing any given Object | ||
|     def pp_object(obj) | ||
|       object_address_group(obj) { | ||
|         seplist(obj.pretty_print_instance_variables, lambda { text ',' }) {|v| | ||
| ... | ... | |
|       } | ||
|     end | ||
|     # A pretty print for a Hash | ||
|     def pp_hash(obj) | ||
|       group(1, '{', '}') { | ||
|         seplist(obj, nil, :each_pair) {|k, v| | ||
| ... | ... | |
| end | ||
| class Array | ||
|   # Used by PP to show Array specific pretty printing | ||
|   def pretty_print(q) | ||
|     q.group(1, '[', ']') { | ||
|       q.seplist(self) {|v| | ||
| ... | ... | |
|     } | ||
|   end | ||
|   # Used by PP to show a cycle, or repitition, of Arrays | ||
|   def pretty_print_cycle(q) | ||
|     q.text(empty? ? '[]' : '[...]') | ||
|   end | ||
| end | ||
| class Hash | ||
|   # Used by PP to show Hash specific pretty printing | ||
|   def pretty_print(q) | ||
|     q.pp_hash self | ||
|   end | ||
|   # Used by PP to show a cycle, or repitition, of Hashes | ||
|   def pretty_print_cycle(q) | ||
|     q.text(empty? ? '{}' : '{...}') | ||
|   end | ||
| end | ||
| class << ENV | ||
|   # Used by PP to show ENV specific pretty printing | ||
|   def pretty_print(q) | ||
|     h = {} | ||
|     ENV.keys.sort.each {|k| | ||
| ... | ... | |
| end | ||
| class Struct | ||
|   # Used by PP to show Struct specific pretty printing | ||
|   def pretty_print(q) | ||
|     q.group(1, sprintf("#<struct %s", PP.mcall(self, Kernel, :class).name), '>') { | ||
|       q.seplist(PP.mcall(self, Struct, :members), lambda { q.text "," }) {|member| | ||
| ... | ... | |
|     } | ||
|   end | ||
|   # Used by PP to show a cycle, or repitition, of Structs | ||
|   def pretty_print_cycle(q) | ||
|     q.text sprintf("#<struct %s:...>", PP.mcall(self, Kernel, :class).name) | ||
|   end | ||
| end | ||
| class Range | ||
|   # Used by PP to show Range specific pretty printing | ||
|   def pretty_print(q) | ||
|     q.pp self.begin | ||
|     q.breakable '' | ||
| ... | ... | |
| class File < IO | ||
|   class Stat | ||
|     # Used by PP to show File::Stat specific pretty printing | ||
|     def pretty_print(q) | ||
|       require 'etc.so' | ||
|       q.object_group(self) { | ||
| ... | ... | |
| end | ||
| class MatchData | ||
|   # Used by PP to show MatchData specific pretty printing | ||
|   def pretty_print(q) | ||
|     nc = [] | ||
|     self.regexp.named_captures.each {|name, indexes| | ||