diff --git a/src/pike_types.c b/src/pike_types.c index 66ef92251ef182999fa1a7231e8fe864a4172dbc..0b5c38b6f771f2e0418c0ee6ab8bb188d29f8336 100644 --- a/src/pike_types.c +++ b/src/pike_types.c @@ -5640,14 +5640,18 @@ struct pike_type *check_call(struct pike_type *args, */ struct pike_type *get_argument_type(struct pike_type *fun, int arg_no) { - struct pike_type *tmp; + struct pike_type *tmp, *tmp2; loop: switch(fun->type) { case T_OR: - return or_pike_types(get_argument_type(fun->car, arg_no), - get_argument_type(fun->cdr, arg_no), - 1); + fun = or_pike_types(tmp = get_argument_type(fun->car, arg_no), + tmp2 = get_argument_type(fun->cdr, arg_no), + 1); + free_type(tmp); + free_type(tmp2); + return fun; + case T_FUNCTION: if (arg_no > 0) { arg_no--;