Refactored nxt_conf_op_compile().

Now index is always initialized for create operations.

The changes in nxt_conf_op_compile() simplify adding upcoming support of
operations with arrays.

No functional changes.
This commit is contained in:
Valentin Bartenev
2019-04-24 20:31:00 +03:00
parent 1467d34d73
commit 30768b7b3c

View File

@@ -741,6 +741,7 @@ nxt_conf_op_compile(nxt_mp_t *mp, nxt_conf_op_t **ops, nxt_conf_value_t *root,
{ {
nxt_str_t token; nxt_str_t token;
nxt_conf_op_t *op, **parent; nxt_conf_op_t *op, **parent;
nxt_conf_value_t *node;
nxt_conf_path_parse_t parse; nxt_conf_path_parse_t parse;
nxt_conf_object_member_t *member; nxt_conf_object_member_t *member;
@@ -761,22 +762,23 @@ nxt_conf_op_compile(nxt_mp_t *mp, nxt_conf_op_t **ops, nxt_conf_value_t *root,
nxt_conf_path_next_token(&parse, &token); nxt_conf_path_next_token(&parse, &token);
root = nxt_conf_get_object_member(root, &token, &op->index); node = nxt_conf_get_object_member(root, &token, &op->index);
if (parse.last) { if (parse.last) {
break; break;
} }
if (root == NULL) { if (node == NULL) {
return NXT_DECLINED; return NXT_DECLINED;
} }
op->action = NXT_CONF_OP_PASS; op->action = NXT_CONF_OP_PASS;
root = node;
} }
if (value == NULL) { if (value == NULL) {
if (root == NULL) { if (node == NULL) {
return NXT_DECLINED; return NXT_DECLINED;
} }
@@ -785,7 +787,7 @@ nxt_conf_op_compile(nxt_mp_t *mp, nxt_conf_op_t **ops, nxt_conf_value_t *root,
return NXT_OK; return NXT_OK;
} }
if (root == NULL) { if (node == NULL) {
member = nxt_mp_zget(mp, sizeof(nxt_conf_object_member_t)); member = nxt_mp_zget(mp, sizeof(nxt_conf_object_member_t));
if (nxt_slow_path(member == NULL)) { if (nxt_slow_path(member == NULL)) {
@@ -796,6 +798,7 @@ nxt_conf_op_compile(nxt_mp_t *mp, nxt_conf_op_t **ops, nxt_conf_value_t *root,
member->value = *value; member->value = *value;
op->index = root->u.object->count;
op->action = NXT_CONF_OP_CREATE; op->action = NXT_CONF_OP_CREATE;
op->ctx = member; op->ctx = member;
@@ -938,9 +941,7 @@ nxt_conf_copy_object(nxt_mp_t *mp, nxt_conf_op_t *op, nxt_conf_value_t *dst,
do { do {
if (pass_op == NULL) { if (pass_op == NULL) {
index = (op == NULL || op->action == NXT_CONF_OP_CREATE) index = (op == NULL) ? src->u.object->count : op->index;
? src->u.object->count
: op->index;
} }
while (s != index) { while (s != index) {