json 2.8.2 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +9 -0
- data/ext/json/ext/fbuffer/fbuffer.h +46 -16
- data/ext/json/ext/generator/generator.c +68 -40
- data/ext/json/ext/parser/extconf.rb +0 -1
- data/ext/json/ext/parser/parser.c +124 -132
- data/ext/json/ext/parser/parser.rl +8 -16
- data/lib/json/common.rb +38 -18
- data/lib/json/ext/generator/state.rb +11 -0
- data/lib/json/truffle_ruby/generator.rb +25 -17
- data/lib/json/version.rb +1 -1
- metadata +2 -2
@@ -28,19 +28,6 @@ static const char deprecated_create_additions_warning[] =
|
|
28
28
|
"and will be removed in 3.0, use JSON.unsafe_load or explicitly "
|
29
29
|
"pass `create_additions: true`";
|
30
30
|
|
31
|
-
#ifndef HAVE_RB_GC_MARK_LOCATIONS
|
32
|
-
// For TruffleRuby
|
33
|
-
void rb_gc_mark_locations(const VALUE *start, const VALUE *end)
|
34
|
-
{
|
35
|
-
VALUE *value = start;
|
36
|
-
|
37
|
-
while (value < end) {
|
38
|
-
rb_gc_mark(*value);
|
39
|
-
value++;
|
40
|
-
}
|
41
|
-
}
|
42
|
-
#endif
|
43
|
-
|
44
31
|
#ifndef HAVE_RB_HASH_BULK_INSERT
|
45
32
|
// For TruffleRuby
|
46
33
|
void rb_hash_bulk_insert(long count, const VALUE *pairs, VALUE hash)
|
@@ -266,7 +253,10 @@ static inline void rvalue_stack_pop(rvalue_stack *stack, long count)
|
|
266
253
|
static void rvalue_stack_mark(void *ptr)
|
267
254
|
{
|
268
255
|
rvalue_stack *stack = (rvalue_stack *)ptr;
|
269
|
-
|
256
|
+
long index;
|
257
|
+
for (index = 0; index < stack->head; index++) {
|
258
|
+
rb_gc_mark(stack->ptr[index]);
|
259
|
+
}
|
270
260
|
}
|
271
261
|
|
272
262
|
static void rvalue_stack_free(void *ptr)
|
@@ -449,11 +439,11 @@ static void raise_parse_error(const char *format, const char *start)
|
|
449
439
|
|
450
440
|
|
451
441
|
|
452
|
-
#line
|
442
|
+
#line 465 "parser.rl"
|
453
443
|
|
454
444
|
|
455
445
|
|
456
|
-
#line
|
446
|
+
#line 447 "parser.c"
|
457
447
|
enum {JSON_object_start = 1};
|
458
448
|
enum {JSON_object_first_final = 32};
|
459
449
|
enum {JSON_object_error = 0};
|
@@ -461,7 +451,7 @@ enum {JSON_object_error = 0};
|
|
461
451
|
enum {JSON_object_en_main = 1};
|
462
452
|
|
463
453
|
|
464
|
-
#line
|
454
|
+
#line 505 "parser.rl"
|
465
455
|
|
466
456
|
|
467
457
|
#define PUSH(result) rvalue_stack_push(json->stack, result, &json->stack_handle, &json->stack)
|
@@ -477,14 +467,14 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
477
467
|
long stack_head = json->stack->head;
|
478
468
|
|
479
469
|
|
480
|
-
#line
|
470
|
+
#line 471 "parser.c"
|
481
471
|
{
|
482
472
|
cs = JSON_object_start;
|
483
473
|
}
|
484
474
|
|
485
|
-
#line
|
475
|
+
#line 520 "parser.rl"
|
486
476
|
|
487
|
-
#line
|
477
|
+
#line 478 "parser.c"
|
488
478
|
{
|
489
479
|
short _widec;
|
490
480
|
if ( p == pe )
|
@@ -513,7 +503,7 @@ case 2:
|
|
513
503
|
goto st2;
|
514
504
|
goto st0;
|
515
505
|
tr2:
|
516
|
-
#line
|
506
|
+
#line 484 "parser.rl"
|
517
507
|
{
|
518
508
|
char *np;
|
519
509
|
json->parsing_name = true;
|
@@ -529,7 +519,7 @@ st3:
|
|
529
519
|
if ( ++p == pe )
|
530
520
|
goto _test_eof3;
|
531
521
|
case 3:
|
532
|
-
#line
|
522
|
+
#line 523 "parser.c"
|
533
523
|
switch( (*p) ) {
|
534
524
|
case 13: goto st3;
|
535
525
|
case 32: goto st3;
|
@@ -596,7 +586,7 @@ case 8:
|
|
596
586
|
goto st8;
|
597
587
|
goto st0;
|
598
588
|
tr11:
|
599
|
-
#line
|
589
|
+
#line 473 "parser.rl"
|
600
590
|
{
|
601
591
|
char *np = JSON_parse_value(json, p, pe, result, current_nesting);
|
602
592
|
if (np == NULL) {
|
@@ -610,20 +600,20 @@ st9:
|
|
610
600
|
if ( ++p == pe )
|
611
601
|
goto _test_eof9;
|
612
602
|
case 9:
|
613
|
-
#line
|
603
|
+
#line 604 "parser.c"
|
614
604
|
_widec = (*p);
|
615
605
|
if ( (*p) < 13 ) {
|
616
606
|
if ( (*p) > 9 ) {
|
617
607
|
if ( 10 <= (*p) && (*p) <= 10 ) {
|
618
608
|
_widec = (short)(128 + ((*p) - -128));
|
619
609
|
if (
|
620
|
-
#line
|
610
|
+
#line 482 "parser.rl"
|
621
611
|
json->allow_trailing_comma ) _widec += 256;
|
622
612
|
}
|
623
613
|
} else if ( (*p) >= 9 ) {
|
624
614
|
_widec = (short)(128 + ((*p) - -128));
|
625
615
|
if (
|
626
|
-
#line
|
616
|
+
#line 482 "parser.rl"
|
627
617
|
json->allow_trailing_comma ) _widec += 256;
|
628
618
|
}
|
629
619
|
} else if ( (*p) > 13 ) {
|
@@ -631,26 +621,26 @@ case 9:
|
|
631
621
|
if ( 32 <= (*p) && (*p) <= 32 ) {
|
632
622
|
_widec = (short)(128 + ((*p) - -128));
|
633
623
|
if (
|
634
|
-
#line
|
624
|
+
#line 482 "parser.rl"
|
635
625
|
json->allow_trailing_comma ) _widec += 256;
|
636
626
|
}
|
637
627
|
} else if ( (*p) > 44 ) {
|
638
628
|
if ( 47 <= (*p) && (*p) <= 47 ) {
|
639
629
|
_widec = (short)(128 + ((*p) - -128));
|
640
630
|
if (
|
641
|
-
#line
|
631
|
+
#line 482 "parser.rl"
|
642
632
|
json->allow_trailing_comma ) _widec += 256;
|
643
633
|
}
|
644
634
|
} else {
|
645
635
|
_widec = (short)(128 + ((*p) - -128));
|
646
636
|
if (
|
647
|
-
#line
|
637
|
+
#line 482 "parser.rl"
|
648
638
|
json->allow_trailing_comma ) _widec += 256;
|
649
639
|
}
|
650
640
|
} else {
|
651
641
|
_widec = (short)(128 + ((*p) - -128));
|
652
642
|
if (
|
653
|
-
#line
|
643
|
+
#line 482 "parser.rl"
|
654
644
|
json->allow_trailing_comma ) _widec += 256;
|
655
645
|
}
|
656
646
|
switch( _widec ) {
|
@@ -671,14 +661,14 @@ case 9:
|
|
671
661
|
goto st10;
|
672
662
|
goto st0;
|
673
663
|
tr4:
|
674
|
-
#line
|
664
|
+
#line 495 "parser.rl"
|
675
665
|
{ p--; {p++; cs = 32; goto _out;} }
|
676
666
|
goto st32;
|
677
667
|
st32:
|
678
668
|
if ( ++p == pe )
|
679
669
|
goto _test_eof32;
|
680
670
|
case 32:
|
681
|
-
#line
|
671
|
+
#line 672 "parser.c"
|
682
672
|
goto st0;
|
683
673
|
st10:
|
684
674
|
if ( ++p == pe )
|
@@ -780,13 +770,13 @@ case 20:
|
|
780
770
|
if ( 47 <= (*p) && (*p) <= 47 ) {
|
781
771
|
_widec = (short)(128 + ((*p) - -128));
|
782
772
|
if (
|
783
|
-
#line
|
773
|
+
#line 482 "parser.rl"
|
784
774
|
json->allow_trailing_comma ) _widec += 256;
|
785
775
|
}
|
786
776
|
} else if ( (*p) >= 42 ) {
|
787
777
|
_widec = (short)(128 + ((*p) - -128));
|
788
778
|
if (
|
789
|
-
#line
|
779
|
+
#line 482 "parser.rl"
|
790
780
|
json->allow_trailing_comma ) _widec += 256;
|
791
781
|
}
|
792
782
|
switch( _widec ) {
|
@@ -805,20 +795,20 @@ case 21:
|
|
805
795
|
if ( (*p) <= 41 ) {
|
806
796
|
_widec = (short)(128 + ((*p) - -128));
|
807
797
|
if (
|
808
|
-
#line
|
798
|
+
#line 482 "parser.rl"
|
809
799
|
json->allow_trailing_comma ) _widec += 256;
|
810
800
|
}
|
811
801
|
} else if ( (*p) > 42 ) {
|
812
802
|
if ( 43 <= (*p) )
|
813
803
|
{ _widec = (short)(128 + ((*p) - -128));
|
814
804
|
if (
|
815
|
-
#line
|
805
|
+
#line 482 "parser.rl"
|
816
806
|
json->allow_trailing_comma ) _widec += 256;
|
817
807
|
}
|
818
808
|
} else {
|
819
809
|
_widec = (short)(128 + ((*p) - -128));
|
820
810
|
if (
|
821
|
-
#line
|
811
|
+
#line 482 "parser.rl"
|
822
812
|
json->allow_trailing_comma ) _widec += 256;
|
823
813
|
}
|
824
814
|
switch( _widec ) {
|
@@ -841,13 +831,13 @@ case 22:
|
|
841
831
|
if ( 42 <= (*p) && (*p) <= 42 ) {
|
842
832
|
_widec = (short)(128 + ((*p) - -128));
|
843
833
|
if (
|
844
|
-
#line
|
834
|
+
#line 482 "parser.rl"
|
845
835
|
json->allow_trailing_comma ) _widec += 256;
|
846
836
|
}
|
847
837
|
} else {
|
848
838
|
_widec = (short)(128 + ((*p) - -128));
|
849
839
|
if (
|
850
|
-
#line
|
840
|
+
#line 482 "parser.rl"
|
851
841
|
json->allow_trailing_comma ) _widec += 256;
|
852
842
|
}
|
853
843
|
} else if ( (*p) > 46 ) {
|
@@ -855,19 +845,19 @@ case 22:
|
|
855
845
|
if ( 48 <= (*p) )
|
856
846
|
{ _widec = (short)(128 + ((*p) - -128));
|
857
847
|
if (
|
858
|
-
#line
|
848
|
+
#line 482 "parser.rl"
|
859
849
|
json->allow_trailing_comma ) _widec += 256;
|
860
850
|
}
|
861
851
|
} else if ( (*p) >= 47 ) {
|
862
852
|
_widec = (short)(128 + ((*p) - -128));
|
863
853
|
if (
|
864
|
-
#line
|
854
|
+
#line 482 "parser.rl"
|
865
855
|
json->allow_trailing_comma ) _widec += 256;
|
866
856
|
}
|
867
857
|
} else {
|
868
858
|
_widec = (short)(128 + ((*p) - -128));
|
869
859
|
if (
|
870
|
-
#line
|
860
|
+
#line 482 "parser.rl"
|
871
861
|
json->allow_trailing_comma ) _widec += 256;
|
872
862
|
}
|
873
863
|
switch( _widec ) {
|
@@ -891,20 +881,20 @@ case 23:
|
|
891
881
|
if ( (*p) <= 9 ) {
|
892
882
|
_widec = (short)(128 + ((*p) - -128));
|
893
883
|
if (
|
894
|
-
#line
|
884
|
+
#line 482 "parser.rl"
|
895
885
|
json->allow_trailing_comma ) _widec += 256;
|
896
886
|
}
|
897
887
|
} else if ( (*p) > 10 ) {
|
898
888
|
if ( 11 <= (*p) )
|
899
889
|
{ _widec = (short)(128 + ((*p) - -128));
|
900
890
|
if (
|
901
|
-
#line
|
891
|
+
#line 482 "parser.rl"
|
902
892
|
json->allow_trailing_comma ) _widec += 256;
|
903
893
|
}
|
904
894
|
} else {
|
905
895
|
_widec = (short)(128 + ((*p) - -128));
|
906
896
|
if (
|
907
|
-
#line
|
897
|
+
#line 482 "parser.rl"
|
908
898
|
json->allow_trailing_comma ) _widec += 256;
|
909
899
|
}
|
910
900
|
switch( _widec ) {
|
@@ -1018,7 +1008,7 @@ case 31:
|
|
1018
1008
|
_out: {}
|
1019
1009
|
}
|
1020
1010
|
|
1021
|
-
#line
|
1011
|
+
#line 521 "parser.rl"
|
1022
1012
|
|
1023
1013
|
if (cs >= JSON_object_first_final) {
|
1024
1014
|
long count = json->stack->head - stack_head;
|
@@ -1069,7 +1059,7 @@ case 31:
|
|
1069
1059
|
}
|
1070
1060
|
|
1071
1061
|
|
1072
|
-
#line
|
1062
|
+
#line 1063 "parser.c"
|
1073
1063
|
enum {JSON_value_start = 1};
|
1074
1064
|
enum {JSON_value_first_final = 29};
|
1075
1065
|
enum {JSON_value_error = 0};
|
@@ -1077,7 +1067,7 @@ enum {JSON_value_error = 0};
|
|
1077
1067
|
enum {JSON_value_en_main = 1};
|
1078
1068
|
|
1079
1069
|
|
1080
|
-
#line
|
1070
|
+
#line 654 "parser.rl"
|
1081
1071
|
|
1082
1072
|
|
1083
1073
|
static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
|
@@ -1085,14 +1075,14 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
1085
1075
|
int cs = EVIL;
|
1086
1076
|
|
1087
1077
|
|
1088
|
-
#line
|
1078
|
+
#line 1079 "parser.c"
|
1089
1079
|
{
|
1090
1080
|
cs = JSON_value_start;
|
1091
1081
|
}
|
1092
1082
|
|
1093
|
-
#line
|
1083
|
+
#line 661 "parser.rl"
|
1094
1084
|
|
1095
|
-
#line
|
1085
|
+
#line 1086 "parser.c"
|
1096
1086
|
{
|
1097
1087
|
if ( p == pe )
|
1098
1088
|
goto _test_eof;
|
@@ -1126,7 +1116,7 @@ st0:
|
|
1126
1116
|
cs = 0;
|
1127
1117
|
goto _out;
|
1128
1118
|
tr2:
|
1129
|
-
#line
|
1119
|
+
#line 599 "parser.rl"
|
1130
1120
|
{
|
1131
1121
|
char *np = JSON_parse_string(json, p, pe, result);
|
1132
1122
|
if (np == NULL) {
|
@@ -1138,7 +1128,7 @@ tr2:
|
|
1138
1128
|
}
|
1139
1129
|
goto st29;
|
1140
1130
|
tr3:
|
1141
|
-
#line
|
1131
|
+
#line 609 "parser.rl"
|
1142
1132
|
{
|
1143
1133
|
char *np;
|
1144
1134
|
if(pe > p + 8 && !strncmp(MinusInfinity, p, 9)) {
|
@@ -1158,7 +1148,7 @@ tr3:
|
|
1158
1148
|
}
|
1159
1149
|
goto st29;
|
1160
1150
|
tr7:
|
1161
|
-
#line
|
1151
|
+
#line 627 "parser.rl"
|
1162
1152
|
{
|
1163
1153
|
char *np;
|
1164
1154
|
json->in_array++;
|
@@ -1168,7 +1158,7 @@ tr7:
|
|
1168
1158
|
}
|
1169
1159
|
goto st29;
|
1170
1160
|
tr11:
|
1171
|
-
#line
|
1161
|
+
#line 635 "parser.rl"
|
1172
1162
|
{
|
1173
1163
|
char *np;
|
1174
1164
|
np = JSON_parse_object(json, p, pe, result, current_nesting + 1);
|
@@ -1176,7 +1166,7 @@ tr11:
|
|
1176
1166
|
}
|
1177
1167
|
goto st29;
|
1178
1168
|
tr25:
|
1179
|
-
#line
|
1169
|
+
#line 592 "parser.rl"
|
1180
1170
|
{
|
1181
1171
|
if (json->allow_nan) {
|
1182
1172
|
*result = CInfinity;
|
@@ -1186,7 +1176,7 @@ tr25:
|
|
1186
1176
|
}
|
1187
1177
|
goto st29;
|
1188
1178
|
tr27:
|
1189
|
-
#line
|
1179
|
+
#line 585 "parser.rl"
|
1190
1180
|
{
|
1191
1181
|
if (json->allow_nan) {
|
1192
1182
|
*result = CNaN;
|
@@ -1196,19 +1186,19 @@ tr27:
|
|
1196
1186
|
}
|
1197
1187
|
goto st29;
|
1198
1188
|
tr31:
|
1199
|
-
#line
|
1189
|
+
#line 579 "parser.rl"
|
1200
1190
|
{
|
1201
1191
|
*result = Qfalse;
|
1202
1192
|
}
|
1203
1193
|
goto st29;
|
1204
1194
|
tr34:
|
1205
|
-
#line
|
1195
|
+
#line 576 "parser.rl"
|
1206
1196
|
{
|
1207
1197
|
*result = Qnil;
|
1208
1198
|
}
|
1209
1199
|
goto st29;
|
1210
1200
|
tr37:
|
1211
|
-
#line
|
1201
|
+
#line 582 "parser.rl"
|
1212
1202
|
{
|
1213
1203
|
*result = Qtrue;
|
1214
1204
|
}
|
@@ -1217,9 +1207,9 @@ st29:
|
|
1217
1207
|
if ( ++p == pe )
|
1218
1208
|
goto _test_eof29;
|
1219
1209
|
case 29:
|
1220
|
-
#line
|
1210
|
+
#line 641 "parser.rl"
|
1221
1211
|
{ p--; {p++; cs = 29; goto _out;} }
|
1222
|
-
#line
|
1212
|
+
#line 1213 "parser.c"
|
1223
1213
|
switch( (*p) ) {
|
1224
1214
|
case 13: goto st29;
|
1225
1215
|
case 32: goto st29;
|
@@ -1460,7 +1450,7 @@ case 28:
|
|
1460
1450
|
_out: {}
|
1461
1451
|
}
|
1462
1452
|
|
1463
|
-
#line
|
1453
|
+
#line 662 "parser.rl"
|
1464
1454
|
|
1465
1455
|
if (json->freeze) {
|
1466
1456
|
OBJ_FREEZE(*result);
|
@@ -1475,7 +1465,7 @@ case 28:
|
|
1475
1465
|
}
|
1476
1466
|
|
1477
1467
|
|
1478
|
-
#line
|
1468
|
+
#line 1469 "parser.c"
|
1479
1469
|
enum {JSON_integer_start = 1};
|
1480
1470
|
enum {JSON_integer_first_final = 3};
|
1481
1471
|
enum {JSON_integer_error = 0};
|
@@ -1483,7 +1473,7 @@ enum {JSON_integer_error = 0};
|
|
1483
1473
|
enum {JSON_integer_en_main = 1};
|
1484
1474
|
|
1485
1475
|
|
1486
|
-
#line
|
1476
|
+
#line 683 "parser.rl"
|
1487
1477
|
|
1488
1478
|
|
1489
1479
|
#define MAX_FAST_INTEGER_SIZE 18
|
@@ -1523,7 +1513,7 @@ static char *JSON_decode_integer(JSON_Parser *json, char *p, VALUE *result)
|
|
1523
1513
|
}
|
1524
1514
|
|
1525
1515
|
|
1526
|
-
#line
|
1516
|
+
#line 1517 "parser.c"
|
1527
1517
|
enum {JSON_float_start = 1};
|
1528
1518
|
enum {JSON_float_first_final = 6};
|
1529
1519
|
enum {JSON_float_error = 0};
|
@@ -1531,7 +1521,7 @@ enum {JSON_float_error = 0};
|
|
1531
1521
|
enum {JSON_float_en_main = 1};
|
1532
1522
|
|
1533
1523
|
|
1534
|
-
#line
|
1524
|
+
#line 735 "parser.rl"
|
1535
1525
|
|
1536
1526
|
|
1537
1527
|
static char *JSON_parse_number(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
@@ -1540,15 +1530,15 @@ static char *JSON_parse_number(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
1540
1530
|
bool is_float = false;
|
1541
1531
|
|
1542
1532
|
|
1543
|
-
#line
|
1533
|
+
#line 1534 "parser.c"
|
1544
1534
|
{
|
1545
1535
|
cs = JSON_float_start;
|
1546
1536
|
}
|
1547
1537
|
|
1548
|
-
#line
|
1538
|
+
#line 743 "parser.rl"
|
1549
1539
|
json->memo = p;
|
1550
1540
|
|
1551
|
-
#line
|
1541
|
+
#line 1542 "parser.c"
|
1552
1542
|
{
|
1553
1543
|
if ( p == pe )
|
1554
1544
|
goto _test_eof;
|
@@ -1588,24 +1578,24 @@ case 6:
|
|
1588
1578
|
goto st0;
|
1589
1579
|
goto tr7;
|
1590
1580
|
tr7:
|
1591
|
-
#line
|
1581
|
+
#line 727 "parser.rl"
|
1592
1582
|
{ p--; {p++; cs = 7; goto _out;} }
|
1593
1583
|
goto st7;
|
1594
1584
|
st7:
|
1595
1585
|
if ( ++p == pe )
|
1596
1586
|
goto _test_eof7;
|
1597
1587
|
case 7:
|
1598
|
-
#line
|
1588
|
+
#line 1589 "parser.c"
|
1599
1589
|
goto st0;
|
1600
1590
|
tr8:
|
1601
|
-
#line
|
1591
|
+
#line 728 "parser.rl"
|
1602
1592
|
{ is_float = true; }
|
1603
1593
|
goto st3;
|
1604
1594
|
st3:
|
1605
1595
|
if ( ++p == pe )
|
1606
1596
|
goto _test_eof3;
|
1607
1597
|
case 3:
|
1608
|
-
#line
|
1598
|
+
#line 1599 "parser.c"
|
1609
1599
|
if ( 48 <= (*p) && (*p) <= 57 )
|
1610
1600
|
goto st8;
|
1611
1601
|
goto st0;
|
@@ -1624,14 +1614,14 @@ case 8:
|
|
1624
1614
|
goto st0;
|
1625
1615
|
goto tr7;
|
1626
1616
|
tr9:
|
1627
|
-
#line
|
1617
|
+
#line 728 "parser.rl"
|
1628
1618
|
{ is_float = true; }
|
1629
1619
|
goto st4;
|
1630
1620
|
st4:
|
1631
1621
|
if ( ++p == pe )
|
1632
1622
|
goto _test_eof4;
|
1633
1623
|
case 4:
|
1634
|
-
#line
|
1624
|
+
#line 1625 "parser.c"
|
1635
1625
|
switch( (*p) ) {
|
1636
1626
|
case 43: goto st5;
|
1637
1627
|
case 45: goto st5;
|
@@ -1688,7 +1678,7 @@ case 10:
|
|
1688
1678
|
_out: {}
|
1689
1679
|
}
|
1690
1680
|
|
1691
|
-
#line
|
1681
|
+
#line 745 "parser.rl"
|
1692
1682
|
|
1693
1683
|
if (cs >= JSON_float_first_final) {
|
1694
1684
|
if (!is_float) {
|
@@ -1744,7 +1734,7 @@ case 10:
|
|
1744
1734
|
|
1745
1735
|
|
1746
1736
|
|
1747
|
-
#line
|
1737
|
+
#line 1738 "parser.c"
|
1748
1738
|
enum {JSON_array_start = 1};
|
1749
1739
|
enum {JSON_array_first_final = 22};
|
1750
1740
|
enum {JSON_array_error = 0};
|
@@ -1752,7 +1742,7 @@ enum {JSON_array_error = 0};
|
|
1752
1742
|
enum {JSON_array_en_main = 1};
|
1753
1743
|
|
1754
1744
|
|
1755
|
-
#line
|
1745
|
+
#line 825 "parser.rl"
|
1756
1746
|
|
1757
1747
|
|
1758
1748
|
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
|
@@ -1765,14 +1755,14 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
1765
1755
|
long stack_head = json->stack->head;
|
1766
1756
|
|
1767
1757
|
|
1768
|
-
#line
|
1758
|
+
#line 1759 "parser.c"
|
1769
1759
|
{
|
1770
1760
|
cs = JSON_array_start;
|
1771
1761
|
}
|
1772
1762
|
|
1773
|
-
#line
|
1763
|
+
#line 837 "parser.rl"
|
1774
1764
|
|
1775
|
-
#line
|
1765
|
+
#line 1766 "parser.c"
|
1776
1766
|
{
|
1777
1767
|
short _widec;
|
1778
1768
|
if ( p == pe )
|
@@ -1812,7 +1802,7 @@ case 2:
|
|
1812
1802
|
goto st2;
|
1813
1803
|
goto st0;
|
1814
1804
|
tr2:
|
1815
|
-
#line
|
1805
|
+
#line 805 "parser.rl"
|
1816
1806
|
{
|
1817
1807
|
VALUE v = Qnil;
|
1818
1808
|
char *np = JSON_parse_value(json, p, pe, &v, current_nesting);
|
@@ -1827,12 +1817,12 @@ st3:
|
|
1827
1817
|
if ( ++p == pe )
|
1828
1818
|
goto _test_eof3;
|
1829
1819
|
case 3:
|
1830
|
-
#line
|
1820
|
+
#line 1821 "parser.c"
|
1831
1821
|
_widec = (*p);
|
1832
1822
|
if ( 44 <= (*p) && (*p) <= 44 ) {
|
1833
1823
|
_widec = (short)(128 + ((*p) - -128));
|
1834
1824
|
if (
|
1835
|
-
#line
|
1825
|
+
#line 815 "parser.rl"
|
1836
1826
|
json->allow_trailing_comma ) _widec += 256;
|
1837
1827
|
}
|
1838
1828
|
switch( _widec ) {
|
@@ -1879,14 +1869,14 @@ case 7:
|
|
1879
1869
|
goto st3;
|
1880
1870
|
goto st7;
|
1881
1871
|
tr4:
|
1882
|
-
#line
|
1872
|
+
#line 817 "parser.rl"
|
1883
1873
|
{ p--; {p++; cs = 22; goto _out;} }
|
1884
1874
|
goto st22;
|
1885
1875
|
st22:
|
1886
1876
|
if ( ++p == pe )
|
1887
1877
|
goto _test_eof22;
|
1888
1878
|
case 22:
|
1889
|
-
#line
|
1879
|
+
#line 1880 "parser.c"
|
1890
1880
|
goto st0;
|
1891
1881
|
st8:
|
1892
1882
|
if ( ++p == pe )
|
@@ -1954,13 +1944,13 @@ case 13:
|
|
1954
1944
|
if ( 10 <= (*p) && (*p) <= 10 ) {
|
1955
1945
|
_widec = (short)(128 + ((*p) - -128));
|
1956
1946
|
if (
|
1957
|
-
#line
|
1947
|
+
#line 815 "parser.rl"
|
1958
1948
|
json->allow_trailing_comma ) _widec += 256;
|
1959
1949
|
}
|
1960
1950
|
} else if ( (*p) >= 9 ) {
|
1961
1951
|
_widec = (short)(128 + ((*p) - -128));
|
1962
1952
|
if (
|
1963
|
-
#line
|
1953
|
+
#line 815 "parser.rl"
|
1964
1954
|
json->allow_trailing_comma ) _widec += 256;
|
1965
1955
|
}
|
1966
1956
|
} else if ( (*p) > 13 ) {
|
@@ -1968,19 +1958,19 @@ case 13:
|
|
1968
1958
|
if ( 47 <= (*p) && (*p) <= 47 ) {
|
1969
1959
|
_widec = (short)(128 + ((*p) - -128));
|
1970
1960
|
if (
|
1971
|
-
#line
|
1961
|
+
#line 815 "parser.rl"
|
1972
1962
|
json->allow_trailing_comma ) _widec += 256;
|
1973
1963
|
}
|
1974
1964
|
} else if ( (*p) >= 32 ) {
|
1975
1965
|
_widec = (short)(128 + ((*p) - -128));
|
1976
1966
|
if (
|
1977
|
-
#line
|
1967
|
+
#line 815 "parser.rl"
|
1978
1968
|
json->allow_trailing_comma ) _widec += 256;
|
1979
1969
|
}
|
1980
1970
|
} else {
|
1981
1971
|
_widec = (short)(128 + ((*p) - -128));
|
1982
1972
|
if (
|
1983
|
-
#line
|
1973
|
+
#line 815 "parser.rl"
|
1984
1974
|
json->allow_trailing_comma ) _widec += 256;
|
1985
1975
|
}
|
1986
1976
|
switch( _widec ) {
|
@@ -2019,13 +2009,13 @@ case 14:
|
|
2019
2009
|
if ( 47 <= (*p) && (*p) <= 47 ) {
|
2020
2010
|
_widec = (short)(128 + ((*p) - -128));
|
2021
2011
|
if (
|
2022
|
-
#line
|
2012
|
+
#line 815 "parser.rl"
|
2023
2013
|
json->allow_trailing_comma ) _widec += 256;
|
2024
2014
|
}
|
2025
2015
|
} else if ( (*p) >= 42 ) {
|
2026
2016
|
_widec = (short)(128 + ((*p) - -128));
|
2027
2017
|
if (
|
2028
|
-
#line
|
2018
|
+
#line 815 "parser.rl"
|
2029
2019
|
json->allow_trailing_comma ) _widec += 256;
|
2030
2020
|
}
|
2031
2021
|
switch( _widec ) {
|
@@ -2044,20 +2034,20 @@ case 15:
|
|
2044
2034
|
if ( (*p) <= 41 ) {
|
2045
2035
|
_widec = (short)(128 + ((*p) - -128));
|
2046
2036
|
if (
|
2047
|
-
#line
|
2037
|
+
#line 815 "parser.rl"
|
2048
2038
|
json->allow_trailing_comma ) _widec += 256;
|
2049
2039
|
}
|
2050
2040
|
} else if ( (*p) > 42 ) {
|
2051
2041
|
if ( 43 <= (*p) )
|
2052
2042
|
{ _widec = (short)(128 + ((*p) - -128));
|
2053
2043
|
if (
|
2054
|
-
#line
|
2044
|
+
#line 815 "parser.rl"
|
2055
2045
|
json->allow_trailing_comma ) _widec += 256;
|
2056
2046
|
}
|
2057
2047
|
} else {
|
2058
2048
|
_widec = (short)(128 + ((*p) - -128));
|
2059
2049
|
if (
|
2060
|
-
#line
|
2050
|
+
#line 815 "parser.rl"
|
2061
2051
|
json->allow_trailing_comma ) _widec += 256;
|
2062
2052
|
}
|
2063
2053
|
switch( _widec ) {
|
@@ -2080,13 +2070,13 @@ case 16:
|
|
2080
2070
|
if ( 42 <= (*p) && (*p) <= 42 ) {
|
2081
2071
|
_widec = (short)(128 + ((*p) - -128));
|
2082
2072
|
if (
|
2083
|
-
#line
|
2073
|
+
#line 815 "parser.rl"
|
2084
2074
|
json->allow_trailing_comma ) _widec += 256;
|
2085
2075
|
}
|
2086
2076
|
} else {
|
2087
2077
|
_widec = (short)(128 + ((*p) - -128));
|
2088
2078
|
if (
|
2089
|
-
#line
|
2079
|
+
#line 815 "parser.rl"
|
2090
2080
|
json->allow_trailing_comma ) _widec += 256;
|
2091
2081
|
}
|
2092
2082
|
} else if ( (*p) > 46 ) {
|
@@ -2094,19 +2084,19 @@ case 16:
|
|
2094
2084
|
if ( 48 <= (*p) )
|
2095
2085
|
{ _widec = (short)(128 + ((*p) - -128));
|
2096
2086
|
if (
|
2097
|
-
#line
|
2087
|
+
#line 815 "parser.rl"
|
2098
2088
|
json->allow_trailing_comma ) _widec += 256;
|
2099
2089
|
}
|
2100
2090
|
} else if ( (*p) >= 47 ) {
|
2101
2091
|
_widec = (short)(128 + ((*p) - -128));
|
2102
2092
|
if (
|
2103
|
-
#line
|
2093
|
+
#line 815 "parser.rl"
|
2104
2094
|
json->allow_trailing_comma ) _widec += 256;
|
2105
2095
|
}
|
2106
2096
|
} else {
|
2107
2097
|
_widec = (short)(128 + ((*p) - -128));
|
2108
2098
|
if (
|
2109
|
-
#line
|
2099
|
+
#line 815 "parser.rl"
|
2110
2100
|
json->allow_trailing_comma ) _widec += 256;
|
2111
2101
|
}
|
2112
2102
|
switch( _widec ) {
|
@@ -2130,20 +2120,20 @@ case 17:
|
|
2130
2120
|
if ( (*p) <= 9 ) {
|
2131
2121
|
_widec = (short)(128 + ((*p) - -128));
|
2132
2122
|
if (
|
2133
|
-
#line
|
2123
|
+
#line 815 "parser.rl"
|
2134
2124
|
json->allow_trailing_comma ) _widec += 256;
|
2135
2125
|
}
|
2136
2126
|
} else if ( (*p) > 10 ) {
|
2137
2127
|
if ( 11 <= (*p) )
|
2138
2128
|
{ _widec = (short)(128 + ((*p) - -128));
|
2139
2129
|
if (
|
2140
|
-
#line
|
2130
|
+
#line 815 "parser.rl"
|
2141
2131
|
json->allow_trailing_comma ) _widec += 256;
|
2142
2132
|
}
|
2143
2133
|
} else {
|
2144
2134
|
_widec = (short)(128 + ((*p) - -128));
|
2145
2135
|
if (
|
2146
|
-
#line
|
2136
|
+
#line 815 "parser.rl"
|
2147
2137
|
json->allow_trailing_comma ) _widec += 256;
|
2148
2138
|
}
|
2149
2139
|
switch( _widec ) {
|
@@ -2215,7 +2205,7 @@ case 21:
|
|
2215
2205
|
_out: {}
|
2216
2206
|
}
|
2217
2207
|
|
2218
|
-
#line
|
2208
|
+
#line 838 "parser.rl"
|
2219
2209
|
|
2220
2210
|
if(cs >= JSON_array_first_final) {
|
2221
2211
|
long count = json->stack->head - stack_head;
|
@@ -2409,7 +2399,7 @@ static VALUE json_string_unescape(JSON_Parser *json, char *string, char *stringE
|
|
2409
2399
|
}
|
2410
2400
|
|
2411
2401
|
|
2412
|
-
#line
|
2402
|
+
#line 2403 "parser.c"
|
2413
2403
|
enum {JSON_string_start = 1};
|
2414
2404
|
enum {JSON_string_first_final = 9};
|
2415
2405
|
enum {JSON_string_error = 0};
|
@@ -2417,7 +2407,7 @@ enum {JSON_string_error = 0};
|
|
2417
2407
|
enum {JSON_string_en_main = 1};
|
2418
2408
|
|
2419
2409
|
|
2420
|
-
#line
|
2410
|
+
#line 1061 "parser.rl"
|
2421
2411
|
|
2422
2412
|
|
2423
2413
|
static int
|
@@ -2438,15 +2428,15 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
2438
2428
|
VALUE match_string;
|
2439
2429
|
|
2440
2430
|
|
2441
|
-
#line
|
2431
|
+
#line 2432 "parser.c"
|
2442
2432
|
{
|
2443
2433
|
cs = JSON_string_start;
|
2444
2434
|
}
|
2445
2435
|
|
2446
|
-
#line
|
2436
|
+
#line 1081 "parser.rl"
|
2447
2437
|
json->memo = p;
|
2448
2438
|
|
2449
|
-
#line
|
2439
|
+
#line 2440 "parser.c"
|
2450
2440
|
{
|
2451
2441
|
if ( p == pe )
|
2452
2442
|
goto _test_eof;
|
@@ -2471,14 +2461,14 @@ case 2:
|
|
2471
2461
|
goto st0;
|
2472
2462
|
goto st2;
|
2473
2463
|
tr2:
|
2474
|
-
#line
|
2464
|
+
#line 1043 "parser.rl"
|
2475
2465
|
{
|
2476
2466
|
*result = json_string_fastpath(json, json->memo + 1, p, json->parsing_name, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names);
|
2477
2467
|
{p = (( p + 1))-1;}
|
2478
2468
|
p--;
|
2479
2469
|
{p++; cs = 9; goto _out;}
|
2480
2470
|
}
|
2481
|
-
#line
|
2471
|
+
#line 1036 "parser.rl"
|
2482
2472
|
{
|
2483
2473
|
*result = json_string_unescape(json, json->memo + 1, p, json->parsing_name, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names);
|
2484
2474
|
{p = (( p + 1))-1;}
|
@@ -2487,7 +2477,7 @@ tr2:
|
|
2487
2477
|
}
|
2488
2478
|
goto st9;
|
2489
2479
|
tr6:
|
2490
|
-
#line
|
2480
|
+
#line 1036 "parser.rl"
|
2491
2481
|
{
|
2492
2482
|
*result = json_string_unescape(json, json->memo + 1, p, json->parsing_name, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names);
|
2493
2483
|
{p = (( p + 1))-1;}
|
@@ -2499,7 +2489,7 @@ st9:
|
|
2499
2489
|
if ( ++p == pe )
|
2500
2490
|
goto _test_eof9;
|
2501
2491
|
case 9:
|
2502
|
-
#line
|
2492
|
+
#line 2493 "parser.c"
|
2503
2493
|
goto st0;
|
2504
2494
|
st3:
|
2505
2495
|
if ( ++p == pe )
|
@@ -2587,7 +2577,7 @@ case 8:
|
|
2587
2577
|
_out: {}
|
2588
2578
|
}
|
2589
2579
|
|
2590
|
-
#line
|
2580
|
+
#line 1083 "parser.rl"
|
2591
2581
|
|
2592
2582
|
if (json->create_additions && RTEST(match_string = json->match_string)) {
|
2593
2583
|
VALUE klass;
|
@@ -2740,7 +2730,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
2740
2730
|
}
|
2741
2731
|
|
2742
2732
|
|
2743
|
-
#line
|
2733
|
+
#line 2734 "parser.c"
|
2744
2734
|
enum {JSON_start = 1};
|
2745
2735
|
enum {JSON_first_final = 10};
|
2746
2736
|
enum {JSON_error = 0};
|
@@ -2748,7 +2738,7 @@ enum {JSON_error = 0};
|
|
2748
2738
|
enum {JSON_en_main = 1};
|
2749
2739
|
|
2750
2740
|
|
2751
|
-
#line
|
2741
|
+
#line 1249 "parser.rl"
|
2752
2742
|
|
2753
2743
|
|
2754
2744
|
/*
|
@@ -2777,16 +2767,16 @@ static VALUE cParser_parse(VALUE self)
|
|
2777
2767
|
json->stack = &stack;
|
2778
2768
|
|
2779
2769
|
|
2780
|
-
#line
|
2770
|
+
#line 2771 "parser.c"
|
2781
2771
|
{
|
2782
2772
|
cs = JSON_start;
|
2783
2773
|
}
|
2784
2774
|
|
2785
|
-
#line
|
2775
|
+
#line 1277 "parser.rl"
|
2786
2776
|
p = json->source;
|
2787
2777
|
pe = p + json->len;
|
2788
2778
|
|
2789
|
-
#line
|
2779
|
+
#line 2780 "parser.c"
|
2790
2780
|
{
|
2791
2781
|
if ( p == pe )
|
2792
2782
|
goto _test_eof;
|
@@ -2820,7 +2810,7 @@ st0:
|
|
2820
2810
|
cs = 0;
|
2821
2811
|
goto _out;
|
2822
2812
|
tr2:
|
2823
|
-
#line
|
2813
|
+
#line 1241 "parser.rl"
|
2824
2814
|
{
|
2825
2815
|
char *np = JSON_parse_value(json, p, pe, &result, 0);
|
2826
2816
|
if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
|
@@ -2830,7 +2820,7 @@ st10:
|
|
2830
2820
|
if ( ++p == pe )
|
2831
2821
|
goto _test_eof10;
|
2832
2822
|
case 10:
|
2833
|
-
#line
|
2823
|
+
#line 2824 "parser.c"
|
2834
2824
|
switch( (*p) ) {
|
2835
2825
|
case 13: goto st10;
|
2836
2826
|
case 32: goto st10;
|
@@ -2919,7 +2909,7 @@ case 9:
|
|
2919
2909
|
_out: {}
|
2920
2910
|
}
|
2921
2911
|
|
2922
|
-
#line
|
2912
|
+
#line 1280 "parser.rl"
|
2923
2913
|
|
2924
2914
|
if (json->stack_handle) {
|
2925
2915
|
rvalue_stack_eagerly_release(json->stack_handle);
|
@@ -2955,16 +2945,16 @@ static VALUE cParser_m_parse(VALUE klass, VALUE source, VALUE opts)
|
|
2955
2945
|
json->stack = &stack;
|
2956
2946
|
|
2957
2947
|
|
2958
|
-
#line
|
2948
|
+
#line 2949 "parser.c"
|
2959
2949
|
{
|
2960
2950
|
cs = JSON_start;
|
2961
2951
|
}
|
2962
2952
|
|
2963
|
-
#line
|
2953
|
+
#line 1315 "parser.rl"
|
2964
2954
|
p = json->source;
|
2965
2955
|
pe = p + json->len;
|
2966
2956
|
|
2967
|
-
#line
|
2957
|
+
#line 2958 "parser.c"
|
2968
2958
|
{
|
2969
2959
|
if ( p == pe )
|
2970
2960
|
goto _test_eof;
|
@@ -2998,7 +2988,7 @@ st0:
|
|
2998
2988
|
cs = 0;
|
2999
2989
|
goto _out;
|
3000
2990
|
tr2:
|
3001
|
-
#line
|
2991
|
+
#line 1241 "parser.rl"
|
3002
2992
|
{
|
3003
2993
|
char *np = JSON_parse_value(json, p, pe, &result, 0);
|
3004
2994
|
if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
|
@@ -3008,7 +2998,7 @@ st10:
|
|
3008
2998
|
if ( ++p == pe )
|
3009
2999
|
goto _test_eof10;
|
3010
3000
|
case 10:
|
3011
|
-
#line
|
3001
|
+
#line 3002 "parser.c"
|
3012
3002
|
switch( (*p) ) {
|
3013
3003
|
case 13: goto st10;
|
3014
3004
|
case 32: goto st10;
|
@@ -3097,7 +3087,7 @@ case 9:
|
|
3097
3087
|
_out: {}
|
3098
3088
|
}
|
3099
3089
|
|
3100
|
-
#line
|
3090
|
+
#line 1318 "parser.rl"
|
3101
3091
|
|
3102
3092
|
if (json->stack_handle) {
|
3103
3093
|
rvalue_stack_eagerly_release(json->stack_handle);
|
@@ -3122,8 +3112,10 @@ static void JSON_mark(void *ptr)
|
|
3122
3112
|
rb_gc_mark(json->match_string);
|
3123
3113
|
rb_gc_mark(json->stack_handle);
|
3124
3114
|
|
3125
|
-
|
3126
|
-
|
3115
|
+
long index;
|
3116
|
+
for (index = 0; index < json->name_cache.length; index++) {
|
3117
|
+
rb_gc_mark(json->name_cache.entries[index]);
|
3118
|
+
}
|
3127
3119
|
}
|
3128
3120
|
|
3129
3121
|
static void JSON_free(void *ptr)
|