diff --git a/source/compiler/sc2.c b/source/compiler/sc2.c index 3398c59..e48db11 100644 --- a/source/compiler/sc2.c +++ b/source/compiler/sc2.c @@ -1238,9 +1238,13 @@ static int command(void) sc_tabsize=(int)val; } else if (strcmp(str,"align")==0) { sc_alignnext=TRUE; - } else if (strcmp(str,"unused")==0) { + } else if (strcmp(str,"unused")==0 || strcmp(str,"unread")==0 || strcmp(str,"unwritten")==0) { char name[sNAMEMAX+1]; int i,comma; + /* mark as read if the pragma wasn't `unwritten` */ + int read = str[2] == 'w' ? 0 : uREAD; + /* mark as written if the pragma wasn't `unread` */ + int write = str[2] == 'r' ? 0 : uWRITTEN; symbol *sym; do { /* get the name */ @@ -1254,10 +1258,11 @@ static int command(void) if (sym==NULL) sym=findglb(name,sSTATEVAR); if (sym!=NULL) { - sym->usage |= uREAD; + /* mark as read if the pragma wasn't `unwritten` */ + sym->usage |= read; if (sym->ident==iVARIABLE || sym->ident==iREFERENCE || sym->ident==iARRAY || sym->ident==iREFARRAY) - sym->usage |= uWRITTEN; + sym->usage |= write; } else { error(17,name); /* undefined symbol */ } /* if */