pike.git / src / pike_types.cmod

version» Context lines:

pike.git/src/pike_types.cmod:5665:    /* FIXME: Use implicit nullable only for legacy types.    * FIXME: What about PT_FLAG_CMP_VOID_IS_NULL?    */    tmp = low_type_binop(PT_BINOP_MINUS, bi->car, ai->car, remap,    bvoidable | PT_FLAG_CMP_NULLABLE | PT_FLAG_CMP_INSEPARABLE,    avoidable | PT_FLAG_CMP_NULLABLE | PT_FLAG_CMP_INSEPARABLE,    remap_flags ^ PT_FLAG_REMAP_SWAP_MARKERS);    if (tmp) {    /* No or not full overlap. */    -  if ((ai->car == void_type_string) && (tmp != bi->car) && +  if ((ai->car == void_type_string) &&    (aflags & PT_FLAG_CMP_IGNORE_EXTRA_ARGS)) {    /* End of argument list for a, and it is valid to end the    * argument list here (void matched), and a implicitly    * ignores any further arguments.    */    free_type(tmp);    tmp = NULL;    } else {    if (tmp == bi->car) {    /* Common case, no overlap. */    pop_stack_mark();    free_type(tmp); -  add_ref(ai); -  return ai; +  +  return remap_markers(ai, remap, remap_flags);    }    free_type(tmp);       tmp = low_type_binop(PT_BINOP_MINUS, ai->car, bi->car, remap,    avoidable | PT_FLAG_CMP_NULLABLE | PT_FLAG_CMP_INSEPARABLE,    bvoidable | PT_FLAG_CMP_NULLABLE | PT_FLAG_CMP_INSEPARABLE,    remap_flags);       if (tmp == ai->car) {    /* No overlap.    *    * The first overlap test likely failed due    * to remapping.    */    pop_stack_mark();    free_type(tmp); -  add_ref(ai); -  return ai; +  +  return remap_markers(ai, remap, remap_flags);    }    -  push_finished_type(ai->cdr); +  push_remap_markers(ai->cdr, remap, remap_flags);    push_finished_type(tmp);    push_type(ai->type);    free_type(tmp);    tmp = NULL;    }    }    }       /* Advance to the next argument. */    if (ai->type == T_FUNCTION) {