ref: 4ca822523b4538c4267bdd8604fd6a71c7e6aca8
parent: ca543c97d5f35334bc9784a3b5c7c5a8fe7a8f8a
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Sat Feb 3 16:31:54 EST 2018
[as] Remove FNTYPE and FMASK We can use only one bit for every type of symbol.
--- a/as/as.h
+++ b/as/as.h
@@ -3,16 +3,13 @@
* type of segment
*/
enum symflags {
- FTMASK = 0x3,
- FNTYPE = 0,
- FREG = 1,
- FSECT = 2,
- FSYM = 3,
-
- FCOMMON = 1 << 2,
- FEXTERN = 1 << 3,
- FDEF = 1 << 4,
- FGLOBAL = 1 << 5,
+ FREG = 1 << 0,
+ FSECT = 1 << 1,
+ FSYM = 1 << 2,
+ FCOMMON = 1 << 3,
+ FEXTERN = 1 << 4,
+ FDEF = 1 << 5,
+ FGLOBAL = 1 << 6,
FABS = 1 << 7,
};
--- a/as/myro.c
+++ b/as/myro.c
@@ -27,7 +27,7 @@
off = sizeof(FORMAT);
for (sym = symlist; sym; sym = sym->next) {
- if ((sym->flags & FTMASK) == FREG)
+ if (sym->flags & FREG)
continue;
str = &sym->name;
len = strlen(str->buf) + 1;
@@ -100,14 +100,12 @@
static size_t
writesymbols(FILE *fp)
{
- int type;
Symbol *sym;
size_t off = 0;
struct myrosym symbol;
for (sym = symlist; sym; sym = sym->next) {
- type = sym->flags & FTMASK;
- if (type == FREG || type == FSECT)
+ if (sym->flags & (FREG|FSECT))
continue;
symbol.name = sym->name.offset;
symbol.type = -1;
--- a/as/parser.c
+++ b/as/parser.c
@@ -84,7 +84,7 @@
tok2str();
yylval.sym = lookup(yytext);
- return ((yylval.sym->flags & FTMASK) == FREG) ? REG : IDEN;
+ return (yylval.sym->flags & FREG) ? REG : IDEN;
}
static int
--- a/as/symbol.c
+++ b/as/symbol.c
@@ -64,7 +64,7 @@
sym = xmalloc(sizeof(*sym));
sym->name = newstring(name);
- sym->flags = FNTYPE;
+ sym->flags = 0;
sym->size = sym->value = 0;
sym->section = cursec;
sym->hash = *list;
@@ -190,12 +190,10 @@
{
Section *sec;
Symbol *sym;
- int flags, type;
cursec = NULL;
sym = lookup(name);
- type = sym->flags & FTMASK;
- if (type != FNTYPE && type != FSECT)
+ if (sym->flags & ~FSECT)
error("invalid section name '%s'", name);
if ((sec = sym->section) == NULL) {