static void store_array(void) { struct number *inumber; struct value *value; struct stack *stack; u_long idx; int reg; reg = readreg(); if (reg >= 0) { inumber = pop_number(); if (inumber == NULL) return; value = pop(); if (value == NULL) { free_number(inumber); return; } idx = get_ulong(inumber); if (BN_is_negative(inumber->number)) { warnx("negative idx"); stack_free_value(value); } else if (idx == ULONG_MAX || idx > MAX_ARRAY_INDEX) { warnx("idx too big"); stack_free_value(value); } else { stack = &bmachine.reg[reg]; frame_assign(stack, idx, value); } free_number(inumber); } }
static void store_array(void) { int reg; struct number *inumber; u_long index; struct value *value; struct stack *stack; reg = readreg(); if (reg >= 0) { inumber = pop_number(); if (inumber == NULL) return; value = pop(); if (value == NULL) { free_number(inumber); return; } index = get_ulong(inumber); if (BN_cmp(inumber->number, &zero) < 0) { warnx("negative index"); stack_free_value(value); } else if (index == BN_MASK2 || index > MAX_ARRAY_INDEX) { warnx("index too big"); stack_free_value(value); } else { stack = &bmachine.reg[reg]; frame_assign(stack, index, value); } free_number(inumber); } }