/*Copyright (C) 1992, 1995 by Thomas Glen Smith. All Rights Reserved.*/
/* execqfxa APL2 V1.0.0 ************************************************
* Called from execqfx and apledit to allocate and initialize the *
* aplfunc structure for the function being fixed. Disposes of rite, *
* i.e. will free if necessary. *
***********************************************************************/
#define INCLUDES APLCB+APLFUNCI+APLMEM+APLTOKEN
#include "includes.h"
Aplfunc execqfxa(rite)
Aplcb rite;
{
Aplcopy; Endoper;
extern int aplerr;
Aplfunc fp;
if (NULL == (fp = malloc(sizeof(struct aplfunc))))
return(NULL); /* out of memory */
fp->funcsiqp = NULL;
fp->funcflag = APLFUNC;
fp->functype = 0;
fp->functotl = 0;
fp->funcstmt = 0;
fp->functokc = NULL;
fp->functext = NULL;
fp->funcname = NULL;
fp->functokp = NULL;
fp->functary = NULL;
fp->funcvars = NULL;
fp->funclabs = NULL;
if (rite == NULL) fp->functext = NULL;
else if (rite->aplflags & APLTEMP) {
rite->aplflags -= APLTEMP; /* mark as permanent */
fp->functext = rite;
}
else {
fp->functext = aplcopy(rite); /* copy permanent aplcb */
if (aplerr) {
endoper(rite);
free(fp); /* free memory for aplfunc */
fp = NULL; /* return a null pointer */
}
}
return(fp);
}