Branch: Tag:

2021-11-17

2021-11-17 14:09:33 by Henrik Grubbström (Grubba) <grubba@grubba.org>

Compiler [Typechecker]: Improved handling of nullable types.

5324:    }    }    -  if ((a->type == T_ZERO) && (bflags & PT_FLAG_CMP_NULLABLE)) { -  b = a; -  goto recur; -  } -  if ((b->type == T_ZERO) && (aflags & PT_FLAG_CMP_NULLABLE)) { -  a = b; -  goto recur; -  } -  if ((a->type == T_INT) && (bflags & PT_FLAG_CMP_NULLABLE)) { +  /* NB: TWOT(T_INT, T_ZERO) and TWOT(T_ZERO, T_INT) have +  * been handled above. +  */ +  if (((a->type == T_ZERO) || (a->type == T_INT)) && +  (bflags & PT_FLAG_CMP_NULLABLE)) { +  /* FIXME: Only valid for AND and MINUS. */    b = zero_type_string; -  +  bflags &= ~PT_FLAG_CMP_NULLABLE;    goto recur;    } -  if ((b->type == T_INT) && (aflags & PT_FLAG_CMP_NULLABLE)) { +  if (((b->type == T_ZERO) || (b->type == T_INT)) && +  (aflags & PT_FLAG_CMP_NULLABLE)) { +  /* FIXME: Only valid for AND and MINUS. */ +  if (op == PT_BINOP_AND) {    a = zero_type_string; -  +  } +  aflags &= ~PT_FLAG_CMP_NULLABLE;    goto recur;    }