pike.git / src / pike_types.cmod

version» Context lines:

pike.git/src/pike_types.cmod:6123:    break;    case T_ARRAY:    type_stack_mark();    if ((tmp = soft_cast(soft_type->cdr, orig_type->cdr, flags))) {    push_finished_type(tmp);    } else if (flags & SOFT_WEAKER) {    push_finished_type(mixed_type_string);    } else {    push_finished_type(zero_type_string);    } -  push_unlimited_array_type(T_ARRAY); +  if (orig_type->type == T_ARRAY) { +  if ((tmp2 = soft_cast(soft_type->car, orig_type->car, flags))) { +  push_finished_type(tmp2); +  } else { +  push_finished_type(orig_type->car); +  } +  } else { +  push_finished_type(soft_type->car); +  } +  push_type(T_ARRAY);    res = pop_unfinished_type();    break;    case T_STRING: -  res = soft_cast(soft_type->cdr, orig_type->cdr, flags); -  if (!res) return NULL; +  tmp = soft_cast(soft_type->cdr, orig_type->cdr, flags); +  if (!tmp) return NULL;    type_stack_mark(); -  push_finished_type(res); -  free_type(res); -  push_unlimited_array_type(T_STRING); +  push_finished_type(tmp); +  if (orig_type->type == T_STRING) { +  if ((tmp2 = soft_cast(soft_type->car, orig_type->car, flags))) { +  push_finished_type(tmp2); +  } else { +  push_finished_type(orig_type->car); +  } +  } else { +  push_finished_type(soft_type->car); +  } +  push_type(T_STRING);    res = pop_unfinished_type();    break;    case T_INT:    {    INT32 min, max;    if (flags & SOFT_WEAKER) {    if ((min = CAR_TO_INT(soft_type)) > CAR_TO_INT(orig_type)) {    min = CAR_TO_INT(orig_type);    }    if ((max = CDR_TO_INT(soft_type)) < CDR_TO_INT(orig_type)) {