diff -Nur json-1.8.1.orig/Rakefile json-1.8.1/Rakefile
--- json-1.8.1.orig/Rakefile	2013-10-17 09:53:47.000000000 -0200
+++ json-1.8.1/Rakefile	2015-04-14 15:33:02.055063119 -0300
@@ -14,8 +14,7 @@
 require 'rake/clean'
 CLOBBER.include 'doc', 'Gemfile.lock'
 CLEAN.include FileList['diagrams/*.*'], 'doc', 'coverage', 'tmp',
-  FileList["ext/**/{Makefile,mkmf.log}"], 'build', 'dist', FileList['**/*.rbc'],
-  FileList["{ext,lib}/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def,jar,class,dSYM}"],
+  FileList["lib/**/*.{bundle,pdb,lib,manifest,exp,def,jar,class,dSYM}"],
   FileList['java/src/**/*.class']
 
 require 'rake/testtask'
@@ -34,15 +33,6 @@
 PKG_VERSION       = File.read('VERSION').chomp
 PKG_FILES         = FileList[`git ls-files`.split(/\n/)]
 
-EXT_ROOT_DIR      = 'ext/json/ext'
-EXT_PARSER_DIR    = "#{EXT_ROOT_DIR}/parser"
-EXT_PARSER_DL     = "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}"
-RAGEL_PATH        = "#{EXT_PARSER_DIR}/parser.rl"
-EXT_PARSER_SRC    = "#{EXT_PARSER_DIR}/parser.c"
-EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
-EXT_GENERATOR_DL  = "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}"
-EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
-
 JAVA_DIR            = "java/src/json/ext"
 JAVA_RAGEL_PATH     = "#{JAVA_DIR}/Parser.rl"
 JAVA_PARSER_SRC     = "#{JAVA_DIR}/Parser.java"
@@ -59,20 +49,8 @@
   ruby 'install.rb'
 end
 
-task :install_ext_really do
-  sitearchdir = CONFIG["sitearchdir"]
-  cd 'ext' do
-    for file in Dir["json/ext/*.#{CONFIG['DLEXT']}"]
-      d = File.join(sitearchdir, file)
-      mkdir_p File.dirname(d)
-      install(file, d)
-    end
-    warn " *** Installed EXT ruby library."
-  end
-end
-
 desc "Installing library (extension)"
-task :install_ext => [ :compile, :install_pure, :install_ext_really ]
+task :install_ext => [ :compile, :install_pure ]
 
 desc "Installing library (extension)"
 task :install => :install_ext
@@ -118,12 +96,10 @@
     s.name = 'json'
     s.version = PKG_VERSION
     s.summary = PKG_TITLE
-    s.description = "This is a JSON implementation as a Ruby extension in C."
+    s.description = "This is a JSON implementation in pure Ruby."
 
     s.files = PKG_FILES
 
-    s.extensions = FileList['ext/**/extconf.rb']
-
     s.require_path = 'lib'
     s.add_development_dependency 'permutation'
     s.add_development_dependency 'sdoc', '~>0.3.16'
@@ -312,96 +288,21 @@
   task :release => :build
 else
   desc "Compiling extension"
-  task :compile => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
-
-  file EXT_PARSER_DL => EXT_PARSER_SRC do
-    cd EXT_PARSER_DIR do
-      ruby 'extconf.rb'
-      sh MAKE
-    end
-    cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
-  end
-
-  file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
-    cd EXT_GENERATOR_DIR do
-      ruby 'extconf.rb'
-      sh MAKE
-    end
-    cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
-  end
+  task :compile
 
   desc "Testing library (extension)"
-  task :test_ext => [ :compile, :do_test_ext ]
-
-  UndocumentedTestTask.new do |t|
-    t.name = 'do_test_ext'
-    t.libs << 'ext' << 'lib'
-    t.test_files = FileList['tests/test_*.rb']
-    t.verbose = true
-    t.options = '-v'
-  end
+  task :test_ext => :test_pure
 
   desc "Create RDOC documentation"
-  task :doc => [ :version, EXT_PARSER_SRC ] do
-    sh "sdoc -o doc -t '#{PKG_TITLE}' -m README.rdoc README.rdoc lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
-  end
-
-  desc "Generate parser with ragel"
-  task :ragel => EXT_PARSER_SRC
-
-  desc "Delete the ragel generated C source"
-  task :ragel_clean do
-    rm_rf EXT_PARSER_SRC
+  task :doc => :version do
+    sh "sdoc -o doc -t '#{PKG_TITLE}' -m README.rdoc README.rdoc lib/json.rb #{FileList['lib/json/**/*.rb']}"
   end
 
   desc "Update the tags file"
   task :tags do
