pike.git/
src/
pike_types.cmod
Branch:
Tag:
Non-build tags
All tags
No tags
2020-12-26
2020-12-26 12:26:50 by Henrik Grubbström (Grubba) <grubba@grubba.org>
8ae7fb936a4df2899d3df66dc5d3ea303cd0260f (
20
lines) (+
16
/-
4
)
[
Show
|
Annotate
]
Branch:
master
Compiler
[Typechecker]
: Use the NULLABLE flag in a few common cases.
4576:
if (ai->type == T_MANY) avoidable |= PT_FLAG_CMP_VOIDABLE; if (bi->type == T_MANY) bvoidable |= PT_FLAG_CMP_VOIDABLE;
+
/* FIXME: Only use implicit nullable for legacy types. */
tmp = low_type_binop(op, ai->car, bi->car, remap,
-
avoidable,
-
bvoidable,
+
avoidable
| PT_FLAG_CMP_NULLABLE
,
+
bvoidable
| PT_FLAG_CMP_NULLABLE
,
remap_flags); if (remap_flags & PT_FLAG_REMAP_TRACE) {
5135:
tmp = low_type_binop(op, a->car, b->car, remap, 0, 0, remap_flags); if (!tmp && (op == PT_BINOP_AND)) 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) { if (op == PT_BINOP_AND) { free_type(tmp);