{
yasm_symrec *sym = d;
yasm_xfree(sym->name);
- if (sym->type == SYM_EQU)
+ if (sym->type == SYM_EQU && (sym->status & YASM_SYM_VALUED))
yasm_expr_destroy(sym->value.expn);
yasm__assoc_data_destroy(sym->assoc_data);
yasm_xfree(sym);
unsigned long line)
{
yasm_symrec *rec = symtab_define(symtab, name, SYM_EQU, 1, line);
+ if (yasm_error_occurred())
+ return rec;
rec->value.expn = e;
rec->status |= YASM_SYM_VALUED;
return rec;
yasm_bytecode *precbc, int in_table,
unsigned long line)
{
- yasm_symrec *rec;
- rec = symtab_define(symtab, name, SYM_LABEL, in_table, line);
+ yasm_symrec *rec = symtab_define(symtab, name, SYM_LABEL, in_table, line);
+ if (yasm_error_occurred())
+ return rec;
rec->value.precbc = precbc;
if (in_table && precbc)
yasm_bc__add_symrec(precbc, rec);
yasm_symtab_define_curpos(yasm_symtab *symtab, const char *name,
yasm_bytecode *precbc, unsigned long line)
{
- yasm_symrec *rec;
- rec = symtab_define(symtab, name, SYM_CURPOS, 0, line);
+ yasm_symrec *rec = symtab_define(symtab, name, SYM_CURPOS, 0, line);
+ if (yasm_error_occurred())
+ return rec;
rec->value.precbc = precbc;
return rec;
}
yasm_sym_vis vis)
{
yasm_symrec *rec = symtab_define(symtab, name, SYM_SPECIAL, 1, 0);
+ if (yasm_error_occurred())
+ return rec;
rec->status |= YASM_SYM_VALUED;
rec->visibility = vis;
return rec;
YASM_EXPR_ADD,
yasm_expr_copy(yasm_section_get_start(sect)),
sym->line);
+ sym->status |= YASM_SYM_VALUED;
}
return 0;
const yasm_expr *
yasm_symrec_get_equ(const yasm_symrec *sym)
{
- if (sym->type == SYM_EQU)
+ if (sym->type == SYM_EQU && (sym->status & YASM_SYM_VALUED))
return sym->value.expn;
return (const yasm_expr *)NULL;
}
case SYM_EQU:
fprintf(f, "%*s_EQU_\n", indent_level, "");
fprintf(f, "%*sExpn=", indent_level, "");
- yasm_expr_print(sym->value.expn, f);
+ if (sym->status & YASM_SYM_VALUED)
+ yasm_expr_print(sym->value.expn, f);
+ else
+ fprintf(f, "***UNVALUED***");
fprintf(f, "\n");
break;
case SYM_LABEL: