summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/expression.h16
-rw-r--r--src/evaluate.c4
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;
}