shithub: scc

Download patch

ref: b37b94ebe88c3c97036587d0b8dd12acaf16ada7
parent: 08ddb8968c1ad3297d0a91efa646ba828fca6afe
author: rain1@openmailbox.org <rain1@openmailbox.org>
date: Fri May 6 15:42:07 EDT 2016

[cc1] namespacing the flags. move bitfields in node to a flag.

--- a/cc1/cc1.h
+++ b/cc1/cc1.h
@@ -82,8 +82,7 @@
 	unsigned char op;
 	Type *type;
 	Symbol *sym;
-	bool lvalue : 1;
-	bool constant : 1;
+	char flags;
 	struct node *left, *right;
 };
 
@@ -163,22 +162,29 @@
 
 /* symbol flags */
 enum {
-	ISAUTO     =       1,
-	ISREGISTER =       2,
-	ISDECLARED =       4,
-	ISFIELD    =       8,
-	ISEXTERN   =      16,
-	ISUSED     =      32,
-	ISCONSTANT =      64,
-	ISGLOBAL   =     128,
-	ISPRIVATE  =     256,
-	ISLOCAL    =     512,
-	ISEMITTED  =    1024,
-	ISDEFINED  =    2048,
-	ISSTRING   =    4096,
-	ISTYPEDEF  =    8192,
-	ISINITLST  =   16384,
-	HASINIT    =   32768
+	SAUTO     =       1,
+	SREGISTER =       2,
+	SDECLARED =       4,
+	SFIELD    =       8,
+	SEXTERN   =      16,
+	SUSED     =      32,
+	SCONSTANT =      64,
+	SGLOBAL   =     128,
+	SPRIVATE  =     256,
+	SLOCAL    =     512,
+	SEMITTED  =    1024,
+	SDEFINED  =    2048,
+	SSTRING   =    4096,
+	STYPEDEF  =    8192,
+	SINITLST  =   16384,
+	SHASINIT  =   32768
+};
+
+/* node flags */
+enum {
+	NLVAL   = 1,
+	NCONST  = 2,
+	NEFFECT = 4
 };
 
 /* lexer mode, compiler or preprocessor directive */
--- a/cc1/code.c
+++ b/cc1/code.c
@@ -168,17 +168,17 @@
 	char c;
 	short flags = sym->flags;
 
-	if (flags & ISLOCAL)
+	if (flags & SLOCAL)
 		c = 'T';
-	else if (flags & ISPRIVATE)
+	else if (flags & SPRIVATE)
 		c =  'Y';
-	else if (flags & ISGLOBAL)
+	else if (flags & SGLOBAL)
 		c = 'G';
-	else if (flags & ISREGISTER)
+	else if (flags & SREGISTER)
 		c = 'R';
-	else if (flags & ISFIELD)
+	else if (flags & SFIELD)
 		c = 'M';
-	else if (flags & ISEXTERN)
+	else if (flags & SEXTERN)
 		c = 'X';
 	else
 		c = 'A';
@@ -213,7 +213,7 @@
 {
 	Node *np = arg;
 
-	if ((np->sym->flags & ISINITLST) == 0) {
+	if ((np->sym->flags & SINITLST) == 0) {
 		/*
 		 * When we have a compound literal we are going
 		 * to call to emitnode for every element of it,
@@ -222,7 +222,7 @@
 		 */
 		putchar('\t');
 	}
-	(np->constant) ? emitconst(np) : emitvar(np->sym);
+	(np->flags & NCONST) ? emitconst(np) : emitvar(np->sym);
 }
 
 static void
@@ -324,11 +324,11 @@
 		if (!np->sym)
 			goto emit_expression;
 		sym = np->sym;
-		if (sym->flags & ISSTRING) {
+		if (sym->flags & SSTRING) {
 			emitstring(sym, tp);
 			return;
 		}
-		if ((sym->flags & ISINITLST) == 0)
+		if ((sym->flags & SINITLST) == 0)
 			goto emit_expression;
 	}
 
@@ -378,7 +378,7 @@
 {
 	Symbol *sym = arg;
 
-	if (sym->flags & ISEMITTED)
+	if (sym->flags & SEMITTED)
 		return;
 	emittype(sym->type);
 	emitvar(sym);
@@ -389,10 +389,10 @@
 	}
 	emitletter(sym->type);
 	printf("\t\"%s", (sym->name) ? sym->name : "");
-	if (sym->flags & ISFIELD)
+	if (sym->flags & SFIELD)
 		printf("\t#%c%llX", sizettype->letter, sym->u.i);
-	sym->flags |= ISEMITTED;
-	if ((sym->flags & HASINIT) == 0)
+	sym->flags |= SEMITTED;
+	if ((sym->flags & SHASINIT) == 0)
 		putchar('\n');
 }
 
