diff options
-rw-r--r-- | libsieve/require.c | 4 | ||||
-rw-r--r-- | libsieve/sieve.y | 26 |
2 files changed, 20 insertions, 10 deletions
diff --git a/libsieve/require.c b/libsieve/require.c index 5a31251c1..1ad3d69e3 100644 --- a/libsieve/require.c +++ b/libsieve/require.c @@ -48,7 +48,7 @@ sieve_require (list_t slist) if (strncmp (s, "comparator-", 11) == 0) { - if (sieve_require_comparator (s + 11)) + if (sieve_require_comparator (sieve_machine, s + 11)) { sieve_compile_error (sieve_filename, sieve_line_num, "source for the required comparator %s is not available", @@ -63,7 +63,7 @@ sieve_require (list_t slist) else { sieve_register_t *reg; - reg = sieve_action_lookup (s); + reg = sieve_action_lookup (sieve_machine, s); if (!reg) { sieve_compile_error (sieve_filename, sieve_line_num, diff --git a/libsieve/sieve.y b/libsieve/sieve.y index d767510e4..1901e4565 100644 --- a/libsieve/sieve.y +++ b/libsieve/sieve.y @@ -218,7 +218,8 @@ begin : /* empty */ test : command { - sieve_register_t *reg = sieve_test_lookup ($1.ident); + sieve_register_t *reg = sieve_test_lookup (sieve_machine, + $1.ident); $$ = sieve_machine->pc; if (!reg) @@ -243,7 +244,8 @@ command : IDENT maybe_arglist action : command { - sieve_register_t *reg = sieve_action_lookup ($1.ident); + sieve_register_t *reg = sieve_action_lookup (sieve_machine, + $1.ident); $$ = sieve_machine->pc; if (!reg) @@ -407,7 +409,12 @@ mailer_t sieve_get_mailer (sieve_machine_t mach) { if (!mach->mailer) - mailer_create (&mach->mailer, NULL); + { + mailer_create (&mach->mailer, NULL); + if (mach->mu_debug) + mailer_set_debug (mach->mailer, mach->mu_debug); + } + return mach->mailer; } @@ -480,6 +487,9 @@ sieve_machine_destroy (sieve_machine_t *pmach) mailer_destroy (&mach->mailer); list_do (mach->destr_list, _run_destructor, NULL); list_destroy (&mach->destr_list); + list_destroy (&mach->action_list); + list_destroy (&mach->test_list); + list_destroy (&mach->comp_list); sieve_slist_destroy (&mach->memory_pool); free (mach); *pmach = NULL; @@ -494,6 +504,9 @@ sieve_machine_begin (sieve_machine_t mach) sieve_machine = mach; sieve_error_count = 0; sieve_code_instr (NULL); + sieve_register_standard_actions (mach); + sieve_register_standard_tests (mach); + sieve_register_standard_comparators (mach); } void @@ -508,16 +521,13 @@ sieve_compile (sieve_machine_t mach, const char *name) int rc; sieve_machine_begin (mach); - sieve_register_standard_actions (); - sieve_register_standard_tests (); - sieve_register_standard_comparators (); if (sieve_lex_begin (name) == 0) { sieve_machine->filename = sieve_pstrdup (&sieve_machine->memory_pool, name); - rc = yyparse (); - sieve_lex_finish (); + rc = yyparse (); + sieve_lex_finish (); } else rc = 1; |