On Fri, Feb 08, 2019 at 05:02:23PM +0100, Florian Westphal wrote:
> @@ -52,11 +59,11 @@ struct expr *expr_clone(const struct expr *expr)
>  {
>       struct expr *new;
>  
> -     new = expr_alloc(&expr->location, expr->ops, expr->dtype,
> +     new = expr_alloc(&expr->location, expr->etype, expr->dtype,
>                        expr->byteorder, expr->len);
>       new->flags = expr->flags;
>       new->op    = expr->op;
> -     expr->ops->clone(new, expr);
> +     expr_ops(expr)->clone(new, expr);
>       return new;
>  }
>  
> @@ -70,7 +77,7 @@ static void expr_destroy(struct expr *e)
>  {
>       const struct expr_ops *ops = expr_ops(e);
>  
> -     if (ops && ops->destroy)
> +     if (ops->destroy)

expr->ops should be always set, so I guess this is fine.

>               ops->destroy(e);
>  }
>  
> @@ -81,7 +88,8 @@ void expr_free(struct expr *expr)
>       if (--expr->refcnt > 0)
>               return;
>  
> -     expr_destroy(expr);
> +     if (expr->etype != EXPR_INVALID)
> +             expr_destroy(expr);

Any way to skip this branch?

This is for compound expressions?

Reply via email to