summaryrefslogtreecommitdiff
path: root/copy.c
diff options
context:
space:
mode:
Diffstat (limited to 'copy.c')
-rw-r--r--copy.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/copy.c b/copy.c
index 7ccc0a0..e6e9e9f 100644
--- a/copy.c
+++ b/copy.c
@@ -185,8 +185,10 @@ static void copy_expr(Copier *c, Expression *out, Expression *in) {
copy_block(c, &wout->body, &win->body);
} break;
case EXPR_EACH: {
- EachExpr *ein = &in->each;
- EachExpr *eout = &out->each;
+ EachExpr *ein = in->each;
+ EachExpr *eout = allocr_malloc(a, sizeof *eout);
+ out->each = eout;
+ *eout = *ein;
if (ein->flags & EACH_ANNOTATED_TYPE)
copy_type(c, &eout->type, &ein->type);
if (ein->flags & EACH_IS_RANGE) {
@@ -201,7 +203,7 @@ static void copy_expr(Copier *c, Expression *out, Expression *in) {
copy_block(c, &eout->body, &ein->body);
} break;
case EXPR_FN:
- copy_fn_expr(c, &out->fn, &in->fn, true);
+ copy_fn_expr(c, out->fn = allocr_malloc(a, sizeof *out->fn), in->fn, true);
break;
case EXPR_CAST: {
CastExpr *cin = &in->cast;