20 |
|
|
21 |
#define SIEVE_CODE_INCR 128 |
#define SIEVE_CODE_INCR 128 |
22 |
|
|
23 |
typedef void (*sieve_instr_t) __P((sieve_machine_t *mach)); |
typedef void (*sieve_instr_t) __P((sieve_machine_t mach)); |
24 |
|
|
25 |
typedef union { |
typedef union { |
26 |
sieve_instr_t instr; |
sieve_instr_t instr; |
34 |
|
|
35 |
struct sieve_machine { |
struct sieve_machine { |
36 |
/* Static data */ |
/* Static data */ |
37 |
|
char *filename; /* Name of the source script */ |
38 |
list_t memory_pool; /* Pool of allocated memory objects */ |
list_t memory_pool; /* Pool of allocated memory objects */ |
39 |
|
|
40 |
size_t progsize; /* Number of allocated program cells */ |
size_t progsize; /* Number of allocated program cells */ |
56 |
sieve_parse_error_t parse_error_printer; |
sieve_parse_error_t parse_error_printer; |
57 |
sieve_printf_t error_printer; |
sieve_printf_t error_printer; |
58 |
sieve_printf_t debug_printer; |
sieve_printf_t debug_printer; |
59 |
|
sieve_action_log_t logger; |
60 |
|
|
61 |
|
ticket_t ticket; |
62 |
|
mu_debug_t mu_debug; |
63 |
void *data; |
void *data; |
64 |
}; |
}; |
65 |
|
|
66 |
extern char *sieve_filename; |
extern char *sieve_filename; |
67 |
extern int sieve_line_num; |
extern int sieve_line_num; |
68 |
extern int sieve_yydebug; |
extern sieve_machine_t sieve_machine; |
|
extern sieve_machine_t *sieve_machine; |
|
69 |
extern int sieve_error_count; |
extern int sieve_error_count; |
70 |
|
|
71 |
void sieve_compile_error __P((const char *filename, int linenum, |
void sieve_compile_error __P((const char *filename, int linenum, |
99 |
int sieve_code_test __P((sieve_register_t *reg, list_t arglist)); |
int sieve_code_test __P((sieve_register_t *reg, list_t arglist)); |
100 |
int sieve_code_action __P((sieve_register_t *reg, list_t arglist)); |
int sieve_code_action __P((sieve_register_t *reg, list_t arglist)); |
101 |
|
|
102 |
void instr_action __P((sieve_machine_t *mach)); |
void instr_action __P((sieve_machine_t mach)); |
103 |
void instr_test __P((sieve_machine_t *mach)); |
void instr_test __P((sieve_machine_t mach)); |
104 |
void instr_push __P((sieve_machine_t *mach)); |
void instr_push __P((sieve_machine_t mach)); |
105 |
void instr_pop __P((sieve_machine_t *mach)); |
void instr_pop __P((sieve_machine_t mach)); |
106 |
void instr_allof __P((sieve_machine_t *mach)); |
void instr_allof __P((sieve_machine_t mach)); |
107 |
void instr_anyof __P((sieve_machine_t *mach)); |
void instr_anyof __P((sieve_machine_t mach)); |
108 |
void instr_not __P((sieve_machine_t *mach)); |
void instr_not __P((sieve_machine_t mach)); |
109 |
void instr_branch __P((sieve_machine_t *mach)); |
void instr_branch __P((sieve_machine_t mach)); |
110 |
void instr_brz __P((sieve_machine_t *mach)); |
void instr_brz __P((sieve_machine_t mach)); |
111 |
|
|
112 |
|
int sieve_mark_deleted __P((message_t msg, int deleted)); |