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

Function jl_scan_object

src/cli/config_json_like.c:783–867  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

781}
782
783static int jl_scan_object(const char *text, size_t length, size_t object_start,
784 const char *lookup_key, jl_object_t *object) {
785 memset(object, 0, sizeof(*object));
786 object->first_key_start = SIZE_MAX;
787 object->last_value_end = SIZE_MAX;
788 object->last_comma_pos = SIZE_MAX;
789 object->match.comma_pos = SIZE_MAX;
790 object->match.previous_comma_pos = SIZE_MAX;
791
792 if (object_start >= length || text[object_start] != '{') {
793 return -1;
794 }
795 jl_parser_t parser = {
796 .text = text, .length = length, .pos = object_start + 1U, .strict = false};
797 if (jl_skip_trivia(&parser) != 0 || parser.pos >= parser.length) {
798 return -1;
799 }
800 if (text[parser.pos] == '}') {
801 object->close_pos = parser.pos;
802 return 0;
803 }
804
805 size_t previous_comma = SIZE_MAX;
806 while (parser.pos < parser.length) {
807 size_t key_start = 0;
808 size_t key_end = 0;
809 if (jl_parse_key(&parser, &key_start, &key_end) != 0) {
810 return -1;
811 }
812 if (object->first_key_start == SIZE_MAX) {
813 object->first_key_start = key_start;
814 }
815 if (jl_skip_trivia(&parser) != 0 || parser.pos >= parser.length ||
816 text[parser.pos] != ':') {
817 return -1;
818 }
819 parser.pos++;
820 if (jl_skip_trivia(&parser) != 0 || parser.pos >= parser.length) {
821 return -1;
822 }
823 size_t value_start = 0;
824 size_t value_end = 0;
825 if (jl_parse_value(&parser, 1U, &value_start, &value_end) != 0 ||
826 jl_skip_trivia(&parser) != 0 || parser.pos >= parser.length) {
827 return -1;
828 }
829
830 bool matches = jl_key_equals(text, key_start, key_end, lookup_key);
831 if (matches) {
832 object->match_count++;
833 if (object->match_count == 1U) {
834 object->match.key_start = key_start;
835 object->match.key_end = key_end;
836 object->match.value_start = value_start;
837 object->match.value_end = value_end;
838 object->match.previous_comma_pos = previous_comma;
839 }
840 }

Calls 4

jl_skip_triviaFunction · 0.85
jl_parse_keyFunction · 0.85
jl_parse_valueFunction · 0.85
jl_key_equalsFunction · 0.85

Tested by

no test coverage detected