@@ -231,6 +231,8 @@ static int json_add_token(json_parser_t *parser, json_token_type_t type)
231231 json_token_t * token = & parser -> tokens [parser -> token_count ++ ];
232232 memset (token , 0 , sizeof (* token ));
233233 token -> type = type ;
234+ token -> start = parser -> pos ;
235+ token -> end = parser -> pos ;
234236 return 0 ;
235237}
236238
@@ -655,19 +657,24 @@ static int json_parse_object(json_parser_t *parser)
655657 return -1 ;
656658 }
657659
660+ size_t start_pos = parser -> pos ;
658661 parser -> depth ++ ;
659662
660663 if (json_add_token (parser , JSON_TOKEN_OBJECT ) < 0 )
661664 {
662665 return -1 ;
663666 }
664667
668+ json_token_t * obj_token = & parser -> tokens [parser -> token_count - 1 ];
669+ obj_token -> start = start_pos ;
670+ obj_token -> end = 0 ;
665671 parser -> pos ++ ; // Skip '{'
666672 json_skip_whitespace (parser );
667673
668674 if (parser -> json [parser -> pos ] == '}' )
669675 {
670676 parser -> pos ++ ;
677+ obj_token -> end = parser -> pos ; // Set end after closing '}'
671678 parser -> depth -- ;
672679 return 0 ;
673680 }
@@ -684,6 +691,7 @@ static int json_parse_object(json_parser_t *parser)
684691 if (parser -> json [parser -> pos ] == '}' )
685692 {
686693 parser -> pos ++ ;
694+ obj_token -> end = parser -> pos ;
687695 parser -> depth -- ;
688696 return 0 ;
689697 }
@@ -738,19 +746,24 @@ static int json_parse_array(json_parser_t *parser)
738746 return -1 ;
739747 }
740748
749+ size_t start_pos = parser -> pos ; // Position of '['
741750 parser -> depth ++ ;
742751
743752 if (json_add_token (parser , JSON_TOKEN_ARRAY ) < 0 )
744753 {
745754 return -1 ;
746755 }
747756
757+ json_token_t * arr_token = & parser -> tokens [parser -> token_count - 1 ];
758+ arr_token -> start = start_pos ; // Start at '['
759+ arr_token -> end = 0 ;
748760 parser -> pos ++ ; // Skip '['
749761 json_skip_whitespace (parser );
750762
751763 if (parser -> json [parser -> pos ] == ']' )
752764 {
753765 parser -> pos ++ ;
766+ arr_token -> end = parser -> pos ; // End after ']'
754767 parser -> depth -- ;
755768 return 0 ;
756769 }
@@ -768,6 +781,7 @@ static int json_parse_array(json_parser_t *parser)
768781 if (parser -> json [parser -> pos ] == ']' )
769782 {
770783 parser -> pos ++ ;
784+ arr_token -> end = parser -> pos ; // Set end after ']'
771785 parser -> depth -- ;
772786 return 0 ;
773787 }
0 commit comments