json 1.8.3 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of json might be problematic. Click here for more details.

Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +4 -10
  3. data/CHANGES +12 -0
  4. data/Gemfile +1 -2
  5. data/{README.rdoc → README.md} +145 -111
  6. data/Rakefile +26 -29
  7. data/VERSION +1 -1
  8. data/ext/json/ext/generator/generator.c +38 -55
  9. data/ext/json/ext/generator/generator.h +7 -1
  10. data/ext/json/ext/parser/extconf.rb +3 -0
  11. data/ext/json/ext/parser/parser.c +309 -439
  12. data/ext/json/ext/parser/parser.h +0 -1
  13. data/ext/json/ext/parser/parser.rl +67 -160
  14. data/ext/json/extconf.rb +0 -1
  15. data/java/src/json/ext/ByteListTranscoder.java +1 -2
  16. data/java/src/json/ext/Generator.java +11 -12
  17. data/java/src/json/ext/GeneratorMethods.java +1 -2
  18. data/java/src/json/ext/GeneratorService.java +1 -2
  19. data/java/src/json/ext/GeneratorState.java +3 -56
  20. data/java/src/json/ext/OptionsReader.java +2 -3
  21. data/java/src/json/ext/Parser.java +110 -411
  22. data/java/src/json/ext/Parser.rl +25 -119
  23. data/java/src/json/ext/ParserService.java +1 -2
  24. data/java/src/json/ext/RuntimeInfo.java +1 -6
  25. data/java/src/json/ext/StringDecoder.java +1 -2
  26. data/java/src/json/ext/StringEncoder.java +5 -0
  27. data/java/src/json/ext/Utils.java +1 -2
  28. data/json-java.gemspec +15 -0
  29. data/json.gemspec +0 -0
  30. data/json_pure.gemspec +23 -26
  31. data/lib/json/add/bigdecimal.rb +1 -0
  32. data/lib/json/add/complex.rb +2 -1
  33. data/lib/json/add/core.rb +1 -0
  34. data/lib/json/add/date.rb +1 -1
  35. data/lib/json/add/date_time.rb +1 -1
  36. data/lib/json/add/exception.rb +1 -1
  37. data/lib/json/add/ostruct.rb +1 -1
  38. data/lib/json/add/range.rb +1 -1
  39. data/lib/json/add/rational.rb +1 -0
  40. data/lib/json/add/regexp.rb +1 -1
  41. data/lib/json/add/struct.rb +1 -1
  42. data/lib/json/add/symbol.rb +1 -1
  43. data/lib/json/add/time.rb +1 -1
  44. data/lib/json/common.rb +24 -52
  45. data/lib/json/ext.rb +0 -6
  46. data/lib/json/generic_object.rb +5 -4
  47. data/lib/json/pure/generator.rb +61 -125
  48. data/lib/json/pure/parser.rb +28 -80
  49. data/lib/json/pure.rb +2 -8
  50. data/lib/json/version.rb +2 -1
  51. data/lib/json.rb +1 -0
  52. data/references/rfc7159.txt +899 -0
  53. data/tests/fixtures/obsolete_fail1.json +1 -0
  54. data/tests/{test_json_addition.rb → json_addition_test.rb} +22 -25
  55. data/tests/json_common_interface_test.rb +126 -0
  56. data/tests/json_encoding_test.rb +105 -0
  57. data/tests/json_ext_parser_test.rb +15 -0
  58. data/tests/{test_json_fixtures.rb → json_fixtures_test.rb} +5 -8
  59. data/tests/{test_json_generate.rb → json_generator_test.rb} +76 -37
  60. data/tests/{test_json_generic_object.rb → json_generic_object_test.rb} +15 -8
  61. data/tests/json_parser_test.rb +448 -0
  62. data/tests/json_string_matching_test.rb +38 -0
  63. data/tests/test_helper.rb +23 -0
  64. data/tools/diff.sh +18 -0
  65. data/tools/fuzz.rb +1 -9
  66. metadata +27 -42
  67. data/COPYING +0 -58
  68. data/COPYING-json-jruby +0 -57
  69. data/GPL +0 -340
  70. data/TODO +0 -1
  71. data/tests/fixtures/fail1.json +0 -1
  72. data/tests/setup_variant.rb +0 -11
  73. data/tests/test_json.rb +0 -553
  74. data/tests/test_json_encoding.rb +0 -65
  75. data/tests/test_json_string_matching.rb +0 -39
  76. data/tests/test_json_unicode.rb +0 -72
