pike.git / src / pike_types.cmod

version» Context lines:

pike.git/src/pike_types.cmod:7890:    case PIKE_T_NAME:    case PIKE_T_ATTRIBUTE:    return low_match_types(a->cdr, b, flags);       case T_NOT:    ret = low_match_types(a->car, b, (flags ^ B_EXACT ) | NO_MAX_ARGS);    if (ret) {    free_type(ret);    return 0;    } -  add_ref(a); -  return a; +  /* We know that a->car and b do not overlap, it is thus safe +  * to use mixed|void in place of a to get proper values for +  * any markers in b. +  */ +  return low_match_types(any_type_string, b, flags);       case T_ASSIGN:    {    int m = CAR_TO_INT(a);    ret = low_match_types(a->cdr, b, flags);    if(ret && (!a_markers[m] || b->type != T_VOID))    {    struct pike_type *filtered_b = NULL;      #ifdef PIKE_DEBUG
pike.git/src/pike_types.cmod:8049:    case PIKE_T_NAME:    case PIKE_T_ATTRIBUTE:    return low_match_types(a, b->cdr, flags);       case T_NOT:    ret = low_match_types(a, b->car, (flags ^ A_EXACT ) | NO_MAX_ARGS);    if (ret) {    free_type(ret);    return 0;    } -  add_ref(a); -  return a; +  /* We know that a and b->car do not overlap, it is thus safe +  * to use mixed|void in place of b to get proper values for +  * any markers in a. +  */ +  return low_match_types(a, any_type_string, flags);       case T_ASSIGN:    {    int m = CAR_TO_INT(b);    ret = low_match_types(a, b->cdr, flags);    if(ret && (!b_markers[m] || a->type != T_VOID))    {    struct pike_type *filtered_a = NULL;       type_stack_mark();