summaryrefslogtreecommitdiff
path: root/ext/json/parser
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2024-11-06 12:51:06 +0900
committerJean Boussier <[email protected]>2024-11-06 23:31:30 +0100
commit8254f6492c49ce7ace6b12af981034083066176e (patch)
tree61ee11a49b28923651fb5814a437dbdfd414c8e8 /ext/json/parser
parentfdc82cca83bbbfe88f90d2888e139a6dde481101 (diff)
[ruby/json] Categorize deprecated warning
https://github.com/ruby/json/commit/1acce7aceb
Diffstat (limited to 'ext/json/parser')
-rw-r--r--ext/json/parser/extconf.rb1
-rw-r--r--ext/json/parser/parser.c247
-rw-r--r--ext/json/parser/parser.rl13
3 files changed, 142 insertions, 119 deletions
diff --git a/ext/json/parser/extconf.rb b/ext/json/parser/extconf.rb
index f9104de12d..4c1ac52a7f 100644
--- a/ext/json/parser/extconf.rb
+++ b/ext/json/parser/extconf.rb
@@ -5,6 +5,7 @@ have_func("rb_enc_interned_str", "ruby.h") # RUBY_VERSION >= 3.0
have_func("rb_hash_new_capa", "ruby.h") # RUBY_VERSION >= 3.2
have_func("rb_gc_mark_locations", "ruby.h") # Missing on TruffleRuby
have_func("rb_hash_bulk_insert", "ruby.h") # Missing on TruffleRuby
+have_func("rb_category_warn", "ruby.h") # Missing on TruffleRuby
append_cflags("-std=c99")
diff --git a/ext/json/parser/parser.c b/ext/json/parser/parser.c
index 382e21e12d..85bdd79228 100644
--- a/ext/json/parser/parser.c
+++ b/ext/json/parser/parser.c
@@ -17,6 +17,17 @@ static VALUE sym_max_nesting, sym_allow_nan, sym_allow_trailing_comma, sym_symbo
static int binary_encindex;
static int utf8_encindex;
+#ifdef HAVE_RB_CATEGORY_WARN
+# define json_deprecated(message) rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, message)
+#else
+# define json_deprecated(message) rb_warn(message)
+#endif
+
+static const char deprecated_create_additions_warning[] =
+ "JSON.load implicit support for `create_additions: true` is deprecated "
+ "and will be removed in 3.0, use JSON.unsafe_load or explicitly "
+ "pass `create_additions: true`";
+
#ifndef HAVE_RB_GC_MARK_LOCATIONS
// For TruffleRuby
void rb_gc_mark_locations(const VALUE *start, const VALUE *end)
@@ -438,11 +449,11 @@ static void raise_parse_error(const char *format, const char *start)
-#line 464 "parser.rl"
+#line 475 "parser.rl"
-#line 446 "parser.c"
+#line 457 "parser.c"
enum {JSON_object_start = 1};
enum {JSON_object_first_final = 32};
enum {JSON_object_error = 0};
@@ -450,7 +461,7 @@ enum {JSON_object_error = 0};
enum {JSON_object_en_main = 1};
-#line 504 "parser.rl"
+#line 515 "parser.rl"
#define PUSH(result) rvalue_stack_push(json->stack, result, &json->stack_handle, &json->stack)
@@ -466,14 +477,14 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
long stack_head = json->stack->head;
-#line 470 "parser.c"
+#line 481 "parser.c"
{
cs = JSON_object_start;
}
-#line 519 "parser.rl"
+#line 530 "parser.rl"
-#line 477 "parser.c"
+#line 488 "parser.c"
{
short _widec;
if ( p == pe )
@@ -502,7 +513,7 @@ case 2:
goto st2;
goto st0;
tr2:
-#line 483 "parser.rl"
+#line 494 "parser.rl"
{
char *np;
json->parsing_name = true;
@@ -518,7 +529,7 @@ st3:
if ( ++p == pe )
goto _test_eof3;
case 3:
-#line 522 "parser.c"
+#line 533 "parser.c"
switch( (*p) ) {
case 13: goto st3;
case 32: goto st3;
@@ -585,7 +596,7 @@ case 8:
goto st8;
goto st0;
tr11:
-#line 472 "parser.rl"
+#line 483 "parser.rl"
{
char *np = JSON_parse_value(json, p, pe, result, current_nesting);
if (np == NULL) {
@@ -599,20 +610,20 @@ st9:
if ( ++p == pe )
goto _test_eof9;
case 9:
-#line 603 "parser.c"
+#line 614 "parser.c"
_widec = (*p);
if ( (*p) < 13 ) {
if ( (*p) > 9 ) {
if ( 10 <= (*p) && (*p) <= 10 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) >= 9 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) > 13 ) {
@@ -620,26 +631,26 @@ case 9:
if ( 32 <= (*p) && (*p) <= 32 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) > 44 ) {
if ( 47 <= (*p) && (*p) <= 47 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -660,14 +671,14 @@ case 9:
goto st10;
goto st0;
tr4:
-#line 494 "parser.rl"
+#line 505 "parser.rl"
{ p--; {p++; cs = 32; goto _out;} }
goto st32;
st32:
if ( ++p == pe )
goto _test_eof32;
case 32:
-#line 671 "parser.c"
+#line 682 "parser.c"
goto st0;
st10:
if ( ++p == pe )
@@ -769,13 +780,13 @@ case 20:
if ( 47 <= (*p) && (*p) <= 47 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) >= 42 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -794,20 +805,20 @@ case 21:
if ( (*p) <= 41 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) > 42 ) {
if ( 43 <= (*p) )
{ _widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -830,13 +841,13 @@ case 22:
if ( 42 <= (*p) && (*p) <= 42 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) > 46 ) {
@@ -844,19 +855,19 @@ case 22:
if ( 48 <= (*p) )
{ _widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) >= 47 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -880,20 +891,20 @@ case 23:
if ( (*p) <= 9 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) > 10 ) {
if ( 11 <= (*p) )
{ _widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 481 "parser.rl"
+#line 492 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -1007,7 +1018,7 @@ case 31:
_out: {}
}
-#line 520 "parser.rl"
+#line 531 "parser.rl"
if (cs >= JSON_object_first_final) {
long count = json->stack->head - stack_head;
@@ -1045,7 +1056,7 @@ case 31:
VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname);
if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) {
if (json->deprecated_create_additions) {
- rb_warn("JSON.load implicit support for `create_additions: true` is deprecated and will be removed in 3.0, use JSON.unsafe_load or explicitly pass `create_additions: true`");
+ json_deprecated(deprecated_create_additions_warning);
}
*result = rb_funcall(klass, i_json_create, 1, *result);
}
@@ -1058,7 +1069,7 @@ case 31:
}
-#line 1062 "parser.c"
+#line 1073 "parser.c"
enum {JSON_value_start = 1};
enum {JSON_value_first_final = 29};
enum {JSON_value_error = 0};
@@ -1066,7 +1077,7 @@ enum {JSON_value_error = 0};
enum {JSON_value_en_main = 1};
-#line 655 "parser.rl"
+#line 666 "parser.rl"
static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
@@ -1074,14 +1085,14 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
int cs = EVIL;
-#line 1078 "parser.c"
+#line 1089 "parser.c"
{
cs = JSON_value_start;
}
-#line 662 "parser.rl"
+#line 673 "parser.rl"
-#line 1085 "parser.c"
+#line 1096 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -1115,7 +1126,7 @@ st0:
cs = 0;
goto _out;
tr2:
-#line 598 "parser.rl"
+#line 609 "parser.rl"
{
char *np = JSON_parse_string(json, p, pe, result);
if (np == NULL) {
@@ -1127,7 +1138,7 @@ tr2:
}
goto st29;
tr3:
-#line 608 "parser.rl"
+#line 619 "parser.rl"
{
char *np;
if(pe > p + 8 && !strncmp(MinusInfinity, p, 9)) {
@@ -1151,7 +1162,7 @@ tr3:
}
goto st29;
tr7:
-#line 630 "parser.rl"
+#line 641 "parser.rl"
{
char *np;
np = JSON_parse_array(json, p, pe, result, current_nesting + 1);
@@ -1159,7 +1170,7 @@ tr7:
}
goto st29;
tr11:
-#line 636 "parser.rl"
+#line 647 "parser.rl"
{
char *np;
np = JSON_parse_object(json, p, pe, result, current_nesting + 1);
@@ -1167,7 +1178,7 @@ tr11:
}
goto st29;
tr25:
-#line 591 "parser.rl"
+#line 602 "parser.rl"
{
if (json->allow_nan) {
*result = CInfinity;
@@ -1177,7 +1188,7 @@ tr25:
}
goto st29;
tr27:
-#line 584 "parser.rl"
+#line 595 "parser.rl"
{
if (json->allow_nan) {
*result = CNaN;
@@ -1187,19 +1198,19 @@ tr27:
}
goto st29;
tr31:
-#line 578 "parser.rl"
+#line 589 "parser.rl"
{
*result = Qfalse;
}
goto st29;
tr34:
-#line 575 "parser.rl"
+#line 586 "parser.rl"
{
*result = Qnil;
}
goto st29;
tr37:
-#line 581 "parser.rl"
+#line 592 "parser.rl"
{
*result = Qtrue;
}
@@ -1208,9 +1219,9 @@ st29:
if ( ++p == pe )
goto _test_eof29;
case 29:
-#line 642 "parser.rl"
+#line 653 "parser.rl"
{ p--; {p++; cs = 29; goto _out;} }
-#line 1214 "parser.c"
+#line 1225 "parser.c"
switch( (*p) ) {
case 13: goto st29;
case 32: goto st29;
@@ -1451,7 +1462,7 @@ case 28:
_out: {}
}
-#line 663 "parser.rl"
+#line 674 "parser.rl"
if (json->freeze) {
OBJ_FREEZE(*result);
@@ -1466,7 +1477,7 @@ case 28:
}
-#line 1470 "parser.c"
+#line 1481 "parser.c"
enum {JSON_integer_start = 1};
enum {JSON_integer_first_final = 3};
enum {JSON_integer_error = 0};
@@ -1474,7 +1485,7 @@ enum {JSON_integer_error = 0};
enum {JSON_integer_en_main = 1};
-#line 684 "parser.rl"
+#line 695 "parser.rl"
static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result)
@@ -1482,15 +1493,15 @@ static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *res
int cs = EVIL;
-#line 1486 "parser.c"
+#line 1497 "parser.c"
{
cs = JSON_integer_start;
}
-#line 691 "parser.rl"
+#line 702 "parser.rl"
json->memo = p;
-#line 1494 "parser.c"
+#line 1505 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -1524,14 +1535,14 @@ case 3:
goto st0;
goto tr4;
tr4:
-#line 681 "parser.rl"
+#line 692 "parser.rl"
{ p--; {p++; cs = 4; goto _out;} }
goto st4;
st4:
if ( ++p == pe )
goto _test_eof4;
case 4:
-#line 1535 "parser.c"
+#line 1546 "parser.c"
goto st0;
st5:
if ( ++p == pe )
@@ -1550,7 +1561,7 @@ case 5:
_out: {}
}
-#line 693 "parser.rl"
+#line 704 "parser.rl"
if (cs >= JSON_integer_first_final) {
long len = p - json->memo;
@@ -1565,7 +1576,7 @@ case 5:
}
-#line 1569 "parser.c"
+#line 1580 "parser.c"
enum {JSON_float_start = 1};
enum {JSON_float_first_final = 8};
enum {JSON_float_error = 0};
@@ -1573,7 +1584,7 @@ enum {JSON_float_error = 0};
enum {JSON_float_en_main = 1};
-#line 718 "parser.rl"
+#line 729 "parser.rl"
static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
@@ -1581,15 +1592,15 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul
int cs = EVIL;
-#line 1585 "parser.c"
+#line 1596 "parser.c"
{
cs = JSON_float_start;
}
-#line 725 "parser.rl"
+#line 736 "parser.rl"
json->memo = p;
-#line 1593 "parser.c"
+#line 1604 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -1647,14 +1658,14 @@ case 8:
goto st0;
goto tr9;
tr9:
-#line 712 "parser.rl"
+#line 723 "parser.rl"
{ p--; {p++; cs = 9; goto _out;} }
goto st9;
st9:
if ( ++p == pe )
goto _test_eof9;
case 9:
-#line 1658 "parser.c"
+#line 1669 "parser.c"
goto st0;
st5:
if ( ++p == pe )
@@ -1715,7 +1726,7 @@ case 7:
_out: {}
}
-#line 727 "parser.rl"
+#line 738 "parser.rl"
if (cs >= JSON_float_first_final) {
VALUE mod = Qnil;
@@ -1768,7 +1779,7 @@ case 7:
-#line 1772 "parser.c"
+#line 1783 "parser.c"
enum {JSON_array_start = 1};
enum {JSON_array_first_final = 22};
enum {JSON_array_error = 0};
@@ -1776,7 +1787,7 @@ enum {JSON_array_error = 0};
enum {JSON_array_en_main = 1};
-#line 804 "parser.rl"
+#line 815 "parser.rl"
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting)
@@ -1789,14 +1800,14 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul
long stack_head = json->stack->head;
-#line 1793 "parser.c"
+#line 1804 "parser.c"
{
cs = JSON_array_start;
}
-#line 816 "parser.rl"
+#line 827 "parser.rl"
-#line 1800 "parser.c"
+#line 1811 "parser.c"
{
short _widec;
if ( p == pe )
@@ -1836,7 +1847,7 @@ case 2:
goto st2;
goto st0;
tr2:
-#line 784 "parser.rl"
+#line 795 "parser.rl"
{
VALUE v = Qnil;
char *np = JSON_parse_value(json, p, pe, &v, current_nesting);
@@ -1851,12 +1862,12 @@ st3:
if ( ++p == pe )
goto _test_eof3;
case 3:
-#line 1855 "parser.c"
+#line 1866 "parser.c"
_widec = (*p);
if ( 44 <= (*p) && (*p) <= 44 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -1903,14 +1914,14 @@ case 7:
goto st3;
goto st7;
tr4:
-#line 796 "parser.rl"
+#line 807 "parser.rl"
{ p--; {p++; cs = 22; goto _out;} }
goto st22;
st22:
if ( ++p == pe )
goto _test_eof22;
case 22:
-#line 1914 "parser.c"
+#line 1925 "parser.c"
goto st0;
st8:
if ( ++p == pe )
@@ -1978,13 +1989,13 @@ case 13:
if ( 10 <= (*p) && (*p) <= 10 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) >= 9 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) > 13 ) {
@@ -1992,19 +2003,19 @@ case 13:
if ( 47 <= (*p) && (*p) <= 47 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) >= 32 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -2043,13 +2054,13 @@ case 14:
if ( 47 <= (*p) && (*p) <= 47 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) >= 42 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -2068,20 +2079,20 @@ case 15:
if ( (*p) <= 41 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) > 42 ) {
if ( 43 <= (*p) )
{ _widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -2104,13 +2115,13 @@ case 16:
if ( 42 <= (*p) && (*p) <= 42 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) > 46 ) {
@@ -2118,19 +2129,19 @@ case 16:
if ( 48 <= (*p) )
{ _widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) >= 47 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -2154,20 +2165,20 @@ case 17:
if ( (*p) <= 9 ) {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else if ( (*p) > 10 ) {
if ( 11 <= (*p) )
{ _widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
} else {
_widec = (short)(128 + ((*p) - -128));
if (
-#line 794 "parser.rl"
+#line 805 "parser.rl"
json->allow_trailing_comma ) _widec += 256;
}
switch( _widec ) {
@@ -2239,7 +2250,7 @@ case 21:
_out: {}
}
-#line 817 "parser.rl"
+#line 828 "parser.rl"
if(cs >= JSON_array_first_final) {
long count = json->stack->head - stack_head;
@@ -2413,7 +2424,7 @@ static VALUE json_string_unescape(JSON_Parser *json, char *string, char *stringE
}
-#line 2417 "parser.c"
+#line 2428 "parser.c"
enum {JSON_string_start = 1};
enum {JSON_string_first_final = 8};
enum {JSON_string_error = 0};
@@ -2421,7 +2432,7 @@ enum {JSON_string_error = 0};
enum {JSON_string_en_main = 1};
-#line 1008 "parser.rl"
+#line 1019 "parser.rl"
static int
@@ -2442,15 +2453,15 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
VALUE match_string;
-#line 2446 "parser.c"
+#line 2457 "parser.c"
{
cs = JSON_string_start;
}
-#line 1028 "parser.rl"
+#line 1039 "parser.rl"
json->memo = p;
-#line 2454 "parser.c"
+#line 2465 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -2475,7 +2486,7 @@ case 2:
goto st0;
goto st2;
tr2:
-#line 995 "parser.rl"
+#line 1006 "parser.rl"
{
*result = json_string_unescape(json, json->memo + 1, p, json->parsing_name, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names);
if (NIL_P(*result)) {
@@ -2485,14 +2496,14 @@ tr2:
{p = (( p + 1))-1;}
}
}
-#line 1005 "parser.rl"
+#line 1016 "parser.rl"
{ p--; {p++; cs = 8; goto _out;} }
goto st8;
st8:
if ( ++p == pe )
goto _test_eof8;
case 8:
-#line 2496 "parser.c"
+#line 2507 "parser.c"
goto st0;
st3:
if ( ++p == pe )
@@ -2568,7 +2579,7 @@ case 7:
_out: {}
}
-#line 1030 "parser.rl"
+#line 1041 "parser.rl"
if (json->create_additions && RTEST(match_string = json->match_string)) {
VALUE klass;
@@ -2721,7 +2732,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
}
-#line 2725 "parser.c"
+#line 2736 "parser.c"
enum {JSON_start = 1};
enum {JSON_first_final = 10};
enum {JSON_error = 0};
@@ -2729,7 +2740,7 @@ enum {JSON_error = 0};
enum {JSON_en_main = 1};
-#line 1196 "parser.rl"
+#line 1207 "parser.rl"
/*
@@ -2758,16 +2769,16 @@ static VALUE cParser_parse(VALUE self)
json->stack = &stack;
-#line 2762 "parser.c"
+#line 2773 "parser.c"
{
cs = JSON_start;
}
-#line 1224 "parser.rl"
+#line 1235 "parser.rl"
p = json->source;
pe = p + json->len;
-#line 2771 "parser.c"
+#line 2782 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -2801,7 +2812,7 @@ st0:
cs = 0;
goto _out;
tr2:
-#line 1188 "parser.rl"
+#line 1199 "parser.rl"
{
char *np = JSON_parse_value(json, p, pe, &result, 0);
if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
@@ -2811,7 +2822,7 @@ st10:
if ( ++p == pe )
goto _test_eof10;
case 10:
-#line 2815 "parser.c"
+#line 2826 "parser.c"
switch( (*p) ) {
case 13: goto st10;
case 32: goto st10;
@@ -2900,7 +2911,7 @@ case 9:
_out: {}
}
-#line 1227 "parser.rl"
+#line 1238 "parser.rl"
if (json->stack_handle) {
rvalue_stack_eagerly_release(json->stack_handle);
@@ -2936,16 +2947,16 @@ static VALUE cParser_m_parse(VALUE klass, VALUE source, VALUE opts)
json->stack = &stack;
-#line 2940 "parser.c"
+#line 2951 "parser.c"
{
cs = JSON_start;
}
-#line 1262 "parser.rl"
+#line 1273 "parser.rl"
p = json->source;
pe = p + json->len;
-#line 2949 "parser.c"
+#line 2960 "parser.c"
{
if ( p == pe )
goto _test_eof;
@@ -2979,7 +2990,7 @@ st0:
cs = 0;
goto _out;
tr2:
-#line 1188 "parser.rl"
+#line 1199 "parser.rl"
{
char *np = JSON_parse_value(json, p, pe, &result, 0);
if (np == NULL) { p--; {p++; cs = 10; goto _out;} } else {p = (( np))-1;}
@@ -2989,7 +3000,7 @@ st10:
if ( ++p == pe )
goto _test_eof10;
case 10:
-#line 2993 "parser.c"
+#line 3004 "parser.c"
switch( (*p) ) {
case 13: goto st10;
case 32: goto st10;
@@ -3078,7 +3089,7 @@ case 9:
_out: {}
}
-#line 1265 "parser.rl"
+#line 1276 "parser.rl"
if (json->stack_handle) {
rvalue_stack_eagerly_release(json->stack_handle);
diff --git a/ext/json/parser/parser.rl b/ext/json/parser/parser.rl
index 6d4cc7a5b0..38e740359e 100644
--- a/ext/json/parser/parser.rl
+++ b/ext/json/parser/parser.rl
@@ -15,6 +15,17 @@ static VALUE sym_max_nesting, sym_allow_nan, sym_allow_trailing_comma, sym_symbo
static int binary_encindex;
static int utf8_encindex;
+#ifdef HAVE_RB_CATEGORY_WARN
+# define json_deprecated(message) rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, message)
+#else
+# define json_deprecated(message) rb_warn(message)
+#endif
+
+static const char deprecated_create_additions_warning[] =
+ "JSON.load implicit support for `create_additions: true` is deprecated "
+ "and will be removed in 3.0, use JSON.unsafe_load or explicitly "
+ "pass `create_additions: true`";
+
#ifndef HAVE_RB_GC_MARK_LOCATIONS
// For TruffleRuby
void rb_gc_mark_locations(const VALUE *start, const VALUE *end)
@@ -554,7 +565,7 @@ static char *JSON_parse_object(JSON_Parser *json, char *p, char *pe, VALUE *resu
VALUE klass = rb_funcall(mJSON, i_deep_const_get, 1, klassname);
if (RTEST(rb_funcall(klass, i_json_creatable_p, 0))) {
if (json->deprecated_create_additions) {
- rb_warn("JSON.load implicit support for `create_additions: true` is deprecated and will be removed in 3.0, use JSON.unsafe_load or explicitly pass `create_additions: true`");
+ json_deprecated(deprecated_create_additions_warning);
}
*result = rb_funcall(klass, i_json_create, 1, *result);
}