diff options
-rw-r--r-- | include/expression.h | 16 | ||||
-rw-r--r-- | src/evaluate.c | 4 |
2 files changed, 17 insertions, 3 deletions
diff --git a/include/expression.h b/include/expression.h index 59fa5f3d..4b968796 100644 --- a/include/expression.h +++ b/include/expression.h @@ -96,19 +96,31 @@ enum symbol_types { * struct expr_ctx - type context for symbol parsing during evaluation * * @dtype: expected datatype + * @byteorder: expected byteorder * @len: expected len */ struct expr_ctx { const struct datatype *dtype; + enum byteorder byteorder; unsigned int len; }; +static inline void __expr_set_context(struct expr_ctx *ctx, + const struct datatype *dtype, + enum byteorder byteorder, + unsigned int len) +{ + ctx->dtype = dtype; + ctx->byteorder = byteorder; + ctx->len = len; +} + static inline void expr_set_context(struct expr_ctx *ctx, const struct datatype *dtype, unsigned int len) { - ctx->dtype = dtype; - ctx->len = len; + __expr_set_context(ctx, dtype, + dtype ? dtype->byteorder : BYTEORDER_INVALID, len); } /** diff --git a/src/evaluate.c b/src/evaluate.c index 00e55b7d..07326607 100644 --- a/src/evaluate.c +++ b/src/evaluate.c @@ -238,6 +238,7 @@ static int expr_evaluate_value(struct eval_ctx *ctx, struct expr **expr) mpz_clear(mask); return -1; } + (*expr)->byteorder = ctx->ectx.byteorder; (*expr)->len = ctx->ectx.len; mpz_clear(mask); break; @@ -261,7 +262,8 @@ static int expr_evaluate_value(struct eval_ctx *ctx, struct expr **expr) */ static int expr_evaluate_primary(struct eval_ctx *ctx, struct expr **expr) { - expr_set_context(&ctx->ectx, (*expr)->dtype, (*expr)->len); + __expr_set_context(&ctx->ectx, (*expr)->dtype, (*expr)->byteorder, + (*expr)->len); return 0; } |