@@ -467,7 +467,7 @@
 	np->op = op;
 	np->type = tp;
 	np->sym = NULL;
-	np->constant = np->lvalue = 0;
+	np->flags = 0;
 	np->left = lp;
 	np->right = rp;
 
@@ -482,8 +482,7 @@
 
 	np = node(OSYM, sym->type, NULL, NULL);
 	np->type = sym->type;
-	np->lvalue = tp->op != FTN && tp->op != ARY;
-	np->constant = 0;
+	np->flags = (tp->op != FTN && tp->op != ARY) ? NLVAL : 0;
 	np->sym = sym;
 	return np;
 }
@@ -495,7 +494,7 @@
 
 	np = node(OSYM, sym->type, NULL, NULL);
 	np->type = sym->type;
-	np->constant = 1;
+	np->flags = NCONST;
 	np->sym = sym;
 	return np;
 }
--- a/cc1/cpp.c
+++ b/cc1/cpp.c
@@ -93,7 +93,7 @@
 		error("argument overflow invoking macro \"%s\"",
 		      macroname);
 	if (yytoken == IDEN)
-		yylval.sym->flags |= ISUSED;
+		yylval.sym->flags |= SUSED;
 	memcpy(argp, yytext, yylen);
 	argp += yylen;
 	*argp++ = ' ';
@@ -235,7 +235,7 @@
 	char *arglist[NR_MACROARG], arguments[INPUTSIZ], buffer[BUFSIZE];
 
 	macroname = sym->name;
-	if ((sym->flags & ISDECLARED) == 0) {
+	if ((sym->flags & SDECLARED) == 0) {
 		if (namespace == NS_CPP && !strcmp(sym->name, "defined"))
 			return 0;  /* we found a 'defined in an #if */
 		/*
@@ -283,7 +283,7 @@
 
 	input->p = input->begin = begin;
 
-	if (!(sym->flags & ISDECLARED))
+	if (!(sym->flags & SDECLARED))
 		killsym(sym);
 
 	return 1;
@@ -312,7 +312,7 @@
 			return NR_MACROARG;
 		}
 		sym = install(NS_IDEN, yylval.sym);
-		sym->flags |= ISUSED;
+		sym->flags |= SUSED;
 		args[n++] = sym;
 		next();
 	} while (accept(','));
@@ -390,12 +390,12 @@
 		return;
 	}
 	sym = yylval.sym;
-	if (sym->flags & ISDECLARED) {
+	if (sym->flags & SDECLARED) {
 		warn("'%s' redefined", yytext);
 		free(sym->u.s);
 	} else {
 		sym = install(NS_CPP, sym);
-		sym->flags |= ISDECLARED|ISSTRING;
+		sym->flags |= SDECLARED|SSTRING;
 	}
 
 	namespace = NS_IDEN;       /* Avoid polution in NS_CPP */
@@ -583,7 +583,7 @@
 		}
 		sym = yylval.sym;
 		next();
-		status = (sym->flags & ISDECLARED) != 0;
+		status = (sym->flags & SDECLARED) != 0;
 		if (!status)
 			killsym(sym);
 	} else {
--- a/cc1/decl.c
+++ b/cc1/decl.c
@@ -151,10 +151,10 @@
 		errorp("bad storage class in function parameter");
 		break;
 	case REGISTER:
-		flags |= ISREGISTER;
+		flags |= SREGISTER;
 		break;
 	case NOSCLASS:
-		flags |= ISAUTO;
+		flags |= SAUTO;
 		break;
 	}
 
