зеркало из https://github.com/github/ruby.git
* lib/pp.rb (object_address_group): Use Kernel#to_s to obtain the class
name and object address. This fix a problem caused by %p in C generates variable length address. Reported by ko1 via IRC. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43387 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
5b91ab1f2e
Коммит
4292fd7798
|
@ -1,3 +1,11 @@
|
|||
Tue Oct 22 18:26:12 2013 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* lib/pp.rb (object_address_group): Use Kernel#to_s to obtain the class
|
||||
name and object address.
|
||||
This fix a problem caused by %p in C generates variable length
|
||||
address.
|
||||
Reported by ko1 via IRC.
|
||||
|
||||
Tue Oct 22 16:57:48 2013 Benoit Daloze <eregontp@gmail.com>
|
||||
|
||||
* file.c (File#expand_path): [DOC] improve documentation of File#expand_path.
|
||||
|
|
16
lib/pp.rb
16
lib/pp.rb
|
@ -197,22 +197,12 @@ class PP < PrettyPrint
|
|||
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
|
||||
|
||||
# A convenience method, like object_group, but also reformats the Object's
|
||||
# object_id.
|
||||
def object_address_group(obj, &block)
|
||||
id = PointerFormat % (obj.object_id * 2 & PointerMask)
|
||||
group(1, "\#<#{obj.class}:0x#{id}", '>', &block)
|
||||
str = Kernel.instance_method(:to_s).bind(obj).call
|
||||
str.chomp!('>')
|
||||
group(1, str, '>', &block)
|
||||
end
|
||||
|
||||
# A convenience method which is same as follows:
|
||||
|
|
Загрузка…
Ссылка в новой задаче