summaryrefslogtreecommitdiff
path: root/libre
diff options
context:
space:
mode:
authorbill-auger <mr.j.spam.me@gmail.com>2019-02-06 00:07:50 -0500
committerbill-auger <mr.j.spam.me@gmail.com>2019-02-06 06:22:56 -0500
commit157e73e23f92d2277bfac4a57415a57e2c7ff58a (patch)
treee0c42f8d9cc5cff9467d20e0d95c5d9781ecefb6 /libre
parentb2adb3333e0cbfff85351208d5df913200d1ab68 (diff)
downloadabslibre-157e73e23f92d2277bfac4a57415a57e2c7ff58a.tar.gz
abslibre-157e73e23f92d2277bfac4a57415a57e2c7ff58a.tar.bz2
abslibre-157e73e23f92d2277bfac4a57415a57e2c7ff58a.zip
[ruby2.3]: remove (no dependents)
Diffstat (limited to 'libre')
-rw-r--r--libre/ruby2.3/PKGBUILD121
-rw-r--r--libre/ruby2.3/json-1.8.3-libre.patch121
-rw-r--r--libre/ruby2.3/json-1.8.3-ruby-2.3.8-backports.patch3045
-rw-r--r--libre/ruby2.3/ruby-2.3.8-add-json_pure.patch22
-rw-r--r--libre/ruby2.3/ruby-2.3.8-remove-json-ext.patch80
5 files changed, 0 insertions, 3389 deletions
diff --git a/libre/ruby2.3/PKGBUILD b/libre/ruby2.3/PKGBUILD
deleted file mode 100644
index a8ff176eb..000000000
--- a/libre/ruby2.3/PKGBUILD
+++ /dev/null
@@ -1,121 +0,0 @@
-# Maintainer (Arch): Sven-Hendrik Haase <sh@lutzhaase.com>
-# Contributor (Arch): Sergey Shatunov <me@prok.pw>
-# Contributor (Arch): Jonne Haß <me@jhass.eu>
-# Contributor (Arch): Thomas Dziedzic <gostrc@gmail.com>
-# Contributor (Arch): Allan McRae <allan@archlinux.org>
-# Contributor (Arch): John Proctor <jproctor@prium.net>
-# Contributor (Arch): Jeramy Rutley <jrutley@gmail.com>
-
-# Maintainer: Luke Shumaker <lukeshu@parabola.nu>
-# Contributor: Omar Vega Ramos <ovruni@gnu.org.pe>
-
-# Rationale for inclusion in [libre]: Problematic license of
-# generator.c in bundled json extension.
-#
-# https://labs.parabola.nu/issues/674
-# https://bugs.ruby-lang.org/issues/11844
-# https://github.com/flori/json/issues/277
-
-_rubyver=2.3
-pkgname=ruby2.3
-pkgver=2.3.8
-_jsonver=1.8.3
-pkgdesc='An object-oriented language for quick and easy programming'
-pkgrel=1
-pkgrel+=.par1
-_srcrel=1 # increment this to rebuild the sourceball without bumping pkgver
-arch=(x86_64)
-arch+=(i686 armv7h)
-url='http://www.ruby-lang.org/en/'
-license=(BSD custom)
-depends=(gdbm openssl-1.0 libffi libyaml gmp zlib)
-optdepends=('tk: for Ruby/TK')
-makedepends=(gdbm openssl-1.0 libffi doxygen graphviz libyaml ttf-dejavu tk)
-options=(!emptydirs)
-source=(https://repo.parabola.nu/other/ruby-libre/ruby-${pkgver}-libre${_srcrel}.tar.gz)
-sha512sums=('05cc86a1a4c068a42105e53b0f040f72883df6c2a63d014ba402d0cc0f1189bb4ecfafce08441252722ba68c64533c5c09c24d1760a0f1aa708741d9e69d7cb6')
-
-mksource=(https://cache.ruby-lang.org/pub/ruby/${pkgver:0:3}/ruby-${pkgver}.tar.xz
- ruby-${pkgver}-remove-json-ext.patch
- ruby-${pkgver}-add-json_pure.patch
- json-${_jsonver}.tar.gz::https://github.com/flori/json/archive/v${_jsonver}.tar.gz
- json-${_jsonver}-ruby-${pkgver}-backports.patch
- json-${_jsonver}-libre.patch)
-mksha512sums=('06373050e6c1af9cb6a5863aef878b21c8a45fd0e68414e3d546cb73ec3028207d3acc0a9326428f172b9347a30bbe69a16f9dc0bdb739161d677adb2d888095'
- 'bd36519010a36d9368450de3bb6e46fd4b95682521877450f5875d0c0fc87119c52bd32cfdd7bcadf336d59e51665437a632d43d2f41934c808079ce6623a58c'
- 'fcfde775beb157db7a9788c897b06c11191a5f1c34e94a1644ce9c9b32675dab9001b66f1b26fdb6082eb9e85ba38423ccc9917716c788bb9cd8fa54e723c757'
- '147ce1834a1a0f02596386969c6e95c14237cc4d5303be974b9293d349d61a074cf9cc99d2f6bc434aa6da8aac9ddc35cfdeb7b9f77b14c112f8be70ff0846f7'
- '05078d112741d80289acfe7221d98c244dad6c905b536c16886001ca78fef93523af0ba4d49f19cc8ebf0ac6a0e10278f53c07f055d8ae658a6bc57fcdc1c5ad'
- 'aac35c74c16be38b4c7b2a5677189036bf90fbc00bcffdffe6a76ddaf6eb87d0ddb30ad239aefe4d7ff5c13ddd2b2fa18007e4d0a8f5e38b1153aed6e3d35c58')
-mksource() {
- # Start with the vanilla version of json
- cd "$srcdir/json-${_jsonver}"
- # Apply changes made to it for the ruby distribution
- patch -p1 -i ../json-${_jsonver}-ruby-${pkgver}-backports.patch
- chmod 644 tests/test_json_*
- # Modify it so that 'json' doesn't try to load (non-free!) 'json/ext'
- rm -rf -- json.gemspec ext lib/json/ext*
- patch -p1 -i ../json-${_jsonver}-libre.patch
-
- # Now modify the ruby sources to include the json_pure lib instead
- # of the json ext
- cd "$srcdir/ruby-${pkgver}"
- # remove the json ext
- rm -rv ext/json test/json
- patch -p1 -i ../ruby-${pkgver}-remove-json-ext.patch
- # and insert the json_pure lib
- cp -r ../json-${_jsonver}/lib/* -t lib/
- cp ../json-${_jsonver}/json_pure.gemspec -t lib/json/
- cp -rT ../json-${_jsonver}/tests test/json
- patch -p1 -i ../ruby-${pkgver}-add-json_pure.patch
-
- # Clean up the original json sources
- cd "$srcdir"
- rm -rf "json-${_jsonver}"
-}
-
-build() {
- cd ruby-${pkgver}
-
- CFLAGS+=' -O1' # GCC 7 produces a broken Ruby 2.3 with -O2
- CPPFLAGS+=' -U_FORTIFY_SOURCE' # _FORTIFY_SOURCE requires at least -O2
-
- export PKG_CONFIG_PATH=/usr/lib/openssl-1.0/pkgconfig
- PKG_CONFIG=/usr/bin/pkg-config ./configure \
- --prefix=/opt/ruby${_rubyver} \
- --program-suffix=-${_rubyver} \
- --sysconfdir=/etc \
- --localstatedir=/var \
- --sharedstatedir=/var/lib \
- --libexecdir=/usr/lib/ruby \
- --enable-shared \
- --disable-rpath \
- --with-dbm-type=gdbm_compat
-
- make ruby
-}
-
-check() {
- cd ruby-${pkgver}
-
- make test
-}
-
-package() {
- cd ruby-${pkgver}
-
- make DESTDIR="${pkgdir}" install-nodoc
-
- install -dm755 $pkgdir/usr/bin
- install -dm755 $pkgdir/usr/lib
-
- for i in erb irb rdoc ri ruby testrb rake gem; do
- ln -s /opt/$pkgname/bin/$i-${_rubyver} $pkgdir/usr/bin/$i-${_rubyver}
- ln -s /opt/$pkgname/bin/$i-${_rubyver} $pkgdir/opt/$pkgname/bin/$i
- done
-
- ln -s /opt/$pkgname/lib/libruby.so.${_rubyver} $pkgdir/usr/lib/libruby.so.${_rubyver}
-
- install -D -m644 COPYING "${pkgdir}/usr/share/licenses/$pkgname/LICENSE"
- install -D -m644 BSDL "${pkgdir}/usr/share/licenses/$pkgname/BSDL"
-}
diff --git a/libre/ruby2.3/json-1.8.3-libre.patch b/libre/ruby2.3/json-1.8.3-libre.patch
deleted file mode 100644
index 93ae03ee0..000000000
--- a/libre/ruby2.3/json-1.8.3-libre.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-diff --git a/lib/json.rb b/lib/json.rb
-index 61bb8fae0e..8132cd571c 100644
---- a/lib/json.rb
-+++ b/lib/json.rb
-@@ -55,9 +55,5 @@ require 'json/common'
- module JSON
- require 'json/version'
-
-- begin
-- require 'json/ext'
-- rescue LoadError
-- require 'json/pure'
-- end
-+ require 'json/pure'
- end
-diff --git a/tests/setup_variant.rb b/tests/setup_variant.rb
-index f7fb2a1d56..5e9e050a26 100644
---- a/tests/setup_variant.rb
-+++ b/tests/setup_variant.rb
-@@ -1,12 +1,3 @@
- # frozen_string_literal: false
--case ENV['JSON']
--when 'pure'
-- $:.unshift 'lib'
-- require 'json/pure'
--when 'ext'
-- $:.unshift 'ext', 'lib'
-- require 'json/ext'
--else
-- $:.unshift 'ext', 'lib'
-- require 'json'
--end
-+$:.unshift 'lib'
-+require 'json'
-diff --git a/tests/test_json.rb b/tests/test_json.rb
-index 8fe9459978..b81ee506af 100755
---- a/tests/test_json.rb
-+++ b/tests/test_json.rb
-@@ -537,15 +537,6 @@ EOT
- assert_equal orig, JSON[json5][0]
- end
-
-- if defined?(JSON::Ext::Parser)
-- def test_allocate
-- parser = JSON::Ext::Parser.new("{}")
-- assert_raise(TypeError, '[ruby-core:35079]') {parser.__send__(:initialize, "{}")}
-- parser = JSON::Ext::Parser.allocate
-- assert_raise(TypeError, '[ruby-core:35079]') {parser.source}
-- end
-- end
--
- def test_argument_encoding
- source = "{}".force_encoding("ascii-8bit")
- JSON::Parser.new(source)
-@@ -565,13 +556,13 @@ EOT
- if EnvUtil.gc_stress_to_class?
- def assert_no_memory_leak(code, *rest, **opt)
- code = "8.times {20_000.times {begin #{code}; rescue NoMemoryError; end}; GC.start}"
-- super(["-rjson/ext/parser"],
-- "GC.add_stress_to_class(JSON::Ext::Parser); "\
-+ super(["-rjson/pure/parser"],
-+ "GC.add_stress_to_class(JSON::Pure::Parser); "\
- "#{code}", code, *rest, rss: true, limit: 1.1, **opt)
- end
-
- def test_no_memory_leak_allocate
-- assert_no_memory_leak("JSON::Ext::Parser.allocate")
-+ assert_no_memory_leak("JSON::Pure::Parser.allocate")
- end
- end
- end
-diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb
-index 50895f6247..f85dd3a81c 100755
---- a/tests/test_json_generate.rb
-+++ b/tests/test_json_generate.rb
-@@ -283,28 +283,6 @@ EOT
- assert_equal '2', state.indent
- end
-
-- if defined?(JSON::Ext::Generator)
-- def test_broken_bignum # [ruby-core:38867]
-- pid = fork do
-- Bignum.class_eval do
-- def to_s
-- end
-- end
-- begin
-- JSON::Ext::Generator::State.new.generate(1<<64)
-- exit 1
-- rescue TypeError
-- exit 0
-- end
-- end
-- _, status = Process.waitpid2(pid)
-- assert status.success?
-- rescue NotImplementedError
-- # forking to avoid modifying core class of a parent process and
-- # introducing race conditions of tests are run in parallel
-- end
-- end
--
- def test_hash_likeness_set_symbol
- state = JSON.state.new
- assert_equal nil, state[:foo]
-@@ -349,13 +327,13 @@ EOT
- if EnvUtil.gc_stress_to_class?
- def assert_no_memory_leak(code, *rest, **opt)
- code = "8.times {20_000.times {begin #{code}; rescue NoMemoryError; end}; GC.start}"
-- super(["-rjson/ext/generator"],
-- "GC.add_stress_to_class(JSON::Ext::Generator::State); "\
-+ super(["-rjson/pure/generator"],
-+ "GC.add_stress_to_class(JSON::Pure::Generator::State); "\
- "#{code}", code, *rest, rss: true, limit: 1.1, **opt)
- end
-
- def test_no_memory_leak_allocate
-- assert_no_memory_leak("JSON::Ext::Generator::State.allocate")
-+ assert_no_memory_leak("JSON::Pure::Generator::State.allocate")
- end
- end
- end
diff --git a/libre/ruby2.3/json-1.8.3-ruby-2.3.8-backports.patch b/libre/ruby2.3/json-1.8.3-ruby-2.3.8-backports.patch
deleted file mode 100644
index 0696ca70b..000000000
--- a/libre/ruby2.3/json-1.8.3-ruby-2.3.8-backports.patch
+++ /dev/null
@@ -1,3045 +0,0 @@
-This is the complete set of patches applied to json-1.8.3 for the ruby
-2.3.4 distribution (excluding changes to integrate the two build
-systems together).
-
-Some of these might look a little funny (like trunk@50661) because the
-bulk of the patch made it upstream since it was originally applied,
-but part of it didn't (in the case of trunk@50661, the tests added to
-test for the fixed bug didn't make it in to 1.8.3).
-
- -- Luke Shumaker
- Parabola GNU/Linux-libre
-
-commit e62b06bb43baf7486b3b1793274cb7cc15eae135
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Tue Jan 6 05:32:41 2015 +0000
-
- generic_object.rb: useless methods
-
- * ext/json/lib/json/generic_object.rb (JSON::GenericObject):
- remove useless overriding methods, [] and []=.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49161 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit c0ee6f2af98a8322e842bb2847492bfc56cb21b9)
-
-diff --git a/lib/json/generic_object.rb b/lib/json/generic_object.rb
-index 8b8fd53bef..3a14f0ea7d 100644
---- a/lib/json/generic_object.rb
-+++ b/lib/json/generic_object.rb
-@@ -47,14 +47,6 @@ module JSON
- table
- end
-
-- def [](name)
-- table[name.to_sym]
-- end
--
-- def []=(name, value)
-- __send__ "#{name}=", value
-- end
--
- def |(other)
- self.class[other.to_hash.merge(to_hash)]
- end
-
-commit f1cd7efefbedd30bd78dc364873a9ea867e873f2
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Wed Feb 11 02:01:36 2015 +0000
-
- generator.c: fix infinite recursion
-
- * ext/json/generator/generator.c (generate_json): get rid of
- unnecessary recursive calls which can cause infinite recursion.
- T_STRING may not have rb_cString.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49562 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit e5c516c89a62839fd025ae112041ed9a5f06c9d0)
-
-diff --git a/ext/json/ext/generator/generator.c b/ext/json/ext/generator/generator.c
-index 6300c64f39..a135e28348 100644
---- a/ext/json/ext/generator/generator.c
-+++ b/ext/json/ext/generator/generator.c
-@@ -871,7 +871,7 @@ static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *s
- } else {
- tmp = rb_funcall(obj, i_to_s, 0);
- Check_Type(tmp, T_STRING);
-- generate_json(buffer, Vstate, state, tmp);
-+ generate_json_string(buffer, Vstate, state, tmp);
- }
- }
-
-diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb
-index 8db0b7890b..1834290944 100755
---- a/tests/test_json_generate.rb
-+++ b/tests/test_json_generate.rb
-@@ -334,4 +334,14 @@ EOT
- assert_equal true, JSON.generate(["\xea"])
- end
- end
-+
-+ def test_string_subclass
-+ s = Class.new(String) do
-+ def to_s; self; end
-+ undef to_json
-+ end
-+ assert_nothing_raised(SystemStackError) do
-+ assert_equal '[""]', JSON.generate([s.new])
-+ end
-+ end
- end
-
-commit 8033ba67b1ccae1fcb059c6f9be432fef21a86cc
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Sat Apr 18 06:18:37 2015 +0000
-
- parser.rl: use StringValue
-
- * ext/json/parser/parser.rl (cParser_initialize): use StringValue
- instead of direct rb_convert_type and remove duplicate
- conversion.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50339 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit 6583e5dbfacf0bb6052c8d9b5cfccb2ab0df4e81)
-
-diff --git a/ext/json/ext/parser/parser.c b/ext/json/ext/parser/parser.c
-index 9c9d76ac3f..5927114250 100644
---- a/ext/json/ext/parser/parser.c
-+++ b/ext/json/ext/parser/parser.c
-@@ -1716,12 +1716,11 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- json->object_class = Qnil;
- json->array_class = Qnil;
- }
-- source = rb_convert_type(source, T_STRING, "String", "to_str");
-+ StringValue(source);
- if (!json->quirks_mode) {
-- source = convert_encoding(StringValue(source));
-+ source = convert_encoding(source);
- }
- json->current_nesting = 0;
-- StringValue(source);
- json->len = RSTRING_LEN(source);
- json->source = RSTRING_PTR(source);;
- json->Vsource = source;
-@@ -1729,7 +1728,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- }
-
-
--#line 1733 "parser.c"
-+#line 1732 "parser.c"
- enum {JSON_start = 1};
- enum {JSON_first_final = 10};
- enum {JSON_error = 0};
-@@ -1737,7 +1736,7 @@ enum {JSON_error = 0};
- enum {JSON_en_main = 1};
-
-
--#line 740 "parser.rl"
-+#line 739 "parser.rl"
-
-
- static VALUE cParser_parse_strict(VALUE self)
-@@ -1748,16 +1747,16 @@ static VALUE cParser_parse_strict(VALUE self)
- GET_PARSER;
-
-
--#line 1752 "parser.c"
-+#line 1751 "parser.c"
- {
- cs = JSON_start;
- }
-
--#line 750 "parser.rl"
-+#line 749 "parser.rl"
- p = json->source;
- pe = p + json->len;
-
--#line 1761 "parser.c"
-+#line 1760 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1813,7 +1812,7 @@ case 5:
- goto st1;
- goto st5;
- tr3:
--#line 729 "parser.rl"
-+#line 728 "parser.rl"
- {
- char *np;
- json->current_nesting = 1;
-@@ -1822,7 +1821,7 @@ tr3:
- }
- goto st10;
- tr4:
--#line 722 "parser.rl"
-+#line 721 "parser.rl"
- {
- char *np;
- json->current_nesting = 1;
-@@ -1834,7 +1833,7 @@ st10:
- if ( ++p == pe )
- goto _test_eof10;
- case 10:
--#line 1838 "parser.c"
-+#line 1837 "parser.c"
- switch( (*p) ) {
- case 13: goto st10;
- case 32: goto st10;
-@@ -1891,7 +1890,7 @@ case 9:
- _out: {}
- }
-
--#line 753 "parser.rl"
-+#line 752 "parser.rl"
-
- if (cs >= JSON_first_final && p == pe) {
- return result;
-@@ -1903,7 +1902,7 @@ case 9:
-
-
-
--#line 1907 "parser.c"
-+#line 1906 "parser.c"
- enum {JSON_quirks_mode_start = 1};
- enum {JSON_quirks_mode_first_final = 10};
- enum {JSON_quirks_mode_error = 0};
-@@ -1911,7 +1910,7 @@ enum {JSON_quirks_mode_error = 0};
- enum {JSON_quirks_mode_en_main = 1};
-
-
--#line 778 "parser.rl"
-+#line 777 "parser.rl"
-
-
- static VALUE cParser_parse_quirks_mode(VALUE self)
-@@ -1922,16 +1921,16 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
- GET_PARSER;
-
-
--#line 1926 "parser.c"
-+#line 1925 "parser.c"
- {
- cs = JSON_quirks_mode_start;
- }
-
--#line 788 "parser.rl"
-+#line 787 "parser.rl"
- p = json->source;
- pe = p + json->len;
-
--#line 1935 "parser.c"
-+#line 1934 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1965,7 +1964,7 @@ st0:
- cs = 0;
- goto _out;
- tr2:
--#line 770 "parser.rl"
-+#line 769 "parser.rl"
- {
- char *np = JSON_parse_value(json, p, pe, &result);
- if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
-@@ -1975,7 +1974,7 @@ st10:
- if ( ++p == pe )
- goto _test_eof10;
- case 10:
--#line 1979 "parser.c"
-+#line 1978 "parser.c"
- switch( (*p) ) {
- case 13: goto st10;
- case 32: goto st10;
-@@ -2064,7 +2063,7 @@ case 9:
- _out: {}
- }
-
--#line 791 "parser.rl"
-+#line 790 "parser.rl"
-
- if (cs >= JSON_quirks_mode_first_final && p == pe) {
- return result;
-diff --git a/ext/json/ext/parser/parser.rl b/ext/json/ext/parser/parser.rl
-index 216ad26b20..de9c775001 100644
---- a/ext/json/ext/parser/parser.rl
-+++ b/ext/json/ext/parser/parser.rl
-@@ -700,12 +700,11 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- json->object_class = Qnil;
- json->array_class = Qnil;
- }
-- source = rb_convert_type(source, T_STRING, "String", "to_str");
-+ StringValue(source);
- if (!json->quirks_mode) {
-- source = convert_encoding(StringValue(source));
-+ source = convert_encoding(source);
- }
- json->current_nesting = 0;
-- StringValue(source);
- json->len = RSTRING_LEN(source);
- json->source = RSTRING_PTR(source);;
- json->Vsource = source;
-
-commit 2612a5b588d234535e9ed120d16b7afdd81756e4
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Sat Apr 18 06:18:50 2015 +0000
-
- parser.rl: use rb_encoding
-
- * ext/json/parser/parser.rl (convert_encoding): use rb_encoding
- functions to compare and convert encodings.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50340 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit f47dc0738a2e1b875ecdaa875298cfda70d1eaef)
-
-diff --git a/ext/json/ext/parser/parser.c b/ext/json/ext/parser/parser.c
-index 5927114250..d334731e2a 100644
---- a/ext/json/ext/parser/parser.c
-+++ b/ext/json/ext/parser/parser.c
-@@ -3,6 +3,13 @@
- #include "../fbuffer/fbuffer.h"
- #include "parser.h"
-
-+#ifdef HAVE_RB_ENC_RAISE
-+# define EXC_ENCODING rb_utf8_encoding(),
-+#else
-+# define rb_enc_raise rb_raise
-+# define EXC_ENCODING /* nothing */
-+#endif
-+
- /* unicode */
-
- static const char digit_values[256] = {
-@@ -68,9 +75,7 @@ static int convert_UTF32_to_UTF8(char *buf, UTF32 ch)
- }
-
- #ifdef HAVE_RUBY_ENCODING_H
--static VALUE CEncoding_ASCII_8BIT, CEncoding_UTF_8, CEncoding_UTF_16BE,
-- CEncoding_UTF_16LE, CEncoding_UTF_32BE, CEncoding_UTF_32LE;
--static ID i_encoding, i_encode;
-+static rb_encoding *UTF_16BE, *UTF_16LE, *UTF_32BE, *UTF_32LE;
- #else
- static ID i_iconv;
- #endif
-@@ -84,11 +89,11 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
- i_match_string, i_aset, i_aref, i_leftshift;
-
-
--#line 110 "parser.rl"
-+#line 115 "parser.rl"
-
-
-
--#line 92 "parser.c"
-+#line 97 "parser.c"
- enum {JSON_object_start = 1};
- enum {JSON_object_first_final = 27};
- enum {JSON_object_error = 0};
-@@ -96,7 +101,7 @@ enum {JSON_object_error = 0};
- enum {JSON_object_en_main = 1};
-
-
--#line 151 "parser.rl"
-+#line 156 "parser.rl"
-
-
- static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -112,14 +117,14 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
- *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
-
-
--#line 116 "parser.c"
-+#line 121 "parser.c"
- {
- cs = JSON_object_start;
- }
-
--#line 166 "parser.rl"
-+#line 171 "parser.rl"
-
--#line 123 "parser.c"
-+#line 128 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -147,7 +152,7 @@ case 2:
- goto st2;
- goto st0;
- tr2:
--#line 133 "parser.rl"
-+#line 138 "parser.rl"
- {
- char *np;
- json->parsing_name = 1;
-@@ -160,7 +165,7 @@ st3:
- if ( ++p == pe )
- goto _test_eof3;
- case 3:
--#line 164 "parser.c"
-+#line 169 "parser.c"
- switch( (*p) ) {
- case 13: goto st3;
- case 32: goto st3;
-@@ -227,7 +232,7 @@ case 8:
- goto st8;
- goto st0;
- tr11:
--#line 118 "parser.rl"
-+#line 123 "parser.rl"
- {
- VALUE v = Qnil;
- char *np = JSON_parse_value(json, p, pe, &v);
-@@ -247,7 +252,7 @@ st9:
- if ( ++p == pe )
- goto _test_eof9;
- case 9:
--#line 251 "parser.c"
-+#line 256 "parser.c"
- switch( (*p) ) {
- case 13: goto st9;
- case 32: goto st9;
-@@ -336,14 +341,14 @@ case 18:
- goto st9;
- goto st18;
- tr4:
--#line 141 "parser.rl"
-+#line 146 "parser.rl"
- { p--; {p++; cs = 27; goto _out;} }
- goto st27;
- st27:
- if ( ++p == pe )
- goto _test_eof27;
- case 27:
--#line 347 "parser.c"
-+#line 352 "parser.c"
- goto st0;
- st19:
- if ( ++p == pe )
-@@ -441,7 +446,7 @@ case 26:
- _out: {}
- }
-
--#line 167 "parser.rl"
-+#line 172 "parser.rl"
-
- if (cs >= JSON_object_first_final) {
- if (json->create_additions) {
-@@ -466,7 +471,7 @@ case 26:
-
-
-
--#line 470 "parser.c"
-+#line 475 "parser.c"
- enum {JSON_value_start = 1};
- enum {JSON_value_first_final = 21};
- enum {JSON_value_error = 0};
-@@ -474,7 +479,7 @@ enum {JSON_value_error = 0};
- enum {JSON_value_en_main = 1};
-
-
--#line 271 "parser.rl"
-+#line 276 "parser.rl"
-
-
- static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -482,14 +487,14 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
- int cs = EVIL;
-
-
--#line 486 "parser.c"
-+#line 491 "parser.c"
- {
- cs = JSON_value_start;
- }
-
--#line 278 "parser.rl"
-+#line 283 "parser.rl"
-
--#line 493 "parser.c"
-+#line 498 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -514,14 +519,14 @@ st0:
- cs = 0;
- goto _out;
- tr0:
--#line 219 "parser.rl"
-+#line 224 "parser.rl"
- {
- char *np = JSON_parse_string(json, p, pe, result);
- if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
- }
- goto st21;
- tr2:
--#line 224 "parser.rl"
-+#line 229 "parser.rl"
- {
- char *np;
- if(pe > p + 9 - json->quirks_mode && !strncmp(MinusInfinity, p, 9)) {
-@@ -530,7 +535,7 @@ tr2:
- {p = (( p + 10))-1;}
- p--; {p++; cs = 21; goto _out;}
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
- }
- }
- np = JSON_parse_float(json, p, pe, result);
-@@ -541,7 +546,7 @@ tr2:
- }
- goto st21;
- tr5:
--#line 242 "parser.rl"
-+#line 247 "parser.rl"
- {
- char *np;
- json->current_nesting++;
-@@ -551,7 +556,7 @@ tr5:
- }
- goto st21;
- tr9:
--#line 250 "parser.rl"
-+#line 255 "parser.rl"
- {
- char *np;
- json->current_nesting++;
-@@ -561,39 +566,39 @@ tr9:
- }
- goto st21;
- tr16:
--#line 212 "parser.rl"
-+#line 217 "parser.rl"
- {
- if (json->allow_nan) {
- *result = CInfinity;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
- }
- }
- goto st21;
- tr18:
--#line 205 "parser.rl"
-+#line 210 "parser.rl"
- {
- if (json->allow_nan) {
- *result = CNaN;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
- }
- }
- goto st21;
- tr22:
--#line 199 "parser.rl"
-+#line 204 "parser.rl"
- {
- *result = Qfalse;
- }
- goto st21;
- tr25:
--#line 196 "parser.rl"
-+#line 201 "parser.rl"
- {
- *result = Qnil;
- }
- goto st21;
- tr28:
--#line 202 "parser.rl"
-+#line 207 "parser.rl"
- {
- *result = Qtrue;
- }
-@@ -602,9 +607,9 @@ st21:
- if ( ++p == pe )
- goto _test_eof21;
- case 21:
--#line 258 "parser.rl"
-+#line 263 "parser.rl"
- { p--; {p++; cs = 21; goto _out;} }
--#line 608 "parser.c"
-+#line 613 "parser.c"
- goto st0;
- st2:
- if ( ++p == pe )
-@@ -765,7 +770,7 @@ case 20:
- _out: {}
- }
-
--#line 279 "parser.rl"
-+#line 284 "parser.rl"
-
- if (cs >= JSON_value_first_final) {
- return p;
-@@ -775,7 +780,7 @@ case 20:
- }
-
-
--#line 779 "parser.c"
-+#line 784 "parser.c"
- enum {JSON_integer_start = 1};
- enum {JSON_integer_first_final = 3};
- enum {JSON_integer_error = 0};
-@@ -783,7 +788,7 @@ enum {JSON_integer_error = 0};
- enum {JSON_integer_en_main = 1};
-
-
--#line 295 "parser.rl"
-+#line 300 "parser.rl"
-
-
- static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -791,15 +796,15 @@ static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *res
- int cs = EVIL;
-
-
--#line 795 "parser.c"
-+#line 800 "parser.c"
- {
- cs = JSON_integer_start;
- }
-
--#line 302 "parser.rl"
-+#line 307 "parser.rl"
- json->memo = p;
-
--#line 803 "parser.c"
-+#line 808 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -833,14 +838,14 @@ case 3:
- goto st0;
- goto tr4;
- tr4:
--#line 292 "parser.rl"
-+#line 297 "parser.rl"
- { p--; {p++; cs = 4; goto _out;} }
- goto st4;
- st4:
- if ( ++p == pe )
- goto _test_eof4;
- case 4:
--#line 844 "parser.c"
-+#line 849 "parser.c"
- goto st0;
- st5:
- if ( ++p == pe )
-@@ -859,7 +864,7 @@ case 5:
- _out: {}
- }
-
--#line 304 "parser.rl"
-+#line 309 "parser.rl"
-
- if (cs >= JSON_integer_first_final) {
- long len = p - json->memo;
-@@ -874,7 +879,7 @@ case 5:
- }
-
-
--#line 878 "parser.c"
-+#line 883 "parser.c"
- enum {JSON_float_start = 1};
- enum {JSON_float_first_final = 8};
- enum {JSON_float_error = 0};
-@@ -882,7 +887,7 @@ enum {JSON_float_error = 0};
- enum {JSON_float_en_main = 1};
-
-
--#line 329 "parser.rl"
-+#line 334 "parser.rl"
-
-
- static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -890,15 +895,15 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul
- int cs = EVIL;
-
-
--#line 894 "parser.c"
-+#line 899 "parser.c"
- {
- cs = JSON_float_start;
- }
-
--#line 336 "parser.rl"
-+#line 341 "parser.rl"
- json->memo = p;
-
--#line 902 "parser.c"
-+#line 907 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -956,14 +961,14 @@ case 8:
- goto st0;
- goto tr9;
- tr9:
--#line 323 "parser.rl"
-+#line 328 "parser.rl"
- { p--; {p++; cs = 9; goto _out;} }
- goto st9;
- st9:
- if ( ++p == pe )
- goto _test_eof9;
- case 9:
--#line 967 "parser.c"
-+#line 972 "parser.c"
- goto st0;
- st5:
- if ( ++p == pe )
-@@ -1024,7 +1029,7 @@ case 7:
- _out: {}
- }
-
--#line 338 "parser.rl"
-+#line 343 "parser.rl"
-
- if (cs >= JSON_float_first_final) {
- long len = p - json->memo;
-@@ -1040,7 +1045,7 @@ case 7:
-
-
-
--#line 1044 "parser.c"
-+#line 1049 "parser.c"
- enum {JSON_array_start = 1};
- enum {JSON_array_first_final = 17};
- enum {JSON_array_error = 0};
-@@ -1048,7 +1053,7 @@ enum {JSON_array_error = 0};
- enum {JSON_array_en_main = 1};
-
-
--#line 381 "parser.rl"
-+#line 386 "parser.rl"
-
-
- static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -1062,14 +1067,14 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul
- *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
-
-
--#line 1066 "parser.c"
-+#line 1071 "parser.c"
- {
- cs = JSON_array_start;
- }
-
--#line 394 "parser.rl"
-+#line 399 "parser.rl"
-
--#line 1073 "parser.c"
-+#line 1078 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1108,7 +1113,7 @@ case 2:
- goto st2;
- goto st0;
- tr2:
--#line 358 "parser.rl"
-+#line 363 "parser.rl"
- {
- VALUE v = Qnil;
- char *np = JSON_parse_value(json, p, pe, &v);
-@@ -1128,7 +1133,7 @@ st3:
- if ( ++p == pe )
- goto _test_eof3;
- case 3:
--#line 1132 "parser.c"
-+#line 1137 "parser.c"
- switch( (*p) ) {
- case 13: goto st3;
- case 32: goto st3;
-@@ -1228,14 +1233,14 @@ case 12:
- goto st3;
- goto st12;
- tr4:
--#line 373 "parser.rl"
-+#line 378 "parser.rl"
- { p--; {p++; cs = 17; goto _out;} }
- goto st17;
- st17:
- if ( ++p == pe )
- goto _test_eof17;
- case 17:
--#line 1239 "parser.c"
-+#line 1244 "parser.c"
- goto st0;
- st13:
- if ( ++p == pe )
-@@ -1291,12 +1296,12 @@ case 16:
- _out: {}
- }
-
--#line 395 "parser.rl"
-+#line 400 "parser.rl"
-
- if(cs >= JSON_array_first_final) {
- return p + 1;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
- return NULL;
- }
- }
-@@ -1372,7 +1377,7 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
- }
-
-
--#line 1376 "parser.c"
-+#line 1381 "parser.c"
- enum {JSON_string_start = 1};
- enum {JSON_string_first_final = 8};
- enum {JSON_string_error = 0};
-@@ -1380,7 +1385,7 @@ enum {JSON_string_error = 0};
- enum {JSON_string_en_main = 1};
-
-
--#line 494 "parser.rl"
-+#line 499 "parser.rl"
-
-
- static int
-@@ -1402,15 +1407,15 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
-
- *result = rb_str_buf_new(0);
-
--#line 1406 "parser.c"
-+#line 1411 "parser.c"
- {
- cs = JSON_string_start;
- }
-
--#line 515 "parser.rl"
-+#line 520 "parser.rl"
- json->memo = p;
-
--#line 1414 "parser.c"
-+#line 1419 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1435,7 +1440,7 @@ case 2:
- goto st0;
- goto st2;
- tr2:
--#line 480 "parser.rl"
-+#line 485 "parser.rl"
- {
- *result = json_string_unescape(*result, json->memo + 1, p);
- if (NIL_P(*result)) {
-@@ -1446,14 +1451,14 @@ tr2:
- {p = (( p + 1))-1;}
- }
- }
--#line 491 "parser.rl"
-+#line 496 "parser.rl"
- { p--; {p++; cs = 8; goto _out;} }
- goto st8;
- st8:
- if ( ++p == pe )
- goto _test_eof8;
- case 8:
--#line 1457 "parser.c"
-+#line 1462 "parser.c"
- goto st0;
- st3:
- if ( ++p == pe )
-@@ -1529,7 +1534,7 @@ case 7:
- _out: {}
- }
-
--#line 517 "parser.rl"
-+#line 522 "parser.rl"
-
- if (json->create_additions && RTEST(match_string = json->match_string)) {
- VALUE klass;
-@@ -1573,22 +1578,22 @@ static VALUE convert_encoding(VALUE source)
- }
- #ifdef HAVE_RUBY_ENCODING_H
- {
-- VALUE encoding = rb_funcall(source, i_encoding, 0);
-- if (encoding == CEncoding_ASCII_8BIT) {
-+ rb_encoding *enc = rb_enc_get(source);
-+ if (enc == rb_ascii8bit_encoding()) {
- if (len >= 4 && ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
-- source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_32BE);
-+ source = rb_str_conv_enc(source, UTF_32BE, rb_utf8_encoding());
- } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
-- source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_16BE);
-+ source = rb_str_conv_enc(source, UTF_16BE, rb_utf8_encoding());
- } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
-- source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_32LE);
-+ source = rb_str_conv_enc(source, UTF_32LE, rb_utf8_encoding());
- } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
-- source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_16LE);
-+ source = rb_str_conv_enc(source, UTF_16LE, rb_utf8_encoding());
- } else {
- source = rb_str_dup(source);
- FORCE_UTF8(source);
- }
- } else {
-- source = rb_funcall(source, i_encode, 1, CEncoding_UTF_8);
-+ source = rb_str_conv_enc(source, NULL, rb_utf8_encoding());
- }
- }
- #else
-@@ -1728,7 +1733,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- }
-
-
--#line 1732 "parser.c"
-+#line 1737 "parser.c"
- enum {JSON_start = 1};
- enum {JSON_first_final = 10};
- enum {JSON_error = 0};
-@@ -1736,7 +1741,7 @@ enum {JSON_error = 0};
- enum {JSON_en_main = 1};
-
-
--#line 739 "parser.rl"
-+#line 744 "parser.rl"
-
-
- static VALUE cParser_parse_strict(VALUE self)
-@@ -1747,16 +1752,16 @@ static VALUE cParser_parse_strict(VALUE self)
- GET_PARSER;
-
-
--#line 1751 "parser.c"
-+#line 1756 "parser.c"
- {
- cs = JSON_start;
- }
-
--#line 749 "parser.rl"
-+#line 754 "parser.rl"
- p = json->source;
- pe = p + json->len;
-
--#line 1760 "parser.c"
-+#line 1765 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1812,7 +1817,7 @@ case 5:
- goto st1;
- goto st5;
- tr3:
--#line 728 "parser.rl"
-+#line 733 "parser.rl"
- {
- char *np;
- json->current_nesting = 1;
-@@ -1821,7 +1826,7 @@ tr3:
- }
- goto st10;
- tr4:
--#line 721 "parser.rl"
-+#line 726 "parser.rl"
- {
- char *np;
- json->current_nesting = 1;
-@@ -1833,7 +1838,7 @@ st10:
- if ( ++p == pe )
- goto _test_eof10;
- case 10:
--#line 1837 "parser.c"
-+#line 1842 "parser.c"
- switch( (*p) ) {
- case 13: goto st10;
- case 32: goto st10;
-@@ -1890,19 +1895,19 @@ case 9:
- _out: {}
- }
-
--#line 752 "parser.rl"
-+#line 757 "parser.rl"
-
- if (cs >= JSON_first_final && p == pe) {
- return result;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
- return Qnil;
- }
- }
-
-
-
--#line 1906 "parser.c"
-+#line 1911 "parser.c"
- enum {JSON_quirks_mode_start = 1};
- enum {JSON_quirks_mode_first_final = 10};
- enum {JSON_quirks_mode_error = 0};
-@@ -1910,7 +1915,7 @@ enum {JSON_quirks_mode_error = 0};
- enum {JSON_quirks_mode_en_main = 1};
-
-
--#line 777 "parser.rl"
-+#line 782 "parser.rl"
-
-
- static VALUE cParser_parse_quirks_mode(VALUE self)
-@@ -1921,16 +1926,16 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
- GET_PARSER;
-
-
--#line 1925 "parser.c"
-+#line 1930 "parser.c"
- {
- cs = JSON_quirks_mode_start;
- }
-
--#line 787 "parser.rl"
-+#line 792 "parser.rl"
- p = json->source;
- pe = p + json->len;
-
--#line 1934 "parser.c"
-+#line 1939 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1964,7 +1969,7 @@ st0:
- cs = 0;
- goto _out;
- tr2:
--#line 769 "parser.rl"
-+#line 774 "parser.rl"
- {
- char *np = JSON_parse_value(json, p, pe, &result);
- if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
-@@ -1974,7 +1979,7 @@ st10:
- if ( ++p == pe )
- goto _test_eof10;
- case 10:
--#line 1978 "parser.c"
-+#line 1983 "parser.c"
- switch( (*p) ) {
- case 13: goto st10;
- case 32: goto st10;
-@@ -2063,12 +2068,12 @@ case 9:
- _out: {}
- }
-
--#line 790 "parser.rl"
-+#line 795 "parser.rl"
-
- if (cs >= JSON_quirks_mode_first_final && p == pe) {
- return result;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
- return Qnil;
- }
- }
-@@ -2193,14 +2198,10 @@ void Init_parser(void)
- i_aref = rb_intern("[]");
- i_leftshift = rb_intern("<<");
- #ifdef HAVE_RUBY_ENCODING_H
-- CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8"));
-- CEncoding_UTF_16BE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-16be"));
-- CEncoding_UTF_16LE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-16le"));
-- CEncoding_UTF_32BE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-32be"));
-- CEncoding_UTF_32LE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-32le"));
-- CEncoding_ASCII_8BIT = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("ascii-8bit"));
-- i_encoding = rb_intern("encoding");
-- i_encode = rb_intern("encode");
-+ UTF_16BE = rb_enc_find("utf-16be");
-+ UTF_16LE = rb_enc_find("utf-16le");
-+ UTF_32BE = rb_enc_find("utf-32be");
-+ UTF_32LE = rb_enc_find("utf-32le");
- #else
- i_iconv = rb_intern("iconv");
- #endif
-diff --git a/ext/json/ext/parser/parser.rl b/ext/json/ext/parser/parser.rl
-index de9c775001..fd57a275bf 100644
---- a/ext/json/ext/parser/parser.rl
-+++ b/ext/json/ext/parser/parser.rl
-@@ -66,9 +66,7 @@ static int convert_UTF32_to_UTF8(char *buf, UTF32 ch)
- }
-
- #ifdef HAVE_RUBY_ENCODING_H
--static VALUE CEncoding_ASCII_8BIT, CEncoding_UTF_8, CEncoding_UTF_16BE,
-- CEncoding_UTF_16LE, CEncoding_UTF_32BE, CEncoding_UTF_32LE;
--static ID i_encoding, i_encode;
-+static rb_encoding *UTF_16BE, *UTF_16LE, *UTF_32BE, *UTF_32LE;
- #else
- static ID i_iconv;
- #endif
-@@ -557,22 +555,22 @@ static VALUE convert_encoding(VALUE source)
- }
- #ifdef HAVE_RUBY_ENCODING_H
- {
-- VALUE encoding = rb_funcall(source, i_encoding, 0);
-- if (encoding == CEncoding_ASCII_8BIT) {
-+ rb_encoding *enc = rb_enc_get(source);
-+ if (enc == rb_ascii8bit_encoding()) {
- if (len >= 4 && ptr[0] == 0 && ptr[1] == 0 && ptr[2] == 0) {
-- source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_32BE);
-+ source = rb_str_conv_enc(source, UTF_32BE, rb_utf8_encoding());
- } else if (len >= 4 && ptr[0] == 0 && ptr[2] == 0) {
-- source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_16BE);
-+ source = rb_str_conv_enc(source, UTF_16BE, rb_utf8_encoding());
- } else if (len >= 4 && ptr[1] == 0 && ptr[2] == 0 && ptr[3] == 0) {
-- source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_32LE);
-+ source = rb_str_conv_enc(source, UTF_32LE, rb_utf8_encoding());
- } else if (len >= 4 && ptr[1] == 0 && ptr[3] == 0) {
-- source = rb_funcall(source, i_encode, 2, CEncoding_UTF_8, CEncoding_UTF_16LE);
-+ source = rb_str_conv_enc(source, UTF_16LE, rb_utf8_encoding());
- } else {
- source = rb_str_dup(source);
- FORCE_UTF8(source);
- }
- } else {
-- source = rb_funcall(source, i_encode, 1, CEncoding_UTF_8);
-+ source = rb_str_conv_enc(source, NULL, rb_utf8_encoding());
- }
- }
- #else
-@@ -916,14 +914,10 @@ void Init_parser(void)
- i_aref = rb_intern("[]");
- i_leftshift = rb_intern("<<");
- #ifdef HAVE_RUBY_ENCODING_H
-- CEncoding_UTF_8 = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-8"));
-- CEncoding_UTF_16BE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-16be"));
-- CEncoding_UTF_16LE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-16le"));
-- CEncoding_UTF_32BE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-32be"));
-- CEncoding_UTF_32LE = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("utf-32le"));
-- CEncoding_ASCII_8BIT = rb_funcall(rb_path2class("Encoding"), rb_intern("find"), 1, rb_str_new2("ascii-8bit"));
-- i_encoding = rb_intern("encoding");
-- i_encode = rb_intern("encode");
-+ UTF_16BE = rb_enc_find("utf-16be");
-+ UTF_16LE = rb_enc_find("utf-16le");
-+ UTF_32BE = rb_enc_find("utf-32be");
-+ UTF_32LE = rb_enc_find("utf-32le");
- #else
- i_iconv = rb_intern("iconv");
- #endif
-
-commit c9d3b4b6f24aac4cf677256b10fb3c51ed283698
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Sat Apr 18 06:19:52 2015 +0000
-
- parser.rl: rb_enc_raise
-
- * ext/json/parser/parser.rl: raise with messages in UTF-8
- encoding. [ruby-core:67386] [Bug #10705]
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50342 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit b38c0b7974854003a949a26f87bd7ff0e17113ef)
-
-diff --git a/ext/json/ext/parser/extconf.rb b/ext/json/ext/parser/extconf.rb
-index ae4f861c79..2addc53e7f 100644
---- a/ext/json/ext/parser/extconf.rb
-+++ b/ext/json/ext/parser/extconf.rb
-@@ -1,3 +1,5 @@
- require 'mkmf'
-
-+have_func("rb_enc_raise", "ruby.h")
-+
- create_makefile 'json/ext/parser'
-diff --git a/ext/json/ext/parser/parser.c b/ext/json/ext/parser/parser.c
-index d334731e2a..9d8cb54570 100644
---- a/ext/json/ext/parser/parser.c
-+++ b/ext/json/ext/parser/parser.c
-@@ -3,11 +3,26 @@
- #include "../fbuffer/fbuffer.h"
- #include "parser.h"
-
--#ifdef HAVE_RB_ENC_RAISE
--# define EXC_ENCODING rb_utf8_encoding(),
-+#if defined HAVE_RUBY_ENCODING_H
-+# define EXC_ENCODING UTF8,
-+# ifndef HAVE_RB_ENC_RAISE
-+static void
-+enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...)
-+{
-+ va_list args;
-+ VALUE mesg;
-+
-+ va_start(args, fmt);
-+ mesg = rb_enc_vsprintf(enc, fmt, args);
-+ va_end(args);
-+
-+ rb_exc_raise(rb_exc_new3(exc, mesg));
-+}
-+# endif
-+# define rb_enc_raise enc_raise
- #else
--# define rb_enc_raise rb_raise
- # define EXC_ENCODING /* nothing */
-+# define rb_enc_raise rb_raise
- #endif
-
- /* unicode */
-@@ -75,7 +90,7 @@ static int convert_UTF32_to_UTF8(char *buf, UTF32 ch)
- }
-
- #ifdef HAVE_RUBY_ENCODING_H
--static rb_encoding *UTF_16BE, *UTF_16LE, *UTF_32BE, *UTF_32LE;
-+static rb_encoding *UTF_8, *UTF_16BE, *UTF_16LE, *UTF_32BE, *UTF_32LE;
- #else
- static ID i_iconv;
- #endif
-@@ -89,11 +104,11 @@ static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
- i_match_string, i_aset, i_aref, i_leftshift;
-
-
--#line 115 "parser.rl"
-+#line 130 "parser.rl"
-
-
-
--#line 97 "parser.c"
-+#line 112 "parser.c"
- enum {JSON_object_start = 1};
- enum {JSON_object_first_final = 27};
- enum {JSON_object_error = 0};
-@@ -101,7 +116,7 @@ enum {JSON_object_error = 0};
- enum {JSON_object_en_main = 1};
-
-
--#line 156 "parser.rl"
-+#line 171 "parser.rl"
-
-
- static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -117,14 +132,14 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
- *result = NIL_P(object_class) ? rb_hash_new() : rb_class_new_instance(0, 0, object_class);
-
-
--#line 121 "parser.c"
-+#line 136 "parser.c"
- {
- cs = JSON_object_start;
- }
-
--#line 171 "parser.rl"
-+#line 186 "parser.rl"
-
--#line 128 "parser.c"
-+#line 143 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -152,7 +167,7 @@ case 2:
- goto st2;
- goto st0;
- tr2:
--#line 138 "parser.rl"
-+#line 153 "parser.rl"
- {
- char *np;
- json->parsing_name = 1;
-@@ -165,7 +180,7 @@ st3:
- if ( ++p == pe )
- goto _test_eof3;
- case 3:
--#line 169 "parser.c"
-+#line 184 "parser.c"
- switch( (*p) ) {
- case 13: goto st3;
- case 32: goto st3;
-@@ -232,7 +247,7 @@ case 8:
- goto st8;
- goto st0;
- tr11:
--#line 123 "parser.rl"
-+#line 138 "parser.rl"
- {
- VALUE v = Qnil;
- char *np = JSON_parse_value(json, p, pe, &v);
-@@ -252,7 +267,7 @@ st9:
- if ( ++p == pe )
- goto _test_eof9;
- case 9:
--#line 256 "parser.c"
-+#line 271 "parser.c"
- switch( (*p) ) {
- case 13: goto st9;
- case 32: goto st9;
-@@ -341,14 +356,14 @@ case 18:
- goto st9;
- goto st18;
- tr4:
--#line 146 "parser.rl"
-+#line 161 "parser.rl"
- { p--; {p++; cs = 27; goto _out;} }
- goto st27;
- st27:
- if ( ++p == pe )
- goto _test_eof27;
- case 27:
--#line 352 "parser.c"
-+#line 367 "parser.c"
- goto st0;
- st19:
- if ( ++p == pe )
-@@ -446,7 +461,7 @@ case 26:
- _out: {}
- }
-
--#line 172 "parser.rl"
-+#line 187 "parser.rl"
-
- if (cs >= JSON_object_first_final) {
- if (json->create_additions) {
-@@ -471,7 +486,7 @@ case 26:
-
-
-
--#line 475 "parser.c"
-+#line 490 "parser.c"
- enum {JSON_value_start = 1};
- enum {JSON_value_first_final = 21};
- enum {JSON_value_error = 0};
-@@ -479,7 +494,7 @@ enum {JSON_value_error = 0};
- enum {JSON_value_en_main = 1};
-
-
--#line 276 "parser.rl"
-+#line 291 "parser.rl"
-
-
- static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -487,14 +502,14 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
- int cs = EVIL;
-
-
--#line 491 "parser.c"
-+#line 506 "parser.c"
- {
- cs = JSON_value_start;
- }
-
--#line 283 "parser.rl"
-+#line 298 "parser.rl"
-
--#line 498 "parser.c"
-+#line 513 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -519,14 +534,14 @@ st0:
- cs = 0;
- goto _out;
- tr0:
--#line 224 "parser.rl"
-+#line 239 "parser.rl"
- {
- char *np = JSON_parse_string(json, p, pe, result);
- if (np == NULL) { p--; {p++; cs = 21; goto _out;} } else {p = (( np))-1;}
- }
- goto st21;
- tr2:
--#line 229 "parser.rl"
-+#line 244 "parser.rl"
- {
- char *np;
- if(pe > p + 9 - json->quirks_mode && !strncmp(MinusInfinity, p, 9)) {
-@@ -546,7 +561,7 @@ tr2:
- }
- goto st21;
- tr5:
--#line 247 "parser.rl"
-+#line 262 "parser.rl"
- {
- char *np;
- json->current_nesting++;
-@@ -556,7 +571,7 @@ tr5:
- }
- goto st21;
- tr9:
--#line 255 "parser.rl"
-+#line 270 "parser.rl"
- {
- char *np;
- json->current_nesting++;
-@@ -566,7 +581,7 @@ tr9:
- }
- goto st21;
- tr16:
--#line 217 "parser.rl"
-+#line 232 "parser.rl"
- {
- if (json->allow_nan) {
- *result = CInfinity;
-@@ -576,7 +591,7 @@ tr16:
- }
- goto st21;
- tr18:
--#line 210 "parser.rl"
-+#line 225 "parser.rl"
- {
- if (json->allow_nan) {
- *result = CNaN;
-@@ -586,19 +601,19 @@ tr18:
- }
- goto st21;
- tr22:
--#line 204 "parser.rl"
-+#line 219 "parser.rl"
- {
- *result = Qfalse;
- }
- goto st21;
- tr25:
--#line 201 "parser.rl"
-+#line 216 "parser.rl"
- {
- *result = Qnil;
- }
- goto st21;
- tr28:
--#line 207 "parser.rl"
-+#line 222 "parser.rl"
- {
- *result = Qtrue;
- }
-@@ -607,9 +622,9 @@ st21:
- if ( ++p == pe )
- goto _test_eof21;
- case 21:
--#line 263 "parser.rl"
-+#line 278 "parser.rl"
- { p--; {p++; cs = 21; goto _out;} }
--#line 613 "parser.c"
-+#line 628 "parser.c"
- goto st0;
- st2:
- if ( ++p == pe )
-@@ -770,7 +785,7 @@ case 20:
- _out: {}
- }
-
--#line 284 "parser.rl"
-+#line 299 "parser.rl"
-
- if (cs >= JSON_value_first_final) {
- return p;
-@@ -780,7 +795,7 @@ case 20:
- }
-
-
--#line 784 "parser.c"
-+#line 799 "parser.c"
- enum {JSON_integer_start = 1};
- enum {JSON_integer_first_final = 3};
- enum {JSON_integer_error = 0};
-@@ -788,7 +803,7 @@ enum {JSON_integer_error = 0};
- enum {JSON_integer_en_main = 1};
-
-
--#line 300 "parser.rl"
-+#line 315 "parser.rl"
-
-
- static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -796,15 +811,15 @@ static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *res
- int cs = EVIL;
-
-
--#line 800 "parser.c"
-+#line 815 "parser.c"
- {
- cs = JSON_integer_start;
- }
-
--#line 307 "parser.rl"
-+#line 322 "parser.rl"
- json->memo = p;
-
--#line 808 "parser.c"
-+#line 823 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -838,14 +853,14 @@ case 3:
- goto st0;
- goto tr4;
- tr4:
--#line 297 "parser.rl"
-+#line 312 "parser.rl"
- { p--; {p++; cs = 4; goto _out;} }
- goto st4;
- st4:
- if ( ++p == pe )
- goto _test_eof4;
- case 4:
--#line 849 "parser.c"
-+#line 864 "parser.c"
- goto st0;
- st5:
- if ( ++p == pe )
-@@ -864,7 +879,7 @@ case 5:
- _out: {}
- }
-
--#line 309 "parser.rl"
-+#line 324 "parser.rl"
-
- if (cs >= JSON_integer_first_final) {
- long len = p - json->memo;
-@@ -879,7 +894,7 @@ case 5:
- }
-
-
--#line 883 "parser.c"
-+#line 898 "parser.c"
- enum {JSON_float_start = 1};
- enum {JSON_float_first_final = 8};
- enum {JSON_float_error = 0};
-@@ -887,7 +902,7 @@ enum {JSON_float_error = 0};
- enum {JSON_float_en_main = 1};
-
-
--#line 334 "parser.rl"
-+#line 349 "parser.rl"
-
-
- static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -895,15 +910,15 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul
- int cs = EVIL;
-
-
--#line 899 "parser.c"
-+#line 914 "parser.c"
- {
- cs = JSON_float_start;
- }
-
--#line 341 "parser.rl"
-+#line 356 "parser.rl"
- json->memo = p;
-
--#line 907 "parser.c"
-+#line 922 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -961,14 +976,14 @@ case 8:
- goto st0;
- goto tr9;
- tr9:
--#line 328 "parser.rl"
-+#line 343 "parser.rl"
- { p--; {p++; cs = 9; goto _out;} }
- goto st9;
- st9:
- if ( ++p == pe )
- goto _test_eof9;
- case 9:
--#line 972 "parser.c"
-+#line 987 "parser.c"
- goto st0;
- st5:
- if ( ++p == pe )
-@@ -1029,7 +1044,7 @@ case 7:
- _out: {}
- }
-
--#line 343 "parser.rl"
-+#line 358 "parser.rl"
-
- if (cs >= JSON_float_first_final) {
- long len = p - json->memo;
-@@ -1045,7 +1060,7 @@ case 7:
-
-
-
--#line 1049 "parser.c"
-+#line 1064 "parser.c"
- enum {JSON_array_start = 1};
- enum {JSON_array_first_final = 17};
- enum {JSON_array_error = 0};
-@@ -1053,7 +1068,7 @@ enum {JSON_array_error = 0};
- enum {JSON_array_en_main = 1};
-
-
--#line 386 "parser.rl"
-+#line 401 "parser.rl"
-
-
- static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result)
-@@ -1067,14 +1082,14 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul
- *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
-
-
--#line 1071 "parser.c"
-+#line 1086 "parser.c"
- {
- cs = JSON_array_start;
- }
-
--#line 399 "parser.rl"
-+#line 414 "parser.rl"
-
--#line 1078 "parser.c"
-+#line 1093 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1113,7 +1128,7 @@ case 2:
- goto st2;
- goto st0;
- tr2:
--#line 363 "parser.rl"
-+#line 378 "parser.rl"
- {
- VALUE v = Qnil;
- char *np = JSON_parse_value(json, p, pe, &v);
-@@ -1133,7 +1148,7 @@ st3:
- if ( ++p == pe )
- goto _test_eof3;
- case 3:
--#line 1137 "parser.c"
-+#line 1152 "parser.c"
- switch( (*p) ) {
- case 13: goto st3;
- case 32: goto st3;
-@@ -1233,14 +1248,14 @@ case 12:
- goto st3;
- goto st12;
- tr4:
--#line 378 "parser.rl"
-+#line 393 "parser.rl"
- { p--; {p++; cs = 17; goto _out;} }
- goto st17;
- st17:
- if ( ++p == pe )
- goto _test_eof17;
- case 17:
--#line 1244 "parser.c"
-+#line 1259 "parser.c"
- goto st0;
- st13:
- if ( ++p == pe )
-@@ -1296,7 +1311,7 @@ case 16:
- _out: {}
- }
-
--#line 400 "parser.rl"
-+#line 415 "parser.rl"
-
- if(cs >= JSON_array_first_final) {
- return p + 1;
-@@ -1377,7 +1392,7 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
- }
-
-
--#line 1381 "parser.c"
-+#line 1396 "parser.c"
- enum {JSON_string_start = 1};
- enum {JSON_string_first_final = 8};
- enum {JSON_string_error = 0};
-@@ -1385,7 +1400,7 @@ enum {JSON_string_error = 0};
- enum {JSON_string_en_main = 1};
-
-
--#line 499 "parser.rl"
-+#line 514 "parser.rl"
-
-
- static int
-@@ -1407,15 +1422,15 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
-
- *result = rb_str_buf_new(0);
-
--#line 1411 "parser.c"
-+#line 1426 "parser.c"
- {
- cs = JSON_string_start;
- }
-
--#line 520 "parser.rl"
-+#line 535 "parser.rl"
- json->memo = p;
-
--#line 1419 "parser.c"
-+#line 1434 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1440,7 +1455,7 @@ case 2:
- goto st0;
- goto st2;
- tr2:
--#line 485 "parser.rl"
-+#line 500 "parser.rl"
- {
- *result = json_string_unescape(*result, json->memo + 1, p);
- if (NIL_P(*result)) {
-@@ -1451,14 +1466,14 @@ tr2:
- {p = (( p + 1))-1;}
- }
- }
--#line 496 "parser.rl"
-+#line 511 "parser.rl"
- { p--; {p++; cs = 8; goto _out;} }
- goto st8;
- st8:
- if ( ++p == pe )
- goto _test_eof8;
- case 8:
--#line 1462 "parser.c"
-+#line 1477 "parser.c"
- goto st0;
- st3:
- if ( ++p == pe )
-@@ -1534,7 +1549,7 @@ case 7:
- _out: {}
- }
-
--#line 522 "parser.rl"
-+#line 537 "parser.rl"
-
- if (json->create_additions && RTEST(match_string = json->match_string)) {
- VALUE klass;
-@@ -1733,7 +1748,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- }
-
-
--#line 1737 "parser.c"
-+#line 1752 "parser.c"
- enum {JSON_start = 1};
- enum {JSON_first_final = 10};
- enum {JSON_error = 0};
-@@ -1741,7 +1756,7 @@ enum {JSON_error = 0};
- enum {JSON_en_main = 1};
-
-
--#line 744 "parser.rl"
-+#line 759 "parser.rl"
-
-
- static VALUE cParser_parse_strict(VALUE self)
-@@ -1752,16 +1767,16 @@ static VALUE cParser_parse_strict(VALUE self)
- GET_PARSER;
-
-
--#line 1756 "parser.c"
-+#line 1771 "parser.c"
- {
- cs = JSON_start;
- }
-
--#line 754 "parser.rl"
-+#line 769 "parser.rl"
- p = json->source;
- pe = p + json->len;
-
--#line 1765 "parser.c"
-+#line 1780 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1817,7 +1832,7 @@ case 5:
- goto st1;
- goto st5;
- tr3:
--#line 733 "parser.rl"
-+#line 748 "parser.rl"
- {
- char *np;
- json->current_nesting = 1;
-@@ -1826,7 +1841,7 @@ tr3:
- }
- goto st10;
- tr4:
--#line 726 "parser.rl"
-+#line 741 "parser.rl"
- {
- char *np;
- json->current_nesting = 1;
-@@ -1838,7 +1853,7 @@ st10:
- if ( ++p == pe )
- goto _test_eof10;
- case 10:
--#line 1842 "parser.c"
-+#line 1857 "parser.c"
- switch( (*p) ) {
- case 13: goto st10;
- case 32: goto st10;
-@@ -1895,7 +1910,7 @@ case 9:
- _out: {}
- }
-
--#line 757 "parser.rl"
-+#line 772 "parser.rl"
-
- if (cs >= JSON_first_final && p == pe) {
- return result;
-@@ -1907,7 +1922,7 @@ case 9:
-
-
-
--#line 1911 "parser.c"
-+#line 1926 "parser.c"
- enum {JSON_quirks_mode_start = 1};
- enum {JSON_quirks_mode_first_final = 10};
- enum {JSON_quirks_mode_error = 0};
-@@ -1915,7 +1930,7 @@ enum {JSON_quirks_mode_error = 0};
- enum {JSON_quirks_mode_en_main = 1};
-
-
--#line 782 "parser.rl"
-+#line 797 "parser.rl"
-
-
- static VALUE cParser_parse_quirks_mode(VALUE self)
-@@ -1926,16 +1941,16 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
- GET_PARSER;
-
-
--#line 1930 "parser.c"
-+#line 1945 "parser.c"
- {
- cs = JSON_quirks_mode_start;
- }
-
--#line 792 "parser.rl"
-+#line 807 "parser.rl"
- p = json->source;
- pe = p + json->len;
-
--#line 1939 "parser.c"
-+#line 1954 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1969,7 +1984,7 @@ st0:
- cs = 0;
- goto _out;
- tr2:
--#line 774 "parser.rl"
-+#line 789 "parser.rl"
- {
- char *np = JSON_parse_value(json, p, pe, &result);
- if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
-@@ -1979,7 +1994,7 @@ st10:
- if ( ++p == pe )
- goto _test_eof10;
- case 10:
--#line 1983 "parser.c"
-+#line 1998 "parser.c"
- switch( (*p) ) {
- case 13: goto st10;
- case 32: goto st10;
-@@ -2068,7 +2083,7 @@ case 9:
- _out: {}
- }
-
--#line 795 "parser.rl"
-+#line 810 "parser.rl"
-
- if (cs >= JSON_quirks_mode_first_final && p == pe) {
- return result;
-@@ -2198,6 +2213,7 @@ void Init_parser(void)
- i_aref = rb_intern("[]");
- i_leftshift = rb_intern("<<");
- #ifdef HAVE_RUBY_ENCODING_H
-+ UTF_8 = rb_utf8_encoding();
- UTF_16BE = rb_enc_find("utf-16be");
- UTF_16LE = rb_enc_find("utf-16le");
- UTF_32BE = rb_enc_find("utf-32be");
-diff --git a/ext/json/ext/parser/parser.rl b/ext/json/ext/parser/parser.rl
-index fd57a275bf..735fa8f350 100644
---- a/ext/json/ext/parser/parser.rl
-+++ b/ext/json/ext/parser/parser.rl
-@@ -1,6 +1,28 @@
- #include "../fbuffer/fbuffer.h"
- #include "parser.h"
-
-+#if defined HAVE_RUBY_ENCODING_H
-+# define EXC_ENCODING UTF8,
-+# ifndef HAVE_RB_ENC_RAISE
-+static void
-+enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...)
-+{
-+ va_list args;
-+ VALUE mesg;
-+
-+ va_start(args, fmt);
-+ mesg = rb_enc_vsprintf(enc, fmt, args);
-+ va_end(args);
-+
-+ rb_exc_raise(rb_exc_new3(exc, mesg));
-+}
-+# endif
-+# define rb_enc_raise enc_raise
-+#else
-+# define EXC_ENCODING /* nothing */
-+# define rb_enc_raise rb_raise
-+#endif
-+
- /* unicode */
-
- static const char digit_values[256] = {
-@@ -66,7 +88,7 @@ static int convert_UTF32_to_UTF8(char *buf, UTF32 ch)
- }
-
- #ifdef HAVE_RUBY_ENCODING_H
--static rb_encoding *UTF_16BE, *UTF_16LE, *UTF_32BE, *UTF_32LE;
-+static rb_encoding *UTF_8, *UTF_16BE, *UTF_16LE, *UTF_32BE, *UTF_32LE;
- #else
- static ID i_iconv;
- #endif
-@@ -204,14 +226,14 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
- if (json->allow_nan) {
- *result = CNaN;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p - 2);
- }
- }
- action parse_infinity {
- if (json->allow_nan) {
- *result = CInfinity;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p - 8);
- }
- }
- action parse_string {
-@@ -227,7 +249,7 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
- fexec p + 10;
- fhold; fbreak;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
- }
- }
- np = JSON_parse_float(json, fpc, pe, result);
-@@ -394,7 +416,7 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul
- if(cs >= JSON_array_first_final) {
- return p + 1;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
- return NULL;
- }
- }
-@@ -751,7 +773,7 @@ static VALUE cParser_parse_strict(VALUE self)
- if (cs >= JSON_first_final && p == pe) {
- return result;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
- return Qnil;
- }
- }
-@@ -789,7 +811,7 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
- if (cs >= JSON_quirks_mode_first_final && p == pe) {
- return result;
- } else {
-- rb_raise(eParserError, "%u: unexpected token at '%s'", __LINE__, p);
-+ rb_enc_raise(EXC_ENCODING eParserError, "%u: unexpected token at '%s'", __LINE__, p);
- return Qnil;
- }
- }
-@@ -914,6 +936,7 @@ void Init_parser(void)
- i_aref = rb_intern("[]");
- i_leftshift = rb_intern("<<");
- #ifdef HAVE_RUBY_ENCODING_H
-+ UTF_8 = rb_utf8_encoding();
- UTF_16BE = rb_enc_find("utf-16be");
- UTF_16LE = rb_enc_find("utf-16le");
- UTF_32BE = rb_enc_find("utf-32be");
-diff --git a/tests/test_json.rb b/tests/test_json.rb
-index 7957773f23..46f000148f 100755
---- a/tests/test_json.rb
-+++ b/tests/test_json.rb
-@@ -550,4 +550,14 @@ EOT
- JSON::Parser.new(source)
- assert_equal Encoding::ASCII_8BIT, source.encoding
- end if defined?(Encoding::ASCII_8BIT)
-+
-+ def test_error_message_encoding
-+ bug10705 = '[ruby-core:67386] [Bug #10705]'
-+ json = "\"\xE2\x88\x9A\"".force_encoding(Encoding::UTF_8)
-+ e = assert_raise(JSON::ParserError) {
-+ JSON.parse(json)
-+ }
-+ assert_equal(Encoding::UTF_8, e.message.encoding, bug10705)
-+ assert_include(e.message, json, bug10705)
-+ end if defined?(Encoding::UTF_8)
- end
-
-commit 45b835fec8adaf0aa1ce47fc2acfa3f61f06ca53
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Sat Apr 18 06:24:38 2015 +0000
-
- parser.rl: define enc_raise iff necessary
-
- * ext/json/parser/parser.rl (enc_raise): no needs if rb_enc_raise
- is available.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50343 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit 5c0df05b92de528a397d29fd9ca5dca534b4c930)
-
-diff --git a/ext/json/ext/parser/parser.c b/ext/json/ext/parser/parser.c
-index 9d8cb54570..ae9be78ec2 100644
---- a/ext/json/ext/parser/parser.c
-+++ b/ext/json/ext/parser/parser.c
-@@ -4,7 +4,7 @@
- #include "parser.h"
-
- #if defined HAVE_RUBY_ENCODING_H
--# define EXC_ENCODING UTF8,
-+# define EXC_ENCODING UTF_8,
- # ifndef HAVE_RB_ENC_RAISE
- static void
- enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...)
-@@ -18,8 +18,8 @@ enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...)
-
- rb_exc_raise(rb_exc_new3(exc, mesg));
- }
-+# define rb_enc_raise enc_raise
- # endif
--# define rb_enc_raise enc_raise
- #else
- # define EXC_ENCODING /* nothing */
- # define rb_enc_raise rb_raise
-diff --git a/ext/json/ext/parser/parser.rl b/ext/json/ext/parser/parser.rl
-index 735fa8f350..327e08cd81 100644
---- a/ext/json/ext/parser/parser.rl
-+++ b/ext/json/ext/parser/parser.rl
-@@ -2,7 +2,7 @@
- #include "parser.h"
-
- #if defined HAVE_RUBY_ENCODING_H
--# define EXC_ENCODING UTF8,
-+# define EXC_ENCODING UTF_8,
- # ifndef HAVE_RB_ENC_RAISE
- static void
- enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...)
-@@ -16,8 +16,8 @@ enc_raise(rb_encoding *enc, VALUE exc, const char *fmt, ...)
-
- rb_exc_raise(rb_exc_new3(exc, mesg));
- }
-+# define rb_enc_raise enc_raise
- # endif
--# define rb_enc_raise enc_raise
- #else
- # define EXC_ENCODING /* nothing */
- # define rb_enc_raise rb_raise
-
-commit 39feffc4fbb9047e9dee99bab90761f5aba28060
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Thu May 28 07:17:42 2015 +0000
-
- parser.rl: allocate structs with wrapper
-
- * ext/json/parser/parser.rl (cJSON_parser_s_allocate): allocate
- structs with making new wrapper objects and get rid of potential
- memory leak.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50660 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit cbf902fc3308290383c8c5e926bf684a23778719)
-
-diff --git a/tests/test_json.rb b/tests/test_json.rb
-index 46f000148f..96ba744478 100755
---- a/tests/test_json.rb
-+++ b/tests/test_json.rb
-@@ -560,4 +560,17 @@ EOT
- assert_equal(Encoding::UTF_8, e.message.encoding, bug10705)
- assert_include(e.message, json, bug10705)
- end if defined?(Encoding::UTF_8)
-+
-+ if EnvUtil.gc_stress_to_class?
-+ def assert_no_memory_leak(code, *rest, **opt)
-+ code = "8.times {20_000.times {begin #{code}; rescue NoMemoryError; end}; GC.start}"
-+ super(["-rjson/ext/parser"],
-+ "GC.add_stress_to_class(JSON::Ext::Parser); "\
-+ "#{code}", code, *rest, rss: true, limit: 1.1, **opt)
-+ end
-+
-+ def test_no_memory_leak_allocate
-+ assert_no_memory_leak("JSON::Ext::Parser.allocate")
-+ end
-+ end
- end
-
-commit a7b5c17a122a88e060676e74fc1925c5a703df03
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Thu May 28 07:17:55 2015 +0000
-
- generator.c: allocate structs with wrapper
-
- * ext/json/generator/generator.c (cState_s_allocate): allocate
- structs with making new wrapper objects and get rid of potential
- memory leak.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50661 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit 4d059bf9f5f10f3d3088de49fc87e5555db7770d)
-
-diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb
-index 1834290944..ce470db3c2 100755
---- a/tests/test_json_generate.rb
-+++ b/tests/test_json_generate.rb
-@@ -344,4 +344,17 @@ EOT
- assert_equal '[""]', JSON.generate([s.new])
- end
- end
-+
-+ if EnvUtil.gc_stress_to_class?
-+ def assert_no_memory_leak(code, *rest, **opt)
-+ code = "8.times {20_000.times {begin #{code}; rescue NoMemoryError; end}; GC.start}"
-+ super(["-rjson/ext/generator"],
-+ "GC.add_stress_to_class(JSON::Ext::Generator::State); "\
-+ "#{code}", code, *rest, rss: true, limit: 1.1, **opt)
-+ end
-+
-+ def test_no_memory_leak_allocate
-+ assert_no_memory_leak("JSON::Ext::Generator::State.allocate")
-+ end
-+ end
- end
-
-commit 73a2acda797178495ff3952c3b9293425b86f924
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Fri Sep 25 08:06:57 2015 +0000
-
- parser.rl: rb_scan_args
-
- * ext/json/parser/parser.rl (cParser_initialize): use ':' in
- rb_scan_args.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51936 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit f12fccbec58ca57cef61380e0eebed591ba847d8)
-
-diff --git a/ext/json/ext/parser/parser.rl b/ext/json/ext/parser/parser.rl
-index 327e08cd81..2fa0caee7a 100644
---- a/ext/json/ext/parser/parser.rl
-+++ b/ext/json/ext/parser/parser.rl
-@@ -570,7 +570,7 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
-
- static VALUE convert_encoding(VALUE source)
- {
-- char *ptr = RSTRING_PTR(source);
-+ const char *ptr = RSTRING_PTR(source);
- long len = RSTRING_LEN(source);
- if (len < 2) {
- rb_raise(eParserError, "A JSON text must at least contain two octets!");
-@@ -643,12 +643,18 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- if (json->Vsource) {
- rb_raise(rb_eTypeError, "already initialized instance");
- }
-+#ifdef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH
-+ rb_scan_args(argc, argv, "1:", &source, &opts);
-+#else
- rb_scan_args(argc, argv, "11", &source, &opts);
-+#endif
- if (!NIL_P(opts)) {
-+#ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH
- opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
- if (NIL_P(opts)) {
- rb_raise(rb_eArgError, "opts needs to be like a hash");
- } else {
-+#endif
- VALUE tmp = ID2SYM(i_max_nesting);
- if (option_given_p(opts, tmp)) {
- VALUE max_nesting = rb_hash_aref(opts, tmp);
-@@ -711,7 +717,9 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- } else {
- json->match_string = Qnil;
- }
-+#ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH
- }
-+#endif
- } else {
- json->max_nesting = 100;
- json->allow_nan = 0;
-
-commit 4b429e42608ecca027435a2cb6f9c10afd3b5c89
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Fri Sep 25 08:08:58 2015 +0000
-
- parser.c: update
-
- * ext/json/parser/parser.c: update to r51946.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51937 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit 460152ea73f7eb55449329e77b141d50f8cabe01)
-
-diff --git a/ext/json/ext/parser/parser.c b/ext/json/ext/parser/parser.c
-index ae9be78ec2..773605cf7c 100644
---- a/ext/json/ext/parser/parser.c
-+++ b/ext/json/ext/parser/parser.c
-@@ -1586,7 +1586,7 @@ case 7:
-
- static VALUE convert_encoding(VALUE source)
- {
-- char *ptr = RSTRING_PTR(source);
-+ const char *ptr = RSTRING_PTR(source);
- long len = RSTRING_LEN(source);
- if (len < 2) {
- rb_raise(eParserError, "A JSON text must at least contain two octets!");
-@@ -1659,12 +1659,18 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- if (json->Vsource) {
- rb_raise(rb_eTypeError, "already initialized instance");
- }
-+#ifdef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH
-+ rb_scan_args(argc, argv, "1:", &source, &opts);
-+#else
- rb_scan_args(argc, argv, "11", &source, &opts);
-+#endif
- if (!NIL_P(opts)) {
-+#ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH
- opts = rb_convert_type(opts, T_HASH, "Hash", "to_hash");
- if (NIL_P(opts)) {
- rb_raise(rb_eArgError, "opts needs to be like a hash");
- } else {
-+#endif
- VALUE tmp = ID2SYM(i_max_nesting);
- if (option_given_p(opts, tmp)) {
- VALUE max_nesting = rb_hash_aref(opts, tmp);
-@@ -1727,7 +1733,9 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- } else {
- json->match_string = Qnil;
- }
-+#ifndef HAVE_RB_SCAN_ARGS_OPTIONAL_HASH
- }
-+#endif
- } else {
- json->max_nesting = 100;
- json->allow_nan = 0;
-@@ -1748,7 +1756,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
- }
-
-
--#line 1752 "parser.c"
-+#line 1760 "parser.c"
- enum {JSON_start = 1};
- enum {JSON_first_final = 10};
- enum {JSON_error = 0};
-@@ -1756,7 +1764,7 @@ enum {JSON_error = 0};
- enum {JSON_en_main = 1};
-
-
--#line 759 "parser.rl"
-+#line 767 "parser.rl"
-
-
- static VALUE cParser_parse_strict(VALUE self)
-@@ -1767,16 +1775,16 @@ static VALUE cParser_parse_strict(VALUE self)
- GET_PARSER;
-
-
--#line 1771 "parser.c"
-+#line 1779 "parser.c"
- {
- cs = JSON_start;
- }
-
--#line 769 "parser.rl"
-+#line 777 "parser.rl"
- p = json->source;
- pe = p + json->len;
-
--#line 1780 "parser.c"
-+#line 1788 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1832,7 +1840,7 @@ case 5:
- goto st1;
- goto st5;
- tr3:
--#line 748 "parser.rl"
-+#line 756 "parser.rl"
- {
- char *np;
- json->current_nesting = 1;
-@@ -1841,7 +1849,7 @@ tr3:
- }
- goto st10;
- tr4:
--#line 741 "parser.rl"
-+#line 749 "parser.rl"
- {
- char *np;
- json->current_nesting = 1;
-@@ -1853,7 +1861,7 @@ st10:
- if ( ++p == pe )
- goto _test_eof10;
- case 10:
--#line 1857 "parser.c"
-+#line 1865 "parser.c"
- switch( (*p) ) {
- case 13: goto st10;
- case 32: goto st10;
-@@ -1910,7 +1918,7 @@ case 9:
- _out: {}
- }
-
--#line 772 "parser.rl"
-+#line 780 "parser.rl"
-
- if (cs >= JSON_first_final && p == pe) {
- return result;
-@@ -1922,7 +1930,7 @@ case 9:
-
-
-
--#line 1926 "parser.c"
-+#line 1934 "parser.c"
- enum {JSON_quirks_mode_start = 1};
- enum {JSON_quirks_mode_first_final = 10};
- enum {JSON_quirks_mode_error = 0};
-@@ -1930,7 +1938,7 @@ enum {JSON_quirks_mode_error = 0};
- enum {JSON_quirks_mode_en_main = 1};
-
-
--#line 797 "parser.rl"
-+#line 805 "parser.rl"
-
-
- static VALUE cParser_parse_quirks_mode(VALUE self)
-@@ -1941,16 +1949,16 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
- GET_PARSER;
-
-
--#line 1945 "parser.c"
-+#line 1953 "parser.c"
- {
- cs = JSON_quirks_mode_start;
- }
-
--#line 807 "parser.rl"
-+#line 815 "parser.rl"
- p = json->source;
- pe = p + json->len;
-
--#line 1954 "parser.c"
-+#line 1962 "parser.c"
- {
- if ( p == pe )
- goto _test_eof;
-@@ -1984,7 +1992,7 @@ st0:
- cs = 0;
- goto _out;
- tr2:
--#line 789 "parser.rl"
-+#line 797 "parser.rl"
- {
- char *np = JSON_parse_value(json, p, pe, &result);
- if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
-@@ -1994,7 +2002,7 @@ st10:
- if ( ++p == pe )
- goto _test_eof10;
- case 10:
--#line 1998 "parser.c"
-+#line 2006 "parser.c"
- switch( (*p) ) {
- case 13: goto st10;
- case 32: goto st10;
-@@ -2083,7 +2091,7 @@ case 9:
- _out: {}
- }
-
--#line 810 "parser.rl"
-+#line 818 "parser.rl"
-
- if (cs >= JSON_quirks_mode_first_final && p == pe) {
- return result;
-
-commit 466bd2712d728a26b04b0ea4796aa664f23e006f
-Author: nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Fri Oct 30 04:37:13 2015 +0000
-
- use assert_raise
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52384 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit 068f312a7c642a1b6c358c17ef83421756568545)
-
-diff --git a/tests/test_json.rb b/tests/test_json.rb
-index 96ba744478..07287eed81 100755
---- a/tests/test_json.rb
-+++ b/tests/test_json.rb
-@@ -65,10 +65,10 @@ class TestJSON < Test::Unit::TestCase
- assert_equal([23], parse('[23]'))
- assert_equal([0.23], parse('[0.23]'))
- assert_equal([0.0], parse('[0e0]'))
-- assert_raises(JSON::ParserError) { parse('[+23.2]') }
-- assert_raises(JSON::ParserError) { parse('[+23]') }
-- assert_raises(JSON::ParserError) { parse('[.23]') }
-- assert_raises(JSON::ParserError) { parse('[023]') }
-+ assert_raise(JSON::ParserError) { parse('[+23.2]') }
-+ assert_raise(JSON::ParserError) { parse('[+23]') }
-+ assert_raise(JSON::ParserError) { parse('[.23]') }
-+ assert_raise(JSON::ParserError) { parse('[023]') }
- assert_equal_float [3.141], parse('[3.141]')
- assert_equal_float [-3.141], parse('[-3.141]')
- assert_equal_float [3.141], parse('[3141e-3]')
-@@ -77,11 +77,11 @@ class TestJSON < Test::Unit::TestCase
- assert_equal_float [3.141], parse('[3141.0E-3]')
- assert_equal_float [-3.141], parse('[-3141.0e-3]')
- assert_equal_float [-3.141], parse('[-3141e-3]')
-- assert_raises(ParserError) { parse('[NaN]') }
-+ assert_raise(ParserError) { parse('[NaN]') }
- assert parse('[NaN]', :allow_nan => true).first.nan?
-- assert_raises(ParserError) { parse('[Infinity]') }
-+ assert_raise(ParserError) { parse('[Infinity]') }
- assert_equal [1.0/0], parse('[Infinity]', :allow_nan => true)
-- assert_raises(ParserError) { parse('[-Infinity]') }
-+ assert_raise(ParserError) { parse('[-Infinity]') }
- assert_equal [-1.0/0], parse('[-Infinity]', :allow_nan => true)
- assert_equal([""], parse('[""]'))
- assert_equal(["foobar"], parse('["foobar"]'))
-@@ -95,7 +95,7 @@ class TestJSON < Test::Unit::TestCase
- assert_equal({ "a" => nil }, parse('{"a":null}'))
- assert_equal({ "a" => false }, parse('{ "a" : false } '))
- assert_equal({ "a" => false }, parse('{"a":false}'))
-- assert_raises(JSON::ParserError) { parse('{false}') }
-+ assert_raise(JSON::ParserError) { parse('{false}') }
- assert_equal({ "a" => true }, parse('{"a":true}'))
- assert_equal({ "a" => true }, parse(' { "a" : true } '))
- assert_equal({ "a" => -23 }, parse(' { "a" : -23 } '))
-@@ -380,7 +380,7 @@ EOT
- * comment */
- }
- EOT
-- assert_raises(ParserError) { parse(json) }
-+ assert_raise(ParserError) { parse(json) }
- json = <<EOT
- {
- "key1":"value1" /* multi line
-@@ -389,7 +389,7 @@ EOT
- and again, throw an Error */
- }
- EOT
-- assert_raises(ParserError) { parse(json) }
-+ assert_raise(ParserError) { parse(json) }
- json = <<EOT
- {
- "key1":"value1" /*/*/
-@@ -425,32 +425,32 @@ EOT
- end
-
- def test_wrong_inputs
-- assert_raises(ParserError) { JSON.parse('"foo"') }
-- assert_raises(ParserError) { JSON.parse('123') }
-- assert_raises(ParserError) { JSON.parse('[] bla') }
-- assert_raises(ParserError) { JSON.parse('[] 1') }
-- assert_raises(ParserError) { JSON.parse('[] []') }
-- assert_raises(ParserError) { JSON.parse('[] {}') }
-- assert_raises(ParserError) { JSON.parse('{} []') }
-- assert_raises(ParserError) { JSON.parse('{} {}') }
-- assert_raises(ParserError) { JSON.parse('[NULL]') }
-- assert_raises(ParserError) { JSON.parse('[FALSE]') }
-- assert_raises(ParserError) { JSON.parse('[TRUE]') }
-- assert_raises(ParserError) { JSON.parse('[07] ') }
-- assert_raises(ParserError) { JSON.parse('[0a]') }
-- assert_raises(ParserError) { JSON.parse('[1.]') }
-- assert_raises(ParserError) { JSON.parse(' ') }
-+ assert_raise(ParserError) { JSON.parse('"foo"') }
-+ assert_raise(ParserError) { JSON.parse('123') }
-+ assert_raise(ParserError) { JSON.parse('[] bla') }
-+ assert_raise(ParserError) { JSON.parse('[] 1') }
-+ assert_raise(ParserError) { JSON.parse('[] []') }
-+ assert_raise(ParserError) { JSON.parse('[] {}') }
-+ assert_raise(ParserError) { JSON.parse('{} []') }
-+ assert_raise(ParserError) { JSON.parse('{} {}') }
-+ assert_raise(ParserError) { JSON.parse('[NULL]') }
-+ assert_raise(ParserError) { JSON.parse('[FALSE]') }
-+ assert_raise(ParserError) { JSON.parse('[TRUE]') }
-+ assert_raise(ParserError) { JSON.parse('[07] ') }
-+ assert_raise(ParserError) { JSON.parse('[0a]') }
-+ assert_raise(ParserError) { JSON.parse('[1.]') }
-+ assert_raise(ParserError) { JSON.parse(' ') }
- end
-
- def test_nesting
-- assert_raises(JSON::NestingError) { JSON.parse '[[]]', :max_nesting => 1 }
-- assert_raises(JSON::NestingError) { JSON.parser.new('[[]]', :max_nesting => 1).parse }
-+ assert_raise(JSON::NestingError) { JSON.parse '[[]]', :max_nesting => 1 }
-+ assert_raise(JSON::NestingError) { JSON.parser.new('[[]]', :max_nesting => 1).parse }
- assert_equal [[]], JSON.parse('[[]]', :max_nesting => 2)
- too_deep = '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
- too_deep_ary = eval too_deep
-- assert_raises(JSON::NestingError) { JSON.parse too_deep }
-- assert_raises(JSON::NestingError) { JSON.parser.new(too_deep).parse }
-- assert_raises(JSON::NestingError) { JSON.parse too_deep, :max_nesting => 100 }
-+ assert_raise(JSON::NestingError) { JSON.parse too_deep }
-+ assert_raise(JSON::NestingError) { JSON.parser.new(too_deep).parse }
-+ assert_raise(JSON::NestingError) { JSON.parse too_deep, :max_nesting => 100 }
- ok = JSON.parse too_deep, :max_nesting => 101
- assert_equal too_deep_ary, ok
- ok = JSON.parse too_deep, :max_nesting => nil
-@@ -459,10 +459,10 @@ EOT
- assert_equal too_deep_ary, ok
- ok = JSON.parse too_deep, :max_nesting => 0
- assert_equal too_deep_ary, ok
-- assert_raises(JSON::NestingError) { JSON.generate [[]], :max_nesting => 1 }
-+ assert_raise(JSON::NestingError) { JSON.generate [[]], :max_nesting => 1 }
- assert_equal '[[]]', JSON.generate([[]], :max_nesting => 2)
-- assert_raises(JSON::NestingError) { JSON.generate too_deep_ary }
-- assert_raises(JSON::NestingError) { JSON.generate too_deep_ary, :max_nesting => 100 }
-+ assert_raise(JSON::NestingError) { JSON.generate too_deep_ary }
-+ assert_raise(JSON::NestingError) { JSON.generate too_deep_ary, :max_nesting => 100 }
- ok = JSON.generate too_deep_ary, :max_nesting => 101
- assert_equal too_deep, ok
- ok = JSON.generate too_deep_ary, :max_nesting => nil
-@@ -505,8 +505,8 @@ EOT
- too_deep = '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
- assert_equal too_deep, JSON.dump(eval(too_deep))
- assert_kind_of String, Marshal.dump(eval(too_deep))
-- assert_raises(ArgumentError) { JSON.dump(eval(too_deep), 100) }
-- assert_raises(ArgumentError) { Marshal.dump(eval(too_deep), 100) }
-+ assert_raise(ArgumentError) { JSON.dump(eval(too_deep), 100) }
-+ assert_raise(ArgumentError) { Marshal.dump(eval(too_deep), 100) }
- assert_equal too_deep, JSON.dump(eval(too_deep), 101)
- assert_kind_of String, Marshal.dump(eval(too_deep), 101)
- output = StringIO.new
-diff --git a/tests/test_json_addition.rb b/tests/test_json_addition.rb
-index a30f06addd..6034a183bd 100755
---- a/tests/test_json_addition.rb
-+++ b/tests/test_json_addition.rb
-@@ -112,7 +112,7 @@ class TestJSONAddition < Test::Unit::TestCase
- c = C.new
- assert !C.json_creatable?
- json = generate(c)
-- assert_raises(ArgumentError, NameError) { JSON.parse(json, :create_additions => true) }
-+ assert_raise(ArgumentError, NameError) { JSON.parse(json, :create_additions => true) }
- end
-
- def test_raw_strings
-@@ -151,7 +151,7 @@ class TestJSONAddition < Test::Unit::TestCase
- assert_equal s, JSON(JSON(s), :create_additions => true)
- struct = Struct.new :foo, :bar
- s = struct.new 4711, 'foot'
-- assert_raises(JSONError) { JSON(s) }
-+ assert_raise(JSONError) { JSON(s) }
- begin
- raise TypeError, "test me"
- rescue TypeError => e
-diff --git a/tests/test_json_encoding.rb b/tests/test_json_encoding.rb
-index fa7d878920..13903cd266 100644
---- a/tests/test_json_encoding.rb
-+++ b/tests/test_json_encoding.rb
-@@ -59,7 +59,7 @@ class TestJSONEncoding < Test::Unit::TestCase
- assert_equal @generated, JSON.generate(@utf_16_data, :ascii_only => true)
- else
- # XXX checking of correct utf8 data is not as strict (yet?) without :ascii_only
-- assert_raises(JSON::GeneratorError) { JSON.generate(@utf_16_data, :ascii_only => true) }
-+ assert_raise(JSON::GeneratorError) { JSON.generate(@utf_16_data, :ascii_only => true) }
- end
- end
- end
-diff --git a/tests/test_json_fixtures.rb b/tests/test_json_fixtures.rb
-index 584dffdfdb..c861439573 100755
---- a/tests/test_json_fixtures.rb
-+++ b/tests/test_json_fixtures.rb
-@@ -26,7 +26,7 @@ class TestJSONFixtures < Test::Unit::TestCase
-
- def test_failing
- for name, source in @failed
-- assert_raises(JSON::ParserError, JSON::NestingError,
-+ assert_raise(JSON::ParserError, JSON::NestingError,
- "Did not fail for fixture '#{name}': #{source.inspect}") do
- JSON.parse(source)
- end
-diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb
-index ce470db3c2..5da0d2f4f0 100755
---- a/tests/test_json_generate.rb
-+++ b/tests/test_json_generate.rb
-@@ -123,12 +123,12 @@ EOT
- assert s[:check_circular?]
- h = { 1=>2 }
- h[3] = h
-- assert_raises(JSON::NestingError) { generate(h) }
-- assert_raises(JSON::NestingError) { generate(h, s) }
-+ assert_raise(JSON::NestingError) { generate(h) }
-+ assert_raise(JSON::NestingError) { generate(h, s) }
- s = JSON.state.new
- a = [ 1, 2 ]
- a << a
-- assert_raises(JSON::NestingError) { generate(a, s) }
-+ assert_raise(JSON::NestingError) { generate(a, s) }
- assert s.check_circular?
- assert s[:check_circular?]
- end
-@@ -185,34 +185,34 @@ EOT
- end
-
- def test_allow_nan
-- assert_raises(GeneratorError) { generate([JSON::NaN]) }
-+ assert_raise(GeneratorError) { generate([JSON::NaN]) }
- assert_equal '[NaN]', generate([JSON::NaN], :allow_nan => true)
-- assert_raises(GeneratorError) { fast_generate([JSON::NaN]) }
-- assert_raises(GeneratorError) { pretty_generate([JSON::NaN]) }
-+ assert_raise(GeneratorError) { fast_generate([JSON::NaN]) }
-+ assert_raise(GeneratorError) { pretty_generate([JSON::NaN]) }
- assert_equal "[\n NaN\n]", pretty_generate([JSON::NaN], :allow_nan => true)
-- assert_raises(GeneratorError) { generate([JSON::Infinity]) }
-+ assert_raise(GeneratorError) { generate([JSON::Infinity]) }
- assert_equal '[Infinity]', generate([JSON::Infinity], :allow_nan => true)
-- assert_raises(GeneratorError) { fast_generate([JSON::Infinity]) }
-- assert_raises(GeneratorError) { pretty_generate([JSON::Infinity]) }
-+ assert_raise(GeneratorError) { fast_generate([JSON::Infinity]) }
-+ assert_raise(GeneratorError) { pretty_generate([JSON::Infinity]) }
- assert_equal "[\n Infinity\n]", pretty_generate([JSON::Infinity], :allow_nan => true)
-- assert_raises(GeneratorError) { generate([JSON::MinusInfinity]) }
-+ assert_raise(GeneratorError) { generate([JSON::MinusInfinity]) }
- assert_equal '[-Infinity]', generate([JSON::MinusInfinity], :allow_nan => true)
-- assert_raises(GeneratorError) { fast_generate([JSON::MinusInfinity]) }
-- assert_raises(GeneratorError) { pretty_generate([JSON::MinusInfinity]) }
-+ assert_raise(GeneratorError) { fast_generate([JSON::MinusInfinity]) }
-+ assert_raise(GeneratorError) { pretty_generate([JSON::MinusInfinity]) }
- assert_equal "[\n -Infinity\n]", pretty_generate([JSON::MinusInfinity], :allow_nan => true)
- end
-
- def test_depth
- ary = []; ary << ary
- assert_equal 0, JSON::SAFE_STATE_PROTOTYPE.depth
-- assert_raises(JSON::NestingError) { JSON.generate(ary) }
-+ assert_raise(JSON::NestingError) { JSON.generate(ary) }
- assert_equal 0, JSON::SAFE_STATE_PROTOTYPE.depth
- assert_equal 0, JSON::PRETTY_STATE_PROTOTYPE.depth
-- assert_raises(JSON::NestingError) { JSON.pretty_generate(ary) }
-+ assert_raise(JSON::NestingError) { JSON.pretty_generate(ary) }
- assert_equal 0, JSON::PRETTY_STATE_PROTOTYPE.depth
- s = JSON.state.new
- assert_equal 0, s.depth
-- assert_raises(JSON::NestingError) { ary.to_json(s) }
-+ assert_raise(JSON::NestingError) { ary.to_json(s) }
- assert_equal 100, s.depth
- end
-
-
-commit ab8e1eda2385d418939a239189688aeddb6b7bde
-Author: naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Wed Dec 16 05:07:31 2015 +0000
-
- Add frozen_string_literal: false for all files
-
- When you change this to true, you may need to add more tests.
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit 3e92b635fb5422207b7bbdc924e292e51e21f040)
-
-diff --git a/tests/setup_variant.rb b/tests/setup_variant.rb
-index 2dab184bc4..f7fb2a1d56 100644
---- a/tests/setup_variant.rb
-+++ b/tests/setup_variant.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- case ENV['JSON']
- when 'pure'
- $:.unshift 'lib'
-diff --git a/tests/test_json.rb b/tests/test_json.rb
-index 07287eed81..8fe9459978 100755
---- a/tests/test_json.rb
-+++ b/tests/test_json.rb
-@@ -1,5 +1,6 @@
- #!/usr/bin/env ruby
- # encoding: utf-8
-+# frozen_string_literal: false
-
- require 'test/unit'
- require File.join(File.dirname(__FILE__), 'setup_variant')
-diff --git a/tests/test_json_addition.rb b/tests/test_json_addition.rb
-index 6034a183bd..f2059312de 100755
---- a/tests/test_json_addition.rb
-+++ b/tests/test_json_addition.rb
-@@ -1,5 +1,6 @@
- #!/usr/bin/env ruby
- # -*- coding:utf-8 -*-
-+# frozen_string_literal: false
-
- require 'test/unit'
- require File.join(File.dirname(__FILE__), 'setup_variant')
-diff --git a/tests/test_json_encoding.rb b/tests/test_json_encoding.rb
-index 13903cd266..50fb4ea279 100644
---- a/tests/test_json_encoding.rb
-+++ b/tests/test_json_encoding.rb
-@@ -1,5 +1,6 @@
- #!/usr/bin/env ruby
- # encoding: utf-8
-+# frozen_string_literal: false
-
- require 'test/unit'
- require File.join(File.dirname(__FILE__), 'setup_variant')
-diff --git a/tests/test_json_fixtures.rb b/tests/test_json_fixtures.rb
-index c861439573..e192706d6b 100755
---- a/tests/test_json_fixtures.rb
-+++ b/tests/test_json_fixtures.rb
-@@ -1,5 +1,6 @@
- #!/usr/bin/env ruby
- # encoding: utf-8
-+# frozen_string_literal: false
-
- require 'test/unit'
- require File.join(File.dirname(__FILE__), 'setup_variant')
-diff --git a/tests/test_json_generate.rb b/tests/test_json_generate.rb
-index 5da0d2f4f0..50895f6247 100755
---- a/tests/test_json_generate.rb
-+++ b/tests/test_json_generate.rb
-@@ -1,5 +1,6 @@
- #!/usr/bin/env ruby
- # encoding: utf-8
-+# frozen_string_literal: false
-
- require 'test/unit'
- require File.join(File.dirname(__FILE__), 'setup_variant')
-diff --git a/tests/test_json_generic_object.rb b/tests/test_json_generic_object.rb
-index c43c7762be..e04e1a1cb3 100644
---- a/tests/test_json_generic_object.rb
-+++ b/tests/test_json_generic_object.rb
-@@ -1,5 +1,6 @@
- #!/usr/bin/env ruby
- # encoding: utf-8
-+# frozen_string_literal: false
-
- require 'test/unit'
- require File.join(File.dirname(__FILE__), 'setup_variant')
-diff --git a/tests/test_json_string_matching.rb b/tests/test_json_string_matching.rb
-index c233df8c2c..6158231103 100644
---- a/tests/test_json_string_matching.rb
-+++ b/tests/test_json_string_matching.rb
-@@ -1,5 +1,6 @@
- #!/usr/bin/env ruby
- # encoding: utf-8
-+# frozen_string_literal: false
-
- require 'test/unit'
- require File.join(File.dirname(__FILE__), 'setup_variant')
-diff --git a/tests/test_json_unicode.rb b/tests/test_json_unicode.rb
-index 8352d5c6c6..16234f0491 100755
---- a/tests/test_json_unicode.rb
-+++ b/tests/test_json_unicode.rb
-@@ -1,5 +1,6 @@
- #!/usr/bin/env ruby
- # encoding: utf-8
-+# frozen_string_literal: false
-
- require 'test/unit'
- require File.join(File.dirname(__FILE__), 'setup_variant')
-
-commit ee1844bffb1750448defa4c982f3aff240ff536a
-Author: naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Wed Dec 16 05:31:54 2015 +0000
-
- handle ext/ as r53141
-
- g -L frozen_string_literal ext/**/*.rb|xargs ruby -Ka -e'ARGV.each{|fn|puts
- fn;open(fn,"r+"){|f|s=f.read.sub(/\A(#!.*\n)?(#.*coding.*\n)?/,"\\&#
- frozen_string_literal: false\n");f.rewind;f.write s}}'
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53143 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit c4fdfabcc8ea3f6186d1560f7756211fce125be3)
-
-diff --git a/ext/json/ext/generator/extconf.rb b/ext/json/ext/generator/extconf.rb
-index 8627c5f4bd..fd5c4a7f49 100644
---- a/ext/json/ext/generator/extconf.rb
-+++ b/ext/json/ext/generator/extconf.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- require 'mkmf'
-
- $defs << "-DJSON_GENERATOR"
-diff --git a/ext/json/ext/parser/extconf.rb b/ext/json/ext/parser/extconf.rb
-index 2addc53e7f..f7360d46b2 100644
---- a/ext/json/ext/parser/extconf.rb
-+++ b/ext/json/ext/parser/extconf.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- require 'mkmf'
-
- have_func("rb_enc_raise", "ruby.h")
-diff --git a/ext/json/extconf.rb b/ext/json/extconf.rb
-index 850798c643..ad1ef9ba82 100644
---- a/ext/json/extconf.rb
-+++ b/ext/json/extconf.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- require 'mkmf'
- create_makefile('json')
-
-diff --git a/lib/json.rb b/lib/json.rb
-index 24aa385c91..61bb8fae0e 100644
---- a/lib/json.rb
-+++ b/lib/json.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- require 'json/common'
-
- ##
-diff --git a/lib/json/add/bigdecimal.rb b/lib/json/add/bigdecimal.rb
-index 0ef69f12e0..a7646860a2 100644
---- a/lib/json/add/bigdecimal.rb
-+++ b/lib/json/add/bigdecimal.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/complex.rb b/lib/json/add/complex.rb
-index 2723f60103..cff40c1996 100644
---- a/lib/json/add/complex.rb
-+++ b/lib/json/add/complex.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/core.rb b/lib/json/add/core.rb
-index 77d9dc0b20..93b2bff424 100644
---- a/lib/json/add/core.rb
-+++ b/lib/json/add/core.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- # This file requires the implementations of ruby core's custom objects for
- # serialisation/deserialisation.
-
-diff --git a/lib/json/add/date.rb b/lib/json/add/date.rb
-index 4288237db1..20f0e8dc77 100644
---- a/lib/json/add/date.rb
-+++ b/lib/json/add/date.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/date_time.rb b/lib/json/add/date_time.rb
-index 5ea42ea656..757d43c266 100644
---- a/lib/json/add/date_time.rb
-+++ b/lib/json/add/date_time.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/exception.rb b/lib/json/add/exception.rb
-index e6ad257abf..95379d97f5 100644
---- a/lib/json/add/exception.rb
-+++ b/lib/json/add/exception.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/ostruct.rb b/lib/json/add/ostruct.rb
-index da81e107a7..2fa1e88b93 100644
---- a/lib/json/add/ostruct.rb
-+++ b/lib/json/add/ostruct.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/range.rb b/lib/json/add/range.rb
-index e61e553cdb..4dd7ccf0eb 100644
---- a/lib/json/add/range.rb
-+++ b/lib/json/add/range.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/rational.rb b/lib/json/add/rational.rb
-index ee39c20e8d..e83a532775 100644
---- a/lib/json/add/rational.rb
-+++ b/lib/json/add/rational.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/regexp.rb b/lib/json/add/regexp.rb
-index 2fcbb6fb14..4bea64fb19 100644
---- a/lib/json/add/regexp.rb
-+++ b/lib/json/add/regexp.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/struct.rb b/lib/json/add/struct.rb
-index 6847cde99b..c9afe70770 100644
---- a/lib/json/add/struct.rb
-+++ b/lib/json/add/struct.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/symbol.rb b/lib/json/add/symbol.rb
-index 03dc9a56a5..831e5c6173 100644
---- a/lib/json/add/symbol.rb
-+++ b/lib/json/add/symbol.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/add/time.rb b/lib/json/add/time.rb
-index d9834677ac..18e57d7555 100644
---- a/lib/json/add/time.rb
-+++ b/lib/json/add/time.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-diff --git a/lib/json/common.rb b/lib/json/common.rb
-index f44184e138..020615fc1d 100644
---- a/lib/json/common.rb
-+++ b/lib/json/common.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- require 'json/version'
- require 'json/generic_object'
-
-diff --git a/lib/json/ext.rb b/lib/json/ext.rb
-index c5f813181d..2486f084cd 100644
---- a/lib/json/ext.rb
-+++ b/lib/json/ext.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- if ENV['SIMPLECOV_COVERAGE'].to_i == 1
- require 'simplecov'
- SimpleCov.start do
-diff --git a/lib/json/generic_object.rb b/lib/json/generic_object.rb
-index 3a14f0ea7d..2241f6c7ce 100644
---- a/lib/json/generic_object.rb
-+++ b/lib/json/generic_object.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- require 'ostruct'
-
- module JSON
-diff --git a/lib/json/version.rb b/lib/json/version.rb
-index 5a4013dbf6..b5748334b9 100644
---- a/lib/json/version.rb
-+++ b/lib/json/version.rb
-@@ -1,3 +1,4 @@
-+# frozen_string_literal: false
- module JSON
- # JSON version
- VERSION = '1.8.3'
-
-commit 5af0d7c8ca76269f90f987cfa7db700ff968bc10
-Author: nagachika <nagachika@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
-Date: Wed Aug 10 16:30:43 2016 +0000
-
- merge revision(s) 55380: [Backport #12255]
-
- * ext/json/lib/*.rb: Removed some comments. Because these are unnecessary
- class description. [ci skip][Bug #12255][ruby-core:74835]
-
- git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_3@55855 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
- (cherry picked from commit a3600fc3771818028f591969c2d3287fcecfa13c)
-
-diff --git a/lib/json/add/date.rb b/lib/json/add/date.rb
-index 20f0e8dc77..b58af76e10 100644
---- a/lib/json/add/date.rb
-+++ b/lib/json/add/date.rb
-@@ -4,7 +4,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- end
- require 'date'
-
--# Date serialization/deserialization
- class Date
-
- # Deserializes JSON string by converting Julian year <tt>y</tt>, month
-diff --git a/lib/json/add/date_time.rb b/lib/json/add/date_time.rb
-index 757d43c266..f794eb3d7d 100644
---- a/lib/json/add/date_time.rb
-+++ b/lib/json/add/date_time.rb
-@@ -4,7 +4,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- end
- require 'date'
-
--# DateTime serialization/deserialization
- class DateTime
-
- # Deserializes JSON string by converting year <tt>y</tt>, month <tt>m</tt>,
-diff --git a/lib/json/add/exception.rb b/lib/json/add/exception.rb
-index 95379d97f5..caac713c6a 100644
---- a/lib/json/add/exception.rb
-+++ b/lib/json/add/exception.rb
-@@ -3,7 +3,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-
--# Exception serialization/deserialization
- class Exception
-
- # Deserializes JSON string by constructing new Exception object with message
-diff --git a/lib/json/add/ostruct.rb b/lib/json/add/ostruct.rb
-index 2fa1e88b93..1f9ce7b3b4 100644
---- a/lib/json/add/ostruct.rb
-+++ b/lib/json/add/ostruct.rb
-@@ -4,7 +4,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- end
- require 'ostruct'
-
--# OpenStruct serialization/deserialization
- class OpenStruct
-
- # Deserializes JSON string by constructing new Struct object with values
-diff --git a/lib/json/add/range.rb b/lib/json/add/range.rb
-index 4dd7ccf0eb..3ef20150bf 100644
---- a/lib/json/add/range.rb
-+++ b/lib/json/add/range.rb
-@@ -3,7 +3,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-
--# Range serialization/deserialization
- class Range
-
- # Deserializes JSON string by constructing new Range object with arguments
-diff --git a/lib/json/add/regexp.rb b/lib/json/add/regexp.rb
-index 4bea64fb19..41b260f307 100644
---- a/lib/json/add/regexp.rb
-+++ b/lib/json/add/regexp.rb
-@@ -3,7 +3,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-
--# Regexp serialization/deserialization
- class Regexp
-
- # Deserializes JSON string by constructing new Regexp object with source
-diff --git a/lib/json/add/struct.rb b/lib/json/add/struct.rb
-index c9afe70770..d08d88237a 100644
---- a/lib/json/add/struct.rb
-+++ b/lib/json/add/struct.rb
-@@ -3,7 +3,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-
--# Struct serialization/deserialization
- class Struct
-
- # Deserializes JSON string by constructing new Struct object with values
-diff --git a/lib/json/add/symbol.rb b/lib/json/add/symbol.rb
-index 831e5c6173..31b56a294f 100644
---- a/lib/json/add/symbol.rb
-+++ b/lib/json/add/symbol.rb
-@@ -3,7 +3,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-
--# Symbol serialization/deserialization
- class Symbol
- # Returns a hash, that will be turned into a JSON object and represent this
- # object.
-diff --git a/lib/json/add/time.rb b/lib/json/add/time.rb
-index 18e57d7555..80b6434f17 100644
---- a/lib/json/add/time.rb
-+++ b/lib/json/add/time.rb
-@@ -3,7 +3,6 @@ unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
- require 'json'
- end
-
--# Time serialization/deserialization
- class Time
-
- # Deserializes JSON string by converting time since epoch to Time
diff --git a/libre/ruby2.3/ruby-2.3.8-add-json_pure.patch b/libre/ruby2.3/ruby-2.3.8-add-json_pure.patch
deleted file mode 100644
index e543a58f1..000000000
--- a/libre/ruby2.3/ruby-2.3.8-add-json_pure.patch
+++ /dev/null
@@ -1,22 +0,0 @@
-diff --git a/doc/maintainers.rdoc b/doc/maintainers.rdoc
-index 74ee6aaee0..8536a3fe82 100644
---- a/doc/maintainers.rdoc
-+++ b/doc/maintainers.rdoc
-@@ -97,6 +97,8 @@ Zachary Scott (zzak)
- [lib/jcode.rb]
- * 1.8: _unmaintained_
- * 1.9: _deprecated_
-+[ext/json]
-+ NARUSE, Yui (naruse)
- [lib/logger.rb]
- Naotoshi Seo (sonots)
- [lib/mathn.rb]
-diff --git a/lib/json/.document b/lib/json/.document
-new file mode 100644
-index 0000000000..7ae6b614de
---- /dev/null
-+++ b/lib/json/.document
-@@ -0,0 +1,3 @@
-+*.rb
-+add/*.rb
-+pure/*.rb
diff --git a/libre/ruby2.3/ruby-2.3.8-remove-json-ext.patch b/libre/ruby2.3/ruby-2.3.8-remove-json-ext.patch
deleted file mode 100644
index 99e3e825c..000000000
--- a/libre/ruby2.3/ruby-2.3.8-remove-json-ext.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-diff --git a/common.mk b/common.mk
-index da4608bc61..71dcbf477c 100644
---- a/common.mk
-+++ b/common.mk
-@@ -781,8 +781,6 @@ EXT_SRCS = $(srcdir)/ext/ripper/ripper.c \
-
- srcs-ext: $(EXT_SRCS)
-
--srcs-extra: $(srcdir)/ext/json/parser/parser.c
--
- LIB_SRCS = $(srcdir)/lib/unicode_normalize/tables.rb
-
- srcs-lib: $(LIB_SRCS)
-@@ -875,11 +873,6 @@ $(srcdir)/ext/ripper/ripper.c: parse.y id.h
- Q=$(Q) ECHO=$(ECHO) RM="$(RM)" top_srcdir=../.. srcdir=. VPATH="$(PWD)" \
- RUBY="$(BASERUBY)" PATH_SEPARATOR="$(PATH_SEPARATOR)"
-
--$(srcdir)/ext/json/parser/parser.c: $(srcdir)/ext/json/parser/parser.rl
-- $(ECHO) generating $@
-- $(Q) $(CHDIR) $(@D) && $(exec) $(MAKE) -f prereq.mk $(MFLAGS) \
-- Q=$(Q) ECHO=$(ECHO) top_srcdir=../../.. srcdir=. VPATH=../../.. BASERUBY="$(BASERUBY)"
--
- $(srcdir)/ext/rbconfig/sizeof/sizes.c: $(srcdir)/ext/rbconfig/sizeof/depend \
- $(srcdir)/tool/generic_erb.rb $(srcdir)/template/sizes.c.tmpl $(srcdir)/configure.in
- $(ECHO) generating $@
-diff --git a/doc/maintainers.rdoc b/doc/maintainers.rdoc
-index d657626e30..74ee6aaee0 100644
---- a/doc/maintainers.rdoc
-+++ b/doc/maintainers.rdoc
-@@ -269,8 +269,6 @@ Zachary Scott (zzak)
- Nobuyuki Nakada (nobu)
- [ext/io/wait]
- Nobuyuki Nakada (nobu)
--[ext/json]
-- NARUSE, Yui (naruse)
- [ext/mathn/complex]
- * 1.8: 1.9 feature
- * 1.9: Keiju ISHITSUKA (keiju)
-diff --git a/ext/.document b/ext/.document
-index 2e6fc78879..f5da0912ed 100644
---- a/ext/.document
-+++ b/ext/.document
-@@ -35,9 +35,6 @@ io/console/console.c
- io/nonblock/nonblock.c
- io/wait/lib
- io/wait/wait.c
--json/ext/generator/generator.c
--json/ext/parser/parser.c
--json/lib
- mathn/complex/complex.c
- mathn/rational/rational.c
- nkf/lib
-diff --git a/ext/Setup b/ext/Setup
-index 05998e3363..2ca8e9ce9e 100644
---- a/ext/Setup
-+++ b/ext/Setup
-@@ -20,9 +20,6 @@
- #io/console
- #io/nonblock
- #io/wait
--#json
--#json/generator
--#json/parser
- #mathn/complex
- #mathn/rational
- #nkf
-diff --git a/ext/Setup.nacl b/ext/Setup.nacl
-index f205e367c6..4ef8d3972f 100644
---- a/ext/Setup.nacl
-+++ b/ext/Setup.nacl
-@@ -22,9 +22,6 @@
- # io/console
- # io/nonblock
- # io/wait
--# #json
--# json/generator
--# json/parser
- # mathn/complex
- # mathn/rational
- # nkf