MostAlignedType * compStoreError(int errnum) { int stoerr; switch (errnum) { case StoErr_OutOfMemory: stoerr = ALDOR_F_StoOutOfMemory; break; case StoErr_UsedNonalloc: stoerr = ALDOR_F_StoUsedNonalloc; break; case StoErr_CantBuild: stoerr = ALDOR_F_StoCantBuild; break; case StoErr_FreeBad: stoerr = ALDOR_F_StoFreeBad; break; default: bugBadCase(errnum); NotReached(stoerr = 0); } if (comsgOkBreakLoop()) bloopMsgFPrintf(osStdout, stoerr); comsgFatal(NULL, stoerr); NotReached(return 0); }
FILE * compFileError(FileName fn, IOMode mode) { String name = fnameUnparseStatic(fn); if (comsgOkBreakLoop()) bloopMsgFPrintf(osStdout, ALDOR_F_CantOpenMode, name, mode); comsgFatal(NULL, ALDOR_F_CantOpenMode, name, mode); NotReached(return 0); }
/* * Compile files controlled by the argument vector and * return the total error count. */ int compFilesLoop(int argc, char **argv) { int i, iargc, totErrors, nErrors; FileName fn; Bool isSolo; compInit(); iargc = cmdArguments(1, argc, argv); argc -= iargc; argv += iargc; if (argc == 0) { if (comsgOkBreakLoop()) bloopMsgFPrintf(osStdout, ALDOR_W_NoFiles, cmdName); comsgWarning(NULL, ALDOR_W_NoFiles, cmdName); } emitDoneOptions(argc, argv); ccGetReady(); isSolo = (cmdFileCount == 1); compFinfov = (EmitInfo *) stoAlloc((unsigned) OB_Other, (cmdFileCount+1) * sizeof(EmitInfo)); for (i = 0; i <= cmdFileCount; i += 1) compFinfov[i] = 0; totErrors = 0; for (i = 0; i < cmdFileCount; i++) { fn = fnameParse(argv[i]); compFinfov[i] = emitInfoNew(fn); nErrors = 0; if (!fileIsReadable(fn)) { if (comsgOkBreakLoop()) bloopMsgFPrintf(osStdout, ALDOR_F_CantOpen, argv[i]); comsgFatal(NULL, ALDOR_F_CantOpen, argv[i]); } switch (ftypeNo(fnameType(fn))) { #if 0 case FTYPENO_C: nErrors = compCFile(compFinfov[i]); break; #endif case FTYPENO_OBJECT: case FTYPENO_AR_OBJ: case FTYPENO_AR_INT: break; case FTYPENO_FOAMEXPR: case FTYPENO_INTERMED: if (!isSolo) fprintf(osStdout, "\n%s:\n", argv[i]); nErrors = compSavedFile(compFinfov[i]); break; default: if (!ftypeEqual(fnameType(fn), "")) { if (comsgOkBreakLoop()) bloopMsgFPrintf(osStdout, ALDOR_F_BadFType, argv[i], fnameType(fn), FTYPE_SRC); comsgFatal(NULL, ALDOR_F_BadFType, argv[i], fnameType(fn), FTYPE_SRC); } /* Fall through. */ case FTYPENO_NONE: case FTYPENO_SRC: case FTYPENO_INCLUDED: case FTYPENO_ABSYN: case FTYPENO_OLDABSYN: if (!isSolo) fprintf(osStdout, "\n%s:\n", argv[i]); nErrors = compSourceFile(compFinfov[i]); break; } totErrors += nErrors; fnameFree(fn); } if (cmdFileCount > 0 && totErrors == 0) { compFinfov[cmdFileCount] = emitInfoNewAXLmain(); compAXLmainFile(compFinfov[cmdFileCount]); emitLink(cmdFileCount + 1, compFinfov); argc -= cmdFileCount; argv += cmdFileCount; emitInterp(argc, argv); emitRun (argc, argv); } if (totErrors > 0) emitAllDone(); for (i = 0; i < cmdFileCount + 1; i++) emitInfoFree(compFinfov[i]); stoFree((Pointer) compFinfov); compFinfov = 0; if (!isSolo) phGrandTotals(cmdVerboseFlag); compFini(); return totErrors; }
local SrcLineList inclFile(String fname, Bool reincluding, Bool top, long *pnlines) { Scope("inclFile"); SrcLineList sll; Hash fhash; FileName fn; FileState o_fileState; IfState fluid(ifState); String curdir; o_fileState = fileState; /* no fluid(struct) */ ifState = NoIf; fileState.lineNumber = 0; fn = inclFind(fname, fileState.curDir); if (fn != 0) { fileState.curDir = strCopy(fnameDir(fn)); fileState.curFile = strCopy(fnameUnparseStatic(fn)); fileState.curFname = fn; } curdir = fileState.curDir; if (fn == 0) { fileState = o_fileState; if (top) { comsgFatal(NULL, ALDOR_F_CantOpen, fname); NotReached(sll = 0); } else sll = inclError(ALDOR_F_CantOpen, fname); } else { fhash = fileHash(fn); fname = strCopy (fnameUnparseStatic(fn)); if (!reincluding && listMemq(Hash)(includedFileCodes, fhash)) { sll = listNil(SrcLine); } else if (listMemq(Hash)(fileState.fileCodes, fhash)) { String s = inclActiveFileChain (fileState.fileNames, "->"); fileState = o_fileState; sll = inclError(ALDOR_E_InclInfinite, s); strFree(s); } else { includedFileCodes = listCons(Hash) (fhash,includedFileCodes); fileState.fileCodes = listCons(Hash) (fhash,fileState.fileCodes); fileState.fileNames = listCons(String)(fname,fileState.fileNames); fileState.infile = fileRdOpen(fn); sll = inclFileContents(); listFreeCons(Hash) (fileState.fileCodes); listFreeCons(String)(fileState.fileNames); fclose(fileState.infile); } fnameFree(fn); strFree(curdir); /*!! curFile is used in src lines */ strFree(fname); } if (pnlines) *pnlines = fileState.lineNumber; fileState = o_fileState; Return(sll); }
/* * Subsume options in response file into argument vector. * Only the slots 'argi0..*pargc-1 are treated as arguments. */ Bool cmdSubsumeResponseFiles(int argi0, int *pargc, String **pargv) { int nresps = 0, i; String *argv; String envopts; assert(*pargc >= 1); /* Copy the original args into a new r/w vector. * The extra slot is potentially used in handling AXIOMXLARGS. */ argv = (String *) stoAlloc(OB_Other, (*pargc+1) * sizeof(String *)); for (i = 0; i < *pargc; i++) argv[i] = strCopy((*pargv)[i]); *pargv = argv; /* Check for ALDORARGS/AXIOMXLARGS environment variable. */ envopts = osGetEnv("ALDORARGS"); if (!envopts) envopts = osGetEnv("AXIOMXLARGS"); if (envopts) { envopts = strCopy(envopts); for (i = *pargc - 1; i >= argi0; i--) (*pargv)[i+1] = (*pargv)[i]; (*pargv)[argi0] = strCopy("-aFake"); (*pargc)++; cmdOneResponse(pargc, pargv, envopts, argi0, argi0+1); nresps++; strFree(envopts); } while (cmdHasOption('a', NULL, *pargc, *pargv)) { String fileName = 0, fileText; FileName fn; int opt = 0, nextArg, startArg, j; for (nextArg = argi0, j = 0; ; ) { startArg = nextArg; opt = cmdGetOption(*pargc,*pargv, &nextArg,&j,&fileName); /* Have response file option by itself. */ if (optIs(opt, 'a')) break; /* Next option is response file option. Must be last */ else if (j > 0 && optIs((*pargv)[startArg][j], 'a')) { int oldStartArg = startArg, oldJ = j; startArg = nextArg; opt = cmdGetOption(*pargc,*pargv, &nextArg,&j,&fileName); (*pargv)[oldStartArg][oldJ] = '\0'; ++startArg; break; } } if (! fileName || ! fileName[0]) /* Can't use cmdUseError here - no msg db! */ comsgFatal(NULL,ALDOR_F_CmdBadOption,"-a",cmdName); fn = fnameParse(fileName); if (! fileIsReadable(fn)) comsgFatal(NULL, ALDOR_F_CantOpen, fileName); /* We now have an existing response file */ fileText = fileContentsString(fn); cmdOneResponse(pargc, pargv, fileText, startArg, nextArg); fileFreeContentsString(fileText); nresps++; } return nresps > 0; }