dc: code shrink

function                                             old     new   delta
check_under                                           20      21      +1
print_no_pop                                          32      27      -5
pop                                                   24      18      -6
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 1/-11)             Total: -10 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2019-05-09 15:58:46 +02:00
parent 3106784e65
commit 89023b167f

View File

@ -35,10 +35,12 @@ enum { STACK_SIZE = (COMMON_BUFSIZE - offsetof(struct globals, stack)) / sizeof(
base = 10; \
} while (0)
static void check_under(void)
static unsigned check_under(void)
{
if (pointer == 0)
unsigned p = pointer;
if (p == 0)
bb_error_msg_and_die("stack underflow");
return p - 1;
}
static void push(double a)
@ -50,8 +52,9 @@ static void push(double a)
static double pop(void)
{
check_under();
return stack[--pointer];
unsigned p = check_under();
pointer = p;
return stack[p];
}
static void add(void)
@ -91,6 +94,14 @@ static void mod(void)
{
data_t d = pop();
//if (d == 0) {
// bb_error_msg("remainder by zero");
// pop();
// push(0);
// return;
//}
//^^^^ without this, we simply get SIGFPE and die
push((data_t) pop() % d);
}
@ -171,8 +182,7 @@ static void print_stack_no_pop(void)
static void print_no_pop(void)
{
check_under();
print_base(stack[pointer-1]);
print_base(stack[check_under()]);
}
struct op {