pike.git/
src/
pike_types.cmod
Branch:
Tag:
Non-build tags
All tags
No tags
2021-01-27
2021-01-27 18:33:05 by Henrik Grubbström (Grubba) <grubba@grubba.org>
928bb18c944fe545d827681dea38efd21faa6646 (
32
lines) (+
19
/-
13
)
[
Show
|
Annotate
]
Branch:
master
Compiler
[Typechecker]
: Support NULL as argument type in T_MANY.
1176:
top = *(Pike_compiler->type_stackp); /* Special case... */
-
if (top->type == T_MIXED) return; /* Probably due to an earlier error */
+
if (
!
top
|| top
->type == T_MIXED) return; /* Probably due to an earlier error */
Pike_compiler->type_stackp--; #ifdef PIKE_DEBUG
2734:
t->cdr->type == T_OR && ((t->cdr->car->type == T_MIXED && t->cdr->cdr->type == T_VOID) || (t->cdr->cdr->type == T_MIXED && t->cdr->car->type == T_VOID)) &&
-
(t->car->type == T_ZERO ||
+
(
!
t->car
||
+
t
->
car->
type == T_ZERO ||
(t->car->type == T_OR && ((t->car->car->type == T_ZERO && t->car->cdr->type == T_VOID) || (t->car->cdr->type == T_ZERO && t->car->car->type == T_VOID)))))
2757:
if (t->type != T_MANY) { string_builder_sprintf(s, ", @%T)", t); } else {
-
if(t->car->type != T_VOID)
+
if(
!
t->car
|| (t
->
car->
type != T_VOID)
)
{ if(arg++) string_builder_strcat(s, ", ");
-
low_describe_type(s, t->car);
+
if (t->car)
low_describe_type(s, t->car);
string_builder_strcat(s, " ..."); } t = t->cdr;
3859:
struct remap_state *remap, enum pt_remap_flags flags) {
-
if (!remap && !markers && !(flags & PT_FLAG_REMAP_EVAL_MARKERS)) {
+
if (!
t || (!
remap && !markers && !(flags & PT_FLAG_REMAP_EVAL_MARKERS))
)
{
push_finished_type(t); return; }
9738:
/* FALLTHRU */ case T_MANY: q = q->car;
-
if(q->type != T_VOID) return ~num;
+
if(
!
q
|| (q
->type != T_VOID)
)
return ~num;
return num; } }
9891:
add_ref(fun->cdr); return fun->cdr; }
-
add_ref(fun->car);
+
safe_
add_ref(fun->car);
return fun->car; case T_MIXED:
11066:
tmp = NULL; if (((arg_type->type != T_NOT) || (arg_type->car->type != T_MIXED)) &&
+
fun_type->car &&
(fun_type->car->type == T_NOT) && (fun_type->car->car->type == T_OR) && ((fun_type->car->car->car->type == T_MIXED) ||
11098:
/* No need to perform advanced checking in the trivial case... */ if (arg_type != (tmp2 = fun_type->car)) { struct pike_type *t = NULL;
-
if (!((flags & CALL_INVERTED_TYPES)?
+
if (!
tmp2) {
+
if
(
flags & CALL_STRICT) goto no_match;
+
} else if
(
!((
flags & CALL_INVERTED_TYPES)?
low_pike_types_le(tmp2, arg_type, 0, LE_A_B_SWAPPED|LE_EXPLICIT_ZERO): low_pike_types_le(arg_type, tmp2, 0, 0)) && ((flags & CALL_STRICT) || !(t = low_match_types(arg_type, tmp2, NO_SHORTCUTS)))) {
-
+
no_match:
/* No match. */ #ifdef PIKE_DEBUG if (l_flag>2) {