@@ -2836,7 +2836,10 @@ parse_type_try(VALUE a) {
28362836static VALUE
28372837rbsparser_parse_type (VALUE self , VALUE buffer , VALUE start_pos , VALUE end_pos , VALUE variables , VALUE require_eof )
28382838{
2839- parserstate * parser = alloc_parser (buffer , FIX2INT (start_pos ), FIX2INT (end_pos ), variables );
2839+ VALUE string = rb_funcall (buffer , rb_intern ("content" ), 0 );
2840+ StringValue (string );
2841+ lexstate * lexer = alloc_lexer (string , FIX2INT (start_pos ), FIX2INT (end_pos ));
2842+ parserstate * parser = alloc_parser (buffer , lexer , FIX2INT (start_pos ), FIX2INT (end_pos ), variables );
28402843 struct parse_type_arg arg = {
28412844 parser ,
28422845 require_eof
@@ -2864,7 +2867,10 @@ parse_method_type_try(VALUE a) {
28642867static VALUE
28652868rbsparser_parse_method_type (VALUE self , VALUE buffer , VALUE start_pos , VALUE end_pos , VALUE variables , VALUE require_eof )
28662869{
2867- parserstate * parser = alloc_parser (buffer , FIX2INT (start_pos ), FIX2INT (end_pos ), variables );
2870+ VALUE string = rb_funcall (buffer , rb_intern ("content" ), 0 );
2871+ StringValue (string );
2872+ lexstate * lexer = alloc_lexer (string , FIX2INT (start_pos ), FIX2INT (end_pos ));
2873+ parserstate * parser = alloc_parser (buffer , lexer , FIX2INT (start_pos ), FIX2INT (end_pos ), variables );
28682874 struct parse_type_arg arg = {
28692875 parser ,
28702876 require_eof
@@ -2881,13 +2887,18 @@ parse_signature_try(VALUE a) {
28812887static VALUE
28822888rbsparser_parse_signature (VALUE self , VALUE buffer , VALUE end_pos )
28832889{
2884- parserstate * parser = alloc_parser (buffer , 0 , FIX2INT (end_pos ), Qnil );
2890+ VALUE string = rb_funcall (buffer , rb_intern ("content" ), 0 );
2891+ StringValue (string );
2892+ lexstate * lexer = alloc_lexer (string , 0 , FIX2INT (end_pos ));
2893+ parserstate * parser = alloc_parser (buffer , lexer , 0 , FIX2INT (end_pos ), Qnil );
28852894 return rb_ensure (parse_signature_try , (VALUE )parser , ensure_free_parser , (VALUE )parser );
28862895}
28872896
28882897static VALUE
28892898rbsparser_lex (VALUE self , VALUE buffer , VALUE end_pos ) {
2890- lexstate * lexer = alloc_lexer (buffer , 0 , FIX2INT (end_pos ));
2899+ VALUE string = rb_funcall (buffer , rb_intern ("content" ), 0 );
2900+ StringValue (string );
2901+ lexstate * lexer = alloc_lexer (string , 0 , FIX2INT (end_pos ));
28912902 VALUE results = rb_ary_new ();
28922903
28932904 token token = NullToken ;
@@ -2906,6 +2917,7 @@ rbsparser_lex(VALUE self, VALUE buffer, VALUE end_pos) {
29062917
29072918void rbs__init_parser (void ) {
29082919 RBS_Parser = rb_define_class_under (RBS , "Parser" , rb_cObject );
2920+ rb_gc_register_mark_object (RBS_Parser );
29092921 rb_define_singleton_method (RBS_Parser , "_parse_type" , rbsparser_parse_type , 5 );
29102922 rb_define_singleton_method (RBS_Parser , "_parse_method_type" , rbsparser_parse_method_type , 5 );
29112923 rb_define_singleton_method (RBS_Parser , "_parse_signature" , rbsparser_parse_signature , 2 );
0 commit comments