@@ -191,7 +191,7 @@
 	}
 
 	sym->type = tp;
-	sym->flags &= ~(ISAUTO|ISREGISTER);
+	sym->flags &= ~(SAUTO|SREGISTER);
 	sym->flags |= flags;
 	return sym;
 }
@@ -213,7 +213,7 @@
 			sym = yylval.sym;
 			expect(IDEN);
 			sym->type = inttype;
-			sym->flags |= ISAUTO;
+			sym->flags |= SAUTO;
 			if ((sym = install(NS_IDEN, sym)) == NULL) {
 				errorp("redefinition of parameter '%s'",
 				       yylval.sym->name);
@@ -470,7 +470,7 @@
 	case IDEN:
 	case TYPEIDEN:
 		sym = yylval.sym;
-		if ((sym->flags & ISDECLARED) == 0)
+		if ((sym->flags & SDECLARED) == 0)
 			install(NS_TAG, yylval.sym);
 		namespace = NS_IDEN;
 		next();
@@ -581,7 +581,7 @@
 			       yytext);
 		} else {
 			sym->u.i = val;
-			sym->flags |= ISCONSTANT;
+			sym->flags |= SCONSTANT;
 			sym->type = inttype;
 		}
 		if (!accept(','))
@@ -638,7 +638,7 @@
 		error("duplicated member '%s'", name);
 	sym->type = tp;
 
-	sym->flags |= ISFIELD;
+	sym->flags |= SFIELD;
 	if (n == NR_FIELDS)
 		error("too much fields in struct/union");
 	DBG("New field '%s' in namespace %d\n", name, structp->ns);
@@ -675,7 +675,7 @@
 	}
 	if (curctx != GLOBALCTX && tp->op != FTN) {
 		/* is it the redeclaration of a local variable? */
-		if ((sym->flags & ISEXTERN) && sclass == EXTERN)
+		if ((sym->flags & SEXTERN) && sclass == EXTERN)
 			return sym;
 		goto redeclaration;
 	}
@@ -689,9 +689,9 @@
 		bad_storage(tp, name);
 		break;
 	case NOSCLASS:
