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

Function parse_in_list

src/cypher/cypher.c:906–970  ·  view source on GitHub ↗

Parse IN [val, val, ...] list. Returns expr_leaf or NULL on error. */

Source from the content-addressed store, hash-verified

904
905/* Parse IN [val, val, ...] list. Returns expr_leaf or NULL on error. */
906static cbm_expr_t *parse_in_list(parser_t *p, cbm_condition_t *c) {
907 advance(p);
908 c->op = heap_strdup("IN");
909 if (!c->op) {
910 safe_str_free(&c->variable);
911 safe_str_free(&c->property);
912 return NULL;
913 }
914 if (!expect(p, TOK_LBRACKET)) {
915 safe_str_free(&c->variable);
916 safe_str_free(&c->property);
917 safe_str_free(&c->op);
918 return NULL;
919 }
920 int vcap = CYP_INIT_CAP8;
921 int vn = 0;
922 const char **vals = malloc(vcap * sizeof(const char *));
923 if (!vals) {
924 safe_str_free(&c->variable);
925 safe_str_free(&c->property);
926 safe_str_free(&c->op);
927 return NULL;
928 }
929 while (!check(p, TOK_RBRACKET) && !check(p, TOK_EOF)) {
930 if (vn > 0) {
931 match(p, TOK_COMMA);
932 }
933 if (check(p, TOK_STRING) || check(p, TOK_NUMBER)) {
934 if (vn >= vcap) {
935 int new_vcap = vcap * PAIR_LEN;
936 void *tmp = realloc((void *)vals, new_vcap * sizeof(const char *));
937 if (!tmp) {
938 for (int i = 0; i < vn; i++) {
939 safe_str_free(&vals[i]);
940 }
941 safe_free(vals);
942 safe_str_free(&c->variable);
943 safe_str_free(&c->property);
944 safe_str_free(&c->op);
945 return NULL;
946 }
947 vals = (const char **)tmp;
948 vcap = new_vcap;
949 }
950 const char *new_val = heap_strdup(advance(p)->text);
951 if (!new_val) {
952 for (int i = 0; i < vn; i++) {
953 safe_str_free(&vals[i]);
954 }
955 safe_free(vals);
956 safe_str_free(&c->variable);
957 safe_str_free(&c->property);
958 safe_str_free(&c->op);
959 return NULL;
960 }
961 vals[vn++] = new_val;
962 } else {
963 break;

Callers 1

parse_condition_opFunction · 0.85

Calls 7

advanceFunction · 0.85
safe_str_freeFunction · 0.85
expectFunction · 0.85
matchFunction · 0.85
expr_leafFunction · 0.85
heap_strdupFunction · 0.70
checkFunction · 0.70

Tested by

no test coverage detected