From 06c6dcee25d983d5a5e0f8e576cd04978ed558e6 Mon Sep 17 00:00:00 2001 From: tenderlove Date: Tue, 29 Oct 2013 18:25:57 +0000 Subject: [PATCH] * ext/psych/lib/psych/visitors/yaml_tree.rb: make less garbage when testing if a string is binary. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43471 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ ext/psych/lib/psych/visitors/yaml_tree.rb | 18 +++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index ed3e15bc0c..d35ada9a27 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 30 03:25:10 2013 Aaron Patterson + + * ext/psych/lib/psych/visitors/yaml_tree.rb: make less garbage when + testing if a string is binary. + Wed Oct 30 03:08:24 2013 Aaron Patterson * ext/psych/lib/psych/visitors/yaml_tree.rb: string subclasses should diff --git a/ext/psych/lib/psych/visitors/yaml_tree.rb b/ext/psych/lib/psych/visitors/yaml_tree.rb index 65cbba0658..b469e2ddc3 100644 --- a/ext/psych/lib/psych/visitors/yaml_tree.rb +++ b/ext/psych/lib/psych/visitors/yaml_tree.rb @@ -264,13 +264,6 @@ module Psych @emitter.scalar o._dump, nil, '!ruby/object:BigDecimal', false, false, Nodes::Scalar::ANY end - def binary? string - (string.encoding == Encoding::ASCII_8BIT && !string.ascii_only?) || - string.index("\x00") || - string.count("\x00-\x7F", "^ -~\t\r\n").fdiv(string.length) > 0.3 - end - private :binary? - def visit_String o plain = true quote = true @@ -380,6 +373,17 @@ module Psych end private + # FIXME: Remove the index and count checks in Psych 3.0 + NULL = "\x00" + BINARY_RANGE = "\x00-\x7F" + WS_RANGE = "^ -~\t\r\n" + + def binary? string + (string.encoding == Encoding::ASCII_8BIT && !string.ascii_only?) || + string.index(NULL) || + string.count(BINARY_RANGE, WS_RANGE).fdiv(string.length) > 0.3 + end + def visit_array_subclass o tag = "!ruby/array:#{o.class}" if o.instance_variables.empty?