json 1.5.5 → 1.6.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 (44) hide show
  1. data/CHANGES +3 -7
  2. data/Gemfile +0 -4
  3. data/Rakefile +0 -7
  4. data/VERSION +1 -1
  5. data/ext/json/ext/parser/parser.c +18 -18
  6. data/ext/json/ext/parser/parser.rl +1 -4
  7. data/install.rb +1 -8
  8. data/java/src/json/ext/Parser.java +85 -81
  9. data/java/src/json/ext/Parser.rl +1 -1
  10. data/json.gemspec +5 -6
  11. data/json_pure.gemspec +4 -8
  12. data/lib/json/add/core.rb +9 -244
  13. data/lib/json/add/date.rb +34 -0
  14. data/lib/json/add/date_time.rb +50 -0
  15. data/lib/json/add/exception.rb +31 -0
  16. data/lib/json/add/range.rb +29 -0
  17. data/lib/json/add/regexp.rb +30 -0
  18. data/lib/json/add/struct.rb +30 -0
  19. data/lib/json/add/symbol.rb +25 -0
  20. data/lib/json/add/time.rb +35 -0
  21. data/lib/json/common.rb +5 -12
  22. data/lib/json/pure/parser.rb +4 -4
  23. data/lib/json/version.rb +1 -1
  24. data/tests/test_json.rb +2 -22
  25. data/tests/test_json_addition.rb +21 -29
  26. data/tests/test_json_string_matching.rb +6 -5
  27. data/tools/server.rb +1 -0
  28. metadata +124 -152
  29. data/0001-Security-fix-create_additons-JSON-GenericObject.patch +0 -448
  30. data/0001-Security-fix-create_additons-problem-1.5.5.patch +0 -630
  31. data/0001-Security-fix-for-create_additions-problem-1.6.8.patch +0 -685
  32. data/Gemfile.lock +0 -60
  33. data/bin/edit_json.rb +0 -9
  34. data/bin/prettify_json.rb +0 -48
  35. data/lib/json/Array.xpm +0 -21
  36. data/lib/json/FalseClass.xpm +0 -21
  37. data/lib/json/Hash.xpm +0 -21
  38. data/lib/json/Key.xpm +0 -73
  39. data/lib/json/NilClass.xpm +0 -21
  40. data/lib/json/Numeric.xpm +0 -28
  41. data/lib/json/String.xpm +0 -96
  42. data/lib/json/TrueClass.xpm +0 -21
  43. data/lib/json/editor.rb +0 -1369
  44. data/lib/json/json.xpm +0 -1499
data/CHANGES CHANGED
@@ -1,10 +1,6 @@
1
- 2013-02-04 (1.5.5)
2
- * Security fix for JSON create_additions default value. It should not be
3
- possible to create additions unless
4
- explicitely requested by setting the create_additions argument to true or
5
- using the JSON.load/dump interface.
6
- * Backport change that corrects Time serialisation/deserialisation on some
7
- platforms.
1
+ 2011-09-12 (1.6.0)
2
+ * Extract utilities (prettifier and GUI-editor) in its own gem json-utils.
3
+ * Split json/add/core into different files for classes to be serialised.
8
4
  2011-08-31 (1.5.4)
9
5
  * Fix memory leak when used from multiple JRuby. (Patch by
10
6
  jfirebaugh@github).
data/Gemfile CHANGED
@@ -5,7 +5,3 @@ source :rubygems
5
5
  gemspec :name => 'json'
6
6
  gemspec :name => 'json_pure'
7
7
  gemspec :name => 'json-java'
8
-
9
- gem 'utils'
10
- gem 'test-unit'
11
- gem 'debugger', :platform => :mri_19
data/Rakefile CHANGED
@@ -96,10 +96,6 @@ if defined?(Gem) and defined?(Gem::PackageTask)
96
96
  s.add_development_dependency 'bullshit'
97
97
  s.add_development_dependency 'sdoc'
98
98
  s.add_development_dependency 'rake', '~>0.9.2'
99
- s.add_dependency 'spruz', '~>0.2.8'
100
-
101
- s.bindir = "bin"
102
- s.executables = [ "edit_json.rb", "prettify_json.rb" ]
103
99
 
104
100
  s.extra_rdoc_files << 'README.rdoc'
105
101
  s.rdoc_options <<
@@ -141,9 +137,6 @@ if defined?(Gem) and defined?(Gem::PackageTask)
141
137
  s.add_development_dependency 'bullshit'
142
138
  s.add_development_dependency 'sdoc'
143
139
 
144
- s.bindir = "bin"
145
- s.executables = [ "edit_json.rb", "prettify_json.rb" ]
146
-
147
140
  s.extra_rdoc_files << 'README.rdoc'
