X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fcontext_validate.c;h=a5d3604d4a9e3e1ee3e43ba03e00e0f18c3e25ac;hp=180b34d94c3e3b652f7e20e1184a4bbe13019020;hb=510306ed8a97c9eb3f113d9181b60ccdf0b91d79;hpb=e8a409b21cb50f5931ab02ce6ab4f4406be94394 diff --git a/src/context_validate.c b/src/context_validate.c index 180b34d..a5d3604 100644 --- a/src/context_validate.c +++ b/src/context_validate.c @@ -171,14 +171,28 @@ static inline int validate_decl_type(PSI_Data *data, decl_type *type) { } static inline int validate_decl_typedef(PSI_Data *data, decl_arg *def) { if (!validate_decl_type(data, def->type)) { + const char *pre; + + switch (def->type->type) { + case PSI_T_STRUCT: pre = "struct "; break; + case PSI_T_UNION: pre = "union "; break; + case PSI_T_ENUM: pre = "enum "; break; + default: pre = ""; break; + } data->error(data, def->token, PSI_WARNING, "Type '%s' cannot be aliased to %s'%s'", - def->type->name, def->type->type == PSI_T_STRUCT?"struct ":"", - def->var->name); + def->var->name, pre, def->type->name); return 0; } - if (def->type->type == PSI_T_VOID && def->var->pointer_level) { - def->type->type = PSI_T_POINTER; + if (def->type->type == PSI_T_VOID) { + if (def->var->pointer_level) { + def->type->type = PSI_T_POINTER; + } else { + data->error(data, def->token, PSI_WARNING, + "Type '%s' cannot be aliased to 'void'", + def->type->name); + return 0; + } } return 1; } @@ -194,6 +208,11 @@ static inline int validate_decl_arg(PSI_Data *data, decl_arg *arg) { "Cannot use '%s' as type for '%s'", arg->type->name, arg->var->name); return 0; + } else { + decl_type *real = real_decl_type(arg->type); + + if (real->type == PSI_T_FUNCTION) { + } } return 1; } @@ -374,7 +393,7 @@ static inline int validate_decl_struct(PSI_Data *data, decl_struct *s) { if (!s->size && !s->args->count) { data->error(data, s->token, PSI_WARNING, - "Cannot compute size of empty struct %s", + "Cannot compute size of empty struct '%s'", s->name); return 0; } @@ -1037,7 +1056,6 @@ static inline int validate_impl_let_stmts(PSI_Data *data, impl *impl) { let_stmt *let = impl->stmts->let.list[j]; if (!strcmp(let->var->name, darg->var->name)) { - darg->let = let; check = 1; break; }