-		if ((flags & ISPRIVATE) == 0) {
-			flags &= ~ISEXTERN;
-			flags |= ISGLOBAL;
+		if ((flags & SPRIVATE) == 0) {
+			flags &= ~SEXTERN;
+			flags |= SGLOBAL;
 			break;
 		}
 		errorp("non-static declaration of '%s' follows static declaration",
@@ -701,8 +701,8 @@
 	case EXTERN:
 		break;
 	case STATIC:
-		if ((flags & (ISGLOBAL|ISEXTERN)) == 0) {
-			flags |= ISPRIVATE;
+		if ((flags & (SGLOBAL|SEXTERN)) == 0) {
+			flags |= SPRIVATE;
 			break;
 		}
 		errorp("static declaration of '%s' follows non-static declaration",
@@ -766,24 +766,24 @@
 		case REGISTER:
 		case AUTO:
 			if (curctx != GLOBALCTX && tp->op != FTN) {
-				flags |= (sclass == REGISTER) ? ISREGISTER : ISAUTO;
+				flags |= (sclass == REGISTER) ? SREGISTER : SAUTO;
 				break;
 			}
 			bad_storage(tp, name);
 		case NOSCLASS:
 			if (tp->op == FTN)
-				flags |= ISEXTERN;
+				flags |= SEXTERN;
 			else
-				flags |= (curctx == GLOBALCTX) ? ISGLOBAL : ISAUTO;
+				flags |= (curctx == GLOBALCTX) ? SGLOBAL : SAUTO;
 			break;
 		case EXTERN:
-			flags |= ISEXTERN;
+			flags |= SEXTERN;
 			break;
 		case STATIC:
-			flags |= (curctx == GLOBALCTX) ? ISPRIVATE : ISLOCAL;
+			flags |= (curctx == GLOBALCTX) ? SPRIVATE : SLOCAL;
 			break;
 		case TYPEDEF:
-			flags |= ISTYPEDEF;
+			flags |= STYPEDEF;
 			sym->u.token = sym->token = TYPEIDEN;
 			break;
 		}
@@ -792,8 +792,8 @@
 
 	if (accept('='))
 		initializer(sym, sym->type);
-	if (!(sym->flags & (ISGLOBAL|ISEXTERN)) && tp->op != FTN)
-		sym->flags |= ISDEFINED;
+	if (!(sym->flags & (SGLOBAL|SEXTERN)) && tp->op != FTN)
+		sym->flags |= SDEFINED;
 	if (sym->token == IDEN && sym->type->op != FTN)
 		emit(ODECL, sym);
 	return sym;
@@ -852,7 +852,7 @@
 		 * avoid non used warnings in prototypes
 		 */
 		for (p = sym->u.pars;  p && *p; ++p)
-			(*p)->flags |= ISUSED;
+			(*p)->flags |= SUSED;
 		popctx();
 		expect(';');
 		free(sym->u.pars);
@@ -867,17 +867,17 @@
 		}
 	}
 
-	if (sym->flags & ISTYPEDEF)
+	if (sym->flags & STYPEDEF)
 		errorp("function definition declared 'typedef'");
-	if (sym->flags & ISDEFINED)
+	if (sym->flags & SDEFINED)
 		errorp("redefinition of '%s'", sym->name);
-	if (sym->flags & ISEXTERN) {
-		sym->flags &= ~ISEXTERN;
-		sym->flags |= ISGLOBAL;
+	if (sym->flags & SEXTERN) {
+		sym->flags &= ~SEXTERN;
+		sym->flags |= SGLOBAL;
 	}
 
-	sym->flags |= ISDEFINED;
-	sym->flags &= ~ISEMITTED;
+	sym->flags |= SDEFINED;
+	sym->flags &= ~SEMITTED;
 	emit(OFUN, sym);
 	compound(NULL, NULL, NULL);
 	emit(OEFUN, NULL);
--- a/cc1/expr.c
+++ b/cc1/expr.c
@@ -18,7 +18,7 @@
 	Type *tp;
 	TUINT mask, nodeval;
 
-	if (!np || !np->constant || !np->sym)
+	if (!np || !(np->flags & NCONST) || !np->sym)
 		return 0;
 	sym = np->sym;
 	tp = sym->type;
@@ -130,7 +130,7 @@
 static int
 null(Node *np)
 {
-	if (!np->constant || np->type != pvoidtype)
+	if (!np->flags & NCONST || np->type != pvoidtype)
 		return 0;
 	return cmpnode(np, 0);
 }
@@ -191,7 +191,7 @@
 static void
 chklvalue(Node *np)
 {
-	if (!np->lvalue)
+	if (!(np->flags & NLVAL))
 		errorp("lvalue required in operation");
 	if (np->type == voidtype)
 		errorp("invalid use of void expression");
@@ -214,8 +214,8 @@
 		}
 	case FTN:
 		new = node(OADDR, mktype(tp, PTR, 0, NULL), np, NULL);
-		if (np->sym && np->sym->flags & (ISGLOBAL|ISLOCAL|ISPRIVATE))
-			new->constant = 1;
+		if (np->sym && np->sym->flags & (SGLOBAL|SLOCAL|SPRIVATE))
+			new->flags |= NCONST;
 		return new;
 	default:
 		return np;
@@ -462,12 +462,12 @@
 		      yylval.sym->name);
 		goto free_np;
 	}
