bool ast_compare_type(ast_expression *a, ast_expression *b)
{
+ if (a->expression.vtype == TYPE_NIL ||
+ b->expression.vtype == TYPE_NIL)
+ return true;
if (a->expression.vtype != b->expression.vtype)
return false;
if (!a->expression.next != !b->expression.next)
count = vec_size(func->expression.params);
for (i = 0; i < count; ++i) {
- if (self->params[i]->expression.vtype != TYPE_NIL &&
- !ast_compare_type(self->params[i], (ast_expression*)(func->expression.params[i])))
+ if (!ast_compare_type(self->params[i], (ast_expression*)(func->expression.params[i])))
{
char texp[1024];
char tgot[1024];
}
else
assignop = type_storep_instr[exprs[0]->expression.vtype];
- if (assignop == AINSTR_END ||
- (exprs[1]->expression.vtype != TYPE_NIL && !ast_compare_type(field->expression.next, exprs[1])))
+ if (assignop == AINSTR_END || !ast_compare_type(field->expression.next, exprs[1]))
{
ast_type_to_string(field->expression.next, ty1, sizeof(ty1));
ast_type_to_string(exprs[1], ty2, sizeof(ty2));
ast_type_to_string(exprs[1], ty2, sizeof(ty2));
parseerror(parser, "invalid types in assignment: cannot assign %s to %s", ty2, ty1);
}
- else if (exprs[1]->expression.vtype != TYPE_NIL &&
- !ast_compare_type(exprs[0], exprs[1]))
+ else if (!ast_compare_type(exprs[0], exprs[1]))
{
ast_type_to_string(exprs[0], ty1, sizeof(ty1));
ast_type_to_string(exprs[1], ty2, sizeof(ty2));