Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use the pure-Ruby generator on TruffleRuby as it is much faster #582

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 5 additions & 1 deletion Rakefile
Expand Up @@ -238,7 +238,11 @@ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
task :release => :build
else
desc "Compiling extension"
task :compile => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
if RUBY_ENGINE == 'truffleruby'
task :compile => [ EXT_PARSER_DL ]
else
task :compile => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
end

file EXT_PARSER_DL => EXT_PARSER_SRC do
cd EXT_PARSER_DIR do
Expand Down
9 changes: 7 additions & 2 deletions ext/json/ext/generator/extconf.rb
@@ -1,4 +1,9 @@
require 'mkmf'

$defs << "-DJSON_GENERATOR"
create_makefile 'json/ext/generator'
if RUBY_ENGINE == 'truffleruby'
# The pure-Ruby generator is faster on TruffleRuby, so skip compiling the generator extension
File.write('Makefile', dummy_makefile("").join)
else
$defs << "-DJSON_GENERATOR"
create_makefile 'json/ext/generator'
end
18 changes: 13 additions & 5 deletions lib/json/ext.rb
Expand Up @@ -4,11 +4,19 @@ module JSON
# This module holds all the modules/classes that implement JSON's
# functionality as C extensions.
module Ext
require 'json/ext/parser'
require 'json/ext/generator'
$DEBUG and warn "Using Ext extension for JSON."
JSON.parser = Parser
JSON.generator = Generator
if RUBY_ENGINE == 'truffleruby'
require 'json/ext/parser'
require 'json/pure'
$DEBUG and warn "Using Ext extension for JSON parser and Pure library for JSON generator."
JSON.parser = Parser
JSON.generator = JSON::Pure::Generator
else
require 'json/ext/parser'
require 'json/ext/generator'
$DEBUG and warn "Using Ext extension for JSON."
JSON.parser = Parser
JSON.generator = Generator
end
end

JSON_LOADED = true unless defined?(::JSON::JSON_LOADED)
Expand Down