148
141
  s.rdoc_options <<
149
142
  '--title' << 'JSON implemention for Ruby' << '--main' << 'README.rdoc'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.5
1
+ 1.6.0
@@ -1671,7 +1671,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
1671
1671
  if (option_given_p(opts, tmp)) {
1672
1672
  json->create_additions = RTEST(rb_hash_aref(opts, tmp));
1673
1673
  } else {
1674
- json->create_additions = 0;
1674
+ json->create_additions = 1;
1675
1675
  }
1676
1676
  tmp = ID2SYM(i_create_id);
1677
1677
  if (option_given_p(opts, tmp)) {
@@ -1718,7 +1718,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
1718
1718
  }
1719
1719
 
1720
1720
 
1721
- #line 1722 "parser.c"
1721
+ #line 1719 "parser.c"
1722
1722
  static const int JSON_start = 1;
1723
1723
  static const int JSON_first_final = 10;
1724
1724
  static const int JSON_error = 0;
@@ -1726,7 +1726,7 @@ static const int JSON_error = 0;
1726
1726
  static const int JSON_en_main = 1;
1727
1727
 
1728
1728
 
1729
- #line 729 "parser.rl"
1729
+ #line 726 "parser.rl"
1730
1730
 
1731
1731
 
1732
1732
  static VALUE cParser_parse_strict(VALUE self)
@@ -1737,16 +1737,16 @@ static VALUE cParser_parse_strict(VALUE self)
1737
1737
  GET_PARSER;
1738
1738
 
1739
1739
 
1740
- #line 1741 "parser.c"
1740
+ #line 1738 "parser.c"
1741
1741
  {
1742
1742
  cs = JSON_start;
1743
1743
  }
1744
1744
 
1745
- #line 739 "parser.rl"
1745
+ #line 736 "parser.rl"
1746
1746
  p = json->source;
1747
1747
  pe = p + json->len;
1748
1748
 
