11
11
#include "sieve-commands.h"
12
12
#include "sieve-code.h"
13
13
#include "sieve-actions.h"
14
#include "sieve-validator.h"
14
#include "sieve-validator.h"
15
15
#include "sieve-generator.h"
16
16
#include "sieve-interpreter.h"
17
17
#include "sieve-code-dumper.h"
34
34
static bool cmd_test_set_generate
35
35
(const struct sieve_codegen_env *cgenv, struct sieve_command *cmd);
37
const struct sieve_command_def cmd_test_set = {
37
const struct sieve_command_def cmd_test_set = {
42
cmd_test_set_validate,
43
cmd_test_set_generate,
42
cmd_test_set_validate,
43
cmd_test_set_generate,
51
51
static bool cmd_test_set_operation_dump
53
53
static int cmd_test_set_operation_execute
54
54
(const struct sieve_runtime_env *renv, sieve_size_t *address);
56
const struct sieve_operation_def test_set_operation = {
56
const struct sieve_operation_def test_set_operation = {
59
59
TESTSUITE_OPERATION_TEST_SET,
60
cmd_test_set_operation_dump,
61
cmd_test_set_operation_execute
60
cmd_test_set_operation_dump,
61
cmd_test_set_operation_execute
68
68
static bool cmd_test_set_validate
69
(struct sieve_validator *valdtr, struct sieve_command *cmd)
69
(struct sieve_validator *valdtr, struct sieve_command *cmd)
71
71
struct sieve_ast_argument *arg = cmd->first_positional;
73
73
/* Check arguments */
75
75
if ( !sieve_validate_positional_argument
76
76
(valdtr, cmd, arg, "object", 1, SAAT_STRING) ) {
80
80
if ( !testsuite_object_argument_activate(valdtr, arg, cmd) )
83
83
arg = sieve_ast_argument_next(arg);
85
85
if ( !sieve_validate_positional_argument
86
86
(valdtr, cmd, arg, "value", 2, SAAT_STRING) ) {
90
90
return sieve_validator_argument_activate(valdtr, cmd, arg, FALSE);
97
97
static bool cmd_test_set_generate
98
(const struct sieve_codegen_env *cgenv, struct sieve_command *cmd)
98
(const struct sieve_codegen_env *cgenv, struct sieve_command *cmd)
100
100
sieve_operation_emit(cgenv->sbin, cmd->ext, &test_set_operation);
103
103
return sieve_generate_arguments(cgenv, cmd, NULL);
110
110
static bool cmd_test_set_operation_dump
111
111
(const struct sieve_dumptime_env *denv, sieve_size_t *address)
113
113
sieve_code_dumpf(denv, "TEST SET:");
114
114
sieve_code_descend(denv);
117
117
testsuite_object_dump(denv, address) &&
118
118
sieve_opr_string_dump(denv, address, "value");
140
140
return SIEVE_EXEC_BIN_CORRUPT;
143
sieve_runtime_trace(renv, "TEST SET command (%s = \"%s\")",
143
sieve_runtime_trace(renv, "TEST SET command (%s = \"%s\")",
144
144
testsuite_object_member_name(&tobj, member_id), str_c(value));
146
146
if ( tobj.def == NULL || tobj.def->set_member == NULL ) {
147
147
sieve_runtime_trace_error(renv, "unimplemented testsuite object");
148
148
return SIEVE_EXEC_FAILURE;
151
tobj.def->set_member(renv, member_id, value);
151
tobj.def->set_member(renv, member_id, value);
152
152
return SIEVE_EXEC_OK;