Пример #1
0
static void parse_query_expression(w_query* res, const json_ref& query) {
  auto exp = query.get_default("expression");
  if (!exp) {
    // Empty expression means that we emit all generated files
    return;
  }

  res->expr = w_query_expr_parse(res, exp);
}
Пример #2
0
static bool parse_query_expression(w_query *res, json_t *query)
{
  json_t *exp;

  exp = json_object_get(query, "expression");
  if (!exp) {
    // Empty expression means that we emit all generated files
    return true;
  }

  res->expr = w_query_expr_parse(res, exp);
  if (!res->expr) {
    return false;
  }

  return true;
}
Пример #3
0
static w_query_expr *not_parser(w_query *query, json_t *term)
{
    json_t *other;
    w_query_expr *other_expr;

    /* rigidly require ["not", expr] */
    if (!json_is_array(term) || json_array_size(term) != 2) {
        query->errmsg = strdup("must use [\"not\", expr]");
        return NULL;
    }

    other = json_array_get(term, 1);
    other_expr = w_query_expr_parse(query, other);
    if (!other_expr) {
        // other expr sets errmsg
        return NULL;
    }

    return w_query_expr_new(eval_not, dispose_expr, other_expr);
}
Пример #4
0
static w_query_expr *parse_list(w_query *query, json_t *term, bool allof)
{
    struct w_expr_list *list;
    size_t i;

    /* don't allow "allof" on its own */
    if (!json_is_array(term) || json_array_size(term) < 2) {
        query->errmsg = strdup("must use [\"allof\", expr...]");
        return NULL;
    }

    list = calloc(1, sizeof(*list));
    if (!list) {
        query->errmsg = strdup("out of memory");
        return NULL;
    }

    list->allof = allof;
    list->num = json_array_size(term) - 1;
    list->exprs = calloc(list->num, sizeof(list->exprs[0]));

    for (i = 0; i < list->num; i++) {
        w_query_expr *parsed;
        json_t *exp = json_array_get(term, i + 1);

        parsed = w_query_expr_parse(query, exp);
        if (!parsed) {
            // other expression parser sets errmsg
            dispose_list(list);
            return NULL;
        }

        list->exprs[i] = parsed;
    }

    return w_query_expr_new(eval_list, dispose_list, list);
}