static void emit_load_floating_rhs_expression_now (int result_size);
static void emit_load_assignment_rhs_to_reg (const char *reg);
+static int source_starts_double_deref_at_now (const char *p);
static int emit_load_deref_assignment_expression_to_reg_now (const char *reg);
static int emit_statement_rhs_const32_to_rdx_if_possible (void);
}
+ /*
+ * Repeated unary dereference belongs to the normal scalar operand parser.
+ * Let it consume the complete chain (*p, **pp, ***ppp, ...), then widen
+ * the resulting scalar value for the pair expression. The old pair path
+ * consumed one '*' itself and therefore required the following token to be
+ * an identifier, rejecting every repeated-dereference expression.
+ */
+ if (tok.kind == TOK_STAR && source_starts_double_deref_at_now (tok.caret)) {
+
+ emit_load_assignment_rhs_to_reg (lo);
+
+ emit_extend_pair_high_from_low (lo, hi, DATA_INT & 0x1f, 1);
+ return;
+
+ }
+
if (tok.kind == TOK_STAR) {
char *name;
static void emit_load_floating_rhs_expression_now (int result_size);
static void emit_load_assignment_rhs_to_reg (const char *reg);
+static int source_starts_double_deref_at_now (const char *p);
static int emit_load_deref_assignment_expression_to_reg_now (const char *reg);
static int emit_statement_rhs_const32_to_edx_if_possible (void);
}
+ /*
+ * Repeated unary dereference belongs to the normal scalar operand parser.
+ * Let it consume the complete chain (*p, **pp, ***ppp, ...), then widen
+ * the resulting scalar value for the pair expression. The old pair path
+ * consumed one '*' itself and therefore required the following token to be
+ * an identifier, rejecting every repeated-dereference expression.
+ */
+ if (tok.kind == TOK_STAR && source_starts_double_deref_at_now (tok.caret)) {
+
+ emit_load_assignment_rhs_to_reg (lo);
+
+ emit_extend_pair_high_from_low (lo, hi, DATA_INT & 0x1f, rhs_last_scalar_is_unsigned >= 0 ? rhs_last_scalar_is_unsigned : 0);
+ return;
+
+ }
+
if (tok.kind == TOK_STAR) {
char *name;