22#include "../vendor/ryu.h"
33#include "../simd/simd.h"
44
5- static VALUE mJSON , eNestingError , Encoding_UTF_8 ;
5+ static VALUE mJSON , eNestingError , eParserError , Encoding_UTF_8 ;
66static VALUE CNaN , CInfinity , CMinusInfinity ;
77
8- static ID i_new , i_try_convert , i_uminus , i_encode ;
8+ static ID i_new , i_try_convert , i_uminus , i_encode , i_at_line , i_at_column ;
99
1010static VALUE sym_max_nesting , sym_allow_nan , sym_allow_trailing_comma , sym_allow_comments ,
1111 sym_allow_control_characters , sym_allow_invalid_escape , sym_symbolize_names ,
@@ -645,9 +645,9 @@ static VALUE build_parse_error_message(const char *format, JSON_ParserState *sta
645645
646646static VALUE parse_error_new (VALUE message , long line , long column )
647647{
648- VALUE exc = rb_exc_new_str (rb_path2class ( "JSON::ParserError" ) , message );
649- rb_ivar_set (exc , rb_intern ( "@line" ) , LONG2NUM (line ));
650- rb_ivar_set (exc , rb_intern ( "@column" ) , LONG2NUM (column ));
648+ VALUE exc = rb_exc_new_str (eParserError , message );
649+ rb_ivar_set (exc , i_at_line , LONG2NUM (line ));
650+ rb_ivar_set (exc , i_at_column , LONG2NUM (column ));
651651 return exc ;
652652}
653653
@@ -2069,23 +2069,28 @@ void Init_parser(void)
20692069 mJSON = rb_define_module ("JSON" );
20702070 VALUE mExt = rb_define_module_under (mJSON , "Ext" );
20712071 VALUE cParserConfig = rb_define_class_under (mExt , "ParserConfig" , rb_cObject );
2072+
2073+ rb_global_variable (& eParserError );
2074+ eParserError = rb_path2class ("JSON::ParserError" );
2075+
2076+ rb_global_variable (& eNestingError );
20722077 eNestingError = rb_path2class ("JSON::NestingError" );
2073- rb_gc_register_mark_object ( eNestingError );
2078+
20742079 rb_define_alloc_func (cParserConfig , cJSON_parser_s_allocate );
20752080 rb_define_method (cParserConfig , "initialize" , cParserConfig_initialize , 1 );
20762081 rb_define_method (cParserConfig , "parse" , cParserConfig_parse , 1 );
20772082
20782083 VALUE cParser = rb_define_class_under (mExt , "Parser" , rb_cObject );
20792084 rb_define_singleton_method (cParser , "parse" , cParser_m_parse , 2 );
20802085
2086+ rb_global_variable (& CNaN );
20812087 CNaN = rb_const_get (mJSON , rb_intern ("NaN" ));
2082- rb_gc_register_mark_object (CNaN );
20832088
2089+ rb_global_variable (& CInfinity );
20842090 CInfinity = rb_const_get (mJSON , rb_intern ("Infinity" ));
2085- rb_gc_register_mark_object (CInfinity );
20862091
2092+ rb_global_variable (& CMinusInfinity );
20872093 CMinusInfinity = rb_const_get (mJSON , rb_intern ("MinusInfinity" ));
2088- rb_gc_register_mark_object (CMinusInfinity );
20892094
20902095 rb_global_variable (& Encoding_UTF_8 );
20912096 Encoding_UTF_8 = rb_const_get (rb_path2class ("Encoding" ), rb_intern ("UTF_8" ));
@@ -2106,6 +2111,8 @@ void Init_parser(void)
21062111 i_try_convert = rb_intern ("try_convert" );
21072112 i_uminus = rb_intern ("-@" );
21082113 i_encode = rb_intern ("encode" );
2114+ i_at_line = rb_intern ("@line" );
2115+ i_at_column = rb_intern ("@column" );
21092116
21102117 binary_encindex = rb_ascii8bit_encindex ();
21112118 utf8_encindex = rb_utf8_encindex ();
0 commit comments