@@ -2861,7 +2861,10 @@ parse_type_try(VALUE a) {
2861
2861
static VALUE
2862
2862
rbsparser_parse_type (VALUE self , VALUE buffer , VALUE start_pos , VALUE end_pos , VALUE variables , VALUE require_eof )
2863
2863
{
2864
- parserstate * parser = alloc_parser (buffer , FIX2INT (start_pos ), FIX2INT (end_pos ), variables );
2864
+ VALUE string = rb_funcall (buffer , rb_intern ("content" ), 0 );
2865
+ StringValue (string );
2866
+ lexstate * lexer = alloc_lexer (string , FIX2INT (start_pos ), FIX2INT (end_pos ));
2867
+ parserstate * parser = alloc_parser (buffer , lexer , FIX2INT (start_pos ), FIX2INT (end_pos ), variables );
2865
2868
struct parse_type_arg arg = {
2866
2869
parser ,
2867
2870
require_eof
@@ -2889,7 +2892,10 @@ parse_method_type_try(VALUE a) {
2889
2892
static VALUE
2890
2893
rbsparser_parse_method_type (VALUE self , VALUE buffer , VALUE start_pos , VALUE end_pos , VALUE variables , VALUE require_eof )
2891
2894
{
2892
- parserstate * parser = alloc_parser (buffer , FIX2INT (start_pos ), FIX2INT (end_pos ), variables );
2895
+ VALUE string = rb_funcall (buffer , rb_intern ("content" ), 0 );
2896
+ StringValue (string );
2897
+ lexstate * lexer = alloc_lexer (string , FIX2INT (start_pos ), FIX2INT (end_pos ));
2898
+ parserstate * parser = alloc_parser (buffer , lexer , FIX2INT (start_pos ), FIX2INT (end_pos ), variables );
2893
2899
struct parse_type_arg arg = {
2894
2900
parser ,
2895
2901
require_eof
@@ -2906,13 +2912,18 @@ parse_signature_try(VALUE a) {
2906
2912
static VALUE
2907
2913
rbsparser_parse_signature (VALUE self , VALUE buffer , VALUE end_pos )
2908
2914
{
2909
- parserstate * parser = alloc_parser (buffer , 0 , FIX2INT (end_pos ), Qnil );
2915
+ VALUE string = rb_funcall (buffer , rb_intern ("content" ), 0 );
2916
+ StringValue (string );
2917
+ lexstate * lexer = alloc_lexer (string , 0 , FIX2INT (end_pos ));
2918
+ parserstate * parser = alloc_parser (buffer , lexer , 0 , FIX2INT (end_pos ), Qnil );
2910
2919
return rb_ensure (parse_signature_try , (VALUE )parser , ensure_free_parser , (VALUE )parser );
2911
2920
}
2912
2921
2913
2922
static VALUE
2914
2923
rbsparser_lex (VALUE self , VALUE buffer , VALUE end_pos ) {
2915
- lexstate * lexer = alloc_lexer (buffer , 0 , FIX2INT (end_pos ));
2924
+ VALUE string = rb_funcall (buffer , rb_intern ("content" ), 0 );
2925
+ StringValue (string );
2926
+ lexstate * lexer = alloc_lexer (string , 0 , FIX2INT (end_pos ));
2916
2927
VALUE results = rb_ary_new ();
2917
2928
2918
2929
token token = NullToken ;
@@ -2931,6 +2942,7 @@ rbsparser_lex(VALUE self, VALUE buffer, VALUE end_pos) {
2931
2942
2932
2943
void rbs__init_parser (void ) {
2933
2944
RBS_Parser = rb_define_class_under (RBS , "Parser" , rb_cObject );
2945
+ rb_gc_register_mark_object (RBS_Parser );
2934
2946
rb_define_singleton_method (RBS_Parser , "_parse_type" , rbsparser_parse_type , 5 );
2935
2947
rb_define_singleton_method (RBS_Parser , "_parse_method_type" , rbsparser_parse_method_type , 5 );
2936
2948
rb_define_singleton_method (RBS_Parser , "_parse_signature" , rbsparser_parse_signature , 2 );
0 commit comments