pike.git/
src/
pike_types.cmod
Branch:
Tag:
Non-build tags
All tags
No tags
2022-03-01
2022-03-01 14:23:42 by Henrik Grubbström (Grubba) <grubba@grubba.org>
7f027d153cdcaa0d650a4dffff20a9742348ca12 (
41
lines) (+
31
/-
10
)
[
Show
|
Annotate
]
Branch:
master
Compiler
[Typechecker]
: Fix matching against mixed.
8160:
/* 'mixed' matches anything */
-
if((a->type == T_
ZERO
|| a->type == T_
MIXED
) &&
-
!(flags & (A_EXACT|B_EXACT)) &&
+
if((
(
a->type == T_
MIXED)
||
+
((
a->type == T_
ZERO
) && !(flags & (A_EXACT|B_EXACT))
))
&&
(b->type != T_VOID)) {
-
#if 1
+
ret = NULL; switch(b->type) {
8183:
ret = low_match_types(multiset_type_string, b, flags); break; }
+
#if 0
+
if (a->type == T_ZERO) {
if (ret) free_type(ret);
-
+
ret = a;
+
add_ref(ret);
+
} else if (!ret) {
+
ret = b;
+
add_ref(ret);
+
}
+
#else
+
if (ret) free_type(ret);
+
ret = a;
+
add_ref(ret);
#endif
-
add_ref(a);
-
return
a
;
+
return
ret
;
}
-
if((b->type == T_
ZERO
|| b->type == T_
MIXED
) &&
-
!(flags & (A_EXACT|B_EXACT)) &&
+
if((
(
b->type == T_
MIXED)
||
+
((
b->type == T_
ZERO
) && !(flags & (A_EXACT|B_EXACT))
))
&&
(a->type != T_VOID)) {
-
#if 1
+
ret = NULL; switch(a->type) {
8212:
ret = low_match_types(a, multiset_type_string, flags); break; }
+
#if 0
+
if (b->type == T_ZERO) {
if (ret) free_type(ret);
-
+
ret = b;
+
add_ref(ret);
+
} else if (!ret) {
+
ret = a;
+
add_ref(ret);
+
}
+
#else
+
if (ret) free_type(ret);
+
ret = a;
+
add_ref(ret);
#endif
-
add_ref(a);
-
return
a
;
+
return
ret
;
} /* Special cases (tm) */