+ /* Without temporarily casting to something >64-bit, the most negative */
+ /* number will overflow when performing 'number*sign'. Instead, we */
+ /* pick off the most negative number as a special case. */
+ if (number == (1ULL << 63) && sign == -1) {
+ /* C parses negative integer literals first as signed positive */
+ /* integer literals, then applying a unary negation operator. */
+ /* Thus, the most negative value is unreachable directly. */
+ int64_t number_temp = -9223372036854775807LL; /* First store -((2^63)-1) */
+ number_temp--; /* Now turn it into -(2^63) */
+ stack_push(sp, number_temp);
+ } else {
+ stack_push(sp, number*sign);
+ }