data/Rakefile CHANGED
@@ -23,10 +23,6 @@ class UndocumentedTestTask < Rake::TestTask
23
23
  def desc(*) end
24
24
  end
25
25
 
26
- def skip_sdoc(src)
27
- src.gsub(/^.*sdoc.*/) { |s| s + ' if RUBY_VERSION > "1.8.6"' }
28
- end
29
-
30
26
  MAKE = ENV['MAKE'] || %w[gmake make].find { |c| system(c, '-v') }
31
27
  BUNDLE = ENV['BUNDLE'] || %w[bundle].find { |c| system(c, '-v') }
32
28
  PKG_NAME = 'json'
@@ -87,13 +83,12 @@ if defined?(Gem) and defined?(Gem::PackageTask)
87
83
  s.files = PKG_FILES
88
84
 
89
85
  s.require_path = 'lib'
90
- s.add_development_dependency 'permutation'
91
- s.add_development_dependency 'sdoc', '~>0.3.16'
92
- s.add_development_dependency 'rake', '~>0.9.2'
86
+ s.add_development_dependency 'rake'
87
+ s.add_development_dependency 'test-unit', '~> 2.0'
93
88
 
94
- s.extra_rdoc_files << 'README.rdoc'
89
+ s.extra_rdoc_files << 'README.md'
95
90
  s.rdoc_options <<
96
- '--title' << 'JSON implemention for ruby' << '--main' << 'README.rdoc'
91
+ '--title' << 'JSON implemention for ruby' << '--main' << 'README.md'
97
92
  s.test_files.concat Dir['./tests/test_*.rb']
98
93
 
99
94
  s.author = "Florian Frank"
@@ -105,7 +100,7 @@ if defined?(Gem) and defined?(Gem::PackageTask)
105
100
  desc 'Creates a json_pure.gemspec file'
106
101
  task :gemspec_pure => :version do
107
102
  File.open('json_pure.gemspec', 'w') do |gemspec|
108
- gemspec.write skip_sdoc(spec_pure.to_ruby)
103
+ gemspec.write spec_pure.to_ruby
109
104
  end
110
105
  end
111
106
 
@@ -125,24 +120,25 @@ if defined?(Gem) and defined?(Gem::PackageTask)
125
120
  s.extensions = FileList['ext/**/extconf.rb']
126
121
 
127
122
  s.require_path = 'lib'
128
- s.add_development_dependency 'permutation'
129
- s.add_development_dependency 'sdoc', '~>0.3.16'
123
+ s.add_development_dependency 'rake'
124
+ s.add_development_dependency 'test-unit', '~> 2.0'
130
125
 
131
- s.extra_rdoc_files << 'README.rdoc'
126
+ s.extra_rdoc_files << 'README.md'
132
127
  s.rdoc_options <<
133
- '--title' << 'JSON implemention for Ruby' << '--main' << 'README.rdoc'
128
+ '--title' << 'JSON implemention for Ruby' << '--main' << 'README.md'
134
129
  s.test_files.concat Dir['./tests/test_*.rb']
135
130
 
136
131
  s.author = "Florian Frank"
137
132
  s.email = "flori@ping.de"
138
133
  s.homepage = "http://flori.github.com/#{PKG_NAME}"
139
134
  s.license = 'Ruby'
135
+ s.required_ruby_version = '~> 2.0'
140
136
  end
141
137
 
142
138
  desc 'Creates a json.gemspec file'
143
139
  task :gemspec_ext => :version do
144
140
  File.open('json.gemspec', 'w') do |gemspec|
145
- gemspec.write skip_sdoc(spec_ext.to_ruby)
141
+ gemspec.write spec_ext.to_ruby
146
142
  end
147
143
  end
148
144
 
@@ -161,6 +157,7 @@ task :version do
161
157
  puts m
