json 2.3.0 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ca534a7e54763534530fcc4d010c6ff3e45ae08959e64d7a54e2ed6b1c4d6cf4
4
- data.tar.gz: 5ed1902c0706bb321b4f4833203c4b6ae3cd47c4303bca04977442965ef9cbe6
3
+ metadata.gz: 80444509bc162d6df8e9cc3e7af2fc28507c06aef49cbfc1dd9e5990af42b14f
4
+ data.tar.gz: 8541be9708b44604eeeecac22f89c47933d32c90606f23c1d37e70c8b2d3e9db
5
5
  SHA512:
6
- metadata.gz: 70cefe1d1604c66bff786a1f530acd9fab15670957b84a0efc91d450e130e0b48da6ff0d8858549413fe6beb956b3d19d313f178cbe8f5123ec32ab701635bf9
7
- data.tar.gz: d0b3f6d760d2100b47e4160f372344d057f60ddd7c58e3bc2dceb35b690cbd14e6af75a3028d121099f1586ed134876c16bdf7ad58e68c7295e5c0cc20f52538
6
+ metadata.gz: 1df7b5ee2bf58103f0b5776c4a581aa3b013ad4b3a85a442d37bb72dc62aaf04dc42ed1080fb307fec1d1e9128c9f21e43827c7f15494cb0f9f310f7189bdc5e
7
+ data.tar.gz: 15ba56ce5d0e04c5326feb9e9faf2627628a715fa4bbeaec5c4aadeab5f27a65135f4f24f142b361f62ca37bbf36380f671d7ae35d46991737e4fc62423a6f9b
@@ -15,10 +15,12 @@ rvm:
15
15
  - ruby-head
16
16
  - jruby
17
17
  - jruby-9.2.7.0
18
+ - truffleruby
18
19
  matrix:
19
20
  allow_failures:
20
21
  - rvm: ruby-head
21
22
  - rvm: jruby
22
23
  - rvm: jruby-9.2.7.0
24
+ - rvm: truffleruby
23
25
  script: "bundle exec rake"
24
26
  sudo: false
data/CHANGES.md CHANGED
@@ -1,5 +1,38 @@
1
1
  # Changes
2
2
 
3
+ ## 2020-06-30 (2.3.1)
4
+
5
+ * Spelling and grammar fixes for comments. Pull request #191 by Josh
6
+ Kline.
7
+ * Enhance generic JSON and #generate docs. Pull request #347 by Victor
8
+ Shepelev.
9
+ * Add :nodoc: for GeneratorMethods. Pull request #349 by Victor Shepelev.
10
+ * Baseline changes to help (JRuby) development. Pull request #371 by Karol
11
+ Bucek.
12
+ * Add metadata for rubygems.org. Pull request #379 by Alexandre ZANNI.
13
+ * Remove invalid JSON.generate description from JSON module rdoc. Pull
14
+ request #384 by Jeremy Evans.
15
+ * Test with TruffleRuby in CI. Pull request #402 by Benoit Daloze.
16
+ * Rdoc enhancements. Pull request #413 by Burdette Lamar.
17
+ * Fixtures/ are not being tested... Pull request #416 by Marc-André
18
+ Lafortune.
19
+ * Use frozen string for hash key. Pull request #420 by Marc-André
20
+ Lafortune.
21
+ * Added :call-seq: to RDoc for some methods. Pull request #422 by Burdette
22
+ Lamar.
23
+ * Small typo fix. Pull request #423 by Marc-André Lafortune.
24
+
25
+ ## 2019-12-11 (2.3.0)
26
+ * Fix default of `create_additions` to always be `false` for `JSON(user_input)`
27
+ and `JSON.parse(user_input, nil)`.
28
+ Note that `JSON.load` remains with default `true` and is meant for internal
29
+ serialization of trusted data. [CVE-2020-10663]
30
+ * Fix passing args all #to_json in json/add/*.
31
+ * Fix encoding issues
32
+ * Fix issues of keyword vs positional parameter
33
+ * Fix JSON::Parser against bigdecimal updates
34
+ * Bug fixes to JRuby port
35
+
3
36
  ## 2019-02-21 (2.2.0)
4
37
  * Adds support for 2.6 BigDecimal and ruby standard library Set datetype.
5
38
 