-	if ((sym->flags & ISDECLARED) == 0) {
+	if ((sym->flags & SDECLARED) == 0) {
 		errorp("incorrect field in struct/union");
 		goto free_np;
 	}
 	np = node(OFIELD, sym->type, np, varnode(sym));
-	np->lvalue = 1;
+	np->flags |= NLVAL;
 	return np;
 
 free_np:
@@ -491,7 +491,7 @@
 		} else {
 			np = node(op, np->type->type, np, NULL);
 		}
-		np->lvalue = 1;
+		np->flags |= NLVAL;
 		return np;
 	default:
 		error("invalid argument of memory indirection");
@@ -553,7 +553,7 @@
 
 	if (BTYPE(np) != FTN) {
 		chklvalue(np);
-		if (np->sym && (np->sym->flags & ISREGISTER))
+		if (np->sym && (np->sym->flags & SREGISTER))
 			errorp("address of register variable '%s' requested", yytext);
 		if (np->op == OPTR) {
 			Node *new = np->left;
@@ -563,8 +563,8 @@
 	}
 	new = node(op, mktype(np->type, PTR, 0, NULL), np, NULL);
 
-	if (np->sym && np->sym->flags & (ISGLOBAL|ISLOCAL|ISPRIVATE))
-		new->constant = 1;
+	if (np->sym && np->sym->flags & (SGLOBAL|SLOCAL|SPRIVATE))
+		new->flags |= NCONST;
 	return new;
 }
 
@@ -593,10 +593,10 @@
 		expect(IDEN);
 		expect(')');
 
-		isdef = (sym->flags & ISDECLARED) != 0;
+		isdef = (sym->flags & SDECLARED) != 0;
 		sym = newsym(NS_IDEN);
 		sym->type = inttype;
-		sym->flags |= ISCONSTANT;
+		sym->flags |= SCONSTANT;
 		sym->u.i = isdef;
 		disexpand = 0;
 		return sym;
