@@ -1747,6 +1747,8 @@ VALUE parse_member_def(parserstate *state, bool instance_only, bool accept_overl
17471747
17481748/**
17491749 * class_instance_name ::= {} <class_name>
1750+ * | {} Data `(` kwarg args `)`
1751+ * | {} Struct `(` kwarg args `)`
17501752 * | {} class_name `[` type args <`]`>
17511753 *
17521754 * @param kind
@@ -1756,7 +1758,19 @@ void class_instance_name(parserstate *state, TypeNameKind kind, VALUE *name, VAL
17561758
17571759 * name = parse_type_name (state , kind , name_range );
17581760
1759- if (state -> next_token .type == pLBRACKET ) {
1761+ if (CLASS_OF (* name ) == RBS_TypeName && rb_funcall (* name , rb_intern ("data?" ), 0 ) == Qtrue ) {
1762+ parser_advance_assert (state , pLPAREN );
1763+ args_range -> start = state -> current_token .range .start ;
1764+ * args = parse_record_attributes (state );
1765+ parser_advance_assert (state , pRPAREN );
1766+ args_range -> end = state -> current_token .range .end ;
1767+ } else if (CLASS_OF (* name ) == RBS_TypeName && rb_funcall (* name , rb_intern ("struct?" ), 0 ) == Qtrue ) {
1768+ parser_advance_assert (state , pLPAREN );
1769+ args_range -> start = state -> current_token .range .start ;
1770+ * args = parse_record_attributes (state );
1771+ parser_advance_assert (state , pRPAREN );
1772+ args_range -> end = state -> current_token .range .end ;
1773+ } else if (state -> next_token .type == pLBRACKET ) {
17601774 parser_advance (state );
17611775 args_range -> start = state -> current_token .range .start ;
17621776 parse_type_list (state , pRBRACKET , args );
0 commit comments