1749
- #line 1750 "parser.c"
1749
+ #line 1747 "parser.c"
1750
1750
  {
1751
1751
  if ( p == pe )
1752
1752
  goto _test_eof;
@@ -1802,7 +1802,7 @@ case 5:
1802
1802
  goto st1;
1803
1803
  goto st5;
1804
1804
  tr3:
1805
- #line 718 "parser.rl"
1805
+ #line 715 "parser.rl"
1806
1806
  {
1807
1807
  char *np;
1808
1808
  json->current_nesting = 1;
@@ -1811,7 +1811,7 @@ tr3:
1811
1811
  }
1812
1812
  goto st10;
1813
1813
  tr4:
1814
- #line 711 "parser.rl"
1814
+ #line 708 "parser.rl"
1815
1815
  {
1816
1816
  char *np;
1817
1817
  json->current_nesting = 1;
@@ -1823,7 +1823,7 @@ st10:
1823
1823
  if ( ++p == pe )
1824
1824
  goto _test_eof10;
1825
1825
  case 10:
1826
- #line 1827 "parser.c"
1826
+ #line 1824 "parser.c"
1827
1827
  switch( (*p) ) {
1828
1828
  case 13: goto st10;
1829
1829
  case 32: goto st10;
@@ -1880,7 +1880,7 @@ case 9:
1880
1880
  _out: {}
1881
1881
  }
1882
1882
 
1883
- #line 742 "parser.rl"
1883
+ #line 739 "parser.rl"
1884
1884
 
1885
1885
  if (cs >= JSON_first_final && p == pe) {
1886
1886
  return result;
@@ -1892,7 +1892,7 @@ case 9:
1892
1892
 
1893
1893
 
1894
1894
 
1895
- #line 1896 "parser.c"
1895
+ #line 1893 "parser.c"
1896
1896
  static const int JSON_quirks_mode_start = 1;
1897
1897
  static const int JSON_quirks_mode_first_final = 10;
1898
1898
  static const int JSON_quirks_mode_error = 0;
@@ -1900,7 +1900,7 @@ static const int JSON_quirks_mode_error = 0;
1900
1900
  static const int JSON_quirks_mode_en_main = 1;
1901
1901
 
1902
1902
 
1903
- #line 767 "parser.rl"
1903
+ #line 764 "parser.rl"
1904
1904
 
1905
1905
 
1906
1906
  static VALUE cParser_parse_quirks_mode(VALUE self)
@@ -1911,16 +1911,16 @@ static VALUE cParser_parse_quirks_mode(VALUE self)
1911
1911
  GET_PARSER;
1912
1912
 
1913
1913
 
1914
- #line 1915 "parser.c"
1914
+ #line 1912 "parser.c"
1915
1915
  {
1916
1916
  cs = JSON_quirks_mode_start;
1917
1917
  }
1918
1918
 
1919
- #line 777 "parser.rl"
1919
+ #line 774 "parser.rl"
1920
1920
  p = json->source;
1921
1921
  pe = p + json->len;
1922
1922
 
1923
- #line 1924 "parser.c"
1923
+ #line 1921 "parser.c"
1924
1924
  {
1925
1925
  if ( p == pe )
1926
1926
  goto _test_eof;
@@ -1954,7 +1954,7 @@ st0:
1954
1954
  cs = 0;
1955
1955
  goto _out;
1956
1956
  tr2:
1957
- #line 759 "parser.rl"
1957
+ #line 756 "parser.rl"
1958
1958
  {
1959
1959
  char *np = JSON_parse_value(json, p, pe, &result);
1960
1960
  if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
@@ -1964,7 +1964,7 @@ st10:
1964
1964
  if ( ++p == pe )
1965
1965
  goto _test_eof10;
1966
1966
  case 10:
1967
- #line 1968 "parser.c"
1967
+ #line 1965 "parser.c"
1968
1968
  switch( (*p) ) {
1969
1969
  case 13: goto st10;
1970
1970
  case 32: goto st10;
@@ -2053,7 +2053,7 @@ case 9:
2053
2053
  _out: {}
2054
2054
  }
2055
2055
 
2056
- #line 780 "parser.rl"
2056
+ #line 777 "parser.rl"
2057
2057
 
2058
2058
  if (cs >= JSON_quirks_mode_first_final && p == pe) {
2059
2059
  return result;
@@ -602,9 +602,6 @@ static VALUE convert_encoding(VALUE source)
602
602
  * defaults to true.
603
603
  * * *object_class*: Defaults to Hash
604
604
  * * *array_class*: Defaults to Array
605
- * * *quirks_mode*: Enables quirks_mode for parser, that is for example
606
- * parsing single JSON values instead of documents is possible.
607
- *
608
605
  */
609
606
  static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
610
607
  {
@@ -655,7 +652,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
655
652
  if (option_given_p(opts, tmp)) {
656
653
  json->create_additions = RTEST(rb_hash_aref(opts, tmp));
657
654
  } else {
658
- json->create_additions = 0;
655
+ json->create_additions = 1;
659
656
  }
660
657
  tmp = ID2SYM(i_create_id);
661
658
  if (option_given_p(opts, tmp)) {
data/install.rb CHANGED
@@ -6,21 +6,14 @@ include FileUtils::Verbose
6
6
 
7
7
  include Config
8
8
 
9
- bindir = CONFIG["bindir"]
10
- cd 'bin' do
11
- filename = 'edit_json.rb'
12
- #install(filename, bindir)
13
- end
14
9
  sitelibdir = CONFIG["sitelibdir"]
15
10
  cd 'lib' do
16
11
  install('json.rb', sitelibdir)
17
12
  mkdir_p File.join(sitelibdir, 'json')
18
- for file in Dir['json/**/*.{rb,xpm}']
13
+ for file in Dir['json/**/*}']
19
14
  d = File.join(sitelibdir, file)
20
15
  mkdir_p File.dirname(d)
21
16
  install(file, d)
22
17
  end
23
- install(File.join('json', 'editor.rb'), File.join(sitelibdir,'json'))
24
- install(File.join('json', 'json.xpm'), File.join(sitelibdir,'json'))
25
18
  end
26
19
  warn " *** Installed PURE ruby library."
@@ -136,6 +136,10 @@ public class Parser extends RubyObject {
136
136
  *
137
137
  * <dt><code>:array_class</code>
138
138
  * <dd>Defaults to Array.
139
+ *
140
+ * <dt><code>:quirks_mode</code>
141
+ * <dd>Enables quirks_mode for parser, that is for example parsing single
142
+ * JSON values instead of documents is possible.
139
143
  * </dl>
140
144
  */
141
145
  @JRubyMethod(name = "new", required = 1, optional = 1, meta = true)
@@ -160,7 +164,7 @@ public class Parser extends RubyObject {
160
164
  this.symbolizeNames = opts.getBool("symbolize_names", false);
161
165
  this.quirksMode = opts.getBool("quirks_mode", false);
162
166
  this.createId = opts.getString("create_id", getCreateId(context));
163
- this.createAdditions = opts.getBool("create_additions", false);
167
+ this.createAdditions = opts.getBool("create_additions", true);
164
168
  this.objectClass = opts.getClass("object_class", runtime.getHash());
165
169
  this.arrayClass = opts.getClass("array_class", runtime.getArray());
166
170
  this.match_string = opts.getHash("match_string");
@@ -327,11 +331,11 @@ public class Parser extends RubyObject {
327
331
  }
328
332
 
329
333
 
330
- // line 353 "Parser.rl"
334
+ // line 357 "Parser.rl"
331
335
 
332
336
 
333
337
 
334
- // line 335 "Parser.java"
338
+ // line 339 "Parser.java"
335
339
  private static byte[] init__JSON_value_actions_0()
336
340
  {
337
341
  return new byte [] {
@@ -445,7 +449,7 @@ static final int JSON_value_error = 0;
445
449
  static final int JSON_value_en_main = 1;
446
450
 
447
451
 
448
- // line 459 "Parser.rl"
452
+ // line 463 "Parser.rl"
449
453
 
450
454
 
451
455
  ParserResult parseValue(int p, int pe) {
@@ -453,14 +457,14 @@ static final int JSON_value_en_main = 1;
453
457
  IRubyObject result = null;
454
458
 
455
459
 
456
- // line 457 "Parser.java"
460
+ // line 461 "Parser.java"
457
461
  {
458
462
  cs = JSON_value_start;
459
463
  }
460
464
 
461
- // line 466 "Parser.rl"
465
+ // line 470 "Parser.rl"
462
466
 
463
- // line 464 "Parser.java"
467
+ // line 468 "Parser.java"
464
468
  {
465
469
  int _klen;
466
470
  int _trans = 0;
@@ -486,13 +490,13 @@ case 1:
486
490
  while ( _nacts-- > 0 ) {
487
491
  switch ( _JSON_value_actions[_acts++] ) {
488
492
  case 9:
489
- // line 444 "Parser.rl"
493
+ // line 448 "Parser.rl"
490
494
  {
491
495
  p--;
492
496
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
493
497
  }
494
498
  break;
495
- // line 496 "Parser.java"
499
+ // line 500 "Parser.java"
496
500
  }
497
501
  }
498
502
 
@@ -555,25 +559,25 @@ case 1:
555
559
  switch ( _JSON_value_actions[_acts++] )
556
560
  {
557
561
  case 0:
558
- // line 361 "Parser.rl"
562
+ // line 365 "Parser.rl"
559
563
  {
560
564
  result = getRuntime().getNil();
561
565
  }
562
566
  break;
563
567
  case 1:
564
- // line 364 "Parser.rl"
568
+ // line 368 "Parser.rl"
565
569
  {
566
570
  result = getRuntime().getFalse();
567
571
  }
568
572
  break;
569
573
  case 2:
570
- // line 367 "Parser.rl"
574
+ // line 371 "Parser.rl"
571
575
  {
572
576
  result = getRuntime().getTrue();
573
577
  }
574
578
  break;
575
579
  case 3:
576
- // line 370 "Parser.rl"
580
+ // line 374 "Parser.rl"
577
581
  {
578
582
  if (parser.allowNaN) {
579
583
  result = getConstant(CONST_NAN);
@@ -583,7 +587,7 @@ case 1:
583
587
  }
584
588
  break;
585
589
  case 4:
586
- // line 377 "Parser.rl"
590
+ // line 381 "Parser.rl"
587
591
  {
588
592
  if (parser.allowNaN) {
589
593
  result = getConstant(CONST_INFINITY);
@@ -593,7 +597,7 @@ case 1:
593
597
  }
594
598
  break;
595
599
  case 5:
596
- // line 384 "Parser.rl"
600
+ // line 388 "Parser.rl"
597
601
  {
598
602
  if (pe > p + 9 - (parser.quirksMode ? 1 : 0) &&
599
603
  absSubSequence(p, p + 9).toString().equals(JSON_MINUS_INFINITY)) {
@@ -622,7 +626,7 @@ case 1:
622
626
  }
623
627
  break;
624
628
  case 6:
625
- // line 410 "Parser.rl"
629
+ // line 414 "Parser.rl"
626
630
  {
627
631
  ParserResult res = parseString(p, pe);
628
632
  if (res == null) {
@@ -635,7 +639,7 @@ case 1:
635
639
  }
636
640
  break;
637
641
  case 7:
638
- // line 420 "Parser.rl"
642
+ // line 424 "Parser.rl"
639
643
  {
640
644
  currentNesting++;
641
645
  ParserResult res = parseArray(p, pe);
@@ -650,7 +654,7 @@ case 1:
650
654
  }
651
655
  break;
652
656
  case 8:
653
- // line 432 "Parser.rl"
657
+ // line 436 "Parser.rl"
654
658
  {
655
659
  currentNesting++;
656
660
  ParserResult res = parseObject(p, pe);
@@ -664,7 +668,7 @@ case 1:
664
668
  }
665
669
  }
666
670
  break;
667
- // line 668 "Parser.java"
671
+ // line 672 "Parser.java"
668
672
  }
669
673
  }
670
674
  }
@@ -684,7 +688,7 @@ case 5:
684
688
  break; }
685
689
  }
686
690
 
687
- // line 467 "Parser.rl"
691
+ // line 471 "Parser.rl"
688
692
 
689
693
  if (cs >= JSON_value_first_final && result != null) {
690
694
  return new ParserResult(result, p);
@@ -694,7 +698,7 @@ case 5:
694
698
  }
695
699
 
696
700
 
697
- // line 698 "Parser.java"
701
+ // line 702 "Parser.java"
698
702
  private static byte[] init__JSON_integer_actions_0()
699
703
  {
700
704
  return new byte [] {
@@ -793,22 +797,22 @@ static final int JSON_integer_error = 0;
793
797
  static final int JSON_integer_en_main = 1;
794
798
 
795
799
 
796
- // line 486 "Parser.rl"
800
+ // line 490 "Parser.rl"
797
801
 
798
802
 
799
803
  ParserResult parseInteger(int p, int pe) {
800
804
  int cs = EVIL;
801
805
 
802
806
 
803
- // line 804 "Parser.java"
807
+ // line 808 "Parser.java"
804
808
  {
805
809
  cs = JSON_integer_start;
806
810
  }
807
811
 
808
- // line 492 "Parser.rl"
812
+ // line 496 "Parser.rl"
809
813
  int memo = p;
810
814
 
811
- // line 812 "Parser.java"
815
+ // line 816 "Parser.java"
812
816
  {
813
817
  int _klen;
814
818
  int _trans = 0;
@@ -889,13 +893,13 @@ case 1:
889
893
  switch ( _JSON_integer_actions[_acts++] )
890
894
  {
891
895
  case 0:
892
- // line 480 "Parser.rl"
896
+ // line 484 "Parser.rl"
893
897
  {
894
898
  p--;
895
899
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
896
900
  }
897
901
  break;
898
- // line 899 "Parser.java"
902
+ // line 903 "Parser.java"
899
903
  }
900
904
  }
901
905
  }
@@ -915,7 +919,7 @@ case 5:
915
919
  break; }
916
920
  }
917
921
 
918
- // line 494 "Parser.rl"
922
+ // line 498 "Parser.rl"
919
923
 
920
924
  if (cs < JSON_integer_first_final) {
921
925
  return null;
@@ -930,7 +934,7 @@ case 5:
930
934
  }
931
935
 
932
936
 
933
- // line 934 "Parser.java"
937
+ // line 938 "Parser.java"
934
938
  private static byte[] init__JSON_float_actions_0()
935
939
  {
936
940
  return new byte [] {
@@ -1032,22 +1036,22 @@ static final int JSON_float_error = 0;
1032
1036
  static final int JSON_float_en_main = 1;
1033
1037
 
1034
1038
 
1035
- // line 522 "Parser.rl"
1039
+ // line 526 "Parser.rl"
1036
1040
 
1037
1041
 
1038
1042
  ParserResult parseFloat(int p, int pe) {
1039
1043
  int cs = EVIL;
1040
1044
 
1041
1045
 
1042
- // line 1043 "Parser.java"
1046
+ // line 1047 "Parser.java"
1043
1047
  {
1044
1048
  cs = JSON_float_start;
1045
1049
  }
1046
1050
 
1047
- // line 528 "Parser.rl"
1051
+ // line 532 "Parser.rl"
1048
1052
  int memo = p;
1049
1053
 
1050
- // line 1051 "Parser.java"
1054
+ // line 1055 "Parser.java"
1051
1055
  {
1052
1056
  int _klen;
1053
1057
  int _trans = 0;
@@ -1128,13 +1132,13 @@ case 1:
1128
1132
  switch ( _JSON_float_actions[_acts++] )
1129
1133
  {
1130
1134
  case 0:
1131
- // line 513 "Parser.rl"
1135
+ // line 517 "Parser.rl"
1132
1136
  {
1133
1137
  p--;
1134
1138
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
1135
1139
  }
1136
1140
  break;
1137
- // line 1138 "Parser.java"
1141
+ // line 1142 "Parser.java"
1138
1142
  }
1139
1143
  }
1140
1144
  }
@@ -1154,7 +1158,7 @@ case 5:
1154
1158
  break; }
1155
1159
  }
1156
1160
 
1157
- // line 530 "Parser.rl"
1161
+ // line 534 "Parser.rl"
1158
1162
 
1159
1163
  if (cs < JSON_float_first_final) {
1160
1164
  return null;
@@ -1169,7 +1173,7 @@ case 5:
1169
1173
  }
1170
1174
 
1171
1175
 
1172
- // line 1173 "Parser.java"
1176
+ // line 1177 "Parser.java"
1173
1177
  private static byte[] init__JSON_string_actions_0()
1174
1178
  {
1175
1179
  return new byte [] {
@@ -1271,7 +1275,7 @@ static final int JSON_string_error = 0;
1271
1275
  static final int JSON_string_en_main = 1;
1272
1276
 
1273
1277
 
1274
- // line 574 "Parser.rl"
1278
+ // line 578 "Parser.rl"
1275
1279
 
1276
1280
 
1277
1281
  ParserResult parseString(int p, int pe) {
@@ -1279,15 +1283,15 @@ static final int JSON_string_en_main = 1;
1279
1283
  IRubyObject result = null;
1280
1284
 
1281
1285
 
1282
- // line 1283 "Parser.java"
1286
+ // line 1287 "Parser.java"
1283
1287
  {
1284
1288
  cs = JSON_string_start;
1285
1289
  }
1286
1290
 
1287
- // line 581 "Parser.rl"
1291
+ // line 585 "Parser.rl"
1288
1292
  int memo = p;
1289
1293
 
1290
- // line 1291 "Parser.java"
1294
+ // line 1295 "Parser.java"
1291
1295
  {
1292
1296
  int _klen;
1293
1297
  int _trans = 0;
@@ -1368,7 +1372,7 @@ case 1:
1368
1372
  switch ( _JSON_string_actions[_acts++] )
1369
1373
  {
1370
1374
  case 0:
1371
- // line 549 "Parser.rl"
1375
+ // line 553 "Parser.rl"
1372
1376
  {
1373
1377
  int offset = byteList.begin();
1374
1378
  ByteList decoded = decoder.decode(byteList, memo + 1 - offset,
@@ -1383,13 +1387,13 @@ case 1:
1383
1387
  }
1384
1388
  break;
1385
1389
  case 1:
1386
- // line 562 "Parser.rl"
1390
+ // line 566 "Parser.rl"
1387
1391
  {
1388
1392
  p--;
1389
1393
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
1390
1394
  }
1391
1395
  break;
1392
- // line 1393 "Parser.java"
1396
+ // line 1397 "Parser.java"
1393
1397
  }
1394
1398
  }
1395
1399
  }
@@ -1409,7 +1413,7 @@ case 5:
1409
1413
  break; }
1410
1414
  }
1411
1415
 
1412
- // line 583 "Parser.rl"
1416
+ // line 587 "Parser.rl"
1413
1417
 
1414
1418
  if (parser.createAdditions) {
1415
1419
  RubyHash match_string = parser.match_string;
@@ -1444,7 +1448,7 @@ case 5:
1444
1448
  }
1445
1449
 
1446
1450
 
1447
- // line 1448 "Parser.java"
1451
+ // line 1452 "Parser.java"
1448
1452
  private static byte[] init__JSON_array_actions_0()
1449
1453
  {
1450
1454
  return new byte [] {
@@ -1557,7 +1561,7 @@ static final int JSON_array_error = 0;
1557
1561
  static final int JSON_array_en_main = 1;
1558
1562
 
1559
1563
 
1560
- // line 653 "Parser.rl"
1564
+ // line 657 "Parser.rl"
1561
1565
 
1562
1566
 
1563
1567
  ParserResult parseArray(int p, int pe) {
@@ -1575,14 +1579,14 @@ static final int JSON_array_en_main = 1;
1575
1579
  IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
1576
1580
 
1577
1581
 
1578
- // line 1579 "Parser.java"
1582
+ // line 1583 "Parser.java"
1579
1583
  {
1580
1584
  cs = JSON_array_start;
1581
1585
  }
1582
1586
 
1583
- // line 670 "Parser.rl"
1587
+ // line 674 "Parser.rl"
1584
1588
 
1585
- // line 1586 "Parser.java"
1589
+ // line 1590 "Parser.java"
1586
1590
  {
1587
1591
  int _klen;
1588
1592
  int _trans = 0;
@@ -1663,7 +1667,7 @@ case 1:
1663
1667
  switch ( _JSON_array_actions[_acts++] )
1664
1668
  {
1665
1669
  case 0:
1666
- // line 622 "Parser.rl"
1670
+ // line 626 "Parser.rl"
1667
1671
  {
1668
1672
  ParserResult res = parseValue(p, pe);
1669
1673
  if (res == null) {
@@ -1680,13 +1684,13 @@ case 1:
1680
1684
  }
1681
1685
  break;
1682
1686
  case 1:
1683
- // line 637 "Parser.rl"
1687
+ // line 641 "Parser.rl"
1684
1688
  {
1685
1689
  p--;
1686
1690
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
1687
1691
  }
1688
1692
  break;
1689
- // line 1690 "Parser.java"
1693
+ // line 1694 "Parser.java"
1690
1694
  }
1691
1695
  }
1692
1696
  }
@@ -1706,7 +1710,7 @@ case 5:
1706
1710
  break; }
1707
1711
  }
1708
1712
 
1709
- // line 671 "Parser.rl"
1713
+ // line 675 "Parser.rl"
1710
1714
 
1711
1715
  if (cs >= JSON_array_first_final) {
1712
1716
  return new ParserResult(result, p + 1);
@@ -1716,7 +1720,7 @@ case 5:
1716
1720
  }
1717
1721
 
1718
1722
 
1719
- // line 1720 "Parser.java"
1723
+ // line 1724 "Parser.java"
1720
1724
  private static byte[] init__JSON_object_actions_0()
1721
1725
  {
1722
1726
  return new byte [] {
@@ -1839,7 +1843,7 @@ static final int JSON_object_error = 0;
1839
1843
  static final int JSON_object_en_main = 1;
1840
1844
 
1841
1845
 
1842
- // line 730 "Parser.rl"
1846
+ // line 734 "Parser.rl"
1843
1847
 
1844
1848
 
1845
1849
  ParserResult parseObject(int p, int pe) {
@@ -1858,14 +1862,14 @@ static final int JSON_object_en_main = 1;
1858
1862
  IRubyObject.NULL_ARRAY, Block.NULL_BLOCK);
1859
1863
 
1860
1864
 
1861
- // line 1862 "Parser.java"
1865
+ // line 1866 "Parser.java"
1862
1866
  {
1863
1867
  cs = JSON_object_start;
1864
1868
  }
1865
1869
 
1866
- // line 748 "Parser.rl"
1870
+ // line 752 "Parser.rl"
1867
1871
 
1868
- // line 1869 "Parser.java"
1872
+ // line 1873 "Parser.java"
1869
1873
  {
1870
1874
  int _klen;
1871
1875
  int _trans = 0;
@@ -1946,7 +1950,7 @@ case 1:
1946
1950
  switch ( _JSON_object_actions[_acts++] )
1947
1951
  {
1948
1952
  case 0:
1949
- // line 685 "Parser.rl"
1953
+ // line 689 "Parser.rl"
1950
1954
  {
1951
1955
  ParserResult res = parseValue(p, pe);
1952
1956
  if (res == null) {
@@ -1963,7 +1967,7 @@ case 1:
1963
1967
  }
1964
1968
  break;
1965
1969
  case 1:
1966
- // line 700 "Parser.rl"
1970
+ // line 704 "Parser.rl"
1967
1971
  {
1968
1972
  ParserResult res = parseString(p, pe);
1969
1973
  if (res == null) {
@@ -1983,13 +1987,13 @@ case 1:
1983
1987
  }
1984
1988
  break;
1985
1989
  case 2:
1986
- // line 718 "Parser.rl"
1990
+ // line 722 "Parser.rl"
1987
1991
  {
1988
1992
  p--;
1989
1993
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
1990
1994
  }
1991
1995
  break;
1992
- // line 1993 "Parser.java"
1996
+ // line 1997 "Parser.java"
1993
1997
  }
1994
1998
  }
1995
1999
  }
@@ -2009,7 +2013,7 @@ case 5:
2009
2013
  break; }
2010
2014
  }
2011
2015
 
2012
- // line 749 "Parser.rl"
2016
+ // line 753 "Parser.rl"
2013
2017
 
2014
2018
  if (cs < JSON_object_first_final) {
2015
2019
  return null;
@@ -2035,7 +2039,7 @@ case 5:
2035
2039
  }
2036
2040
 
2037
2041
 
2038
- // line 2039 "Parser.java"
2042
+ // line 2043 "Parser.java"
2039
2043
  private static byte[] init__JSON_actions_0()
2040
2044
  {
2041
2045
  return new byte [] {
@@ -2139,7 +2143,7 @@ static final int JSON_error = 0;
2139
2143
  static final int JSON_en_main = 1;
2140
2144
 
2141
2145
 
2142
- // line 807 "Parser.rl"
2146
+ // line 811 "Parser.rl"
2143
2147
 
2144
2148
 
2145
2149
  public IRubyObject parseStrict() {
@@ -2148,16 +2152,16 @@ static final int JSON_en_main = 1;
2148
2152
  IRubyObject result = null;
2149
2153
 
2150
2154
 
2151
- // line 2152 "Parser.java"
2155
+ // line 2156 "Parser.java"
2152
2156
  {
2153
2157
  cs = JSON_start;
2154
2158
  }
2155
2159
 
2156
- // line 815 "Parser.rl"
2160
+ // line 819 "Parser.rl"
2157
2161
  p = byteList.begin();
2158
2162
  pe = p + byteList.length();
2159
2163
 
2160
- // line 2161 "Parser.java"
2164
+ // line 2165 "Parser.java"
2161
2165
  {
2162
2166
  int _klen;
2163
2167
  int _trans = 0;
@@ -2238,7 +2242,7 @@ case 1:
2238
2242
  switch ( _JSON_actions[_acts++] )
2239
2243
  {
2240
2244
  case 0:
2241
- // line 779 "Parser.rl"
2245
+ // line 783 "Parser.rl"
2242
2246
  {
2243
2247
  currentNesting = 1;
2244
2248
  ParserResult res = parseObject(p, pe);
@@ -2252,7 +2256,7 @@ case 1:
2252
2256
  }
2253
2257
  break;
2254
2258
  case 1:
2255
- // line 791 "Parser.rl"
2259
+ // line 795 "Parser.rl"
2256
2260
  {
2257
2261
  currentNesting = 1;
2258
2262
  ParserResult res = parseArray(p, pe);
@@ -2265,7 +2269,7 @@ case 1:
2265
2269
  }
2266
2270
  }
2267
2271
  break;
2268
- // line 2269 "Parser.java"
2272
+ // line 2273 "Parser.java"
2269
2273
  }
2270
2274
  }
2271
2275
  }
@@ -2285,7 +2289,7 @@ case 5:
2285
2289
  break; }
2286
2290
  }
2287
2291
 
2288
- // line 818 "Parser.rl"
2292
+ // line 822 "Parser.rl"
2289
2293
 
2290
2294
  if (cs >= JSON_first_final && p == pe) {
2291
2295
  return result;
@@ -2295,7 +2299,7 @@ case 5:
2295
2299
  }
2296
2300
 
2297
2301
 
2298
- // line 2299 "Parser.java"
2302
+ // line 2303 "Parser.java"
2299
2303
  private static byte[] init__JSON_quirks_mode_actions_0()
2300
2304
  {
2301
2305
  return new byte [] {
@@ -2398,7 +2402,7 @@ static final int JSON_quirks_mode_error = 0;
2398
2402
  static final int JSON_quirks_mode_en_main = 1;
2399
2403
 
2400
2404
 
2401
- // line 846 "Parser.rl"
2405
+ // line 850 "Parser.rl"
2402
2406
 
2403
2407
 
2404
2408
  public IRubyObject parseQuirksMode() {
@@ -2407,16 +2411,16 @@ static final int JSON_quirks_mode_en_main = 1;
2407
2411
  IRubyObject result = null;
2408
2412
 
2409
2413
 
2410
- // line 2411 "Parser.java"
2414
+ // line 2415 "Parser.java"
2411
2415
  {
2412
2416
  cs = JSON_quirks_mode_start;
2413
2417
  }
2414
2418
 
2415
- // line 854 "Parser.rl"
2419
+ // line 858 "Parser.rl"
2416
2420
  p = byteList.begin();
2417
2421
  pe = p + byteList.length();
2418
2422
 
2419
- // line 2420 "Parser.java"
2423
+ // line 2424 "Parser.java"
2420
2424
  {
2421
2425
  int _klen;
2422
2426
  int _trans = 0;
@@ -2497,7 +2501,7 @@ case 1:
2497
2501
  switch ( _JSON_quirks_mode_actions[_acts++] )
2498
2502
  {
2499
2503
  case 0:
2500
- // line 832 "Parser.rl"
2504
+ // line 836 "Parser.rl"
2501
2505
  {
2502
2506
  ParserResult res = parseValue(p, pe);
2503
2507
  if (res == null) {
@@ -2509,7 +2513,7 @@ case 1:
2509
2513
  }
2510
2514
  }
2511
2515
  break;
2512
- // line 2513 "Parser.java"
2516
+ // line 2517 "Parser.java"
2513
2517
  }
2514
2518
  }
2515
2519
  }
@@ -2529,7 +2533,7 @@ case 5:
2529
2533
  break; }
2530
2534
  }
2531
2535
 
2532
- // line 857 "Parser.rl"
2536
+ // line 861 "Parser.rl"
2533
2537
 
2534
2538
  if (cs >= JSON_quirks_mode_first_final && p == pe) {
2535
2539
  return result;