commit-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Mailutils branch, master, updated. release-3.0-16-g6efafc3


From: Sergey Poznyakoff
Subject: [SCM] GNU Mailutils branch, master, updated. release-3.0-16-g6efafc3
Date: Tue, 29 Nov 2016 07:20:10 +0000 (UTC)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Mailutils".

http://git.savannah.gnu.org/cgit/mailutils.git/commit/?id=6efafc3f28d24b6e31052263d1c8f154049e9f65

The branch, master has been updated
       via  6efafc3f28d24b6e31052263d1c8f154049e9f65 (commit)
      from  1528dfded819e3c8ccba459425b0dc18b1f3a722 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 6efafc3f28d24b6e31052263d1c8f154049e9f65
Author: Sergey Poznyakoff <address@hidden>
Date:   Mon Nov 28 13:57:56 2016 +0200

    sieve: more improvements to the argument/tag runtime access API
    
    * include/mailutils/sieve.h (mu_sieve_handler_t): Change signature:
    remove args and tags arguments, they are contained in struct
    mu_sieve_machine now.
    (mu_sieve_get_comparator)
    (mu_sieve_relcmpn_t): Change signature.
    (mu_sieve_tag_lookup,mu_sieve_tag_lookup_untyped): Remove
    (mu_sieve_get_tag,mu_sieve_get_tag_untyped): New protos.
    (mu_sieve_value_get_optional): Replace by
    mu_sieve_get_arg_optional.
    (mu_sieve_value_get_untyped): Replace by
    mu_sieve_get_arg_untyped.
    (mu_sieve_value_get): Replace by
    mu_sieve_get_arg.
    All uses changed.
    * libmu_sieve/sieve-priv.h (mu_sieve_machine): New members:
    arg_list and tag_list
    * libmu_sieve/runtime.c (instr_run): Set up identifier, arg_list,
    and tag_list in mu_sieve_machine_t before calling the handler.
    Reset them afterward.
    * libmu_sieve/util.c (mu_sieve_value_get_optional): Replace by
    mu_sieve_get_arg_optional.
    (mu_sieve_value_get_untyped): Replace by
    mu_sieve_get_arg_untyped.
    (mu_sieve_value_get): Replace by
    mu_sieve_get_arg.
    (mu_sieve_tag_lookup): Replace by mu_sieve_get_tag
    (mu_sieve_tag_lookup_untyped): Replace by
    mu_sieve_get_tag_untyped

-----------------------------------------------------------------------

Summary of changes:
 examples/numaddr.c                  |    8 ++---
 gint                                |    2 +-
 include/mailutils/sieve.h           |   33 +++++++----------
 libmu_sieve/actions.c               |   20 +++++------
 libmu_sieve/comparator.c            |    8 ++---
 libmu_sieve/extensions/editheader.c |   20 +++++------
 libmu_sieve/extensions/list.c       |   12 +++----
 libmu_sieve/extensions/moderator.c  |   14 ++++----
 libmu_sieve/extensions/pipe.c       |   22 ++++++------
 libmu_sieve/extensions/spamd.c      |   14 ++++----
 libmu_sieve/extensions/timestamp.c  |    8 ++---
 libmu_sieve/extensions/vacation.c   |   58 +++++++++++++++---------------
 libmu_sieve/relational.c            |    4 +--
 libmu_sieve/runtime.c               |   27 +++++++-------
 libmu_sieve/sieve-priv.h            |   15 ++++----
 libmu_sieve/tests.c                 |   68 +++++++++++++++++------------------
 libmu_sieve/util.c                  |   45 +++++++++++------------
 17 files changed, 183 insertions(+), 195 deletions(-)

diff --git a/examples/numaddr.c b/examples/numaddr.c
index b073793..7981e0b 100644
--- a/examples/numaddr.c
+++ b/examples/numaddr.c
@@ -78,7 +78,7 @@ _count_items (void *item, void *data)
 
 /* Handler for the numaddr test */
 static int