162
158
  File.open(File.join('lib', 'json', 'version.rb'), 'w') do |v|
163
159
  v.puts <<EOT
160
+ # frozen_string_literal: false
164
161
  module JSON
165
162
  # JSON version
166
163
  VERSION = '#{PKG_VERSION}'
@@ -173,13 +170,17 @@ EOT
173
170
  end
174
171
  end
175
172
 
173
+ task :check_env do
174
+ ENV.key?('JSON') or fail "JSON env var is required"
175
+ end
176
+
176
177
  desc "Testing library (pure ruby)"
177
- task :test_pure => [ :clean, :do_test_pure ]
178
+ task :test_pure => [ :clean, :check_env, :do_test_pure ]
178
179
 
179
180
  UndocumentedTestTask.new do |t|
180
181
  t.name = 'do_test_pure'
181
- t.libs << 'lib'
182
- t.test_files = FileList['tests/test_*.rb']
182
+ t.libs << 'lib' << 'tests'
183
+ t.test_files = FileList['tests/*_test.rb']
183
184
  t.verbose = true
184
185
  t.options = '-v'
185
186
  end
@@ -257,12 +258,12 @@ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
257
258
  end
258
259
 
259
260
  desc "Testing library (jruby)"
260
- task :test_ext => [ :create_jar, :do_test_ext ]
261
+ task :test_ext => [ :create_jar, :check_env, :do_test_ext ]
261
262
 
262
263
  UndocumentedTestTask.new do |t|
263
264
  t.name = 'do_test_ext'
264
- t.libs << 'lib'
265
- t.test_files = FileList['tests/test_*.rb']
265
+ t.libs << 'lib' << 'tests'
266
+ t.test_files = FileList['tests/*_test.rb']
266
267
  t.verbose = true
267
268
  t.options = '-v'
268
269
  end
@@ -331,21 +332,16 @@ else
331
332
  end
332
333
 
333
334
  desc "Testing library (extension)"
334
- task :test_ext => [ :compile, :do_test_ext ]
335
+ task :test_ext => [ :compile, :check_env, :do_test_ext ]
335
336
 
336
337
  UndocumentedTestTask.new do |t|
337
338
  t.name = 'do_test_ext'
338
- t.libs << 'ext' << 'lib'
339
- t.test_files = FileList['tests/test_*.rb']
339
+ t.libs << 'ext' << 'lib' << 'tests'
340
+ t.test_files = FileList['tests/*_test.rb']
340
341
  t.verbose = true
341
342
  t.options = '-v'
342
343
  end
343
344
 
344
- desc "Create RDOC documentation"
345
- task :doc => [ :version, EXT_PARSER_SRC ] do
346
- 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}"
347
- end
348
-
349
345
  desc "Generate parser with ragel"
350
346
  task :ragel => EXT_PARSER_SRC
351
347
 
@@ -367,6 +363,7 @@ else
367
363
  sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
368
364
  end
369
365
  src = File.read("parser.c").gsub(/[ \t]+$/, '')
366
+ src.gsub!(/^static const int (JSON_.*=.*);$/, 'enum {\1};')
370
367
  File.open("parser.c", "w") {|f| f.print src}
371
368
  end
372
369
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.3
1
+ 2.0.0
@@ -7,14 +7,20 @@ static ID i_encoding, i_encode;
7
7
  #endif
8
8
 
9
9
  static VALUE mJSON, mExt, mGenerator, cState, mGeneratorMethods, mObject,
10
- mHash, mArray, mFixnum, mBignum, mFloat, mString, mString_Extend,
10
+ mHash, mArray,
11
+ #ifdef RUBY_INTEGER_UNIFICATION
12
+ mInteger,
13
+ #else
14
+ mFixnum, mBignum,
15
+ #endif
16
+ mFloat, mString, mString_Extend,
11
17
  mTrueClass, mFalseClass, mNilClass, eGeneratorError,
12
18
  eNestingError, CRegexp_MULTILINE, CJSON_SAFE_STATE_PROTOTYPE,
13
19
  i_SAFE_STATE_PROTOTYPE;
14
20
 
15
21
  static ID i_to_s, i_to_json, i_new, i_indent, i_space, i_space_before,
