35 |
sizeof sieve_machine->prog[0]); |
sizeof sieve_machine->prog[0]); |
36 |
if (!newprog) |
if (!newprog) |
37 |
{ |
{ |
38 |
sieve_error ("%s:%d: out of memory!", |
sieve_compile_error (sieve_filename, sieve_line_num, |
39 |
sieve_filename, sieve_line_num); |
"out of memory!"); |
40 |
return 1; |
return 1; |
41 |
} |
} |
42 |
sieve_machine->prog = newprog; |
sieve_machine->prog = newprog; |
124 |
|
|
125 |
if (rc) |
if (rc) |
126 |
{ |
{ |
127 |
sieve_error ("%s:%d: can't create iterator: %s", |
sieve_compile_error (sieve_filename, sieve_line_num, |
128 |
sieve_filename, sieve_line_num, |
"can't create iterator: %s", |
129 |
mu_errstring (rc)); |
mu_errstring (rc)); |
130 |
return 1; |
return 1; |
131 |
} |
} |
132 |
|
|
142 |
sieve_tag_def_t *tag = find_tag (reg->tags, val->v.string); |
sieve_tag_def_t *tag = find_tag (reg->tags, val->v.string); |
143 |
if (!tag) |
if (!tag) |
144 |
{ |
{ |
145 |
sieve_error ("%s:%d: invalid tag name `%s' for `%s'", |
sieve_compile_error (sieve_filename, sieve_line_num, |
146 |
sieve_filename, sieve_line_num, |
"invalid tag name `%s' for `%s'", |
147 |
val->v.string, reg->name); |
val->v.string, reg->name); |
148 |
err = 1; |
err = 1; |
149 |
break; |
break; |
151 |
|
|
152 |
if (!tag_list && (rc = list_create (&tag_list))) |
if (!tag_list && (rc = list_create (&tag_list))) |
153 |
{ |
{ |
154 |
sieve_error ("%s:%d: can't create tag list: %s", |
sieve_compile_error (sieve_filename, sieve_line_num, |
155 |
sieve_filename, sieve_line_num, |
"%s:%d: can't create tag list: %s", |
156 |
mu_errstring (rc)); |
mu_errstring (rc)); |
157 |
err = 1; |
err = 1; |
158 |
break; |
break; |
159 |
} |
} |
174 |
} |
} |
175 |
else if (*exp_arg == SVT_VOID) |
else if (*exp_arg == SVT_VOID) |
176 |
{ |
{ |
177 |
sieve_error ("%s:%d: too many arguments in call to `%s'", |
sieve_compile_error (sieve_filename, sieve_line_num, |
178 |
sieve_filename, sieve_line_num, |
"too many arguments in call to `%s'", |
179 |
reg->name); |
reg->name); |
|
err = 1; |
|
|
break; |
|
|
} |
|
|
else if (*exp_arg != val->type) |
|
|
{ |
|
|
sieve_error ("%s:%d: type mismatch in argument %d to `%s'", |
|
|
sieve_filename, sieve_line_num, |
|
|
exp_arg - reg->req_args + 1, |
|
|
reg->name); |
|
180 |
err = 1; |
err = 1; |
181 |
break; |
break; |
182 |
} |
} |
183 |
else |
else |
184 |
{ |
{ |
185 |
|
if (*exp_arg != val->type) |
186 |
|
{ |
187 |
|
if (*exp_arg == SVT_STRING_LIST && val->type == SVT_STRING) |
188 |
|
{ |
189 |
|
list_t list; |
190 |
|
|
191 |
|
list_create (&list); |
192 |
|
list_append (list, val->v.string); |
193 |
|
sieve_pfree (&sieve_machine->memory_pool, val); |
194 |
|
val = sieve_value_create (SVT_STRING_LIST, list); |
195 |
|
} |
196 |
|
else |
197 |
|
{ |
198 |
|
sieve_compile_error (sieve_filename, sieve_line_num, |
199 |
|
"type mismatch in argument %d to `%s'", |
200 |
|
exp_arg - reg->req_args + 1, |
201 |
|
reg->name); |
202 |
|
sieve_compile_error (sieve_filename, sieve_line_num, |
203 |
|
"Expected %s but passed %s", |
204 |
|
sieve_type_str (*exp_arg), |
205 |
|
sieve_type_str (val->type)); |
206 |
|
err = 1; |
207 |
|
break; |
208 |
|
} |
209 |
|
} |
210 |
|
|
211 |
if (!arg_list && (rc = list_create (&arg_list))) |
if (!arg_list && (rc = list_create (&arg_list))) |
212 |
{ |
{ |
213 |
sieve_error ("%s:%d: can't create arg list: %s", |
sieve_compile_error (sieve_filename, sieve_line_num, |
214 |
sieve_filename, sieve_line_num, |
"can't create arg list: %s", |
215 |
mu_errstring (rc)); |
mu_errstring (rc)); |
216 |
err = 1; |
err = 1; |
217 |
break; |
break; |
218 |
} |
} |
228 |
{ |
{ |
229 |
if (*exp_arg != SVT_VOID) |
if (*exp_arg != SVT_VOID) |
230 |
{ |
{ |
231 |
sieve_error ("%s:%d: too few arguments in call to `%s'", |
sieve_compile_error (sieve_filename, sieve_line_num, |
232 |
sieve_filename, sieve_line_num, |
"too few arguments in call to `%s'", |
233 |
reg->name); |
reg->name); |
234 |
err = 1; |
err = 1; |
235 |
} |
} |
236 |
} |
} |