Branch: Tag:

2020-12-31

2020-12-31 13:33:19 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Compiler [Typechecker]: Remove use of duplicate type stack marks.

Use peek_stack_mark() instead of an extra type_stack_mark()
followed by pop_stack_mark(). Reduces type mark stack use
and code size slightly.

4559:    struct pike_type *bi = b;       type_stack_mark(); -  type_stack_mark(); /* To keep track of the number of args. */ +        while(1) {    /* Invariant:
4639:    }    if (!tmp) goto function_fail;    -  nargs = pop_stack_mark(); +  nargs = peek_stack_mark();       push_finished_type(tmp);    free_type(tmp);
4699:    if (avoidable && bvoidable) {    /* FIXME: What if tmp only differs due to remapping? */    if (tmp != a->car) { -  pop_stack_mark(); +     if (!tmp) {    push_remap_markers(a->cdr, NULL, remap, remap_flags);    push_type(T_VOID);
4747:       if (!tmp) goto function_fail;    -  pop_stack_mark(); +     push_finished_type(tmp);    push_remap_markers(a->car, NULL, remap, remap_flags);    push_type(T_MANY);
4782:    push_type(T_FUNCTION);    free_type(tmp);    } -  nargs = pop_stack_mark(); +  nargs = peek_stack_mark();    if (!nargs) {    pop_stack_mark();    return NULL;
4799:       complex_function:    -  nargs = pop_stack_mark(); +  nargs = peek_stack_mark();    if (op != PT_BINOP_AND) {    nargs = 0;    ai = a;