summaryrefslogtreecommitdiff
path: root/libsieve/sieve.h
diff options
context:
space:
mode:
Diffstat (limited to 'libsieve/sieve.h')
-rw-r--r--libsieve/sieve.h66
1 files changed, 62 insertions, 4 deletions
diff --git a/libsieve/sieve.h b/libsieve/sieve.h
index ac2f9487c..ad6b78be9 100644
--- a/libsieve/sieve.h
+++ b/libsieve/sieve.h
@@ -16,20 +16,78 @@
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <mailutils/libsieve.h>
+#include <setjmp.h>
+
+#define SIEVE_CODE_INCR 128
+
+typedef void (*sieve_instr_t) __P((sieve_machine_t *mach));
typedef union {
sieve_instr_t instr;
- sieve_value_t val;
+ sieve_handler_t handler;
+ sieve_value_t *val;
+ list_t list;
+ long number;
+ char *string;
} sieve_op_t;
struct sieve_machine {
- size_t progsize;
- sieve_op_t *prog;
+ list_t memory_pool; /* Pool of allocated memory objects */
+
+ size_t progsize; /* Number of allocated program cells */
+ size_t pc; /* Current program counter */
+ sieve_op_t *prog; /* Compiled program */
+
+ long reg; /* Numeric register */
+ list_t stack; /* Runtime stack */
+
+ int debug_level;
+
+ sieve_printf_t error_printer;
+ sieve_printf_t debug_printer;
+
+ void *data;
+
+ jmp_buf errbuf;
};
extern char *sieve_filename;
extern int sieve_line_num;
extern int sieve_yydebug;
+extern sieve_machine_t *sieve_machine;
+extern int sieve_error_count;
+
+void sieve_error __P((const char *fmt, ...));
+void sieve_debug_internal __P((sieve_printf_t printer, void *data,
+ const char *fmt, ...));
+void sieve_debug __P((sieve_machine_t *mach, const char *fmt, ...));
+void sieve_print_value __P((sieve_value_t *val, sieve_printf_t printer,
+ void *data));
+void sieve_print_value_list __P((list_t list, sieve_printf_t printer,
+ void *data));
+void sieve_print_tag_list __P((list_t list, sieve_printf_t printer,
+ void *data));
+
+int _sieve_default_error_printer __P((void*data, const char *fmt, va_list ap));
+
+int sieve_lex_begin __P((const char *name));
+void sieve_lex_finish __P((void));
-#define sieve_error mu_error
+void sieve_register_standard_actions __P((void));
+void sieve_register_standard_tests __P((void));
+int sieve_code __P((sieve_op_t *op));
+int sieve_code_instr __P((sieve_instr_t instr));
+int sieve_code_handler __P((sieve_handler_t handler));
+int sieve_code_list __P((list_t list));
+int sieve_code_number __P((long num));
+int sieve_code_test __P((sieve_register_t *reg, list_t arglist));
+int sieve_code_action __P((sieve_register_t *reg, list_t arglist));
+
+void instr_action __P((sieve_machine_t *mach));
+void instr_test __P((sieve_machine_t *mach));
+void instr_push __P((sieve_machine_t *mach));
+void instr_pop __P((sieve_machine_t *mach));
+void instr_allof __P((sieve_machine_t *mach));
+void instr_anyof __P((sieve_machine_t *mach));
+void instr_not __P((sieve_machine_t *mach));

Return to:

Send suggestions and report system problems to the System administrator.