-numaddr_test (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+numaddr_test (mu_sieve_machine_t mach)
 {
   mu_sieve_value_t *h;
   struct val_ctr vc;
@@ -86,9 +86,9 @@ numaddr_test (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
   
   /* Retrieve required arguments: */
   /* First argument: list of header names */
-  h = mu_sieve_value_get_untyped (mach, args, 0);
+  h = mu_sieve_get_arg_untyped (mach, 0);
   /* Second argument: Limit on the number of addresses */
-  mu_sieve_value_get (mach, args, 1, SVT_NUMBER, &vc.limit);
+  mu_sieve_get_arg (mach, 1, SVT_NUMBER, &vc.limit);
 
   /* Fill in the val_ctr structure */
   mu_message_get_header (mu_sieve_get_message (mach), &vc.hdr);
@@ -99,7 +99,7 @@ numaddr_test (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
 
   /* Here rc >= 1 iff the counted number of addresses is greater or equal
      to vc.limit. If `:under' tag was given we reverse the return value */
-  if (mu_sieve_tag_lookup (mach, tags, "under", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "under", SVT_VOID, NULL))
     rc = !rc;
 
   return rc;
diff --git a/gint b/gint
index 42f4712..fd86bf7 160000
--- a/gint
+++ b/gint
@@ -1 +1 @@
-Subproject commit 42f4712085b40173eaea58e14b1a579291a6fe3a
+Subproject commit fd86bf7d44b0c970771830692ae7491447ebe8b1
diff --git a/include/mailutils/sieve.h b/include/mailutils/sieve.h
index 4fc91c2..8a89ca4 100644
--- a/include/mailutils/sieve.h
+++ b/include/mailutils/sieve.h
@@ -33,8 +33,7 @@ extern "C" {
 
 typedef struct mu_sieve_machine *mu_sieve_machine_t;
 
-typedef int (*mu_sieve_handler_t) (mu_sieve_machine_t mach,
-                                  mu_list_t args, mu_list_t tags);
+typedef int (*mu_sieve_handler_t) (mu_sieve_machine_t mach);
 typedef void (*mu_sieve_action_log_t) (mu_sieve_machine_t mach,
                                       const char *action,
                                       const char *fmt, va_list ap);
@@ -175,20 +174,17 @@ mu_sieve_comparator_t mu_sieve_comparator_lookup 
(mu_sieve_machine_t mach,
                                                  const char *name,
                                                  int matchtype);
 
-mu_sieve_comparator_t mu_sieve_get_comparator (mu_sieve_machine_t mach,
-                                              mu_list_t tags);
+mu_sieve_comparator_t mu_sieve_get_comparator (mu_sieve_machine_t mach);
 int mu_sieve_str_to_relcmp (const char *str, mu_sieve_relcmp_t *test,
                            mu_sieve_relcmpn_t *stest);
-mu_sieve_relcmp_t mu_sieve_get_relcmp (mu_sieve_machine_t mach,
-                                      mu_list_t tags);
+mu_sieve_relcmp_t mu_sieve_get_relcmp (mu_sieve_machine_t mach);
 
 void mu_sieve_require (mu_sieve_machine_t mach, mu_list_t slist);
 
-int mu_sieve_tag_lookup (mu_sieve_machine_t mach,
-                        mu_list_t taglist, char *name,
-                        mu_sieve_data_type type, void *ret);
-int mu_sieve_tag_lookup_untyped (mu_sieve_machine_t mach, mu_list_t taglist,
-                                char *name, mu_sieve_value_t **ret);
+int mu_sieve_get_tag (mu_sieve_machine_t mach, char *name,
+                     mu_sieve_data_type type, void *ret);
+int mu_sieve_get_tag_untyped (mu_sieve_machine_t mach, 
+                             char *name, mu_sieve_value_t **ret);
   
 int mu_sieve_load_ext (mu_sieve_machine_t mach, const char *name);
 int mu_sieve_match_part_checker (mu_sieve_machine_t mach,
@@ -198,15 +194,12 @@ int mu_sieve_match_part_checker (mu_sieve_machine_t mach,
                                 const char *name, mu_list_t tags,
                                 mu_list_t args);
 /* Operations on value lists */
-mu_sieve_value_t *mu_sieve_value_get_optional (mu_sieve_machine_t mach,
-                                              mu_list_t vlist,
-                                              size_t index);
-mu_sieve_value_t *mu_sieve_value_get_untyped (mu_sieve_machine_t mach,
-                                             mu_list_t vlist,
-                                             size_t index);
-int mu_sieve_value_get (mu_sieve_machine_t mach, mu_list_t vlist,
-                       size_t index,
-                       mu_sieve_data_type type, void *ret);
+mu_sieve_value_t *mu_sieve_get_arg_optional (mu_sieve_machine_t mach,
+                                            size_t index);
+mu_sieve_value_t *mu_sieve_get_arg_untyped (mu_sieve_machine_t mach,
+                                           size_t index);
+int mu_sieve_get_arg (mu_sieve_machine_t mach, size_t index,
+                     mu_sieve_data_type type, void *ret);
 int mu_sieve_vlist_do (mu_sieve_value_t *val, mu_list_action_t ac,
                       void *data);
 int mu_sieve_vlist_compare (mu_sieve_value_t *a, mu_sieve_value_t *b,
diff --git a/libmu_sieve/actions.c b/libmu_sieve/actions.c
index f6c37f7..077b8cd 100644
--- a/libmu_sieve/actions.c
+++ b/libmu_sieve/actions.c
@@ -47,7 +47,7 @@ sieve_mark_deleted (mu_message_t msg, int deleted)
 
 
 static int
-sieve_action_stop (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_action_stop (mu_sieve_machine_t mach)
 {
   mu_sieve_log_action (mach, "STOP", NULL);
   mach->pc = 0;
@@ -55,7 +55,7 @@ sieve_action_stop (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
 }
 
 static int
-sieve_action_keep (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_action_keep (mu_sieve_machine_t mach)
 {
   mu_sieve_log_action (mach, "KEEP", NULL);
   if (mu_sieve_is_dry_run (mach))
@@ -65,7 +65,7 @@ sieve_action_keep (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
 }
 
 static int
-sieve_action_discard (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_action_discard (mu_sieve_machine_t mach)
 {
   mu_sieve_log_action (mach, "DISCARD", _("marking as deleted"));
   if (mu_sieve_is_dry_run (mach))
@@ -75,16 +75,16 @@ sieve_action_discard (mu_sieve_machine_t mach, mu_list_t 
args, mu_list_t tags)
 }
 
 static int
-sieve_action_fileinto (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_action_fileinto (mu_sieve_machine_t mach)
 {
   int rc;
   int mbflags = 0;
   char *filename;
   char *perms;
 
-  mu_sieve_value_get (mach, args, 0, SVT_STRING, &filename);
+  mu_sieve_get_arg (mach, 0, SVT_STRING, &filename);
 
-  if (mu_sieve_tag_lookup (mach, tags, "permissions", SVT_STRING, &perms))
+  if (mu_sieve_get_tag (mach, "permissions", SVT_STRING, &perms))
     {
       const char *p;
       
@@ -281,7 +281,7 @@ build_mime (mu_mime_t *pmime, mu_message_t msg, const char 
*text)
 }
 
 static int
-sieve_action_reject (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_action_reject (mu_sieve_machine_t mach)
 {
   mu_mime_t mime = NULL;
   mu_mailer_t mailer = mu_sieve_get_mailer (mach);
@@ -292,7 +292,7 @@ sieve_action_reject (mu_sieve_machine_t mach, mu_list_t 
args, mu_list_t tags)
   mu_header_t hdr;
   char *text;
   
-  mu_sieve_value_get (mach, args, 0, SVT_STRING, &text);
+  mu_sieve_get_arg (mach, 0, SVT_STRING, &text);
   mu_sieve_log_action (mach, "REJECT", NULL);  
   if (mu_sieve_is_dry_run (mach))
     return 0;
@@ -398,7 +398,7 @@ check_redirect_loop (mu_message_t msg)
 }
 
 static int
-sieve_action_redirect (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_action_redirect (mu_sieve_machine_t mach)
 {
   mu_message_t msg, newmsg = NULL;
   mu_address_t addr = NULL, from = NULL;
@@ -408,7 +408,7 @@ sieve_action_redirect (mu_sieve_machine_t mach, mu_list_t 
args, mu_list_t tags)
   mu_mailer_t mailer = mu_sieve_get_mailer (mach);
   char *addrstr;
   
-  mu_sieve_value_get (mach, args, 0, SVT_STRING, &addrstr);
+  mu_sieve_get_arg (mach, 0, SVT_STRING, &addrstr);
 
   rc = mu_address_create (&addr, addrstr);
   if (rc)
diff --git a/libmu_sieve/comparator.c b/libmu_sieve/comparator.c
index 03fe403..2ef43cf 100644
--- a/libmu_sieve/comparator.c
+++ b/libmu_sieve/comparator.c
@@ -127,14 +127,14 @@ _find_comparator (void *item, void *data)
 }
 
 mu_sieve_comparator_t
-mu_sieve_get_comparator (mu_sieve_machine_t mach, mu_list_t tags)
+mu_sieve_get_comparator (mu_sieve_machine_t mach)
 {
   mu_sieve_comparator_t comp = NULL;
 
-  mu_list_foreach (tags, _find_comparator, &comp);
+  mu_list_foreach (mach->tag_list, _find_comparator, &comp);
   return comp ? comp : mu_sieve_comparator_lookup (mach,
-                                               "i;ascii-casemap",
-                                               MU_SIEVE_MATCH_IS);
+                                                  "i;ascii-casemap",
+                                                  MU_SIEVE_MATCH_IS);
 }
 
 /* Compile time support */
diff --git a/libmu_sieve/extensions/editheader.c 
b/libmu_sieve/extensions/editheader.c
index 4ec7c1d..52c745e 100644
--- a/libmu_sieve/extensions/editheader.c
+++ b/libmu_sieve/extensions/editheader.c
@@ -31,7 +31,7 @@
 /* Syntax: addheader [:last] <field-name: string> <value: string>
  */
 int
-sieve_addheader (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_addheader (mu_sieve_machine_t mach)
 {
   const char *field_name;
   const char *field_value;
@@ -39,8 +39,8 @@ sieve_addheader (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
   mu_header_t hdr;
   int rc;
   
-  mu_sieve_value_get (mach, args, 0, SVT_STRING, &field_name);
-  mu_sieve_value_get (mach, args, 1, SVT_STRING, &field_value);
+  mu_sieve_get_arg (mach, 0, SVT_STRING, &field_name);
+  mu_sieve_get_arg (mach, 1, SVT_STRING, &field_value);
 
   mu_sieve_log_action (mach, "ADDHEADER", "%s: %s", field_name, field_value);
 
@@ -58,7 +58,7 @@ sieve_addheader (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
       mu_sieve_abort (mach);
     }
 
-  rc = (mu_sieve_tag_lookup (mach, tags, "last", SVT_VOID, NULL) ?
+  rc = (mu_sieve_get_tag (mach, "last", SVT_VOID, NULL) ?
        mu_header_append : mu_header_prepend) (hdr, field_name, field_value);
   if (rc)
     {
@@ -77,7 +77,7 @@ sieve_addheader (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
                         [<value-patterns: string-list>]
  */
 int
-sieve_deleteheader (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_deleteheader (mu_sieve_machine_t mach)
 {
   mu_sieve_value_t *val;
   const char *field_name;
@@ -89,8 +89,8 @@ sieve_deleteheader (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
   mu_iterator_t itr;
   size_t i, idx = 0;
   
-  mu_sieve_value_get (mach, args, 0, SVT_STRING, &field_name);
-  val = mu_sieve_value_get_optional (mach, args, 1);
+  mu_sieve_get_arg (mach, 0, SVT_STRING, &field_name);
+  val = mu_sieve_get_arg_optional (mach, 1);
   if (!val)
     {
       field_pattern = NULL;
@@ -142,14 +142,14 @@ sieve_deleteheader (mu_sieve_machine_t mach, mu_list_t 
args, mu_list_t tags)
     }
 
   mu_header_get_iterator (hdr, &itr);
-  if (mu_sieve_tag_lookup (mach, tags, "last", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "last", SVT_VOID, NULL))
     {
       int backwards = 1;
       mu_iterator_ctl (itr, mu_itrctl_set_direction, &backwards);
     }
-  comp = mu_sieve_get_comparator (mach, tags);
+  comp = mu_sieve_get_comparator (mach);
 
-  mu_sieve_tag_lookup (mach, tags, "index", SVT_NUMBER, &idx);
+  mu_sieve_get_tag (mach, "index", SVT_NUMBER, &idx);
   
   for (i = 0, mu_iterator_first (itr); !mu_iterator_is_done (itr);
        mu_iterator_next (itr))
diff --git a/libmu_sieve/extensions/list.c b/libmu_sieve/extensions/list.c
index fd18660..71696c6 100644
--- a/libmu_sieve/extensions/list.c
+++ b/libmu_sieve/extensions/list.c
@@ -145,22 +145,22 @@ list_retrieve_header (void *item, void *data, int idx, 
char **pval)
 */
 
 static int
-list_test (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+list_test (mu_sieve_machine_t mach)
 {
   mu_sieve_value_t *h, *v;
-  mu_sieve_comparator_t comp = mu_sieve_get_comparator (mach, tags);
+  mu_sieve_comparator_t comp = mu_sieve_get_comparator (mach);
   struct header_closure clos;
   int result;
 
   memset (&clos, 0, sizeof clos);
-  if (!mu_sieve_tag_lookup (mach, tags, "delim", SVT_STRING, &clos.delim))
+  if (!mu_sieve_get_tag (mach, "delim", SVT_STRING, &clos.delim))
     clos.delim = ",";
   
-  h = mu_sieve_value_get_untyped (mach, args, 0);
-  v = mu_sieve_value_get_untyped (mach, args, 1);
+  h = mu_sieve_get_arg_untyped (mach, 0);
+  v = mu_sieve_get_arg_untyped (mach, 1);
   mu_message_get_header (mu_sieve_get_message (mach), &clos.header);
   result = mu_sieve_vlist_compare (h, v, comp,
-                                  mu_sieve_get_relcmp (mach, tags),
+                                  mu_sieve_get_relcmp (mach),
                                   list_retrieve_header,
                                   &clos, NULL) > 0;
   cleanup (&clos);
diff --git a/libmu_sieve/extensions/moderator.c 
b/libmu_sieve/extensions/moderator.c
index 7d16cef..249611c 100644
--- a/libmu_sieve/extensions/moderator.c
+++ b/libmu_sieve/extensions/moderator.c
@@ -74,7 +74,7 @@
 #include <stdlib.h>
 
 static int
-moderator_filter_message (mu_sieve_machine_t mach, mu_list_t tags,
+moderator_filter_message (mu_sieve_machine_t mach, 
                          mu_message_t msg, int *pdiscard)
 {
   int rc;
@@ -82,7 +82,7 @@ moderator_filter_message (mu_sieve_machine_t mach, mu_list_t 
tags,
   mu_attribute_t attr;
   char *arg;
   
-  if (mu_sieve_tag_lookup (mach, tags, "source", SVT_STRING, &arg))
+  if (mu_sieve_get_tag (mach, "source", SVT_STRING, &arg))
     {
       rc = mu_sieve_machine_inherit (mach, &newmach);
       if (rc)
@@ -101,7 +101,7 @@ moderator_filter_message (mu_sieve_machine_t mach, 
mu_list_t tags,
       if (rc)
        mu_sieve_error (mach, _("cannot compile source `%s'"), arg);
     }
-  else if (mu_sieve_tag_lookup (mach, tags, "program", SVT_STRING, &arg))
+  else if (mu_sieve_get_tag (mach, "program", SVT_STRING, &arg))
     {
       struct mu_locus locus;
       
@@ -265,7 +265,7 @@ moderator_message_get_part (mu_sieve_machine_t mach,
 }
 
 static int
-moderator_action (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+moderator_action (mu_sieve_machine_t mach)
 {
   mu_message_t msg, orig;
   int rc;
@@ -294,7 +294,7 @@ moderator_action (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
   if ((rc = moderator_message_get_part (mach, msg, 2, &orig)))
     mu_sieve_abort (mach);
 
-  rc = moderator_filter_message (mach, tags, orig, &discard);
+  rc = moderator_filter_message (mach, orig, &discard);
   mu_message_unref (orig);
   if (rc)
     mu_sieve_abort (mach);
@@ -311,13 +311,13 @@ moderator_action (mu_sieve_machine_t mach, mu_list_t 
args, mu_list_t tags)
          mu_sieve_abort (mach);
        }
 
-      mu_sieve_tag_lookup (mach, tags, "address", SVT_STRING, &from);
+      mu_sieve_get_tag (mach, "address", SVT_STRING, &from);
       
       if (moderator_discard_message (mach, request, from))
        discard = 0;
       else
        {
-         if (!mu_sieve_tag_lookup (mach, tags, "keep", SVT_VOID, NULL))
+         if (!mu_sieve_get_tag (mach, "keep", SVT_VOID, NULL))
            {
              mu_attribute_t attr = 0;
 
diff --git a/libmu_sieve/extensions/pipe.c b/libmu_sieve/extensions/pipe.c
index d7eaadd..3aedf16 100644
--- a/libmu_sieve/extensions/pipe.c
+++ b/libmu_sieve/extensions/pipe.c
@@ -82,7 +82,7 @@
 #define PIPE_ALL (PIPE_ENVELOPE | PIPE_HEADERS | PIPE_BODY)
 
 int
-sieve_pipe (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags, int test)
+sieve_pipe (mu_sieve_machine_t mach, int test)
 {
   int retval = 0;
   int rc, result;
@@ -94,7 +94,7 @@ sieve_pipe (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags, int test)
   const char *error_arg = NULL;
   int pipe_mask = 0;
   
-  mu_sieve_value_get (mach, args, 0, SVT_STRING, &cmd);
+  mu_sieve_get_arg (mach, 0, SVT_STRING, &cmd);
 
   if (mu_sieve_is_dry_run (mach))
     return 0;
@@ -102,11 +102,11 @@ sieve_pipe (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags, int test)
   msg = mu_sieve_get_message (mach);
   mu_message_get_envelope (msg, &env);
 
-  if (mu_sieve_tag_lookup (mach, tags, "envelope", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "envelope", SVT_VOID, NULL))
     pipe_mask |= PIPE_ENVELOPE;
-  if (mu_sieve_tag_lookup (mach, tags, "header", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "header", SVT_VOID, NULL))
     pipe_mask |= PIPE_HEADERS;
-  if (mu_sieve_tag_lookup (mach, tags, "body", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "body", SVT_VOID, NULL))
     pipe_mask |= PIPE_BODY;
   if (pipe_mask == 0)
     pipe_mask = PIPE_ALL;
@@ -194,7 +194,7 @@ sieve_pipe (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags, int test)
          mu_sieve_abort (mach);
        }
 
-      if (mu_sieve_tag_lookup (mach, tags, "exit", SVT_NUMBER, &n))
+      if (mu_sieve_get_tag (mach, "exit", SVT_NUMBER, &n))
        code = n;
       if (result == 0)
        retval = code == 0;
@@ -204,7 +204,7 @@ sieve_pipe (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags, int test)
        {
          int signo = WTERMSIG (status);
          size_t n;
-         if (mu_sieve_tag_lookup (mach, tags, "signal", SVT_NUMBER, &n))
+         if (mu_sieve_get_tag (mach, "signal", SVT_NUMBER, &n))
            retval = signo == n;
          else
            {
@@ -228,16 +228,16 @@ sieve_pipe (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags, int test)
 }
 
 int
-sieve_action_pipe (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_action_pipe (mu_sieve_machine_t mach)
 {
   mu_sieve_log_action (mach, "PIPE", NULL);
-  return sieve_pipe (mach, args, tags, 0);
+  return sieve_pipe (mach, 0);
 }
 
 int
-sieve_test_pipe (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_test_pipe (mu_sieve_machine_t mach)
 {
-  return sieve_pipe (mach, args, tags, 1);
+  return sieve_pipe (mach, 1);
 }
 
 
diff --git a/libmu_sieve/extensions/spamd.c b/libmu_sieve/extensions/spamd.c
index 4e5fea1..692f49a 100644
--- a/libmu_sieve/extensions/spamd.c
+++ b/libmu_sieve/extensions/spamd.c
@@ -353,7 +353,7 @@ get_real_message_size (mu_message_t msg, size_t *psize)
 */
 
 static int
-spamd_test (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+spamd_test (mu_sieve_machine_t mach)
 {
   char *buffer = NULL;
   size_t size;
@@ -381,12 +381,12 @@ spamd_test (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
       mu_sieve_abort (mach);
     }
   
-  if (!mu_sieve_tag_lookup (mach, tags, "host", SVT_STRING, &host))
+  if (!mu_sieve_get_tag (mach, "host", SVT_STRING, &host))
     host = "127.0.0.1";
   
-  if (mu_sieve_tag_lookup (mach, tags, "port", SVT_NUMBER, &num))
+  if (mu_sieve_get_tag (mach, "port", SVT_NUMBER, &num))
     result = spamd_connect_tcp (mach, &stream, host, num);
-  else if (mu_sieve_tag_lookup (mach, tags, "socket", SVT_STRING, &str))
+  else if (mu_sieve_get_tag (mach, "socket", SVT_STRING, &str))
     result = spamd_connect_socket (mach, &stream, str);
   else
     result = spamd_connect_tcp (mach, &stream, host, DEFAULT_SPAMD_PORT);
@@ -421,7 +421,7 @@ spamd_test (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
   spamd_send_command (stream, "SYMBOLS SPAMC/1.2");
   
   spamd_send_command (stream, "Content-length: %lu", (u_long) size);
-  if (mu_sieve_tag_lookup (mach, tags, "user", SVT_STRING, &str))
+  if (mu_sieve_get_tag (mach, "user", SVT_STRING, &str))
     spamd_send_command (stream, "User: %s", str);
   else
     {
@@ -464,12 +464,12 @@ spamd_test (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
 
   if (!result)
     {
-      if (mu_sieve_tag_lookup (mach, tags, "over", SVT_STRING, &str))
+      if (mu_sieve_get_tag (mach, "over", SVT_STRING, &str))
        {
          decode_float (&limit, str, 3, NULL);
          result = score >= limit;
        }
-      else if (mu_sieve_tag_lookup (mach, tags, "under", SVT_STRING, &str))
+      else if (mu_sieve_get_tag (mach, "under", SVT_STRING, &str))
        {
          decode_float (&limit, str, 3, NULL);
          result = score <= limit;        
diff --git a/libmu_sieve/extensions/timestamp.c 
b/libmu_sieve/extensions/timestamp.c
index dd29d1f..e96f4dd 100644
--- a/libmu_sieve/extensions/timestamp.c
+++ b/libmu_sieve/extensions/timestamp.c
@@ -48,7 +48,7 @@
 
 /* Handler for the timestamp test */
 static int
-timestamp_test (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+timestamp_test (mu_sieve_machine_t mach)
 {
   char const *hname;
   char const *date;
@@ -60,9 +60,9 @@ timestamp_test (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
   
   /* Retrieve required arguments: */
   /* First argument: header name */
-  mu_sieve_value_get (mach, args, 0, SVT_STRING, &hname);
+  mu_sieve_get_arg (mach, 0, SVT_STRING, &hname);
   /* Second argument: date displacement */
-  mu_sieve_value_get (mach, args, 1, SVT_STRING, &date);
+  mu_sieve_get_arg (mach, 1, SVT_STRING, &date);
 
   if (mu_parse_date (date, &tlimit, &now))
     {
@@ -93,7 +93,7 @@ timestamp_test (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
 
   rc = tval > tlimit;
     
-  if (mu_sieve_tag_lookup (mach, tags, "before", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "before", SVT_VOID, NULL))
     rc = !rc;  
 
   return rc;
diff --git a/libmu_sieve/extensions/vacation.c 
b/libmu_sieve/extensions/vacation.c
index a3a1fc3..989a87a 100644
--- a/libmu_sieve/extensions/vacation.c
+++ b/libmu_sieve/extensions/vacation.c
@@ -51,7 +51,7 @@
    is the message text.
 */
 static int
-build_mime (mu_sieve_machine_t mach, mu_list_t tags, mu_mime_t *pmime,
+build_mime (mu_sieve_machine_t mach, mu_mime_t *pmime,
            mu_message_t msg, const char *text)
 {
   mu_mime_t mime = NULL;
@@ -78,7 +78,7 @@ build_mime (mu_sieve_machine_t mach, mu_list_t tags, 
mu_mime_t *pmime,
       return 1;
     }
 
-  if (mu_sieve_tag_lookup (mach, tags, "mime", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "mime", SVT_VOID, NULL))
     {
       mu_stream_t fstr;
       rc = mu_filter_create (&fstr, input, "base64",
@@ -227,7 +227,7 @@ regex_comparator (void *item, void *data)
 /* Decide whether EMAIL address should not be responded to.
  */
 static int
-noreply_address_p (mu_sieve_machine_t mach, mu_list_t tags, char *email)
+noreply_address_p (mu_sieve_machine_t mach, char *email)
 {
   int i, rc = 0;
   mu_sieve_value_t *arg;
@@ -249,7 +249,7 @@ noreply_address_p (mu_sieve_machine_t mach, mu_list_t tags, 
char *email)
   for (i = 0; rc == 0 && noreply_sender[i]; i++)
     rc = regex_comparator (noreply_sender[i], &rd);
 
-  if (!rc && mu_sieve_tag_lookup_untyped (mach, tags, "noreply", &arg))
+  if (!rc && mu_sieve_get_tag_untyped (mach, "noreply", &arg))
     rc = mu_sieve_vlist_do (arg, regex_comparator, &rd);
   
   return rc;
@@ -337,7 +337,7 @@ test_and_update_prop (mu_property_t prop, const char *from,
    be answered, 0 if it should not, and throw exception if an error
    occurs. */
 static int
-check_db (mu_sieve_machine_t mach, mu_list_t tags, char *from)
+check_db (mu_sieve_machine_t mach, char *from)
 {
   mu_property_t prop;
   char *file;
@@ -348,7 +348,7 @@ check_db (mu_sieve_machine_t mach, mu_list_t tags, char 
*from)
   const char *dbfile = "~/.vacation";
   size_t n;
   
-  if (mu_sieve_tag_lookup (mach, tags, "days", SVT_NUMBER, &n))
+  if (mu_sieve_get_tag (mach, "days", SVT_NUMBER, &n))
     {
       days = n;
       if (days > DAYS_MAX)
@@ -357,7 +357,7 @@ check_db (mu_sieve_machine_t mach, mu_list_t tags, char 
*from)
   else
     days = DAYS_DEFAULT;
 
-  mu_sieve_tag_lookup (mach, tags, "database", SVT_STRING, &dbfile);
+  mu_sieve_get_tag (mach, "database", SVT_STRING, &dbfile);
   
   file = mu_tilde_expansion (dbfile, MU_HIERARCHY_DELIMITER, NULL);
   if (!file)
@@ -429,12 +429,12 @@ check_db (mu_sieve_machine_t mach, mu_list_t tags, char 
*from)
    "reply_prefix" tag.
  */
 static void
-re_subject (mu_sieve_machine_t mach, mu_list_t tags, char **psubject)
+re_subject (mu_sieve_machine_t mach, char **psubject)
 {
   char *subject;
   char *prefix = "Re";
   
-  mu_sieve_tag_lookup (mach, tags, "reply_prefix", SVT_STRING, &prefix);
+  mu_sieve_get_tag (mach, "reply_prefix", SVT_STRING, &prefix);
 
   subject = malloc (strlen (*psubject) + strlen (prefix) + 3);
   if (!subject)
@@ -459,7 +459,7 @@ re_subject (mu_sieve_machine_t mach, mu_list_t tags, char 
**psubject)
    Otherwise, reply_prefix is prepended to it. */
 
 static void
-vacation_subject (mu_sieve_machine_t mach, mu_list_t tags,
+vacation_subject (mu_sieve_machine_t mach,
                  mu_message_t msg, mu_header_t newhdr)
 {
   char *value;
@@ -467,7 +467,7 @@ vacation_subject (mu_sieve_machine_t mach, mu_list_t tags,
   int subject_allocated = 0;
   mu_header_t hdr;
   
-  if (mu_sieve_tag_lookup (mach, tags, "subject", SVT_STRING, &subject))
+  if (mu_sieve_get_tag (mach, "subject", SVT_STRING, &subject))
     /* nothing */;
   else if (mu_message_get_header (msg, &hdr) == 0
           && mu_header_aget_value_unfold (hdr, MU_HEADER_SUBJECT,
@@ -488,7 +488,7 @@ vacation_subject (mu_sieve_machine_t mach, mu_list_t tags,
          subject = p;
        }
 
-      if (mu_sieve_tag_lookup (mach, tags, "reply_regex", SVT_STRING, &p))
+      if (mu_sieve_get_tag (mach, "reply_regex", SVT_STRING, &p))
        {
          char *err = NULL;
          
@@ -504,7 +504,7 @@ vacation_subject (mu_sieve_machine_t mach, mu_list_t tags,
        }
          
       if (mu_unre_subject (subject, NULL))
-       re_subject (mach, tags, &subject);
+       re_subject (mach, &subject);
       
       free (value);
     }
@@ -601,7 +601,7 @@ add_header (void *item, void *data)
 
 /* Generate and send the reply message */
 static int
-vacation_reply (mu_sieve_machine_t mach, mu_list_t tags, mu_message_t msg,
+vacation_reply (mu_sieve_machine_t mach, mu_message_t msg,
                char const *text, char const *to, char const *from)
 {
   mu_mime_t mime = NULL;
@@ -613,7 +613,7 @@ vacation_reply (mu_sieve_machine_t mach, mu_list_t tags, 
mu_message_t msg,
   int rc;
   mu_sieve_value_t *val;
 
-  if (mu_sieve_tag_lookup (mach, tags, "file", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "file", SVT_VOID, NULL))
     {
       mu_stream_t instr;
       
@@ -628,7 +628,7 @@ vacation_reply (mu_sieve_machine_t mach, mu_list_t tags, 
mu_message_t msg,
          return -1;
        }
       
-      if (mu_sieve_tag_lookup (mach, tags, "rfc2822", SVT_VOID, NULL))
+      if (mu_sieve_get_tag (mach, "rfc2822", SVT_VOID, NULL))
        {
          rc = mu_stream_to_message (instr, &newmsg);
          mu_stream_unref (instr);
@@ -684,7 +684,7 @@ vacation_reply (mu_sieve_machine_t mach, mu_list_t tags, 
mu_message_t msg,
              return -1;
            }
 
-         if (build_mime (mach, tags, &mime, msg, (char const *) trans[0]))
+         if (build_mime (mach, &mime, msg, (char const *) trans[0]))
            {
              mu_stream_unref (text_stream);
              return -1;
@@ -696,7 +696,7 @@ vacation_reply (mu_sieve_machine_t mach, mu_list_t tags, 
mu_message_t msg,
     }
   else
     {
-      if (build_mime (mach, tags, &mime, msg, text))
+      if (build_mime (mach, &mime, msg, text))
        return -1;
       mu_mime_get_message (mime, &newmsg);
       mu_message_unref (newmsg);
@@ -716,7 +716,7 @@ vacation_reply (mu_sieve_machine_t mach, mu_list_t tags, 
mu_message_t msg,
     {
       mu_header_set_value (newhdr, MU_HEADER_TO, to, 0);
 
-      if (mu_sieve_tag_lookup_untyped (mach, tags, "header", &val))
+      if (mu_sieve_get_tag_untyped (mach, "header", &val))
        {
          struct header_closure hc;
          hc.mach = mach;
@@ -724,7 +724,7 @@ vacation_reply (mu_sieve_machine_t mach, mu_list_t tags, 
mu_message_t msg,
          mu_sieve_vlist_do (val, add_header, &hc);
        }
       
-      vacation_subject (mach, tags, msg, newhdr);
+      vacation_subject (mach, msg, newhdr);
       
       if (from)
         {
@@ -763,7 +763,7 @@ vacation_reply (mu_sieve_machine_t mach, mu_list_t tags, 
mu_message_t msg,
 }
 
 int
-sieve_action_vacation (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_action_vacation (mu_sieve_machine_t mach)
 {
   int rc;
   char *text, *from = NULL;
@@ -775,12 +775,12 @@ sieve_action_vacation (mu_sieve_machine_t mach, mu_list_t 
args, mu_list_t tags)
   if (diag (mach))
     return 0;
   
-  mu_sieve_value_get (mach, args, 0, SVT_STRING, &text);
+  mu_sieve_get_arg (mach, 0, SVT_STRING, &text);
 
   msg = mu_sieve_get_message (mach);
   mu_message_get_header (msg, &hdr);
 
-  if (mu_sieve_tag_lookup (mach, tags, "sender", SVT_STRING, &from))
+  if (mu_sieve_get_tag (mach, "sender", SVT_STRING, &from))
     {
       /* Debugging hook: :sender sets fake reply address */
       from = strdup (from);
@@ -803,12 +803,12 @@ sieve_action_vacation (mu_sieve_machine_t mach, mu_list_t 
args, mu_list_t tags)
 
   my_address = mu_get_user_email (NULL);
 
-  if (mu_sieve_tag_lookup (mach, tags, "always_reply", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "always_reply", SVT_VOID, NULL))
     return_address = my_address;
   else
     {
       mu_sieve_value_t *val = NULL;
-      mu_sieve_tag_lookup_untyped (mach, tags, "aliases", &val);
+      mu_sieve_get_tag_untyped (mach, "aliases", &val);
       if (match_addresses (hdr, my_address, val, &return_address) == 0)
        {
          free (my_address);
@@ -816,19 +816,19 @@ sieve_action_vacation (mu_sieve_machine_t mach, mu_list_t 
args, mu_list_t tags)
        }
     }
 
-  if (noreply_address_p (mach, tags, from)
+  if (noreply_address_p (mach, from)
       || bulk_precedence_p (hdr)
-      || check_db (mach, tags, from))
+      || check_db (mach, from))
     {
       free (from);
       free (my_address);
       return 0;
     }
 
-  mu_sieve_tag_lookup (mach, tags, "return_address", SVT_STRING,
+  mu_sieve_get_tag (mach, "return_address", SVT_STRING,
                       &return_address);
 
-  rc = vacation_reply (mach, tags, msg, text, from, return_address);
+  rc = vacation_reply (mach, msg, text, from, return_address);
   free (from);
   free (my_address);
   if (rc == -1)
diff --git a/libmu_sieve/relational.c b/libmu_sieve/relational.c
index 19c9eec..7d18ea8 100644
--- a/libmu_sieve/relational.c
+++ b/libmu_sieve/relational.c
@@ -81,12 +81,12 @@ mu_sieve_str_to_relcmp (const char *str,
 }
 
 mu_sieve_relcmp_t
-mu_sieve_get_relcmp (mu_sieve_machine_t mach, mu_list_t tags)
+mu_sieve_get_relcmp (mu_sieve_machine_t mach)
 {
   char *str;
   mu_sieve_relcmp_t test = NULL;
   
-  if (mu_sieve_tag_lookup (mach, tags, "value", SVT_STRING, &str) == 0)
+  if (mu_sieve_get_tag (mach, "value", SVT_STRING, &str) == 0)
     return op_ne;
   mu_sieve_str_to_relcmp (str, &test, NULL);
   return test;
diff --git a/libmu_sieve/runtime.c b/libmu_sieve/runtime.c
index 4648b9a..1c0e38b 100644
--- a/libmu_sieve/runtime.c
+++ b/libmu_sieve/runtime.c
@@ -30,7 +30,7 @@
 #define INSTR_DISASS(m) ((m)->state == mu_sieve_state_disass)
 #define INSTR_DEBUG(m) \
   (INSTR_DISASS(m) || mu_debug_level_p (mu_sieve_debug_handle, 
MU_DEBUG_TRACE9)) 
-
+
 void
 _mu_i_sv_instr_source (mu_sieve_machine_t mach)
 {
@@ -59,39 +59,38 @@ _mu_i_sv_instr_line (mu_sieve_machine_t mach)
 static int
 instr_run (mu_sieve_machine_t mach, char const *what)
 {
-  mu_sieve_handler_t han = SIEVE_ARG (mach, 0, handler);
-  mu_list_t arg_list = SIEVE_ARG (mach, 1, list);
-  mu_list_t tag_list = SIEVE_ARG (mach, 2, list);
   int rc = 0;
+  mu_sieve_handler_t han = SIEVE_ARG (mach, 0, handler);
+  mach->arg_list = SIEVE_ARG (mach, 1, list);
+  mach->tag_list = SIEVE_ARG (mach, 2, list);
+  mach->identifier = SIEVE_ARG (mach, 3, string);
   
-  SIEVE_ADJUST(mach, 4);
+  SIEVE_ADJUST (mach, 4);
 
   if (INSTR_DEBUG (mach))
-    mu_i_sv_debug_command (mach, mach->pc - 1,
-                          what, tag_list, arg_list);
+    mu_i_sv_debug_command (mach, mach->pc - 1, what);
   else
-    mu_i_sv_trace (mach, what, tag_list, arg_list);
+    mu_i_sv_trace (mach, what);
   
-  if (!INSTR_DISASS(mach))
-    rc = han (mach, arg_list, tag_list);
+  if (!INSTR_DISASS (mach))
+    rc = han (mach);
+  mach->arg_list = NULL;
+  mach->tag_list = NULL;
+  mach->identifier = NULL;
   return rc;
 }
 
 void
 _mu_i_sv_instr_action (mu_sieve_machine_t mach)
 {
-  mach->identifier = SIEVE_ARG (mach, 3, string);
   mach->action_count++;
   instr_run (mach, "ACTION");
-  mach->identifier = NULL;
 }
 
 void
 _mu_i_sv_instr_test (mu_sieve_machine_t mach)
 {
-  mach->identifier = SIEVE_ARG (mach, 3, string);
   mach->reg = instr_run (mach, "TEST");
-  mach->identifier = NULL;
 }
 
 void
diff --git a/libmu_sieve/sieve-priv.h b/libmu_sieve/sieve-priv.h
index 6c62255..d7b389b 100644
--- a/libmu_sieve/sieve-priv.h
+++ b/libmu_sieve/sieve-priv.h
@@ -83,9 +83,13 @@ struct mu_sieve_machine
   long reg;                  /* Numeric register */
   mu_list_t stack;           /* Runtime stack */
 
+  /* Call environment */
+  const char *identifier;    /* Name of action or test being executed */
+  mu_list_t arg_list;        /* Positional arguments */
+  mu_list_t tag_list;        /* Tagged arguments */
+  
   int dry_run;               /* Dry-run mode */
   jmp_buf errbuf;            /* Target location for non-local exits */
-  const char *identifier;    /* Name of action or test being executed */
   
   mu_mailbox_t mailbox;      /* Mailbox to operate upon */
   size_t    msgno;           /* Current message number */
@@ -195,12 +199,9 @@ void mu_i_sv_error (mu_sieve_machine_t mach);
 
 void mu_i_sv_debug (mu_sieve_machine_t mach, size_t pc, const char *fmt, ...)
   MU_PRINTFLIKE(3,4);
-void mu_i_sv_debug_command (mu_sieve_machine_t mach,
-                           size_t pc,
-                           char const *what,
-                           mu_list_t taglist, mu_list_t arglist);
-void mu_i_sv_trace (mu_sieve_machine_t mach, const char *what,
-                   mu_list_t taglist, mu_list_t arglist);
+void mu_i_sv_debug_command (mu_sieve_machine_t mach, size_t pc,
+                           char const *what);
+void mu_i_sv_trace (mu_sieve_machine_t mach, const char *what);
 
 void mu_i_sv_argf (mu_stream_t str, mu_list_t list);
 void mu_i_sv_valf (mu_stream_t str, mu_sieve_value_t *val);
diff --git a/libmu_sieve/tests.c b/libmu_sieve/tests.c
index 03b40d7..0713373 100644
--- a/libmu_sieve/tests.c
+++ b/libmu_sieve/tests.c
@@ -64,19 +64,18 @@ struct address_closure
 };  
 
 static int
-do_count (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags,
-         size_t count, int retval)
+do_count (mu_sieve_machine_t mach, size_t count, int retval)
 {
   char *relcmp;
   
-  if (mu_sieve_tag_lookup (mach, tags, "count", SVT_STRING, &relcmp))
+  if (mu_sieve_get_tag (mach, "count", SVT_STRING, &relcmp))
     {
       size_t limit;
       char *str;
       mu_list_t list;
       mu_sieve_relcmpn_t stest;
       
-      mu_sieve_value_get (mach, args, 1, SVT_STRING_LIST, &list);
+      mu_sieve_get_arg (mach, 1, SVT_STRING_LIST, &list);
       mu_list_get (list, 0, (void **) &str);
       limit = strtoul (str, &str, 10);
 
@@ -110,27 +109,28 @@ retrieve_address (void *item, void *data, int idx, char 
**pval)
 }
 
 int
-sieve_test_address (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_test_address (mu_sieve_machine_t mach)
 {
   mu_sieve_value_t *h, *v;
   mu_header_t header = NULL;
-  mu_sieve_comparator_t comp = mu_sieve_get_comparator (mach, tags);
-  mu_sieve_relcmp_t test = mu_sieve_get_relcmp (mach, tags);
+  mu_sieve_comparator_t comp = mu_sieve_get_comparator (mach);
+  mu_sieve_relcmp_t test = mu_sieve_get_relcmp (mach);
   struct address_closure clos;
   int rc;
   size_t count;
   
-  h = mu_sieve_value_get_untyped (mach, args, 0);
-  v = mu_sieve_value_get_untyped (mach, args, 1);
+  h = mu_sieve_get_arg_untyped (mach, 0);
+  v = mu_sieve_get_arg_untyped (mach, 1);
 
   mu_message_get_header (mu_sieve_get_message (mach), &header);
   clos.data = header;
-  clos.aget = sieve_get_address_part (tags);
+  clos.aget = sieve_get_address_part (mach->tag_list);
   clos.addr = NULL;
-  rc = mu_sieve_vlist_compare (h, v, comp, test, retrieve_address, &clos, 
&count);
+  rc = mu_sieve_vlist_compare (h, v, comp, test, retrieve_address, &clos,
+                              &count);
   mu_address_destroy (&clos.addr);
   
-  return do_count (mach, args, tags, count, rc);
+  return do_count (mach, count, rc);
 }
 
 struct header_closure
@@ -164,18 +164,18 @@ retrieve_header (void *item, void *data, int idx, char 
**pval)
 }
 
 int
-sieve_test_header (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_test_header (mu_sieve_machine_t mach)
 {
   mu_sieve_value_t *h, *v;
-  mu_sieve_comparator_t comp = mu_sieve_get_comparator (mach, tags);
-  mu_sieve_relcmp_t test = mu_sieve_get_relcmp (mach, tags);
+  mu_sieve_comparator_t comp = mu_sieve_get_comparator (mach);
+  mu_sieve_relcmp_t test = mu_sieve_get_relcmp (mach);
   size_t count, mcount = 0;
   struct header_closure clos;
   
-  h = mu_sieve_value_get_untyped (mach, args, 0);
-  v = mu_sieve_value_get_untyped (mach, args, 1);
+  h = mu_sieve_get_arg_untyped (mach, 0);
+  v = mu_sieve_get_arg_untyped (mach, 1);
 
-  if (mu_sieve_tag_lookup (mach, tags, "mime", SVT_VOID, NULL))
+  if (mu_sieve_get_tag (mach, "mime", SVT_VOID, NULL))
     {
       int ismime = 0;
 
@@ -204,7 +204,7 @@ sieve_test_header (mu_sieve_machine_t mach, mu_list_t args, 
mu_list_t tags)
                              &count))
     return 1;
 
-  return do_count (mach, args, tags, count + mcount, 0);
+  return do_count (mach, count + mcount, 0);
 }
 
 int
@@ -235,39 +235,39 @@ retrieve_envelope (void *item, void *data, int idx, char 
**pval)
 }
 
 int
-sieve_test_envelope (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_test_envelope (mu_sieve_machine_t mach)
 {
   mu_sieve_value_t *h, *v;
-  mu_sieve_comparator_t comp = mu_sieve_get_comparator (mach, tags);
-  mu_sieve_relcmp_t test = mu_sieve_get_relcmp (mach, tags);
+  mu_sieve_comparator_t comp = mu_sieve_get_comparator (mach);
+  mu_sieve_relcmp_t test = mu_sieve_get_relcmp (mach);
   struct address_closure clos;
   int rc;
   size_t count;
   
-  h = mu_sieve_value_get_untyped (mach, args, 0);
-  v = mu_sieve_value_get_untyped (mach, args, 1);
+  h = mu_sieve_get_arg_untyped (mach, 0);
+  v = mu_sieve_get_arg_untyped (mach, 1);
 
-  mu_message_get_envelope (mu_sieve_get_message (mach), 
-                           (mu_envelope_t*)&clos.data);
-  clos.aget = sieve_get_address_part (tags);
+  mu_message_get_envelope (mu_sieve_get_message (mach),
+                          (mu_envelope_t*)&clos.data);
+  clos.aget = sieve_get_address_part (mach->tag_list);
   clos.addr = NULL;
   rc = mu_sieve_vlist_compare (h, v, comp, test, retrieve_envelope, &clos,
-                           &count);
+                              &count);
   mu_address_destroy (&clos.addr);
-  return do_count (mach, args, tags, count, rc);
+  return do_count (mach, count, rc);
 }
 
 int
-sieve_test_size (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_test_size (mu_sieve_machine_t mach)
 {
   int rc = 1;
   mu_sieve_runtime_tag_t *tag = NULL;
   size_t size;
   size_t arg;
   
-  mu_sieve_value_get (mach, args, 0, SVT_NUMBER, &arg);
+  mu_sieve_get_arg (mach, 0, SVT_NUMBER, &arg);
   mu_message_size (mu_sieve_get_message (mach), &size);
-  mu_list_get (tags, 0, (void **)&tag);
+  mu_list_get (mach->tag_list, 0, (void **)&tag);
   if (!tag)
     rc = size == arg;
   else if (strcmp (tag->tag, "over") == 0)
@@ -288,13 +288,13 @@ _test_exists (void *item, void *data)
 }
   
 int
-sieve_test_exists (mu_sieve_machine_t mach, mu_list_t args, mu_list_t tags)
+sieve_test_exists (mu_sieve_machine_t mach)
 {
   mu_header_t header = NULL;
   mu_sieve_value_t *val;   
 
   mu_message_get_header (mu_sieve_get_message (mach), &header);
-  val = mu_sieve_value_get_untyped (mach, args, 0);
+  val = mu_sieve_get_arg_untyped (mach, 0);
   return mu_sieve_vlist_do (val, _test_exists, header) == 0;
 }
 
diff --git a/libmu_sieve/util.c b/libmu_sieve/util.c
index adc737e..27c7d70 100644
--- a/libmu_sieve/util.c
+++ b/libmu_sieve/util.c
@@ -177,11 +177,10 @@ mu_sieve_value_create (mu_sieve_data_type type, void 
*data)
 }
 
 mu_sieve_value_t *
-mu_sieve_value_get_untyped (mu_sieve_machine_t mach, mu_list_t vlist,
-                           size_t index)
+mu_sieve_get_arg_untyped (mu_sieve_machine_t mach, size_t index)
 {
   mu_sieve_value_t *val = NULL;
-  int rc = mu_list_get (vlist, index, (void **)&val);
+  int rc = mu_list_get (mach->arg_list, index, (void **)&val);
   if (rc)
     {
       mu_sieve_error (mach, _("can't get argument %zu: %s"),
@@ -192,11 +191,10 @@ mu_sieve_value_get_untyped (mu_sieve_machine_t mach, 
mu_list_t vlist,
 }
 
 mu_sieve_value_t *
-mu_sieve_value_get_optional (mu_sieve_machine_t mach, mu_list_t vlist,
-                            size_t index)
+mu_sieve_get_arg_optional (mu_sieve_machine_t mach, size_t index)
 {
   mu_sieve_value_t *val = NULL;
-  int rc = mu_list_get (vlist, index, (void **)&val);
+  int rc = mu_list_get (mach->arg_list, index, (void **)&val);
   if (rc == MU_ERR_NOENT)
     return NULL;
   else if (rc)
@@ -209,11 +207,10 @@ mu_sieve_value_get_optional (mu_sieve_machine_t mach, 
mu_list_t vlist,
 }  
 
 int
-mu_sieve_value_get (mu_sieve_machine_t mach, mu_list_t vlist,
-                   size_t index,
-                   mu_sieve_data_type type, void *ret)
+mu_sieve_get_arg (mu_sieve_machine_t mach, size_t index,
+                 mu_sieve_data_type type, void *ret)
 {
-  mu_sieve_value_t *val = mu_sieve_value_get_untyped (mach, vlist, index);
+  mu_sieve_value_t *val = mu_sieve_get_arg_untyped (mach, index);
   if (val->type != type)
     {
       mu_sieve_error (mach,
@@ -325,8 +322,7 @@ mu_i_sv_debug (mu_sieve_machine_t mach, size_t pc, const 
char *fmt, ...)
 void
 mu_i_sv_debug_command (mu_sieve_machine_t mach,
                       size_t pc,
-                      char const *what,
-                      mu_list_t taglist, mu_list_t arglist)
+                      char const *what)
 {
   if (mach->state_flags & MU_SV_SAVED_DBG_STATE)
     {
@@ -344,14 +340,13 @@ mu_i_sv_debug_command (mu_sieve_machine_t mach,
     }
   mu_stream_printf (mach->dbgstream, "%4zu: %s: %s",
                    pc, what, mach->identifier);  
-  mu_i_sv_tagf (mach->dbgstream, taglist);
-  mu_i_sv_argf (mach->dbgstream, arglist);
+  mu_i_sv_tagf (mach->dbgstream, mach->tag_list);
+  mu_i_sv_argf (mach->dbgstream, mach->arg_list);
   mu_stream_write (mach->dbgstream, "\n", 1, NULL);
 }
 
 void
-mu_i_sv_trace (mu_sieve_machine_t mach, const char *what,
-              mu_list_t taglist, mu_list_t arglist)
+mu_i_sv_trace (mu_sieve_machine_t mach, const char *what)
 {
   if (!mu_debug_level_p (mu_sieve_debug_handle, MU_DEBUG_TRACE4))
     return;
@@ -365,8 +360,8 @@ mu_i_sv_trace (mu_sieve_machine_t mach, const char *what,
                      mach->locus.mu_line);
   mu_stream_printf (mach->errstream, "%zu: %s %s", mach->msgno, what,
                    mach->identifier);
-  mu_i_sv_tagf (mach->errstream, taglist);
-  mu_i_sv_argf (mach->errstream, arglist);
+  mu_i_sv_tagf (mach->errstream, mach->tag_list);
+  mu_i_sv_argf (mach->errstream, mach->arg_list);
   mu_stream_printf (mach->errstream, "\n");
 }
 
@@ -401,13 +396,13 @@ tag_finder (void *item, void *data)
 }
 
 int
-mu_sieve_tag_lookup_untyped (mu_sieve_machine_t mach, mu_list_t taglist,
-                            char *name, mu_sieve_value_t **ret)
+mu_sieve_get_tag_untyped (mu_sieve_machine_t mach, 
+                         char *name, mu_sieve_value_t **ret)
 {
   mu_sieve_runtime_tag_t t;
 
   t.tag = name;
-  if (taglist && mu_list_foreach (taglist, tag_finder, &t))
+  if (mach->tag_list && mu_list_foreach (mach->tag_list, tag_finder, &t))
     {
       if (ret)
        *ret = t.arg;
@@ -417,12 +412,12 @@ mu_sieve_tag_lookup_untyped (mu_sieve_machine_t mach, 
mu_list_t taglist,
 }
 
 int
-mu_sieve_tag_lookup (mu_sieve_machine_t mach, mu_list_t taglist,
-                    char *name, mu_sieve_data_type type,
-                    void *ret)
+mu_sieve_get_tag (mu_sieve_machine_t mach, 
+                 char *name, mu_sieve_data_type type,
+                 void *ret)
 {
   mu_sieve_value_t *val;
-  int found = mu_sieve_tag_lookup_untyped (mach, taglist, name, &val);
+  int found = mu_sieve_get_tag_untyped (mach, name, &val);
 
   if (found)
     {


hooks/post-receive
-- 
GNU Mailutils



reply via email to

[Prev in Thread] Current Thread [Next in Thread]