@@ -619,7 +619,7 @@
 	switch (yytoken) {
 	case STRING:
 		np = constnode(sym);
-		sym->flags |= HASINIT;
+		sym->flags |= SHASINIT;
 		emit(ODECL, sym);
 		emit(OINIT, np);
 		np = decay(varnode(sym));
@@ -630,13 +630,13 @@
 		next();
 		break;
 	case IDEN:
-		if ((sym->flags & ISDECLARED) == 0)
+		if ((sym->flags & SDECLARED) == 0)
 			sym = notdefined(sym);
-		if (sym->flags & ISCONSTANT) {
+		if (sym->flags & SCONSTANT) {
 			np = constnode(sym);
 			break;
 		}
-		sym->flags |= ISUSED;
+		sym->flags |= SUSED;
 		np = varnode(sym);
 		next();
 		break;
@@ -840,7 +840,8 @@
 			lp = cast();
 			if ((rp = convert(lp,  tp, 1)) == NULL)
 				error("bad type convertion requested");
-			rp->lvalue = lp->lvalue;
+			rp->flags &= ~NLVAL;
+			rp->flags |= lp->flags & NLVAL;
 		}
 		break;
 	default:
@@ -1058,7 +1059,7 @@
 	Node *np;
 
 	np = ternary();
-	if (!np->constant) {
+	if (!(np->flags & NCONST)) {
 		freetree(np);
 		return NULL;
 	}
@@ -1101,7 +1102,7 @@
 	Node *np;
 
 	np = exp2cond(expr(), 0);
-	if (np->constant)
+	if (np->flags & NCONST)
 		warn("conditional expression is constant");
 	return np;
 }
--- a/cc1/fold.c
+++ b/cc1/fold.c
@@ -324,8 +324,8 @@
 	 * (when we don't know the physical address so
 	 * we cannot fold it)
 	 */
-	if (!lp->constant || !lp->sym ||
-	    rp && (!rp->constant || !rp->sym)) {
+	if (!(lp->flags & NCONST) || !lp->sym ||
+	    rp && (!(rp->flags & NCONST) || !rp->sym)) {
 		return NULL;
 	}
 	optype = lp->type;
@@ -355,7 +355,7 @@
 {
 	Node *l = *lp, *r = *rp, *aux;
 
-	if (r == NULL || r->constant || !l->constant)
+	if (r == NULL || r->flags & NCONST || !(l->flags & NCONST))
 		return;
 
 	switch (*op) {
@@ -391,10 +391,10 @@
 
 	iszeror = cmpnode(rp, 0);
 	isoner = cmpnode(rp, 1),
-	istruer = !iszeror && rp->constant;
+	istruer = !iszeror && rp->flags & NCONST;
 	iszerol = cmpnode(lp, 0);
 	isonel = cmpnode(lp, 1),
-	istruel = !iszerol && lp->constant;
+	istruel = !iszerol && lp->flags & NCONST;
 
 	switch (*op) {
 	case OOR:
@@ -495,7 +495,7 @@
 {
 	Node *np;
 
-	if (!cond->constant)
+	if (!(cond->flags & NCONST))
 		return node(op, tp, cond, body);
 	if (cmpnode(cond, 0)) {
 		np = body->right;
@@ -538,7 +538,7 @@
 	Type *oldtp = np->type;
 	Symbol aux, *sym, *osym = np->sym;
 
-	if (!np->constant)
+	if (!(np->flags & NCONST))
 		goto noconstant;
 
 	switch (newtp->op) {
--- a/cc1/init.c
+++ b/cc1/init.c
@@ -65,7 +65,7 @@
 	if (yytoken != IDEN)
 		unexpected();
 	sym = yylval.sym;
-	if ((sym->flags & ISDECLARED) == 0) {
+	if ((sym->flags & SDECLARED) == 0) {
 		errorp(" unknown field '%s' specified in initializer",
 		      sym->name);
 		return 0;
@@ -175,7 +175,7 @@
 	sym = newsym(NS_IDEN);
 	sym->u.init = v;
 	sym->type = ip->type;
-	sym->flags |= ISINITLST;
+	sym->flags |= SINITLST;
 
 	return constnode(sym);
 }
@@ -300,21 +300,21 @@
 	}
 	np = initialize(tp);
 
-	if (flags & ISDEFINED) {
+	if (flags & SDEFINED) {
 		errorp("redeclaration of '%s'", sym->name);
-	} else if ((flags & (ISGLOBAL|ISLOCAL|ISPRIVATE)) != 0) {
-		if (!np->constant) {
+	} else if ((flags & (SGLOBAL|SLOCAL|SPRIVATE)) != 0) {
+		if (!(np->flags & NCONST)) {
 			errorp("initializer element is not constant");
 			return;
 		}
-		sym->flags |= HASINIT;
-		sym->flags &= ~ISEMITTED;
+		sym->flags |= SHASINIT;
+		sym->flags &= ~SEMITTED;
 		emit(ODECL, sym);
 		emit(OINIT, np);
-		sym->flags |= ISDEFINED;
-	} else if ((flags & (ISEXTERN|ISTYPEDEF)) != 0) {
+		sym->flags |= SDEFINED;
+	} else if ((flags & (SEXTERN|STYPEDEF)) != 0) {
 		errorp("'%s' has both '%s' and initializer",
-		       sym->name, (flags&ISEXTERN) ? "extern" : "typedef");
+		       sym->name, (flags&SEXTERN) ? "extern" : "typedef");
 	} else {
 		emit(ODECL, sym);
 		np = node(OASSIGN, tp, varnode(sym), np);
--- a/cc1/lex.c
+++ b/cc1/lex.c
@@ -341,7 +341,7 @@
 	tp = ctype(INT, sign, size);
 	sym = newsym(NS_IDEN);
 	sym->type = tp;
-	sym->flags |= ISCONSTANT;
+	sym->flags |= SCONSTANT;
 	yylval.sym = readint(s, base, sign, sym);
 	return CONSTANT;
 }
@@ -513,7 +513,7 @@
 			sym = nextsym(sym, namespace);
 	}
 	yylval.sym = sym;
-	if (sym->flags & ISCONSTANT)
+	if (sym->flags & SCONSTANT)
 		return CONSTANT;
 	if (sym->token != IDEN)
 		yylval.token = sym->u.token;
--- a/cc1/stmt.c
+++ b/cc1/stmt.c
@@ -21,11 +21,11 @@
 	case IDEN:
 	case TYPEIDEN:
 		sym = lookup(NS_LABEL, yytext);
-		if (sym->flags & ISDEFINED)
+		if (sym->flags & SDEFINED)
 			error("label '%s' already defined", yytext);
-		if ((sym->flags & ISDECLARED) == 0)
+		if ((sym->flags & SDECLARED) == 0)
 			sym = install(NS_LABEL, sym);
-		sym->flags |= ISDEFINED;
+		sym->flags |= SDEFINED;
 		emit(OLABEL, sym);
 		next();
 		expect(':');
@@ -195,9 +195,9 @@
 	if (yytoken != IDEN)
 		unexpected();
 	sym = yylval.sym;
-	if ((sym->flags & ISDECLARED) == 0)
+	if ((sym->flags & SDECLARED) == 0)
 		sym = install(NS_LABEL, sym);
-	sym->flags |= ISUSED;
+	sym->flags |= SUSED;
 	emit(OJUMP, sym);
 	next();
 	expect(';');
--- a/cc1/symbol.c
+++ b/cc1/symbol.c
@@ -58,7 +58,7 @@
 {
 	Symbol **h, *p, *prev;
 
-	if ((sym->flags & ISDECLARED) == 0)
+	if ((sym->flags & SDECLARED) == 0)
 		return;
 	h = &htab[hash(sym->name)];
 	for (prev = p = *h; p != sym; prev = p, p = p->hash)
@@ -83,15 +83,15 @@
 	char *name;
 
 	f = sym->flags;
-	if (f & ISSTRING)
+	if (f & SSTRING)
 		free(sym->u.s);
 	if (sym->ns == NS_TAG)
 		sym->type->defined = 0;
 	unlinkhash(sym);
 	if ((name = sym->name) != NULL && sym->ns != NS_CPP) {
-		if ((f & (ISUSED|ISGLOBAL|ISDECLARED)) == ISDECLARED)
+		if ((f & (SUSED|SGLOBAL|SDECLARED)) == SDECLARED)
 			warn("'%s' defined but not used", name);
-		if ((f & ISDEFINED) == 0 && sym->ns == NS_LABEL)
+		if ((f & SDEFINED) == 0 && sym->ns == NS_LABEL)
 			errorp("label '%s' is not defined", name);
 	}
 	free(name);
@@ -216,7 +216,7 @@
 
 	if (sym->ns != NS_CPP)
 		sym->id = newid();
-	sym->flags |= ISDECLARED;
+	sym->flags |= SDECLARED;
 	return linksym(sym);
 }
 
@@ -232,7 +232,7 @@
 	Symbol *sym = newsym(NS_IDEN);
 
 	sym->id = newid();
-	sym->flags |= ISSTRING | ISCONSTANT | ISPRIVATE;
+	sym->flags |= SSTRING | SCONSTANT | SPRIVATE;
 	sym->u.s = xmalloc(len);
 	if (s)
 		memcpy(sym->u.s, s, len);
@@ -276,7 +276,7 @@
 		if (ns == NS_CPP)
 			continue;
 		if (sns == NS_KEYWORD ||
-		    (sym->flags & ISTYPEDEF) && ns >= NS_STRUCTS) {
+		    (sym->flags & STYPEDEF) && ns >= NS_STRUCTS) {
 			return sym;
 		}
 	}
@@ -308,7 +308,7 @@
 Symbol *
 install(int ns, Symbol *sym)
 {
-	if (sym->flags & ISDECLARED) {
+	if (sym->flags & SDECLARED) {
 		if (sym->ctx == curctx && ns == sym->ns)
 			return NULL;
 		sym = allocsym(ns, sym->name);
--