self->cond = cond;
self->on_true = ontrue;
self->on_false = onfalse;
- self->phi_out = NULL;
+
+ if (!ast_type_adopt(self, ontrue)) {
+ ast_ternary_delete(self);
+ return NULL;
+ }
return self;
}
for (i = 0; i < count; ++i) {
if (!ast_compare_type(self->params[i], (ast_expression*)(func->expression.params[i]))) {
- asterror(ast_ctx(self), "invalid type for parameter %u in function call",
- (unsigned int)(i+1));
+ char texp[1024];
+ char tgot[1024];
+ ast_type_to_string(self->params[i], tgot, sizeof(tgot));
+ ast_type_to_string((ast_expression*)func->expression.params[i], texp, sizeof(texp));
+ asterror(ast_ctx(self), "invalid type for parameter %u in function call: expected %s, got %s",
+ (unsigned int)(i+1), texp, tgot);
/* we don't immediately return */
retval = false;
}
* may still happen, thus we remember a created ir_value and simply return one
* if it already exists.
*/
- if (self->phi_out) {
- *out = self->phi_out;
+ if (self->expression.outr) {
+ *out = self->expression.outr;
return true;
}
ir_phi_add(phi, ontrue, trueval);
ir_phi_add(phi, onfalse, falseval);
- self->phi_out = ir_phi_value(phi);
- *out = self->phi_out;
+ self->expression.outr = ir_phi_value(phi);
+ *out = self->expression.outr;
return true;
}