16
22
  i_object_nl, i_array_nl, i_max_nesting, i_allow_nan, i_ascii_only,
17
- i_quirks_mode, i_pack, i_unpack, i_create_id, i_extend, i_key_p,
23
+ i_pack, i_unpack, i_create_id, i_extend, i_key_p,
18
24
  i_aref, i_send, i_respond_to_p, i_match, i_keys, i_depth,
19
25
  i_buffer_initial_length, i_dup;
20
26
 
@@ -342,6 +348,18 @@ static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self) {
342
348
  GENERATE_JSON(array);
343
349
  }
344
350
 
351
+ #ifdef RUBY_INTEGER_UNIFICATION
352
+ /*
353
+ * call-seq: to_json(*)
354
+ *
355
+ * Returns a JSON string representation for this Integer number.
356
+ */
357
+ static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self)
358
+ {
359
+ GENERATE_JSON(integer);
360
+ }
361
+
362
+ #else
345
363
  /*
346
364
  * call-seq: to_json(*)
347
365
  *
@@ -361,6 +379,7 @@ static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self)
361
379
  {
362
380
  GENERATE_JSON(bignum);
363
381
  }
382
+ #endif
364
383
 
365
384
  /*
366
385
  * call-seq: to_json(*)
@@ -622,8 +641,6 @@ static VALUE cState_configure(VALUE self, VALUE opts)
622
641
  state->allow_nan = RTEST(tmp);
623
642
  tmp = rb_hash_aref(opts, ID2SYM(i_ascii_only));
624
643
  state->ascii_only = RTEST(tmp);
625
- tmp = rb_hash_aref(opts, ID2SYM(i_quirks_mode));
626
- state->quirks_mode = RTEST(tmp);
627
644
  return self;
628
645
  }
629
646
 
@@ -657,7 +674,6 @@ static VALUE cState_to_h(VALUE self)
657
674
  rb_hash_aset(result, ID2SYM(i_array_nl), rb_str_new(state->array_nl, state->array_nl_len));
658
675
  rb_hash_aset(result, ID2SYM(i_allow_nan), state->allow_nan ? Qtrue : Qfalse);
659
676
  rb_hash_aset(result, ID2SYM(i_ascii_only), state->ascii_only ? Qtrue : Qfalse);
660
- rb_hash_aset(result, ID2SYM(i_quirks_mode), state->quirks_mode ? Qtrue : Qfalse);
661
677
  rb_hash_aset(result, ID2SYM(i_max_nesting), LONG2FIX(state->max_nesting));
662
678
  rb_hash_aset(result, ID2SYM(i_depth), LONG2FIX(state->depth));
663
679
  rb_hash_aset(result, ID2SYM(i_buffer_initial_length), LONG2FIX(state->buffer_initial_length));
@@ -825,6 +841,15 @@ static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_S
825
841
  fbuffer_append_str(buffer, tmp);
826
842
  }
827
843
 
844
+ #ifdef RUBY_INTEGER_UNIFICATION
845
+ static void generate_json_integer(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
846
+ {
847
+ if (FIXNUM_P(obj))
848
+ generate_json_fixnum(buffer, Vstate, state, obj);
849
+ else
850
+ generate_json_bignum(buffer, Vstate, state, obj);
851
+ }
852
+ #endif
828
853
  static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
829
854
  {
830
855
  double value = RFLOAT_VALUE(obj);
@@ -858,9 +883,9 @@ static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *s
858
883
  generate_json_false(buffer, Vstate, state, obj);
859
884
  } else if (obj == Qtrue) {
860
885
  generate_json_true(buffer, Vstate, state, obj);
861
- } else if (klass == rb_cFixnum) {
886
+ } else if (FIXNUM_P(obj)) {
862
887
  generate_json_fixnum(buffer, Vstate, state, obj);
863
- } else if (klass == rb_cBignum) {
888
+ } else if (RB_TYPE_P(obj, T_BIGNUM)) {
864
889
  generate_json_bignum(buffer, Vstate, state, obj);
865
890
  } else if (klass == rb_cFloat) {
866
891
  generate_json_float(buffer, Vstate, state, obj);
@@ -871,7 +896,7 @@ static void generate_json(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *s
871
896
  } else {
872
897
  tmp = rb_funcall(obj, i_to_s, 0);
873
898
  Check_Type(tmp, T_STRING);
874
- generate_json(buffer, Vstate, state, tmp);
899
+ generate_json_string(buffer, Vstate, state, tmp);
875
900
  }
876
901
  }
877
902
 
@@ -914,21 +939,6 @@ static VALUE cState_partial_generate(VALUE self, VALUE obj)
914
939
  return fbuffer_to_s(buffer);
915
940
  }
916
941
 
917
- /*
918
- * This function returns true if string is either a JSON array or JSON object.
919
- * It might suffer from false positives, e. g. syntactically incorrect JSON in
920
- * the string or certain UTF-8 characters on the right hand side.
921
- */
922
- static int isArrayOrObject(VALUE string)
923
- {
924
- long string_len = RSTRING_LEN(string);
925
- char *p = RSTRING_PTR(string), *q = p + string_len - 1;
926
- if (string_len < 2) return 0;
927
- for (; p < q && isspace((unsigned char)*p); p++);
928
- for (; q > p && isspace((unsigned char)*q); q--);
929
- return (*p == '[' && *q == ']') || (*p == '{' && *q == '}');
930
- }
931
-
932
942
  /*
933
943
  * call-seq: generate(obj)
934
944
  *
@@ -940,9 +950,6 @@ static VALUE cState_generate(VALUE self, VALUE obj)
940
950
  {
941
951
  VALUE result = cState_partial_generate(self, obj);
942
952
  GET_STATE(self);
943
- if (!state->quirks_mode && !isArrayOrObject(result)) {
944
- rb_raise(eGeneratorError, "only generation of JSON objects or arrays allowed");
945
- }
946
953
  return result;
947
954
  }
948
955
 
@@ -961,8 +968,6 @@ static VALUE cState_generate(VALUE self, VALUE obj)
961
968
  * * *allow_nan*: true if NaN, Infinity, and -Infinity should be
962
969
  * generated, otherwise an exception is thrown, if these values are
963
970
  * encountered. This options defaults to false.
964
- * * *quirks_mode*: Enables quirks_mode for parser, that is for example
965
- * generating single JSON values instead of documents is possible.
966
971
  * * *buffer_initial_length*: sets the initial length of the generator's
967
972
  * internal buffer.
968
973
  */
