MCPcopy Create free account
hub / github.com/DeusData/codebase-memory-mcp / jl_scan_array

Function jl_scan_array

src/cli/config_json_like.c:869–944  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

867}
868
869static int jl_scan_array(const char *text, size_t length, size_t array_start,
870 const char *lookup_string, jl_array_t *array) {
871 memset(array, 0, sizeof(*array));
872 array->first_value_start = SIZE_MAX;
873 array->last_value_end = SIZE_MAX;
874 array->last_comma_pos = SIZE_MAX;
875 array->match.comma_pos = SIZE_MAX;
876 array->match.previous_comma_pos = SIZE_MAX;
877
878 if (array_start >= length || text[array_start] != '[') {
879 return -1;
880 }
881 jl_parser_t parser = {
882 .text = text,
883 .length = length,
884 .pos = array_start + 1U,
885 .strict = false,
886 };
887 if (jl_skip_trivia(&parser) != 0 || parser.pos >= parser.length) {
888 return -1;
889 }
890 if (text[parser.pos] == ']') {
891 array->close_pos = parser.pos;
892 return 0;
893 }
894
895 size_t previous_comma = SIZE_MAX;
896 while (parser.pos < parser.length) {
897 size_t value_start = 0;
898 size_t value_end = 0;
899 if (jl_parse_value(&parser, 1U, &value_start, &value_end) != 0) {
900 return -1;
901 }
902 if (array->first_value_start == SIZE_MAX) {
903 array->first_value_start = value_start;
904 }
905 bool is_string = text[value_start] == '"' || text[value_start] == '\'';
906 bool matches = is_string && jl_key_equals(text, value_start, value_end, lookup_string);
907 if (matches) {
908 array->match_count++;
909 if (array->match_count == 1U) {
910 array->match.value_start = value_start;
911 array->match.value_end = value_end;
912 array->match.previous_comma_pos = previous_comma;
913 }
914 }
915
916 array->element_count++;
917 array->last_value_end = value_end;
918 if (jl_skip_trivia(&parser) != 0 || parser.pos >= parser.length) {
919 return -1;
920 }
921 if (text[parser.pos] == ']') {
922 array->close_pos = parser.pos;
923 return 0;
924 }
925 if (text[parser.pos] != ',') {
926 return -1;

Calls 3

jl_skip_triviaFunction · 0.85
jl_parse_valueFunction · 0.85
jl_key_equalsFunction · 0.85

Tested by

no test coverage detected