pike.git / src / pike_types.cmod

version» Context lines:

pike.git/src/pike_types.cmod:5815:    if (aflags & PT_FLAG_CMP_VOID_IS_ZERO) {    a = zero_type_string;    goto full_loop;    }    if (op & PT_BINOP_AND) {    if (bflags & PT_FLAG_CMP_VOIDABLE) {    /* Return void. */    add_ref(a);    return a;    } +  if (aflags & PT_FLAG_CMP_NULLABLE) {    /* Return zero. */    add_ref(b);    return b; -  +  }    } else if (op & PT_BINOP_MINUS) {    if (!(bflags & PT_FLAG_CMP_VOIDABLE)) {    /* Return void. */    add_ref(a);    return a;    }    }    return NULL;       case TWOT(T_ZERO, T_VOID):    if (bflags & PT_FLAG_CMP_VOID_IS_ZERO) {    b = zero_type_string;    goto full_loop;    }    if (op & PT_BINOP_AND) {    if (aflags & PT_FLAG_CMP_VOIDABLE) {    /* Return void. */    add_ref(b);    return b;    } -  +  if (bflags & PT_FLAG_CMP_NULLABLE) {    /* Return zero. */    add_ref(a);    return a; -  +  }    } else if (op & PT_BINOP_MINUS) { -  if (!(aflags & PT_FLAG_CMP_VOIDABLE)) { +  if (!(bflags & PT_FLAG_CMP_NULLABLE)) {    /* Return zero. */    add_ref(a);    return a;    }    }    return NULL;       case TWOT(T_ZERO, T_INT):    if (!(bflags & PT_FLAG_CMP_NULLABLE)) {    a = int0_type_string;
pike.git/src/pike_types.cmod:5920:    case PIKE_T_RING:   #endif    }       if (a->type != b->type) {    if (a->type == T_VOID) {    if (bflags & PT_FLAG_CMP_VOIDABLE) {    b = a;    goto recur;    } -  if (aflags & (PT_FLAG_CMP_NULLABLE | PT_FLAG_CMP_VOID_IS_ZERO)) { +  if (aflags & PT_FLAG_CMP_VOID_IS_ZERO) {    a = zero_type_string;    goto recur;    } -  +  if ((aflags & PT_FLAG_CMP_NULLABLE) && (op == PT_BINOP_AND)) { +  a = zero_type_string; +  goto recur;    } -  +  }    if (b->type == T_VOID) {    if (op & PT_BINOP_AND) {    if (aflags & PT_FLAG_CMP_VOIDABLE) {    a = b;    goto recur;    }    }    if (bflags & (PT_FLAG_CMP_NULLABLE | PT_FLAG_CMP_VOID_IS_ZERO)) {    b = zero_type_string;    goto recur;
pike.git/src/pike_types.cmod:5954:    return remap_markers(a, remap, remap_flags);    case PT_BINOP_INVERSE_MINUS:    if (bflags & PT_FLAG_CMP_INSEPARABLE) {    return NULL;    }    type_stack_mark();    push_remap_markers(a, remap, remap_flags);    push_type(T_NOT);    return pop_unfinished_type();    default: -  add_ref(b); -  return b; +  return remap_markers(b, remap, +  remap_flags ^ PT_FLAG_REMAP_SWAP_MARKERS);    }    }    }    if (b->type != T_VOID) {    if (a->type == T_MIXED) {    switch(op & PT_BINOP_A) {    case 0:    return NULL;    case PT_BINOP_AND:    return remap_markers(b, remap,
pike.git/src/pike_types.cmod:5977:    case PT_BINOP_MINUS:    if (aflags & PT_FLAG_CMP_INSEPARABLE) {    return NULL;    }    type_stack_mark();    push_remap_markers(b, remap,    remap_flags ^ PT_FLAG_REMAP_SWAP_MARKERS);    push_type(T_NOT);    return pop_unfinished_type();    default: -  add_ref(a); -  return a; +  return remap_markers(a, remap, remap_flags);    }    }    }       if (a->type == T_NOT) {    /* Rotate the opcode 2 bits.    *    * This converts A to ~A and vice versa.    */    op = ((op << 2) | (op >> 2)) & PT_BINOP_ALL;