@@ -713,11 +713,17 @@ static bool parse_function(rbs_parser_t *parser, bool accept_type_binding, parse
713713 }
714714
715715 bool required = true;
716+ rbs_range_t block_range ;
717+
716718 if (parser -> next_token .type == pQUESTION && parser -> next_token2 .type == pLBRACE ) {
717719 // Optional block
720+ block_range .start = parser -> next_token .range .start ;
718721 required = false;
719722 rbs_parser_advance (parser );
723+ } else if (parser -> next_token .type == pLBRACE ) {
724+ block_range .start = parser -> next_token .range .start ;
720725 }
726+
721727 if (parser -> next_token .type == pLBRACE ) {
722728 rbs_parser_advance (parser );
723729
@@ -737,9 +743,12 @@ static bool parse_function(rbs_parser_t *parser, bool accept_type_binding, parse
737743 rbs_node_t * block_return_type = NULL ;
738744 CHECK_PARSE (parse_optional (parser , & block_return_type ));
739745
746+ ADVANCE_ASSERT (parser , pRBRACE );
747+
748+ block_range .end = parser -> current_token .range .end ;
749+ rbs_location_t * loc = rbs_location_new (ALLOCATOR (), block_range );
750+
740751 rbs_node_t * block_function = NULL ;
741- function_range .end = parser -> current_token .range .end ;
742- rbs_location_t * loc = rbs_location_new (ALLOCATOR (), function_range );
743752 if (rbs_is_untyped_params (& block_params )) {
744753 block_function = (rbs_node_t * ) rbs_types_untyped_function_new (ALLOCATOR (), loc , block_return_type );
745754 } else {
@@ -758,8 +767,6 @@ static bool parse_function(rbs_parser_t *parser, bool accept_type_binding, parse
758767 }
759768
760769 block = rbs_types_block_new (ALLOCATOR (), loc , block_function , required , self_type );
761-
762- ADVANCE_ASSERT (parser , pRBRACE );
763770 }
764771
765772 ADVANCE_ASSERT (parser , pARROW );
0 commit comments