summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2018-04-03 13:16:31 +0200
committerFlorian Westphal <fw@strlen.de>2018-04-03 15:15:00 +0200
commit57cf280d7838a5cae8404402d5d4c4b657f56fcf (patch)
treeb8edbcddcdb84d32eed02c2153a6ae0734842bc1
parente17a9dd8c9c9417b9f2756f08069be8c593e2e7a (diff)
evaluate: handle EXPR_MAPPING
Needed by followup patch. EXPR_SET_REF handling is bonkers, it "works" when using { key : value } because ->key and ->left are aliased in struct expr to the same location. Signed-off-by: Florian Westphal <fw@strlen.de>
-rw-r--r--src/evaluate.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/evaluate.c b/src/evaluate.c
index 536c13d9..d03bfb06 100644
--- a/src/evaluate.c
+++ b/src/evaluate.c
@@ -1421,6 +1421,8 @@ static int binop_can_transfer(struct eval_ctx *ctx,
if (err <= 0)
return err;
return binop_can_transfer(ctx, left, right->right);
+ case EXPR_MAPPING:
+ return binop_can_transfer(ctx, left, right->left);
default:
return 0;
}
@@ -1448,6 +1450,8 @@ static int binop_transfer_one(struct eval_ctx *ctx,
int err;
switch ((*right)->ops->type) {
+ case EXPR_MAPPING:
+ return binop_transfer_one(ctx, left, &(*right)->left);
case EXPR_VALUE:
break;
case EXPR_SET_ELEM: