variable length names

This commit is contained in:
ceriel 1987-04-09 14:15:25 +00:00
parent 9ff877dce5
commit 5fbe427853
5 changed files with 23 additions and 23 deletions

View file

@ -386,7 +386,7 @@ enmd_pro() {
limit = &mprocs[oursize->n_mproc]; limit = &mprocs[oursize->n_mproc];
for (p=mprocs; p<limit; p++) { for (p=mprocs; p<limit; p++) {
if (p->p_name[0] == 0) if (p->p_name == 0)
continue; continue;
if ((p->p_status&DEF)==0) if ((p->p_status&DEF)==0)
error("undefined local procedure '%s'",p->p_name); error("undefined local procedure '%s'",p->p_name);
@ -421,7 +421,7 @@ enmd_glo() {
limit = &mglobs[oursize->n_mlab]; limit = &mglobs[oursize->n_mlab];
for ( mg = mglobs; mg < limit; mg++) { for ( mg = mglobs; mg < limit; mg++) {
if (mg->g_name[0] == 0) if (mg->g_name == 0)
continue; continue;
if ((mg->g_status&(EXT|DEF))==0) if ((mg->g_status&(EXT|DEF))==0)
error("undefined local symbol '%s'",glostring(mg)); error("undefined local symbol '%s'",glostring(mg));
@ -511,12 +511,12 @@ check_def() {
printf("Unresolved references\n Procedures:\n"); printf("Unresolved references\n Procedures:\n");
count = oursize->n_xproc; count = oursize->n_xproc;
for (p = xprocs; count--; p++) for (p = xprocs; count--; p++)
if (p->p_name[0] && (p->p_status&DEF)==0) if (p->p_name && (p->p_status&DEF)==0)
printf(" %s\n",p->p_name); printf(" %s\n",p->p_name);
printf(" Data:\n"); printf(" Data:\n");
count = oursize->n_glab; count = oursize->n_glab;
for (g = xglobs; count--; g++) for (g = xglobs; count--; g++)
if (g->g_name[0] && (g->g_status&DEF)==0) if (g->g_name && (g->g_status&DEF)==0)
printf(" %s\n",glostring(g)); printf(" %s\n",glostring(g));
} }
} }

View file

@ -112,7 +112,6 @@ typedef union {
#define TRUE 1 #define TRUE 1
#define FALSE 0 #define FALSE 0
#define IDLENGTH 8 /* length of glo's and pro's */
#define MAXSTRING 200 /* Maximum string length accepted */ #define MAXSTRING 200 /* Maximum string length accepted */
#define LOCLABSIZE 128 /* size of local label hash table */ #define LOCLABSIZE 128 /* size of local label hash table */
/* may not be smaller */ /* may not be smaller */
@ -169,7 +168,7 @@ struct loc_label {
#define NOTPRESENT 4 /* Undefined and error message given */ #define NOTPRESENT 4 /* Undefined and error message given */
struct glob_label { struct glob_label {
char g_name[IDLENGTH+1]; /* name + null-byte */ char *g_name;
char g_status; /* see below */ char g_status; /* see below */
union { union {
cons_t g_addr; /* value if status&DEF */ cons_t g_addr; /* value if status&DEF */
@ -241,7 +240,7 @@ struct sizes {
}; };
struct procs { /* format of mprocs[] and xprocs[] */ struct procs { /* format of mprocs[] and xprocs[] */
char p_name[IDLENGTH+1]; /* name + 1 null-byte */ char *p_name;
char p_status; /* same bits as g_status except REL */ char p_status; /* same bits as g_status except REL */
int p_num; /* unique procedure descriptor */ int p_num; /* unique procedure descriptor */
}; };

View file

@ -138,7 +138,7 @@ if ( ( (n==0 || n>=100) && d_flag) || (n<=1 && d_flag>=2) ) {
printf("\n\t%8.8s %8.8s %8.8s\n", printf("\n\t%8.8s %8.8s %8.8s\n",
"g_name","g_status","g_addr"); "g_name","g_status","g_addr");
for (gb = xglobs,i = 0;gb < &xglobs[oursize->n_glab]; gb++, i++) for (gb = xglobs,i = 0;gb < &xglobs[oursize->n_glab]; gb++, i++)
if (gb->g_name[0] != 0) { if (gb->g_name != 0) {
printf("%5d\t%8.6s",i,gb->g_name); printf("%5d\t%8.6s",i,gb->g_name);
printf(" %8o %8ld\n",gb->g_status,gb->g_val.g_addr); printf(" %8o %8ld\n",gb->g_status,gb->g_val.g_addr);
} }
@ -146,7 +146,7 @@ if ( ( (n==0 || n>=100) && d_flag) || (n<=1 && d_flag>=2) ) {
printf("\n\t%8.8s%8s%8s\t%8s%8s\n", printf("\n\t%8.8s%8s%8s\t%8s%8s\n",
"name","status","num","off","locals"); "name","status","num","off","locals");
for (pl=mprocs;pl< &mprocs[oursize->n_mproc]; pl++) for (pl=mprocs;pl< &mprocs[oursize->n_mproc]; pl++)
if (pl->p_name[0]) { if (pl->p_name) {
printf("%4d\t%-8s%8o%8d", printf("%4d\t%-8s%8o%8d",
pl-mprocs,pl->p_name,pl->p_status,pl->p_num); pl-mprocs,pl->p_name,pl->p_status,pl->p_num);
if (pl->p_status&DEF) if (pl->p_status&DEF)
@ -158,7 +158,7 @@ if ( ( (n==0 || n>=100) && d_flag) || (n<=1 && d_flag>=2) ) {
printf("\n\t%8s%8s%8s\t%8s%8s\n", printf("\n\t%8s%8s%8s\t%8s%8s\n",
"name","status","num","off","locals"); "name","status","num","off","locals");
for (pl=xprocs;pl< &xprocs[oursize->n_xproc]; pl++) for (pl=xprocs;pl< &xprocs[oursize->n_xproc]; pl++)
if (pl->p_name[0]) { if (pl->p_name) {
printf("%4d\t%-8s%8o%8d", printf("%4d\t%-8s%8o%8d",
pl-xprocs,pl->p_name,pl->p_status,pl->p_num); pl-xprocs,pl->p_name,pl->p_status,pl->p_num);
if (pl->p_status&DEF) if (pl->p_status&DEF)

View file

@ -96,20 +96,21 @@ int size; /* size for hash */
rem = glohash(name,size); rem = glohash(name,size);
j = 0; new=0; j = 0; new=0;
g = &table[rem]; g = &table[rem];
while (g->g_name[0] != 0 && strcmp(name,g->g_name) != 0) { while (g->g_name != 0 && strcmp(name,g->g_name) != 0) {
j++; j++;
if (j>size) if (j>size)
fatal("global label table overflow"); fatal("global label table overflow");
rem = (rem + globstep) % size; rem = (rem + globstep) % size;
g = &table[rem]; g = &table[rem];
} }
if (g->g_name[0] == 0) { if (g->g_name == 0) {
/* /*
* This symbol is shining new. * This symbol is shining new.
* Enter it in table except for status = SEARCHING * Enter it in table except for status = SEARCHING
*/ */
if (status == SEARCHING) if (status == SEARCHING)
return(0); return(0);
g->g_name = (char *) getarea((unsigned) (strlen(name) + 1));
strcpy(g->g_name,name); strcpy(g->g_name,name);
g->g_status = 0; g->g_status = 0;
g->g_val.g_addr=0; g->g_val.g_addr=0;
@ -211,12 +212,12 @@ proc_t *prolookup(name,status) char *name; {
switch(status) { switch(status) {
case PRO_OCC: case PRO_OCC:
p = searchproc(name,mprocs,oursize->n_mproc); p = searchproc(name,mprocs,oursize->n_mproc);
if (p->p_name[0]) { if (p->p_name) {
p->p_status |= OCC; p->p_status |= OCC;
return(p); return(p);
} }
p = searchproc(name,xprocs,oursize->n_xproc); p = searchproc(name,xprocs,oursize->n_xproc);
if (p->p_name[0]) { if (p->p_name) {
p->p_status |= OCC; p->p_status |= OCC;
return(p); return(p);
} }
@ -225,20 +226,20 @@ proc_t *prolookup(name,status) char *name; {
break; break;
case PRO_INT: case PRO_INT:
p = searchproc(name,xprocs,oursize->n_xproc); p = searchproc(name,xprocs,oursize->n_xproc);
if (p->p_name[0] && (p->p_status&EXT) ) if (p->p_name && (p->p_status&EXT) )
error("pro '%s' conflicting use",name); error("pro '%s' conflicting use",name);
p = searchproc(name,mprocs,oursize->n_mproc); p = searchproc(name,mprocs,oursize->n_mproc);
if (p->p_name[0]) if (p->p_name)
werror("INP must be first occurrence of '%s'",name); werror("INP must be first occurrence of '%s'",name);
pstat = 0; pstat = 0;
break; break;
case PRO_EXT: case PRO_EXT:
p = searchproc(name,mprocs,oursize->n_mproc); p = searchproc(name,mprocs,oursize->n_mproc);
if (p->p_name[0]) if (p->p_name)
error("pro '%s' exists already localy",name); error("pro '%s' exists already localy",name);
p = searchproc(name,xprocs,oursize->n_xproc); p = searchproc(name,xprocs,oursize->n_xproc);
if (p->p_name[0]) { if (p->p_name) {
/* /*
* The If statement is removed to be friendly * The If statement is removed to be friendly
* to Backend writers having to deal with assemblers * to Backend writers having to deal with assemblers
@ -255,7 +256,7 @@ proc_t *prolookup(name,status) char *name; {
break; break;
case PRO_DEF: case PRO_DEF:
p = searchproc(name,xprocs,oursize->n_xproc); p = searchproc(name,xprocs,oursize->n_xproc);
if (p->p_name[0] && (p->p_status&EXT) ) { if (p->p_name && (p->p_status&EXT) ) {
if (p->p_status&DEF) if (p->p_status&DEF)
error("global pro '%s' redeclared",name); error("global pro '%s' redeclared",name);
else else
@ -264,7 +265,7 @@ proc_t *prolookup(name,status) char *name; {
return(p); return(p);
} else { } else {
p = searchproc(name,mprocs,oursize->n_mproc); p = searchproc(name,mprocs,oursize->n_mproc);
if (p->p_name[0]) { if (p->p_name) {
if (p->p_status&DEF) if (p->p_status&DEF)
error("local pro '%s' redeclared", error("local pro '%s' redeclared",
name); name);
@ -296,7 +297,7 @@ proc_t *searchproc(name,table,size)
rem = glohash(name,size); rem = glohash(name,size);
j = 0; j = 0;
p = &table[rem]; p = &table[rem];
while (p->p_name[0] != 0 && strcmp(name,p->p_name) != 0) { while (p->p_name != 0 && strcmp(name,p->p_name) != 0) {
j++; j++;
if (j>size) if (j>size)
fatal("procedure table overflow"); fatal("procedure table overflow");
@ -326,6 +327,7 @@ proc_t *place; {
*/ */
p=place; p=place;
p->p_name = (char *) getarea((unsigned) (strlen(name) + 1));
strcpy(p->p_name,name); strcpy(p->p_name,name);
p->p_status = status; p->p_status = status;
if (procnum>=oursize->n_proc) if (procnum>=oursize->n_proc)

View file

@ -198,7 +198,6 @@ getstring() {
inident() { inident() {
getstring(); getstring();
string[IDLENGTH] = '\0';
} }
char *inproname() { char *inproname() {
@ -220,7 +219,7 @@ int needed() {
break ; break ;
case sp_pnam : case sp_pnam :
p = searchproc(string,xprocs,oursize->n_xproc); p = searchproc(string,xprocs,oursize->n_xproc);
if (p->p_name[0]) { if (p->p_name) {
if ((p->p_status & DEF) != 0) if ((p->p_status & DEF) != 0)
continue ; continue ;
} else continue ; } else continue ;