-    system 'ctags', *Dir['**/*.{rb,c,h,java}']
-  end
-
-  file EXT_PARSER_SRC => RAGEL_PATH do
-    cd EXT_PARSER_DIR do
-      if RAGEL_CODEGEN == 'ragel'
-        sh "ragel parser.rl -G2 -o parser.c"
-      else
-        sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
-      end
-      src = File.read("parser.c").gsub(/[ \t]+$/, '')
-      File.open("parser.c", "w") {|f| f.print src}
-    end
-  end
-
-  desc "Generate diagrams of ragel parser (ps)"
-  task :ragel_dot_ps do
-    root = 'diagrams'
-    specs = []
-    File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
-    for s in specs
-      if RAGEL_DOTGEN == 'ragel'
-        sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tps -o#{root}/#{s}.ps"
-      else
-        sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
-      end
-    end
-  end
-
-  desc "Generate diagrams of ragel parser (png)"
-  task :ragel_dot_png do
-    root = 'diagrams'
-    specs = []
-    File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
-    for s in specs
-      if RAGEL_DOTGEN == 'ragel'
-        sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tpng -o#{root}/#{s}.png"
-      else
-        sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
-      end
-    end
+    system 'ctags', *Dir['**/*.{rb,java}']
   end
 
-  desc "Generate diagrams of ragel parser"
-  task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
-
   desc "Build all gems and archives for a new release of json and json_pure."
   task :build => [ :clean, :gemspec, :package ]
 
diff -Nur json-1.8.1.orig/json.gemspec json-1.8.1/json.gemspec
--- json-1.8.1.orig/json.gemspec	2013-10-17 09:53:47.000000000 -0200
+++ json-1.8.1/json.gemspec	2015-04-14 15:33:02.055063119 -0300
@@ -8,11 +8,10 @@
   s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
   s.authors = ["Florian Frank"]
   s.date = "2013-10-17"
-  s.description = "This is a JSON implementation as a Ruby extension in C."
+  s.description = "This is a JSON implementation in pure Ruby."
   s.email = "flori@ping.de"
-  s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb"]
   s.extra_rdoc_files = ["README.rdoc"]
-  s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "ext/json/ext/fbuffer/fbuffer.h", "ext/json/ext/generator/depend", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser/depend", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/parser.rl", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_generic_object.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
+  s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_generic_object.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
   s.homepage = "http://flori.github.com/json"
   s.licenses = ["Ruby"]
   s.rdoc_options = ["--title", "JSON implemention for Ruby", "--main", "README.rdoc"]
diff -Nur json-1.8.1.orig/json_pure.gemspec json-1.8.1/json_pure.gemspec
--- json-1.8.1.orig/json_pure.gemspec	2013-10-17 09:53:47.000000000 -0200
+++ json-1.8.1/json_pure.gemspec	2015-04-14 15:33:02.055063119 -0300
@@ -11,7 +11,7 @@
   s.description = "This is a JSON implementation in pure Ruby."
   s.email = "flori@ping.de"
   s.extra_rdoc_files = ["README.rdoc"]
-  s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "ext/json/ext/fbuffer/fbuffer.h", "ext/json/ext/generator/depend", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser/depend", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/parser.rl", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_generic_object.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
+  s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_generic_object.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
   s.homepage = "http://flori.github.com/json"
   s.licenses = ["Ruby"]
   s.rdoc_options = ["--title", "JSON implemention for ruby", "--main", "README.rdoc"]
diff -Nur json-1.8.1.orig/lib/json/ext.rb json-1.8.1/lib/json/ext.rb
--- json-1.8.1.orig/lib/json/ext.rb	2013-10-17 09:53:47.000000000 -0200
+++ json-1.8.1/lib/json/ext.rb	2015-04-14 15:33:02.055063119 -0300
@@ -5,16 +5,18 @@
   end
 end
 require 'json/common'
+require 'json/pure/parser'
+require 'json/pure/generator'
 
 module JSON
   # This module holds all the modules/classes that implement JSON's
-  # functionality as C extensions.
+  # functionality in pure ruby.
+  Ext = Pure
+
   module Ext
-    require 'json/ext/parser'
-    require 'json/ext/generator'
-    $DEBUG and warn "Using Ext extension for JSON."
-    JSON.parser = Parser
-    JSON.generator = Generator
+    $DEBUG and warn "Using Pure library for JSON."
+    JSON.parser = Pure::Parser
+    JSON.generator = Pure::Generator
   end
 
   JSON_LOADED = true unless defined?(::JSON::JSON_LOADED)
