pike.git/
src/
pike_types.cmod
Branch:
Tag:
Non-build tags
All tags
No tags
2022-02-16
2022-02-16 15:21:34 by Henrik Grubbström (Grubba) <grubba@grubba.org>
eb66fa6fb65afa14f46324d814aaa56af8e6d7b5 (
36
lines) (+
31
/-
5
)
[
Show
|
Annotate
]
Branch:
master
Compiler
[Typechecker]
: Add type flag PT_FLAG_VOIDABLE.
649:
t->refs = 0; add_ref(t); /* For DMALLOC... */ t->type = type;
-
t->flags =
0
;
+
t->flags =
flag_method & ~PT_FLAG_MARK_ASSIGN
;
t->car = car; t->cdr = cdr;
663:
} else if (type == PIKE_T_SCOPE) { /* The scope blocks propagation of markers. */ t->flags = cdr->flags & ~(PT_FLAG_MARKER|PT_FLAG_ASSIGN);
+
} else if (type == T_OR) {
+
if (car) {
+
t->flags |= car->flags;
+
}
+
if (cdr) {
+
t->flags |= cdr->flags;
+
}
} else { if (car && (flag_method & PT_COPY_CAR)) {
-
t->flags |= car->flags;
+
t->flags |= car->flags
& PT_FLAG_MARK_ASSIGN
;
} if (cdr && (flag_method & PT_COPY_CDR)) {
-
t->flags |= cdr->flags;
+
t->flags |= cdr->flags
& PT_FLAG_MARK_ASSIGN
;
;
} } }
1179:
Pike_fatal("Unsupported argument to push_type(): %d\n", type); break;
-
case T_FLOAT:
-
case T_MIXED:
+
case T_VOID:
-
+
/* Leaf type. */
+
*(++Pike_compiler->type_stackp) = mk_type(type, NULL, NULL,
+
PT_FLAG_VOIDABLE);
+
break;
+
case T_MIXED:
case T_ZERO:
-
+
case T_FLOAT:
case PIKE_T_UNKNOWN: /* Leaf type. */ *(++Pike_compiler->type_stackp) = mk_type(type, NULL, NULL, 0);
12189:
do { if (!match_types(fun_type->car, void_type_string)) { /* Too few arguments. */
+
#ifdef PIKE_DEBUG
+
if (fun_type->car && (fun_type->car->flags & PT_FLAG_VOIDABLE)) {
+
fprintf(stderr, "voidable mismatch for ");
+
simple_describe_type(fun_type->car);
+
fprintf(stderr, " flags: 0x%08x\n", fun_type->car->flags);
+
}
+
#endif
break; }
-
+
#ifdef PIKE_DEBUG
+
if (fun_type->car && !(fun_type->car->flags & PT_FLAG_VOIDABLE)) {
+
fprintf(stderr, "voidable mismatch for ");
+
simple_describe_type(fun_type->car);
+
fprintf(stderr, " flags: 0x%08x\n", fun_type->car->flags);
+
}
+
#endif
fun_type = fun_type->cdr; } while(fun_type->type == PIKE_T_FUNCTION); if (fun_type->type != T_MANY) {