From cd2f0195a2824bcb88e2173f1f4ecf7ec68528cc Mon Sep 17 00:00:00 2001 From: Randy Stauner Date: Wed, 25 Mar 2026 17:44:19 -0700 Subject: [PATCH] Generate non-frozen strings on TruffleRuby for consistency --- lib/json/truffle_ruby/generator.rb | 10 +++++----- test/json/json_generator_test.rb | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/lib/json/truffle_ruby/generator.rb b/lib/json/truffle_ruby/generator.rb index 13b15459..09459286 100644 --- a/lib/json/truffle_ruby/generator.rb +++ b/lib/json/truffle_ruby/generator.rb @@ -517,7 +517,7 @@ def json_transform(state) if empty? state.depth -= 1 - return '{}' + return +'{}' end delim = ",#{state.object_nl}" @@ -609,7 +609,7 @@ def json_transform(state) if empty? state.depth -= 1 - return '[]' + return +'[]' end result = '['.dup @@ -734,17 +734,17 @@ def to_json(state = nil, *args) module TrueClass # Returns a JSON string for true: 'true'. - def to_json(*) 'true' end + def to_json(*) +'true' end end module FalseClass # Returns a JSON string for false: 'false'. - def to_json(*) 'false' end + def to_json(*) +'false' end end module NilClass # Returns a JSON string for nil: 'null'. - def to_json(*) 'null' end + def to_json(*) +'null' end end end end diff --git a/test/json/json_generator_test.rb b/test/json/json_generator_test.rb index eb5a8ca5..1e44117e 100755 --- a/test/json/json_generator_test.rb +++ b/test/json/json_generator_test.rb @@ -84,6 +84,24 @@ def test_dump_strict assert_equal '"World"', "World".to_json(strict: true) end + def test_not_frozen + [ + [[], '[]'], + [{}, '{}'], + ["string", '"string"'], + [:sym, '"sym"'], + [1, '1'], + [1.0, '1.0'], + [true, 'true'], + [false, 'false'], + [nil, 'null'], + ].each do |(obj, exp)| + dumped = dump(obj, strict: true) + assert_equal exp, dumped + refute_predicate dumped, :frozen? + end + end + def test_state_depth_to_json depth = Object.new def depth.to_json(state)