pike.git / src / pike_types.cmod

version» Context lines:

pike.git/src/pike_types.cmod:13906:    Pike_fatal("Not implemented!\n");    }   }      struct pike_type *low_type_int_op(enum PIKE_TYPE op,    struct pike_type *arg1,    struct pike_type *arg2)   {    INT64 min1 = CAR_TO_INT(arg1), min2 = CAR_TO_INT(arg2);    INT64 max1 = CDR_TO_INT(arg1), max2 = CDR_TO_INT(arg2); -  INT64 minres, maxres; +  INT64 minres = MIN_INT32, maxres = MAX_INT32, tmp;       switch(op) {    case PIKE_T_INT_OP_SUB:    if ((min1 == MIN_INT32) || (max2 == MAX_INT32)) {    minres = MIN_INT32;    } else {    minres = min1 - max2;    }    if ((max1 == MAX_INT32) || (min2 == MIN_INT32)) {    maxres = MAX_INT32;    } else {    maxres = max1 - min2;    }    break; -  +  +  case PIKE_T_INT_OP_MUL: +  maxres = minres = min1 * min2; +  tmp = min1 * max2; +  if (tmp > maxres) { +  maxres = tmp; +  } else { +  minres = tmp; +  } +  tmp = max1 * min2; +  if (tmp > maxres) { +  maxres = tmp; +  } else if (tmp < minres) { +  minres = tmp; +  } +  tmp = max1 * max2; +  if (tmp > maxres) { +  maxres = tmp; +  } else if (tmp < minres) { +  minres = tmp; +  } +  break; +     case PIKE_T_INT_OP_AND:    case PIKE_T_INT_OP_XOR:    minres = (INT32)evaluate_binop_min(op,    (unsigned INT32)min1,    (unsigned INT32)max1,    (unsigned INT32)min2,    (unsigned INT32)max2);    maxres = (INT32)evaluate_binop_max(op,    (unsigned INT32)min1,    (unsigned INT32)max1,
pike.git/src/pike_types.cmod:14042:    struct call_state cs;    INIT_CALL_STATE(cs, NULL);    res = low_new_check_call(arg1, arg2, 0, &cs, NULL);    FREE_CALL_STATE(cs);    }    break;    case PIKE_T_FIND_LFUN:    res = find_lfun_type(arg1, (ptrdiff_t)(void*)arg2);    break;    case PIKE_T_INT_OP_SUB: +  case PIKE_T_INT_OP_MUL:    case PIKE_T_INT_OP_AND:    case PIKE_T_INT_OP_XOR:    case PIKE_T_INT_OP_RANGE:    res = type_int_op(op, arg1, arg2);    break;    case PIKE_T_SET_CAR:    if (!arg1) return NULL;    switch(arg1->type) {    case PIKE_T_FUNCTION:    case PIKE_T_MANY: