summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-02-02 22:05:15 +0000
committertenderlove <tenderlove@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2011-02-02 22:05:15 +0000
commitcc6b1b3c8d4f7d617c0870c05c501903fc7fd00b (patch)
treefa5fe5006e47bcb1b240f91b6bc61f91e2e308f8
parent3722e3a29aedcdd78ad07e3ed643a78b61ef345a (diff)
* ext/psych/lib/psych/visitors/to_ruby.rb: ARG_ENCODING_NONE regular
expressions can round trip. [ruby-core:34969] * test/psych/test_yaml.rb: test for ARG_ENCODING_NONE regex * ext/sych/lib/syck/rubytypes.rb: ARG_ENCODING_NONE regular expressions can round trip. * test/syck/test_yaml.rb: test for ARG_ENCODING_NONE regex git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@30763 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog12
-rw-r--r--ext/psych/lib/psych/visitors/to_ruby.rb5
-rw-r--r--ext/syck/lib/syck/rubytypes.rb3
-rw-r--r--test/psych/test_yaml.rb5
-rw-r--r--test/syck/test_yaml.rb5
5 files changed, 28 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 056bb2ea76..7dd1cfe9f1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Thu Feb 3 07:02:16 2011 Aaron Patterson <aaron@tenderlovemaking.com>
+
+ * ext/psych/lib/psych/visitors/to_ruby.rb: ARG_ENCODING_NONE regular
+ expressions can round trip. [ruby-core:34969]
+
+ * test/psych/test_yaml.rb: test for ARG_ENCODING_NONE regex
+
+ * ext/sych/lib/syck/rubytypes.rb: ARG_ENCODING_NONE regular
+ expressions can round trip.
+
+ * test/syck/test_yaml.rb: test for ARG_ENCODING_NONE regex
+
Wed Feb 2 17:09:22 2011 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
* io.c (rb_io_fdatasync): Use fsync(2) if if the underlying
diff --git a/ext/psych/lib/psych/visitors/to_ruby.rb b/ext/psych/lib/psych/visitors/to_ruby.rb
index 7f0ddff96c..a68c8e698e 100644
--- a/ext/psych/lib/psych/visitors/to_ruby.rb
+++ b/ext/psych/lib/psych/visitors/to_ruby.rb
@@ -60,7 +60,7 @@ module Psych
when "tag:yaml.org,2002:float", "!float"
Float(@ss.tokenize(o.value))
when "!ruby/regexp"
- o.value =~ /^\/(.*)\/([mix]*)$/
+ o.value =~ /^\/(.*)\/([mixn]*)$/
source = $1
options = 0
lang = nil
@@ -69,6 +69,9 @@ module Psych
when 'x' then options |= Regexp::EXTENDED
when 'i' then options |= Regexp::IGNORECASE
when 'm' then options |= Regexp::MULTILINE
+
+ # FIXME: there is no constant for ARG_ENCODING_NONE
+ when 'n' then options |= 32
else lang = option
end
end
diff --git a/ext/syck/lib/syck/rubytypes.rb b/ext/syck/lib/syck/rubytypes.rb
index f8bbfea022..883c8d5bfc 100644
--- a/ext/syck/lib/syck/rubytypes.rb
+++ b/ext/syck/lib/syck/rubytypes.rb
@@ -261,7 +261,7 @@ end
class Regexp
yaml_as "tag:ruby.yaml.org,2002:regexp"
def Regexp.yaml_new( klass, tag, val )
- if String === val and val =~ /^\/(.*)\/([mix]*)$/
+ if String === val and val =~ /^\/(.*)\/([mixn]*)$/
val = { 'regexp' => $1, 'mods' => $2 }
end
if Hash === val
@@ -271,6 +271,7 @@ class Regexp
mods |= Regexp::EXTENDED if val['mods'].include?( 'x' )
mods |= Regexp::IGNORECASE if val['mods'].include?( 'i' )
mods |= Regexp::MULTILINE if val['mods'].include?( 'm' )
+ mods |= 32 if val['mods'].include?( 'n' )
end
val.delete( 'mods' )
r = YAML::object_maker( klass, {} )
diff --git a/test/psych/test_yaml.rb b/test/psych/test_yaml.rb
index 45cd39d676..20bf26e5b4 100644
--- a/test/psych/test_yaml.rb
+++ b/test/psych/test_yaml.rb
@@ -13,6 +13,11 @@ class Psych_Unit_Tests < Psych::TestCase
def teardown
Psych.domain_types.clear
end
+
+ # [ruby-core:34969]
+ def test_regexp_with_n
+ assert_cycle(Regexp.new('',0,'n'))
+ end
#
# Tests modified from 00basic.t in Psych.pm
#
diff --git a/test/syck/test_yaml.rb b/test/syck/test_yaml.rb
index 3d9d7abe1d..b346de4bee 100644
--- a/test/syck/test_yaml.rb
+++ b/test/syck/test_yaml.rb
@@ -22,6 +22,11 @@ class YAML_Unit_Tests < Test::Unit::TestCase
YAML::ENGINE.yamler = @current_engine
end
+ # [ruby-core:34969]
+ def test_regexp_with_n
+ assert_cycle(Regexp.new('',0,'n'))
+ end
+
#
# Convert between YAML and the object to verify correct parsing and
# emitting