@@ -231,6 +231,8 @@ static int json_add_token(json_parser_t *parser, json_token_type_t type)
231
231
json_token_t * token = & parser -> tokens [parser -> token_count ++ ];
232
232
memset (token , 0 , sizeof (* token ));
233
233
token -> type = type ;
234
+ token -> start = parser -> pos ;
235
+ token -> end = parser -> pos ;
234
236
return 0 ;
235
237
}
236
238
@@ -655,19 +657,24 @@ static int json_parse_object(json_parser_t *parser)
655
657
return -1 ;
656
658
}
657
659
660
+ size_t start_pos = parser -> pos ;
658
661
parser -> depth ++ ;
659
662
660
663
if (json_add_token (parser , JSON_TOKEN_OBJECT ) < 0 )
661
664
{
662
665
return -1 ;
663
666
}
664
667
668
+ json_token_t * obj_token = & parser -> tokens [parser -> token_count - 1 ];
669
+ obj_token -> start = start_pos ;
670
+ obj_token -> end = 0 ;
665
671
parser -> pos ++ ; // Skip '{'
666
672
json_skip_whitespace (parser );
667
673
668
674
if (parser -> json [parser -> pos ] == '}' )
669
675
{
670
676
parser -> pos ++ ;
677
+ obj_token -> end = parser -> pos ; // Set end after closing '}'
671
678
parser -> depth -- ;
672
679
return 0 ;
673
680
}
@@ -684,6 +691,7 @@ static int json_parse_object(json_parser_t *parser)
684
691
if (parser -> json [parser -> pos ] == '}' )
685
692
{
686
693
parser -> pos ++ ;
694
+ obj_token -> end = parser -> pos ;
687
695
parser -> depth -- ;
688
696
return 0 ;
689
697
}
@@ -738,19 +746,24 @@ static int json_parse_array(json_parser_t *parser)
738
746
return -1 ;
739
747
}
740
748
749
+ size_t start_pos = parser -> pos ; // Position of '['
741
750
parser -> depth ++ ;
742
751
743
752
if (json_add_token (parser , JSON_TOKEN_ARRAY ) < 0 )
744
753
{
745
754
return -1 ;
746
755
}
747
756
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 ;
748
760
parser -> pos ++ ; // Skip '['
749
761
json_skip_whitespace (parser );
750
762
751
763
if (parser -> json [parser -> pos ] == ']' )
752
764
{
753
765
parser -> pos ++ ;
766
+ arr_token -> end = parser -> pos ; // End after ']'
754
767
parser -> depth -- ;
755
768
return 0 ;
756
769
}
@@ -768,6 +781,7 @@ static int json_parse_array(json_parser_t *parser)
768
781
if (parser -> json [parser -> pos ] == ']' )
769
782
{
770
783
parser -> pos ++ ;
784
+ arr_token -> end = parser -> pos ; // Set end after ']'
771
785
parser -> depth -- ;
772
786
return 0 ;
773
787
}
0 commit comments