unsigned as)
{
struct psi_decl_var *v = calloc(1, sizeof(*v));
- v->name = strdup(name);
- v->fqn = strdup(name);
+ if (name) {
+ v->name = strdup(name);
+ v->fqn = strdup(name);
+ }
v->pointer_level = pl;
v->array_size = as;
return v;
struct psi_decl_var *dest = calloc(1, sizeof(*dest));
*dest = *src;
- dest->name = strdup(dest->name);
- dest->fqn = strdup(dest->fqn);
+
+ if (dest->name) {
+ dest->name = strdup(dest->name);
+ dest->fqn = strdup(dest->fqn);
+ }
if (dest->token) {
dest->token = psi_token_copy(dest->token);
if (var->token) {
free(var->token);
}
- free(var->name);
- free(var->fqn);
+ if (var->name) {
+ free(var->name);
+ free(var->fqn);
+ }
free(var);
}
}
{
dprintf(fd, "%s%s",
psi_t_indirection(var->pointer_level - !!var->array_size),
- var->name);
+ var->name ? var->name : "/**/");
if (var->array_size) {
dprintf(fd, "[%u]", var->array_size);
}
}
bool psi_decl_var_validate(struct psi_data *data, struct psi_decl_var *dvar,
- struct psi_decl *decl, struct psi_let_exp *let_exp,
- struct psi_set_exp *set_exp)
+ struct psi_impl *impl, struct psi_decl *decl,
+ struct psi_let_exp *let_exp, struct psi_set_exp *set_exp)
{
bool okay = false;
struct psi_let_exp *current_let_exp = let_exp;
}
}
- if (decl && !okay && psi_decl_get_arg(decl, dvar)) {
+ if (!okay && impl && psi_impl_get_decl_arg(impl, dvar)) {
+ okay = true;
+ }
+ if (!okay && decl && psi_decl_get_arg(decl, dvar)) {
okay = true;
}