pike.git / src / pike_types.cmod

version» Context lines:

pike.git/src/pike_types.cmod:5581:    for (i = 1; i < nbounds; i++) {    push_type(T_OR);    }    return pop_unfinished_type();    }       case T_ARRAY:    case T_MAPPING:    case T_STRING:    /* FIXME: Handle PT_FLAG_CMP_INSEPARABLE. */ +  /* FIXME: The recursive op should probably be inverted. */    tmp = low_type_binop(op, a->car, b->car, remap,    0, 0, remap_flags); -  if (!tmp && (op == PT_BINOP_AND)) return NULL; +  if (!tmp && (op == PT_BINOP_AND) && a->car && b->car) return NULL;    if (a->type == T_STRING) {    tmp2 = low_type_binop(op, a->cdr, b->cdr, remap,    0, 0, remap_flags);    } else {    /* Mappings may always result in UNDEFINED on indexing.    * Arrays are typically initialized to all zeroes.    */    tmp2 = low_type_binop(op, a->cdr, b->cdr, remap,    PT_FLAG_CMP_NULLABLE,    PT_FLAG_CMP_NULLABLE,    remap_flags);    } -  if (!tmp2 && -  (a->type != PIKE_T_STRING -  || op == PT_BINOP_MINUS || (a->cdr && b->cdr))) { +  if (!tmp2 && (op == PT_BINOP_MINUS || (a->cdr && b->cdr))) {    if (op == PT_BINOP_AND) {    free_type(tmp);    return NULL;    } else if (!tmp) {    return NULL;    }    }    type_stack_mark();    if (op == PT_BINOP_MINUS) {    if (tmp) {