/* parse an expression term. It can be one of: * "term" * ["term" <parameters>] */ std::unique_ptr<QueryExpr> w_query_expr_parse( w_query* query, const json_ref& exp) { w_string name; if (exp.isString()) { name = json_to_w_string(exp); } else if (exp.isArray() && json_array_size(exp) > 0) { const auto& first = exp.at(0); if (!first.isString()) { throw QueryParseError("first element of an expression must be a string"); } name = json_to_w_string(first); } else { throw QueryParseError("expected array or string for an expression"); } auto it = term_hash().find(name); if (it == term_hash().end()) { throw QueryParseError( watchman::to<std::string>("unknown expression term '", name, "'")); } return it->second(query, exp); }
static w_string parse_suffix(const json_ref& ele) { if (!ele.isString()) { throw QueryParseError("'suffix' must be a string or an array of strings"); } auto str = json_to_w_string(ele); return str.piece().asLowerCase(str.type()); }