#pragma nodestruct var, names
This commit is contained in:
parent
35fa8d4485
commit
4dd38ffd82
@ -232,6 +232,7 @@ typedef struct s_symbol {
|
|||||||
#define uENUMFIELD 0x040
|
#define uENUMFIELD 0x040
|
||||||
#define uMISSING 0x080
|
#define uMISSING 0x080
|
||||||
#define uFORWARD 0x100
|
#define uFORWARD 0x100
|
||||||
|
#define uNODESTRUCT 0x200 /* "no destruct(or)", not "node struct" */
|
||||||
/* uRETNONE is not stored in the "usage" field of a symbol. It is
|
/* uRETNONE is not stored in the "usage" field of a symbol. It is
|
||||||
* used during parsing a function, to detect a mix of "return;" and
|
* used during parsing a function, to detect a mix of "return;" and
|
||||||
* "return value;" in a few special cases.
|
* "return value;" in a few special cases.
|
||||||
|
@ -4962,7 +4962,7 @@ static void destructsymbols(symbol *root,int level)
|
|||||||
int savepri=FALSE;
|
int savepri=FALSE;
|
||||||
symbol *sym=root->next;
|
symbol *sym=root->next;
|
||||||
while (sym!=NULL && sym->compound>=level) {
|
while (sym!=NULL && sym->compound>=level) {
|
||||||
if ((sym->ident==iVARIABLE || sym->ident==iARRAY) && !(sym->vclass==sSTATIC && sym->fnumber==-1)) {
|
if ((sym->ident==iVARIABLE || sym->ident==iARRAY) && !(sym->vclass==sSTATIC && sym->fnumber==-1) && !(sym->usage&uNODESTRUCT)) {
|
||||||
char symbolname[16];
|
char symbolname[16];
|
||||||
symbol *opsym;
|
symbol *opsym;
|
||||||
cell elements;
|
cell elements;
|
||||||
|
@ -1268,6 +1268,33 @@ static int command(void)
|
|||||||
if (comma)
|
if (comma)
|
||||||
lptr++;
|
lptr++;
|
||||||
} while (comma);
|
} while (comma);
|
||||||
|
} else if (strcmp(str,"nodestruct")==0) {
|
||||||
|
char name[sNAMEMAX+1];
|
||||||
|
int i,comma;
|
||||||
|
symbol *sym;
|
||||||
|
do {
|
||||||
|
/* get the name */
|
||||||
|
while (*lptr<=' ' && *lptr!='\0')
|
||||||
|
lptr++;
|
||||||
|
for (i=0; i<sizeof name && alphanum(*lptr); i++,lptr++)
|
||||||
|
name[i]=*lptr;
|
||||||
|
name[i]='\0';
|
||||||
|
/* get the symbol */
|
||||||
|
sym=findloc(name);
|
||||||
|
if (sym==NULL)
|
||||||
|
sym=findglb(name,sSTATEVAR);
|
||||||
|
if (sym!=NULL) {
|
||||||
|
sym->usage |= uNODESTRUCT;
|
||||||
|
} else {
|
||||||
|
error(17,name); /* undefined symbol */
|
||||||
|
} /* if */
|
||||||
|
/* see if a comma follows the name */
|
||||||
|
while (*lptr<=' ' && *lptr!='\0')
|
||||||
|
lptr++;
|
||||||
|
comma= (*lptr==',');
|
||||||
|
if (comma)
|
||||||
|
lptr++;
|
||||||
|
} while (comma);
|
||||||
} else if (strcmp(str,"naked")==0) {
|
} else if (strcmp(str,"naked")==0) {
|
||||||
pc_naked=TRUE;
|
pc_naked=TRUE;
|
||||||
} else if (strcmp(str,"warning")==0) {
|
} else if (strcmp(str,"warning")==0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user