#include "complain.h"
#include "symlist.h"
-
/*--------------------------------------.
| Create a list containing SYM at LOC. |
`--------------------------------------*/
symbol_list *res = xmalloc (sizeof *res);
res->content_type = SYMLIST_TYPE;
- res->content.type_name = type_name;
- res->location = res->sym_loc = loc;
- res->named_ref = NULL;
- res->next = NULL;
-
- return res;
-}
-
-
-/*----------------------------------------.
-| Create a list containing a <*> at LOC. |
-`----------------------------------------*/
-
-symbol_list *
-symbol_list_default_tagged_new (location loc)
-{
- symbol_list *res = xmalloc (sizeof *res);
-
- res->content_type = SYMLIST_DEFAULT_TAGGED;
- res->location = res->sym_loc = loc;
- res->named_ref = NULL;
- res->next = NULL;
-
- return res;
-}
-
-
-/*---------------------------------------.
-| Create a list containing a <> at LOC. |
-`---------------------------------------*/
-
-symbol_list *
-symbol_list_default_tagless_new (location loc)
-{
- symbol_list *res = xmalloc (sizeof *res);
+ res->content.sem_type = xmalloc (sizeof (semantic_type));
+ res->content.sem_type->tag = type_name;
+ res->content.sem_type->location = loc;
+ res->content.sem_type->status = undeclared;
- res->content_type = SYMLIST_DEFAULT_TAGLESS;
res->location = res->sym_loc = loc;
res->named_ref = NULL;
res->next = NULL;
{
next = node->next;
named_ref_free (node->named_ref);
+ if (node->content_type == SYMLIST_TYPE)
+ free (node->content.sem_type);
free (node);
}
}
l = symbol_list_n_get (l, n);
if (!l)
{
- complain_at (loc, _("invalid $ value: $%d"), n);
+ complain (&loc, complaint, _("invalid $ value: $%d"), n);
return NULL;
}
aver (l->content_type == SYMLIST_SYMBOL);
void
symbol_list_code_props_set (symbol_list *node, code_props_type kind,
- location loc, char const *code)
+ code_props const *cprops)
{
- code_props cprops;
- code_props_symbol_action_init (&cprops, code, loc);
- code_props_translate_code (&cprops);
switch (node->content_type)
{
- case SYMLIST_SYMBOL:
- symbol_code_props_set (node->content.sym, kind, &cprops);
- if (node->content.sym->status == undeclared)
- node->content.sym->status = used;
- break;
- case SYMLIST_TYPE:
- semantic_type_code_props_set
- (semantic_type_get (node->content.type_name),
- kind, &cprops);
- break;
- case SYMLIST_DEFAULT_TAGGED:
- default_tagged_code_props_set (kind, &cprops);
- break;
- case SYMLIST_DEFAULT_TAGLESS:
- default_tagless_code_props_set (kind, &cprops);
- break;
+ case SYMLIST_SYMBOL:
+ symbol_code_props_set (node->content.sym, kind, cprops);
+ if (node->content.sym->status == undeclared)
+ node->content.sym->status = used;
+ break;
+ case SYMLIST_TYPE:
+ semantic_type_code_props_set
+ (semantic_type_get (node->content.sem_type->tag,
+ &node->content.sem_type->location),
+ kind, cprops);
+ if (node->content.sem_type->status == undeclared)
+ node->content.sem_type->status = used;
+ break;
}
}