{
switch (expr->etype) {
case EXPR_VALUE:
- mpz_set(rop, expr->value);
- if (expr->byteorder == BYTEORDER_HOST_ENDIAN &&
- expr_basetype(expr)->type == TYPE_STRING)
- mpz_switch_byteorder(rop, expr->len / BITS_PER_BYTE);
- return;
+ return mpz_set(rop, expr->value);
case EXPR_PREFIX:
return range_expr_value_low(rop, expr->prefix);
case EXPR_RANGE:
switch (expr->etype) {
case EXPR_VALUE:
- return range_expr_value_low(rop, expr);
+ return mpz_set(rop, expr->value);
case EXPR_PREFIX:
range_expr_value_low(rop, expr->prefix);
assert(expr->len >= expr->prefix_len);
case EXPR_PREFIX:
mpz_init(rop);
mpz_bitmask(rop, expr->key->len - expr->key->prefix_len);
+ if (expr_basetype(expr)->type == TYPE_STRING)
+ mpz_switch_byteorder(expr->key->prefix->value, expr->len / BITS_PER_BYTE);
+
mpz_ior(rop, rop, expr->key->prefix->value);
mpz_export_data(data, rop, expr->key->prefix->byteorder,
expr->key->prefix->len / BITS_PER_BYTE);
expr->key = key;
break;
case EXPR_VALUE:
+ if (expr_basetype(expr)->type == TYPE_STRING)
+ mpz_switch_byteorder(expr->key->value, expr->len / BITS_PER_BYTE);
+
key = range_expr_alloc(&expr->location,
expr_clone(expr->key),
expr_get(expr->key));