/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/
/* execqfxi APL2 V1.0.0 ************************************************
* Called by execqfx and execqfxi to check for localized synonyms. *
***********************************************************************/
#define INCLUDES APLCB+APLFUNCI+APLMEM+APLTOKEN+STDIO+TREE
#include "includes.h"
void execqfxi(fp)
Aplfunc fp; /* Function definition structure. */
{
Aplclsub; Avladd; Avlsrch;
#include "quadext.h"
extern int aplerr;
Treelist mytree;
Apltoken tok;
Avlnode p;
char *nameptr;
/* First set up a local variable tree. */
mytree = malloc(sizeof(struct treelist));
mytree->treenext = NULL;
mytree->avlhdr = NULL;
/* Now search list of local variables */
for (tok = fp->funcvars; tok != NULL && aplerr == 0;
tok = tok->token_queue.token_next_ptr) {
switch (tok->token_code) {
case QUAD_CT: nameptr = quadct; break;
case QUAD_IO: nameptr = quadio; break;
default: nameptr = tok->token_ptr.token_string;
}
if (NULL != avlsrch(mytree->avlhdr,nameptr))
aplerr = 96; /* synonyms are bad */
else p = avladd(&(mytree->avlhdr),nameptr,NULL);
}
/* Now search list of local labels */
for (tok = fp->funclabs; tok != NULL && aplerr == 0;
tok = tok->token_queue.token_next_ptr) {
if (NULL != avlsrch(mytree->avlhdr,
tok->token_ptr.token_string))
aplerr = 97; /* synonyms are bad */
else p = avladd(&(mytree->avlhdr),
tok->token_ptr.token_string,NULL);
}
/* Now free up my local tree */
aplclsub(mytree->avlhdr);
free(mytree);
}