data/README.md CHANGED
@@ -390,6 +390,22 @@ Here are the median comparisons for completeness' sake:
390
390
  secs/call
391
391
  ```
392
392
 
393
+ ## Development
394
+
395
+ ### Release
396
+
397
+ Update the json.gemspec and json-java.gemspec.
398
+
399
+ ```
400
+ rbenv shell 2.6.5
401
+ rake build
402
+ gem push pkg/json-2.3.0.gem
403
+
404
+ rbenv shell jruby-9.2.9.0
405
+ rake build
406
+ gem push pkg/json-2.3.0-java.gem
407
+ ```
408
+
393
409
  ## Author
394
410
 
395
411
  Florian Frank <mailto:flori@ping.de>
data/Rakefile CHANGED
@@ -78,86 +78,6 @@ task :install_ext => [ :compile, :install_pure, :install_ext_really ]
78
78
  desc "Installing library (extension)"
79
79
  task :install => :install_ext
80
80
 
81
- if defined?(Gem) and defined?(Gem::PackageTask)
82
- spec_pure = Gem::Specification.new do |s|
83
- s.name = 'json_pure'
84
- s.version = PKG_VERSION
85
- s.summary = PKG_TITLE
86
- s.description = "This is a JSON implementation in pure Ruby."
87
-
88
- s.files = PKG_FILES
89
-
90
- s.require_path = 'lib'
91
- s.add_development_dependency 'rake'
92
- s.add_development_dependency 'test-unit', '~> 2.0'
93
-
94
- s.extra_rdoc_files << 'README.md'
95
- s.rdoc_options <<
96
- '--title' << 'JSON implemention for ruby' << '--main' << 'README.md'
97
- s.test_files.concat Dir['./tests/test_*.rb']
98
-
99
- s.author = "Florian Frank"
100
- s.email = "flori@ping.de"
101
- s.homepage = "http://flori.github.com/#{PKG_NAME}"
102
- s.license = 'Ruby'
103
- s.required_ruby_version = '>= 1.9'
104
- end
105
-
106
- desc 'Creates a json_pure.gemspec file'
107
- task :gemspec_pure => :version do
108
- File.open('json_pure.gemspec', 'w') do |gemspec|
109
- gemspec.write spec_pure.to_ruby
110
- end
111
- end
112
-
113
- Gem::PackageTask.new(spec_pure) do |pkg|
114
- pkg.need_tar = true
115
- pkg.package_files = PKG_FILES
116
- end
117
-
118
- spec_ext = Gem::Specification.new do |s|
119
- s.name = 'json'
120
- s.version = PKG_VERSION
121
- s.summary = PKG_TITLE
122
- s.description = "This is a JSON implementation as a Ruby extension in C."
123
-
124
- s.files = PKG_FILES
125
-
126
- s.extensions = FileList['ext/**/extconf.rb']
127
-
128
- s.require_path = 'lib'
129
- s.add_development_dependency 'rake'
130
- s.add_development_dependency 'test-unit', '~> 2.0'
131
-
132
- s.extra_rdoc_files << 'README.md'
133
- s.rdoc_options <<
134
- '--title' << 'JSON implemention for Ruby' << '--main' << 'README.md'
135
- s.test_files.concat Dir['./tests/test_*.rb']
136
-
137
- s.author = "Florian Frank"
138
- s.email = "flori@ping.de"
139
- s.homepage = "http://flori.github.com/#{PKG_NAME}"
140
- s.license = 'Ruby'
141
- s.required_ruby_version = '>= 1.9'
142
- end
143
-
144
- desc 'Creates a json.gemspec file'
145
- task :gemspec_ext => :version do
146
- File.open('json.gemspec', 'w') do |gemspec|
147
- gemspec.write spec_ext.to_ruby
148
- end
149
- end
150
-
151
- Gem::PackageTask.new(spec_ext) do |pkg|
152
- pkg.need_tar = true
153
- pkg.package_files = PKG_FILES
154
- end
155
-
156
-
157
- desc 'Create all gemspec files'
158
- task :gemspec => [ :gemspec_pure, :gemspec_ext ]
159
- end
160
-
161
81
  desc m = "Writing version information for #{PKG_VERSION}"
162
82
  task :version do
163
83
  puts m
@@ -181,7 +101,8 @@ task :check_env do
181
101
  end
182
102
 
183
103
  desc "Testing library (pure ruby)"
184
- task :test_pure => [ :clean, :check_env, :do_test_pure ]
104
+ task :test_pure => [ :set_env_pure, :check_env, :do_test_pure ]
105
+ task(:set_env_pure) { ENV['JSON'] = 'pure' }
185
106
 
186
107
  UndocumentedTestTask.new do |t|
187
108
  t.name = 'do_test_pure'
@@ -192,10 +113,7 @@ UndocumentedTestTask.new do |t|
192
113
  end
193
114
 
194
115
  desc "Testing library (pure ruby and extension)"
195
- task :test do
196
- sh "env JSON=pure #{BUNDLE} exec rake test_pure" or exit 1
197
- sh "env JSON=ext #{BUNDLE} exec rake test_ext" or exit 1
198
- end
116
+ task :test => [ :test_pure, :test_ext ]
199
117
 
200
118
  namespace :gems do
201
119
  desc 'Install all development gems'
@@ -262,7 +180,8 @@ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
262
180
  end
263
181
 
264
182
  desc "Testing library (jruby)"
265
- task :test_ext => [ :check_env, :create_jar, :do_test_ext ]
183
+ task :test_ext => [ :set_env_ext, :create_jar, :check_env, :do_test_ext ]
184
+ task(:set_env_ext) { ENV['JSON'] = 'ext' }
266
185
 
267
186
  UndocumentedTestTask.new do |t|
268
187
  t.name = 'do_test_ext'
@@ -368,6 +287,8 @@ else
368
287
  end
369
288
  src = File.read("parser.c").gsub(/[ \t]+$/, '')
370
289
  src.gsub!(/^static const int (JSON_.*=.*);$/, 'enum {\1};')
290
+ src.gsub!(/0 <= \(\*p\) && \(\*p\) <= 31/, "0 <= (signed char)(*p) && (*p) <= 31")
291
+ src[0, 0] = "/* This file is automatically generated from parser.rl by using ragel */"
371
292
  File.open("parser.c", "w") {|f| f.print src}
372
293
  end
373
294
  end
@@ -410,4 +331,4 @@ else
410
331
  end
411
332
 
412
333
  desc "Compile in the the source directory"
413
- task :default => [ :clean, :gemspec, :test ]
334
+ task :default => [ :clean, :test ]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.0
1
+ 2.3.1
@@ -328,6 +328,76 @@ static char *fstrndup(const char *ptr, unsigned long len) {
328
328
  *
329
329
  */
330
330
 
331
+ /* Explanation of the following: that's the only way to not pollute
332
+ * standard library's docs with GeneratorMethods::<ClassName> which
333
+ * are uninformative and take a large place in a list of classes
334
+ */
335
+
336
+ /*
337
+ * Document-module: JSON::Ext::Generator::GeneratorMethods
338
+ * :nodoc:
339
+ */
340
+
341
+ /*
342
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::Array
343
+ * :nodoc:
344
+ */
345
+
346
+ /*
347
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::Bignum
348
+ * :nodoc:
349
+ */
350
+
351
+ /*
352
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::FalseClass
353
+ * :nodoc:
354
+ */
355
+
356
+ /*
357
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::Fixnum
358
+ * :nodoc:
359
+ */
360
+
361
+ /*
362
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::Float
363
+ * :nodoc:
364
+ */
365
+
366
+ /*
367
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::Hash
368
+ * :nodoc:
369
+ */
370
+
371
+ /*
372
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::Integer
373
+ * :nodoc:
374
+ */
375
+
376
+ /*
377
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::NilClass
378
+ * :nodoc:
379
+ */
380
+
381
+ /*
382
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::Object
383
+ * :nodoc:
384
+ */
385
+
386
+ /*
387
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::String
388
+ * :nodoc:
389
+ */
390
+
391
+ /*
392
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::String::Extend
393
+ * :nodoc:
394
+ */
395
+
396
+ /*
397
+ * Document-module: JSON::Ext::Generator::GeneratorMethods::TrueClass
398
+ * :nodoc:
399
+ */
400
+
331
401
  /*
332
402
  * call-seq: to_json(state = nil)
333
403
  *
@@ -1026,7 +1096,7 @@ static VALUE cState_generate(VALUE self, VALUE obj)
1026
1096
  * generated, otherwise an exception is thrown, if these values are
1027
1097
  * encountered. This options defaults to false.
1028
1098
  * * *ascii_only*: true if only ASCII characters should be generated. This
1029
- * ontions defaults to false.
1099
+ * option defaults to false.
1030
1100
  * * *buffer_initial_length*: sets the initial length of the generator's
1031
1101
  * internal buffer.
1032
1102
  */
@@ -1,4 +1,4 @@
1
-
1
+ /* This file is automatically generated from parser.rl by using ragel */
2
2
  #line 1 "parser.rl"
3
3
  #include "../fbuffer/fbuffer.h"
4
4
  #include "parser.h"
@@ -112,7 +112,7 @@ enum {JSON_object_error = 0};
112
112
  enum {JSON_object_en_main = 1};
113
113
 
114
114
 
115
- #line 167 "parser.rl"
115
+ #line 168 "parser.rl"
116
116
 
117
117
 
118
118
  static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
@@ -133,7 +133,7 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
133
133
  cs = JSON_object_start;
134
134
  }
135
135
 
136
- #line 182 "parser.rl"
136
+ #line 183 "parser.rl"
137
137
 
138
138
  #line 139 "parser.c"
139
139
  {
@@ -163,7 +163,7 @@ case 2:
163
163
  goto st2;
164
164
  goto st0;
165
165
  tr2:
166
- #line 149 "parser.rl"
166
+ #line 150 "parser.rl"
167
167
  {
168
168
  char *np;
169
169
  json->parsing_name = 1;
@@ -251,6 +251,7 @@ tr11:
251
251
  p--; {p++; cs = 9; goto _out;}
252
252
  } else {
253
253
  if (NIL_P(json->object_class)) {
254
+ OBJ_FREEZE(last_name);
254
255
  rb_hash_aset(*result, last_name, v);
255
256
  } else {
256
257
  rb_funcall(*result, i_aset, 2, last_name, v);
@@ -263,7 +264,7 @@ st9:
263
264
  if ( ++p == pe )
264
265
  goto _test_eof9;
265
266
  case 9:
266
- #line 267 "parser.c"
267
+ #line 268 "parser.c"
267
268
  switch( (*p) ) {
268
269
  case 13: goto st9;
269
270
  case 32: goto st9;
@@ -352,14 +353,14 @@ case 18:
352
353
  goto st9;
353
354
  goto st18;
354
355
  tr4:
355
- #line 157 "parser.rl"
356
+ #line 158 "parser.rl"
356
357
  { p--; {p++; cs = 27; goto _out;} }
357
358
  goto st27;
358
359
  st27:
359
360
  if ( ++p == pe )
360
361
  goto _test_eof27;
361
362
  case 27:
362
- #line 363 "parser.c"
363
+ #line 364 "parser.c"
363
364
  goto st0;
364
365
  st19:
365
366
  if ( ++p == pe )
@@ -457,7 +458,7 @@ case 26:
457
458
  _out: {}
458
459
  }
459
460
 
460
- #line 183 "parser.rl"
461
+ #line 184 "parser.rl"
461
462
 
462
463
  if (cs >= JSON_object_first_final) {
463
464
  if (json->create_additions) {
@@ -482,7 +483,7 @@ case 26:
482
483
 
483
484
 
484
485
 
485
- #line 486 "parser.c"
486
+ #line 487 "parser.c"
486
487
  enum {JSON_value_start = 1};
487
488
  enum {JSON_value_first_final = 29};
488
489
  enum {JSON_value_error = 0};
@@ -490,7 +491,7 @@ enum {JSON_value_error = 0};
490
491
  enum {JSON_value_en_main = 1};
491
492
 
492
493
 
493
- #line 283 "parser.rl"
494
+ #line 284 "parser.rl"
494
495
 
495
496
 
496
497
  static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
@@ -498,14 +499,14 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
498
499
  int cs = EVIL;
499
500
 
500
501
 
501
- #line 502 "parser.c"
502
+ #line 503 "parser.c"
502
503
  {
503
504
  cs = JSON_value_start;
504
505
  }
505
506
 
506
- #line 290 "parser.rl"
507
+ #line 291 "parser.rl"
507
508
 
508
- #line 509 "parser.c"
509
+ #line 510 "parser.c"
509
510
  {
510
511
  if ( p == pe )
511
512
  goto _test_eof;
@@ -539,14 +540,14 @@ st0:
539
540
  cs = 0;
540
541
  goto _out;
541
542
  tr2:
542
- #line 235 "parser.rl"
543
+ #line 236 "parser.rl"
543
544
  {
544
545
  char *np = JSON_parse_string(json, p, pe, result);
545
546
  if (np == NULL) { p--; {p++; cs = 29; goto _out;} } else {p = (( np))-1;}
546
547
  }
547
548
  goto st29;
548
549
  tr3:
549
- #line 240 "parser.rl"
550
+ #line 241 "parser.rl"
550
551
  {
551
552
  char *np;
552
553
  if(pe > p + 8 && !strncmp(MinusInfinity, p, 9)) {
@@ -566,7 +567,7 @@ tr3:
566
567
  }
567
568
  goto st29;
568
569
  tr7:
569
- #line 258 "parser.rl"
570
+ #line 259 "parser.rl"
570
571
  {
571
572
  char *np;
572
573
  np = JSON_parse_array(json, p, pe, result, current_nesting + 1);
@@ -574,7 +575,7 @@ tr7:
574
575
  }
575
576
  goto st29;
576
577
  tr11:
577
- #line 264 "parser.rl"
578
+ #line 265 "parser.rl"
578
579
  {
579
580
  char *np;
580
581
  np = JSON_parse_object(json, p, pe, result, current_nesting + 1);
@@ -582,7 +583,7 @@ tr11:
582
583
  }
583
584
  goto st29;
584
585
  tr25:
585
- #line 228 "parser.rl"
586
+ #line 229 "parser.rl"
586
587
  {
587
588
  if (json->allow_nan) {
588
589
  *result = CInfinity;
@@ -592,7 +593,7 @@ tr25:
592
593
  }
593
594
  goto st29;
594
595
  tr27:
595
- #line 221 "parser.rl"
596
+ #line 222 "parser.rl"
596
597
  {
597
598
  if (json->allow_nan) {
598
599
  *result = CNaN;
@@ -602,19 +603,19 @@ tr27:
602
603
  }
603
604
  goto st29;
604
605
  tr31:
605
- #line 215 "parser.rl"
606
+ #line 216 "parser.rl"
606
607
  {
607
608
  *result = Qfalse;
608
609
  }
609
610
  goto st29;
610
611
  tr34:
611
- #line 212 "parser.rl"
612
+ #line 213 "parser.rl"
612
613
  {
613
614
  *result = Qnil;
614
615
  }
615
616
  goto st29;
616
617
  tr37:
617
- #line 218 "parser.rl"
618
+ #line 219 "parser.rl"
618
619
  {
619
620
  *result = Qtrue;
620
621
  }
@@ -623,9 +624,9 @@ st29:
623
624
  if ( ++p == pe )
624
625
  goto _test_eof29;
625
626
  case 29:
626
- #line 270 "parser.rl"
627
+ #line 271 "parser.rl"
627
628
  { p--; {p++; cs = 29; goto _out;} }
628
- #line 629 "parser.c"
629
+ #line 630 "parser.c"
629
630
  switch( (*p) ) {
630
631
  case 13: goto st29;
631
632
  case 32: goto st29;
@@ -866,7 +867,7 @@ case 28:
866
867
  _out: {}
867
868
  }
868
869
 
869
- #line 291 "parser.rl"
870
+ #line 292 "parser.rl"
870
871
 
871
872
  if (cs >= JSON_value_first_final) {
872
873
  return p;
@@ -876,7 +877,7 @@ case 28:
876
877
  }
877
878
 
878
879
 
879
- #line 880 "parser.c"
880
+ #line 881 "parser.c"
880
881
  enum {JSON_integer_start = 1};
881
882
  enum {JSON_integer_first_final = 3};
882
883
  enum {JSON_integer_error = 0};
@@ -884,7 +885,7 @@ enum {JSON_integer_error = 0};
884
885
  enum {JSON_integer_en_main = 1};
885
886
 
886
887
 
887
- #line 307 "parser.rl"
888
+ #line 308 "parser.rl"
888
889
 
889
890
 
890
891
  static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
@@ -892,15 +893,15 @@ static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *res
892
893
  int cs = EVIL;
893
894
 
894
895
 
895
- #line 896 "parser.c"
896
+ #line 897 "parser.c"
896
897
  {
897
898
  cs = JSON_integer_start;
898
899
  }
899
900
 
900
- #line 314 "parser.rl"
901
+ #line 315 "parser.rl"
901
902
  json->memo = p;
902
903
 
903
- #line 904 "parser.c"
904
+ #line 905 "parser.c"
904
905
  {
905
906
  if ( p == pe )
906
907
  goto _test_eof;
@@ -934,14 +935,14 @@ case 3:
934
935
  goto st0;
935
936
  goto tr4;
936
937
  tr4:
937
- #line 304 "parser.rl"
938
+ #line 305 "parser.rl"
938
939
  { p--; {p++; cs = 4; goto _out;} }
939
940
  goto st4;
940
941
  st4:
941
942
  if ( ++p == pe )
942
943
  goto _test_eof4;
943
944
  case 4:
944
- #line 945 "parser.c"
945
+ #line 946 "parser.c"
945
946
  goto st0;
946
947
  st5:
947
948
  if ( ++p == pe )
@@ -960,7 +961,7 @@ case 5:
960
961
  _out: {}
961
962
  }
962
963
 
963
- #line 316 "parser.rl"
964
+ #line 317 "parser.rl"
964
965
 
965
966
  if (cs >= JSON_integer_first_final) {
966
967
  long len = p - json->memo;
@@ -975,7 +976,7 @@ case 5:
975
976
  }
976
977
 
977
978
 
978
- #line 979 "parser.c"
979
+ #line 980 "parser.c"
979
980
  enum {JSON_float_start = 1};
980
981
  enum {JSON_float_first_final = 8};
981
982
  enum {JSON_float_error = 0};
@@ -983,7 +984,7 @@ enum {JSON_float_error = 0};
983
984
  enum {JSON_float_en_main = 1};
984
985
 
985
986
 
986
- #line 341 "parser.rl"
987
+ #line 342 "parser.rl"
987
988
 
988
989
 
989
990
  static int is_bigdecimal_class(VALUE obj)
@@ -1004,15 +1005,15 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul
1004
1005
  int cs = EVIL;
1005
1006
 
1006
1007
 
1007
- #line 1008 "parser.c"
1008
+ #line 1009 "parser.c"
1008
1009
  {
1009
1010
  cs = JSON_float_start;
1010
1011
  }
1011
1012
 
1012
- #line 361 "parser.rl"
1013
+ #line 362 "parser.rl"
1013
1014
  json->memo = p;
1014
1015
 
1015
- #line 1016 "parser.c"
1016
+ #line 1017 "parser.c"
1016
1017
  {
1017
1018
  if ( p == pe )
1018
1019
  goto _test_eof;
@@ -1070,14 +1071,14 @@ case 8:
1070
1071
  goto st0;
1071
1072
  goto tr9;
1072
1073
  tr9:
1073
- #line 335 "parser.rl"
1074
+ #line 336 "parser.rl"
1074
1075
  { p--; {p++; cs = 9; goto _out;} }
1075
1076
  goto st9;
1076
1077
  st9:
1077
1078
  if ( ++p == pe )
1078
1079
  goto _test_eof9;
1079
1080
  case 9:
1080
- #line 1081 "parser.c"
1081
+ #line 1082 "parser.c"
1081
1082
  goto st0;
1082
1083
  st5:
1083
1084
  if ( ++p == pe )
@@ -1138,7 +1139,7 @@ case 7:
1138
1139
  _out: {}
1139
1140
  }
1140
1141
 
1141
- #line 363 "parser.rl"
1142
+ #line 364 "parser.rl"
1142
1143
 
1143
1144
  if (cs >= JSON_float_first_final) {
1144
1145
  long len = p - json->memo;
@@ -1164,7 +1165,7 @@ case 7:
1164
1165
 
1165
1166
 
1166
1167
 
1167
- #line 1168 "parser.c"
1168
+ #line 1169 "parser.c"
1168
1169
  enum {JSON_array_start = 1};
1169
1170
  enum {JSON_array_first_final = 17};
1170
1171
  enum {JSON_array_error = 0};
@@ -1172,7 +1173,7 @@ enum {JSON_array_error = 0};
1172
1173
  enum {JSON_array_en_main = 1};
1173
1174
 
1174
1175
 
1175
- #line 416 "parser.rl"
1176
+ #line 417 "parser.rl"
1176
1177
 
1177
1178
 
1178
1179
  static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
@@ -1186,14 +1187,14 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul
1186
1187
  *result = NIL_P(array_class) ? rb_ary_new() : rb_class_new_instance(0, 0, array_class);
1187
1188
 
1188
1189
 
1189
- #line 1190 "parser.c"
1190
+ #line 1191 "parser.c"
1190
1191
  {
1191
1192
  cs = JSON_array_start;
1192
1193
  }
1193
1194
 
1194
- #line 429 "parser.rl"
1195
+ #line 430 "parser.rl"
1195
1196
 
1196
- #line 1197 "parser.c"
1197
+ #line 1198 "parser.c"
1197
1198
  {
1198
1199
  if ( p == pe )
1199
1200
  goto _test_eof;
@@ -1232,7 +1233,7 @@ case 2:
1232
1233
  goto st2;
1233
1234
  goto st0;
1234
1235
  tr2:
1235
- #line 393 "parser.rl"
1236
+ #line 394 "parser.rl"
1236
1237
  {
1237
1238
  VALUE v = Qnil;
1238
1239
  char *np = JSON_parse_value(json, p, pe, &v, current_nesting);
@@ -1252,7 +1253,7 @@ st3:
1252
1253
  if ( ++p == pe )
1253
1254
  goto _test_eof3;
1254
1255
  case 3:
1255
- #line 1256 "parser.c"
1256
+ #line 1257 "parser.c"
1256
1257
  switch( (*p) ) {
1257
1258
  case 13: goto st3;
1258
1259
  case 32: goto st3;
@@ -1352,14 +1353,14 @@ case 12:
1352
1353
  goto st3;
1353
1354
  goto st12;
1354
1355
  tr4:
1355
- #line 408 "parser.rl"
1356
+ #line 409 "parser.rl"
1356
1357
  { p--; {p++; cs = 17; goto _out;} }
1357
1358
  goto st17;
1358
1359
  st17:
1359
1360
  if ( ++p == pe )
1360
1361
  goto _test_eof17;
1361
1362
  case 17:
1362
- #line 1363 "parser.c"
1363
+ #line 1364 "parser.c"
1363
1364
  goto st0;
1364
1365
  st13:
1365
1366
  if ( ++p == pe )
@@ -1415,7 +1416,7 @@ case 16:
1415
1416
  _out: {}
1416
1417
  }
1417
1418
 
1418
- #line 430 "parser.rl"
1419
+ #line 431 "parser.rl"
1419
1420
 
1420
1421
  if(cs >= JSON_array_first_final) {
1421
1422
  return p + 1;
@@ -1504,7 +1505,7 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
1504
1505
  }
1505
1506
 
1506
1507
 
1507
- #line 1508 "parser.c"
1508
+ #line 1509 "parser.c"
1508
1509
  enum {JSON_string_start = 1};
1509
1510
  enum {JSON_string_first_final = 8};
1510
1511
  enum {JSON_string_error = 0};
@@ -1512,7 +1513,7 @@ enum {JSON_string_error = 0};
1512
1513
  enum {JSON_string_en_main = 1};
1513
1514
 
1514
1515
 
1515
- #line 537 "parser.rl"
1516
+ #line 538 "parser.rl"
1516
1517
 
1517
1518
 
1518
1519
  static int
@@ -1534,15 +1535,15 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
1534
1535
 
1535
1536
  *result = rb_str_buf_new(0);
1536
1537
 
1537
- #line 1538 "parser.c"
1538
+ #line 1539 "parser.c"
1538
1539
  {
1539
1540
  cs = JSON_string_start;
1540
1541
  }
1541
1542
 
1542
- #line 558 "parser.rl"
1543
+ #line 559 "parser.rl"
1543
1544
  json->memo = p;
1544
1545
 
1545
- #line 1546 "parser.c"
1546
+ #line 1547 "parser.c"
1546
1547
  {
1547
1548
  if ( p == pe )
1548
1549
  goto _test_eof;
@@ -1563,11 +1564,11 @@ case 2:
1563
1564
  case 34: goto tr2;
1564
1565
  case 92: goto st3;
1565
1566
  }
1566
- if ( 0 <= (*p) && (*p) <= 31 )
1567
+ if ( 0 <= (signed char)(*p) && (*p) <= 31 )
1567
1568
  goto st0;
1568
1569
  goto st2;
1569
1570
  tr2:
1570
- #line 523 "parser.rl"
1571
+ #line 524 "parser.rl"
1571
1572
  {
1572
1573
  *result = json_string_unescape(*result, json->memo + 1, p);
1573
1574
  if (NIL_P(*result)) {
@@ -1578,14 +1579,14 @@ tr2:
1578
1579
  {p = (( p + 1))-1;}
1579
1580
  }
1580
1581
  }
1581
- #line 534 "parser.rl"
1582
+ #line 535 "parser.rl"
1582
1583
  { p--; {p++; cs = 8; goto _out;} }
1583
1584
  goto st8;
1584
1585
  st8:
1585
1586
  if ( ++p == pe )
1586
1587
  goto _test_eof8;
1587
1588
  case 8:
1588
- #line 1589 "parser.c"
1589
+ #line 1590 "parser.c"
1589
1590
  goto st0;
1590
1591
  st3:
1591
1592
  if ( ++p == pe )
@@ -1593,7 +1594,7 @@ st3:
1593
1594
  case 3:
1594
1595
  if ( (*p) == 117 )
1595
1596
  goto st4;
1596
- if ( 0 <= (*p) && (*p) <= 31 )
1597
+ if ( 0 <= (signed char)(*p) && (*p) <= 31 )
1597
1598
  goto st0;
1598
1599
  goto st2;
1599
1600
  st4:
@@ -1661,7 +1662,7 @@ case 7:
1661
1662
  _out: {}
1662
1663
  }
1663
1664
 
1664
- #line 560 "parser.rl"
1665
+ #line 561 "parser.rl"
1665
1666
 
1666
1667
  if (json->create_additions && RTEST(match_string = json->match_string)) {
1667
1668
  VALUE klass;
@@ -1848,7 +1849,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
1848
1849
  }
1849
1850
 
1850
1851
 
1851
- #line 1852 "parser.c"
1852
+ #line 1853 "parser.c"
1852
1853
  enum {JSON_start = 1};
1853
1854
  enum {JSON_first_final = 10};
1854
1855
  enum {JSON_error = 0};
@@ -1856,7 +1857,7 @@ enum {JSON_error = 0};
1856
1857
  enum {JSON_en_main = 1};
1857
1858
 
1858
1859
 
1859
- #line 760 "parser.rl"
1860
+ #line 761 "parser.rl"
1860
1861
 
1861
1862
 
1862
1863
  /*
@@ -1873,16 +1874,16 @@ static VALUE cParser_parse(VALUE self)
1873
1874
  GET_PARSER;
1874
1875
 
1875
1876
 
1876
- #line 1877 "parser.c"
1877
+ #line 1878 "parser.c"
1877
1878
  {
1878
1879
  cs = JSON_start;
1879
1880
  }
1880
1881
 
1881
- #line 776 "parser.rl"
1882
+ #line 777 "parser.rl"
1882
1883
  p = json->source;
1883
1884
  pe = p + json->len;
1884
1885
 
1885
- #line 1886 "parser.c"
1886
+ #line 1887 "parser.c"
1886
1887
  {
1887
1888
  if ( p == pe )
1888
1889
  goto _test_eof;
@@ -1916,7 +1917,7 @@ st0:
1916
1917
  cs = 0;
1917
1918
  goto _out;
1918
1919
  tr2:
1919
- #line 752 "parser.rl"
1920
+ #line 753 "parser.rl"
1920
1921
  {
1921
1922
  char *np = JSON_parse_value(json, p, pe, &result, 0);
1922
1923
  if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
@@ -1926,7 +1927,7 @@ st10:
1926
1927
  if ( ++p == pe )
1927
1928
  goto _test_eof10;
1928
1929
  case 10:
1929
- #line 1930 "parser.c"
1930
+ #line 1931 "parser.c"
1930
1931
  switch( (*p) ) {
1931
1932
  case 13: goto st10;
1932
1933
  case 32: goto st10;
@@ -2015,7 +2016,7 @@ case 9:
2015
2016
  _out: {}
2016
2017
  }
2017
2018
 
2018
- #line 779 "parser.rl"
2019
+ #line 780 "parser.rl"
2019
2020
 
2020
2021
  if (cs >= JSON_first_final && p == pe) {
2021
2022
  return result;