diff -Nur json-1.8.1.orig/lib/json.rb json-1.8.1/lib/json.rb
--- json-1.8.1.orig/lib/json.rb	2013-10-17 09:53:47.000000000 -0200
+++ json-1.8.1/lib/json.rb	2015-04-14 15:33:02.055063119 -0300
@@ -54,9 +54,5 @@
 module JSON
   require 'json/version'
 
-  begin
-    require 'json/ext'
-  rescue LoadError
-    require 'json/pure'
-  end
+  require 'json/pure'
 end
diff -Nur ruby-2.2.2.orig/common.mk ruby-2.2.2/common.mk
--- ruby-2.2.2.orig/common.mk	2015-03-22 00:39:38.000000000 -0300
+++ ruby-2.2.2/common.mk	2015-04-14 15:33:02.058396283 -0300
@@ -15,7 +15,7 @@
 
 RUBYLIB       = $(PATH_SEPARATOR)
 RUBYOPT       = -
-RUN_OPTS      = --disable-gems
+RUN_OPTS      = --disable-gems -I$(srcdir)/../json-1.8.1/lib
 
 SPEC_GIT_BASE = git://github.com/ruby
 MSPEC_GIT_URL = $(SPEC_GIT_BASE)/mspec.git
@@ -728,8 +728,6 @@
 
 srcs-ext: $(EXT_SRCS)
 
-srcs-extra: $(srcdir)/ext/json/parser/parser.c
-
 LIB_SRCS = $(srcdir)/lib/unicode_normalize/tables.rb
 
 srcs-lib: $(LIB_SRCS)
@@ -816,11 +814,6 @@
 		top_srcdir=../.. srcdir=. \
 		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 -Nur ruby-2.2.2.orig/defs/default_gems ruby-2.2.2/defs/default_gems
--- ruby-2.2.2.orig/defs/default_gems	2014-07-15 00:43:04.000000000 -0300
+++ ruby-2.2.2/defs/default_gems	2015-04-14 15:33:02.058396283 -0300
@@ -1,4 +1,3 @@
 # gem		base directory		versioning file			[executable files under bin]
 rake		lib/rake		lib/rake.rb			[rake]
 rdoc		lib/rdoc		lib/rdoc.rb			[rdoc ri]
-json		ext/json		ext/json/lib/json/version.rb
diff -Nur ruby-2.2.2.orig/ext/.document ruby-2.2.2/ext/.document
--- ruby-2.2.2.orig/ext/.document	2014-08-02 11:55:36.000000000 -0300
+++ ruby-2.2.2/ext/.document	2015-04-14 15:33:02.058396283 -0300
@@ -35,9 +35,6 @@
 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 -Nur ruby-2.2.2.orig/gems/bundled_gems ruby-2.2.2/gems/bundled_gems
--- ruby-2.2.2.orig/gems/bundled_gems	2014-12-12 11:00:15.000000000 -0200
+++ ruby-2.2.2/gems/bundled_gems	2015-04-14 15:33:02.058396283 -0300
@@ -1,3 +1,4 @@
 power_assert 0.2.2
 test-unit 3.0.8
 minitest 5.4.3
+json 1.8.1
diff -Nur ruby-2.2.2.orig/test/ruby/test_module.rb ruby-2.2.2/test/ruby/test_module.rb
--- ruby-2.2.2.orig/test/ruby/test_module.rb	2015-04-12 12:41:32.000000000 -0300
+++ ruby-2.2.2/test/ruby/test_module.rb	2015-04-14 15:33:02.058396283 -0300
@@ -202,7 +202,6 @@
 
     ancestors = Object.ancestors
     mixins = ancestors - [Object, Kernel, BasicObject]
-    mixins << JSON::Ext::Generator::GeneratorMethods::String if defined?(JSON::Ext::Generator::GeneratorMethods::String)
     assert_equal([Object, Kernel, BasicObject], ancestors - mixins)
     assert_equal([String, Comparable, Object, Kernel, BasicObject], String.ancestors - mixins)
   end
@@ -436,7 +435,6 @@
     assert_equal([Mixin], User.included_modules)
 
     mixins = Object.included_modules - [Kernel]
-    mixins << JSON::Ext::Generator::GeneratorMethods::String if defined?(JSON::Ext::Generator::GeneratorMethods::String)
     assert_equal([Kernel], Object.included_modules - mixins)
     assert_equal([Comparable, Kernel], String.included_modules - mixins)
   end