+ g_inc (Flags | CF_CONST | CF_FORCECHAR, 1);
+ }
+
+ /* Store the result back */
+ Store (Expr, 0);
+
+ /* Restore the original value in the primary register */
+ g_restore (Flags | CF_FORCECHAR);
+
+ /* The result is always an expression, no reference */
+ ED_MakeRValExpr (Expr);
+}
+
+
+
+static void PostDec (ExprDesc* Expr)
+/* Handle the postdecrement operator */
+{
+ unsigned Flags;
+
+ NextToken ();
+
+ /* The expression to increment must be an lvalue */
+ if (!ED_IsLVal (Expr)) {
+ Error ("Invalid lvalue");
+ return;
+ }
+
+ /* We cannot modify const values */
+ if (IsQualConst (Expr->Type)) {
+ Error ("Decrement of read-only variable");
+ }
+
+ /* Get the data type */
+ Flags = TypeOf (Expr->Type);
+
+ /* Push the address if needed */
+ PushAddr (Expr);
+
+ /* Fetch the value and save it (since it's the result of the expression) */
+ LoadExpr (CF_NONE, Expr);
+ g_save (Flags | CF_FORCECHAR);
+
+ /* If we have a pointer expression, increment by the size of the type */
+ if (IsTypePtr (Expr->Type)) {
+ g_dec (Flags | CF_CONST | CF_FORCECHAR, CheckedSizeOf (Expr->Type + 1));
+ } else {
+ g_dec (Flags | CF_CONST | CF_FORCECHAR, 1);