@@ -1269,29 +1274,6 @@ static VALUE cState_ascii_only_p(VALUE self)
1269
1274
  return state->ascii_only ? Qtrue : Qfalse;
1270
1275
  }
1271
1276
 
1272
- /*
1273
- * call-seq: quirks_mode?
1274
- *
1275
- * Returns true, if quirks mode is enabled. Otherwise returns false.
1276
- */
1277
- static VALUE cState_quirks_mode_p(VALUE self)
1278
- {
1279
- GET_STATE(self);
1280
- return state->quirks_mode ? Qtrue : Qfalse;
1281
- }
1282
-
1283
- /*
1284
- * call-seq: quirks_mode=(enable)
1285
- *
1286
- * If set to true, enables the quirks_mode mode.
1287
- */
1288
- static VALUE cState_quirks_mode_set(VALUE self, VALUE enable)
1289
- {
1290
- GET_STATE(self);
1291
- state->quirks_mode = RTEST(enable);
1292
- return Qnil;
1293
- }
1294
-
1295
1277
  /*
1296
1278
  * call-seq: depth
1297
1279
  *
@@ -1380,9 +1362,6 @@ void Init_generator(void)
1380
1362
  rb_define_method(cState, "check_circular?", cState_check_circular_p, 0);
1381
1363
  rb_define_method(cState, "allow_nan?", cState_allow_nan_p, 0);
1382
1364
  rb_define_method(cState, "ascii_only?", cState_ascii_only_p, 0);
1383
- rb_define_method(cState, "quirks_mode?", cState_quirks_mode_p, 0);
1384
- rb_define_method(cState, "quirks_mode", cState_quirks_mode_p, 0);
1385
- rb_define_method(cState, "quirks_mode=", cState_quirks_mode_set, 1);
1386
1365
  rb_define_method(cState, "depth", cState_depth, 0);
1387
1366
  rb_define_method(cState, "depth=", cState_depth_set, 1);
1388
1367
  rb_define_method(cState, "buffer_initial_length", cState_buffer_initial_length, 0);
@@ -1402,10 +1381,15 @@ void Init_generator(void)
1402
1381
  rb_define_method(mHash, "to_json", mHash_to_json, -1);
1403
1382
  mArray = rb_define_module_under(mGeneratorMethods, "Array");
1404
1383
  rb_define_method(mArray, "to_json", mArray_to_json, -1);
1384
+ #ifdef RUBY_INTEGER_UNIFICATION
1385
+ mInteger = rb_define_module_under(mGeneratorMethods, "Integer");
1386
+ rb_define_method(mInteger, "to_json", mInteger_to_json, -1);
1387
+ #else
1405
1388
  mFixnum = rb_define_module_under(mGeneratorMethods, "Fixnum");
1406
1389
  rb_define_method(mFixnum, "to_json", mFixnum_to_json, -1);
1407
1390
  mBignum = rb_define_module_under(mGeneratorMethods, "Bignum");
1408
1391
  rb_define_method(mBignum, "to_json", mBignum_to_json, -1);
1392
+ #endif
1409
1393
  mFloat = rb_define_module_under(mGeneratorMethods, "Float");
1410
1394
  rb_define_method(mFloat, "to_json", mFloat_to_json, -1);
1411
1395
  mString = rb_define_module_under(mGeneratorMethods, "String");
@@ -1434,7 +1418,6 @@ void Init_generator(void)
1434
1418
  i_max_nesting = rb_intern("max_nesting");
1435
1419
  i_allow_nan = rb_intern("allow_nan");
1436
1420
  i_ascii_only = rb_intern("ascii_only");
1437
- i_quirks_mode = rb_intern("quirks_mode");
1438
1421
  i_depth = rb_intern("depth");
1439
1422
  i_buffer_initial_length = rb_intern("buffer_initial_length");
1440
1423
  i_pack = rb_intern("pack");
@@ -73,7 +73,6 @@ typedef struct JSON_Generator_StateStruct {
73
73
  long max_nesting;
74
74
  char allow_nan;
75
75
  char ascii_only;
76
- char quirks_mode;
77
76
  long depth;
78
77
  long buffer_initial_length;
79
78
  } JSON_Generator_State;
@@ -99,8 +98,12 @@ typedef struct JSON_Generator_StateStruct {
99
98
 
100
99
  static VALUE mHash_to_json(int argc, VALUE *argv, VALUE self);
101
100
  static VALUE mArray_to_json(int argc, VALUE *argv, VALUE self);
101
+ #ifdef RUBY_INTEGER_UNIFICATION
102
+ static VALUE mInteger_to_json(int argc, VALUE *argv, VALUE self);
103
+ #else
102
104
  static VALUE mFixnum_to_json(int argc, VALUE *argv, VALUE self);
103
105
  static VALUE mBignum_to_json(int argc, VALUE *argv, VALUE self);
106
+ #endif
104
107
  static VALUE mFloat_to_json(int argc, VALUE *argv, VALUE self);
105
108
  static VALUE mString_included_s(VALUE self, VALUE modul);
106
109
  static VALUE mString_to_json(int argc, VALUE *argv, VALUE self);
@@ -122,6 +125,9 @@ static void generate_json_string(FBuffer *buffer, VALUE Vstate, JSON_Generator_S
122
125
  static void generate_json_null(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
123
126
  static void generate_json_false(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
124
127
  static void generate_json_true(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
128
+ #ifdef RUBY_INTEGER_UNIFICATION
129
+ static void generate_json_integer(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
130
+ #endif
125
131
  static void generate_json_fixnum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
126
132
  static void generate_json_bignum(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
127
133
  static void generate_json_float(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj);
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: false
1
2
  require 'mkmf'
2
3
 
4
+ have_func("rb_enc_raise", "ruby.h")
5
+
3
6
  create_makefile 'json/ext/parser'