From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id z2uRErpVFWHQOAEAgWs5BA (envelope-from ) for ; Thu, 12 Aug 2021 19:09:14 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id wP6mDbpVFWFyUwAAB5/wlQ (envelope-from ) for ; Thu, 12 Aug 2021 17:09:14 +0000 Received: from mail.notmuchmail.org (nmbug.tethera.net [IPv6:2607:5300:201:3100::1657]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id C8B436CB2 for ; Thu, 12 Aug 2021 19:09:13 +0200 (CEST) Received: from nmbug.tethera.net (localhost [127.0.0.1]) by mail.notmuchmail.org (Postfix) with ESMTP id 915BA291B3; Thu, 12 Aug 2021 13:08:32 -0400 (EDT) Received: from fethera.tethera.net (fethera.tethera.net [198.245.60.197]) by mail.notmuchmail.org (Postfix) with ESMTP id 4030E293F7 for ; Thu, 12 Aug 2021 13:08:23 -0400 (EDT) Received: by fethera.tethera.net (Postfix, from userid 1001) id 31A1F5FD5C; Thu, 12 Aug 2021 13:08:23 -0400 (EDT) Received: (nullmailer pid 1348783 invoked by uid 1000); Thu, 12 Aug 2021 17:07:43 -0000 From: David Bremner To: notmuch@notmuchmail.org Cc: David Bremner Subject: [PATCH 30/31] lib/parse-sexp: thread environment argument through parser Date: Thu, 12 Aug 2021 10:07:27 -0700 Message-Id: <20210812170728.1348333-31-david@tethera.net> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210812170728.1348333-1-david@tethera.net> References: <20210812170728.1348333-1-david@tethera.net> MIME-Version: 1.0 Message-ID-Hash: ZJA2JOQMFLQTUNPCIT2CHVKPWFOF77XR X-Message-ID-Hash: ZJA2JOQMFLQTUNPCIT2CHVKPWFOF77XR X-MailFrom: bremner@tethera.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-notmuch.notmuchmail.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.1 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Migadu-Flow: FLOW_IN ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1628788153; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=K4fO2gPgHZNdR6XgAiUAP34foYMTd++dZn//woJqL4Q=; b=NM/LSYJhbsInI9KuoZBuPcEYn0X1ttVS6ZmoG5YDr7HWEot1Zl169z3xiDgOGDShcZRSXp LRAhTmzDx1djbU5PypFg+l1PnnnMK9Y9Wjwzne2qMGTNzBwS5SP1mxj/j7Kc9fEakPVVeF oVR53134PQ0e685QfyXM5mtei4qxhh5HSTfq2qPPX60hWl2cuJ79xjXOezYE8T5Rk690Bx fp8lE3xi4QMvde08LeXBKmcRvnZbOUiXv4QYWV5jb074BGZ/Aqxu2aO9VSM/r186iC+IWj BsjW0GIRXGMIwk23lqFXWdtKzASiml0o5E6/Qu+LKFleaE5M7/ucy9Px3Xzsgw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1628788153; a=rsa-sha256; cv=none; b=ruUAWvROnJmEmUQ/eflIwemFTMGX8KoIMjbZKtNh3JDnHQDSgogTpkNboS8/w2FntAhOBL lw0cNiU/G1M8KGby+oqTxXpvKC49NOZSIOA68BcsLDZFsPDZuv+oyciLWTyaoMjZzHUbuB k7hnrM8bEZWbxjbMZO7l76N1JZKoR3RJX8JVkYHwkhM0DFdcE/5eec8ioZS/nQLCCZnVsE IGopuSLbcnUggEO2qcjWMY1A0Sozc6kAA7zRDb/5uc2Ror3cG7vAWkXYbsJIcdM/l2DyR5 YqAO2gKEsxMttMTgPIVTWSj9Gz/v15x7RffQG1r5DP83S0ZBIKL0MEjxdUbqLQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Spam-Score: 0.56 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of notmuch-bounces@notmuchmail.org designates 2607:5300:201:3100::1657 as permitted sender) smtp.mailfrom=notmuch-bounces@notmuchmail.org X-Migadu-Queue-Id: C8B436CB2 X-Spam-Score: 0.56 X-Migadu-Scanner: scn1.migadu.com X-TUID: B138jAPoazlW No functionality change, just an extra argument carried everywhere. --- lib/parse-sexp.cc | 49 +++++++++++++++++++++++++++++------------------ 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/lib/parse-sexp.cc b/lib/parse-sexp.cc index 53168d57..188acffc 100644 --- a/lib/parse-sexp.cc +++ b/lib/parse-sexp.cc @@ -7,6 +7,11 @@ /* _sexp is used for file scope symbols to avoid clashing with * definitions from sexp.h */ +typedef struct { + const char *name; + const sexp_t *sx; +} _sexp_binding_t; + typedef enum { SEXP_FLAG_NONE = 0, SEXP_FLAG_FIELD = 1 << 0, @@ -99,12 +104,14 @@ static _sexp_prefix_t prefixes[] = static notmuch_status_t _sexp_to_xapian_query (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, + const _sexp_binding_t *env, const sexp_t *sx, Xapian::Query &output); static notmuch_status_t _sexp_combine_query (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, + const _sexp_binding_t *env, Xapian::Query::op operation, Xapian::Query left, const sexp_t *sx, @@ -121,12 +128,13 @@ _sexp_combine_query (notmuch_database_t *notmuch, return NOTMUCH_STATUS_SUCCESS; } - status = _sexp_to_xapian_query (notmuch, parent, sx, subquery); + status = _sexp_to_xapian_query (notmuch, parent, env, sx, subquery); if (status) return status; return _sexp_combine_query (notmuch, parent, + env, operation, Xapian::Query (operation, left, subquery), sx->next, output); @@ -165,6 +173,7 @@ _sexp_parse_phrase (std::string term_prefix, const char *phrase, Xapian::Query & static notmuch_status_t _sexp_parse_wildcard (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, + unused(const _sexp_binding_t *env), std::string match, Xapian::Query &output) { @@ -201,6 +210,7 @@ _sexp_parse_one_term (notmuch_database_t *notmuch, std::string term_prefix, cons notmuch_status_t _sexp_parse_regex (notmuch_database_t *notmuch, const _sexp_prefix_t *prefix, const _sexp_prefix_t *parent, + unused(const _sexp_binding_t *env), std::string val, Xapian::Query &output) { if (! parent) { @@ -225,7 +235,7 @@ _sexp_parse_regex (notmuch_database_t *notmuch, static notmuch_status_t _sexp_expand_query (notmuch_database_t *notmuch, const _sexp_prefix_t *prefix, const _sexp_prefix_t *parent, - const sexp_t *sx, Xapian::Query &output) + unused(const _sexp_binding_t *env), const sexp_t *sx, Xapian::Query &output) { Xapian::Query subquery; notmuch_status_t status; @@ -236,7 +246,8 @@ _sexp_expand_query (notmuch_database_t *notmuch, return NOTMUCH_STATUS_BAD_QUERY_SYNTAX; } - status = _sexp_combine_query (notmuch, NULL, prefix->xapian_op, prefix->initial, sx, subquery); + status = _sexp_combine_query (notmuch, NULL, NULL, prefix->xapian_op, prefix->initial, sx, + subquery); if (status) return status; @@ -272,7 +283,7 @@ _sexp_parse_infix (notmuch_database_t *notmuch, const sexp_t *sx, Xapian::Query static notmuch_status_t _sexp_parse_header (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, - const sexp_t *sx, Xapian::Query &output) + const _sexp_binding_t *env, const sexp_t *sx, Xapian::Query &output) { _sexp_prefix_t user_prefix; @@ -287,13 +298,13 @@ _sexp_parse_header (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, parent = &user_prefix; - return _sexp_combine_query (notmuch, parent, Xapian::Query::OP_AND, Xapian::Query::MatchAll, + return _sexp_combine_query (notmuch, parent, env, Xapian::Query::OP_AND, Xapian::Query::MatchAll, sx->list->next, output); } static notmuch_status_t -maybe_saved_squery (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, const sexp_t *sx, - Xapian::Query &output) +maybe_saved_squery (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, + const _sexp_binding_t *env, const sexp_t *sx, Xapian::Query &output) { char *key; char *expansion = NULL; @@ -325,9 +336,9 @@ maybe_saved_squery (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, c goto DONE; } - status = _sexp_to_xapian_query (notmuch, parent, saved_sexp, output); + status = _sexp_to_xapian_query (notmuch, parent, env, saved_sexp, output); - DONE: + DONE: if (local) talloc_free (local); @@ -339,8 +350,8 @@ maybe_saved_squery (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, c * list */ static notmuch_status_t -_sexp_to_xapian_query (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, const sexp_t *sx, - Xapian::Query &output) +_sexp_to_xapian_query (notmuch_database_t *notmuch, const _sexp_prefix_t *parent, + const _sexp_binding_t *env, const sexp_t *sx, Xapian::Query &output) { notmuch_status_t status; @@ -348,7 +359,7 @@ _sexp_to_xapian_query (notmuch_database_t *notmuch, const _sexp_prefix_t *parent std::string term_prefix = parent ? _notmuch_database_prefix (notmuch, parent->name) : ""; if (sx->aty == SEXP_BASIC && strcmp (sx->val, "*") == 0) { - return _sexp_parse_wildcard (notmuch, parent, "", output); + return _sexp_parse_wildcard (notmuch, parent, env, "", output); } if (parent && (parent->flags & SEXP_FLAG_BOOLEAN)) { @@ -387,13 +398,13 @@ _sexp_to_xapian_query (notmuch_database_t *notmuch, const _sexp_prefix_t *parent return NOTMUCH_STATUS_BAD_QUERY_SYNTAX; } - status = maybe_saved_squery (notmuch, parent, sx, output); + status = maybe_saved_squery (notmuch, parent, env, sx, output); if (status != NOTMUCH_STATUS_IGNORED) return status; /* Check for user defined field */ if (_notmuch_string_map_get (notmuch->user_prefix, sx->list->val)) { - return _sexp_parse_header (notmuch, parent, sx, output); + return _sexp_parse_header (notmuch, parent, env, sx, output); } for (_sexp_prefix_t *prefix = prefixes; prefix && prefix->name; prefix++) { @@ -429,17 +440,17 @@ _sexp_to_xapian_query (notmuch_database_t *notmuch, const _sexp_prefix_t *parent } if (prefix->xapian_op == Xapian::Query::OP_WILDCARD) - return _sexp_parse_wildcard (notmuch, parent, sx->list->next->val, output); + return _sexp_parse_wildcard (notmuch, parent, env, sx->list->next->val, output); if (prefix->flags & SEXP_FLAG_DO_REGEX) { - return _sexp_parse_regex (notmuch, prefix, parent, sx->list->next->val, output); + return _sexp_parse_regex (notmuch, prefix, parent, env, sx->list->next->val, output); } if (prefix->flags & SEXP_FLAG_DO_EXPAND) { - return _sexp_expand_query (notmuch, prefix, parent, sx->list->next, output); + return _sexp_expand_query (notmuch, prefix, parent, env, sx->list->next, output); } - return _sexp_combine_query (notmuch, parent, prefix->xapian_op, prefix->initial, + return _sexp_combine_query (notmuch, parent, env, prefix->xapian_op, prefix->initial, sx->list->next, output); } } @@ -461,6 +472,6 @@ _notmuch_sexp_string_to_xapian_query (notmuch_database_t *notmuch, const char *q return NOTMUCH_STATUS_BAD_QUERY_SYNTAX; } - return _sexp_to_xapian_query (notmuch, NULL, sx, output); + return _sexp_to_xapian_query (notmuch, NULL, NULL, sx, output); } #endif -- 2.30.2