void arClose(Archive ar) { fnameFree(ar->name); if (ar->hasFile) fclose(ar->file); listFreeDeeply(ArEntry)(ar->members, arFreeEntry); listFree(Syme)(ar->symes); stoFree((Pointer) ar); }
void compGLoopInit(int argc, char **argv, FILE *fout, FileName *pfn, EmitInfo *pfinfo) { int iargc; Bool tmpHistory; FILE * fin; FileName fname; compInit(); iargc = cmdArguments(1, argc, argv); argc -= iargc; argv += iargc; emitDoneOptions(argc, argv); *pfn = fnameStdin(); *pfinfo = emitInfoNew(*pfn); compFileInit(*pfinfo); comsgFini(); fintInit(); /* Helpful start-up banner ... */ fprintf(osStdout,"%s\n",comsgString(ALDOR_M_GloopBanner)); if (comsgOkRelease()) { fprintf(osStdout, "%s: %s(%s) version %d.%d.%d", "Release", verName, "C", /* C-language version */ verMajorVersion, verMinorVersion, verMinorFreeze); if (*verPatchLevel) fprintf(osStdout, "(%s)", verPatchLevel); fprintf(osStdout, " for %s %s\n", CONFIG, DEBUG_CONFIG); } (void)fputs("Type \"#int help\" for more details.\n",osStdout); if (osFileIsThere(cmdInitFile)) { fname = fnameParse(cmdInitFile); fin = fileMustOpen(fname, osIoRdMode); fnameFree(fname); intStepNo = -1; tmpHistory = fintHistory; fintHistory = false; fprintf(fout, "Reading %s...\n", cmdInitFile); compGLoopEval(fin, fout, *pfinfo); fclose(fin); } else { intStepNo = 0; tmpHistory = fintHistory; } fintHistory = tmpHistory; }
Bool arHasBasicLib(Archive ar) { static String s = NULL; if (s == NULL) { FileName fn = fnameNew("", "basic", FTYPE_INTERMED); s = fnameUnparse(fn); fnameFree(fn); } return arFindEntry(ar, s) != NULL; }
int compGLoopFinish(FileName fn, EmitInfo finfo) { int totErrors = comsgErrorCount(); /* Prevent calling gc upon exit */ stoCtl(StoCtl_GcLevel, StoCtl_GcLevel_Never); fintFini(); compFileFini(finfo); emitAllDone(); emitInfoFree(finfo); fnameFree(fn); compFini(); return totErrors; }
void testFile(void) { FileName testFile; FILE *fout; printf("fileSetHandler:\n"); fileSetHandler(fileSetHandler((FileErrorFun) 0)); printf("pathInit:\n"); pathInit(); printf("fileRdFind: yabba -- "); testFile = fileRdFind(binSearchPath(), "yabba", ""); if (testFile) printf("dir \"%s\", name \"%s\", type \"%s\"\n", fnameDir(testFile), fnameName(testFile), fnameType(testFile)); else printf("Not found\n"); printf("fileRdFind: cat -- "); testFile = fileRdFind(binSearchPath(), "cat", osExecFileType); if (testFile) { printf("dir \"%s\", name \"%s\", type \"%s\"\n", fnameDir(testFile), fnameName(testFile), fnameType(testFile)); printf("fileRdOpen: "); fout = fileRdOpen(testFile); printf("Opened \"%s\"\n",fnameName(testFile)); fclose(fout); } else printf("Not found\n"); printf("DONE.\n"); fnameFree(testFile); /* fileRemove(testFile); */ }
/* * 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; }
int compInteractiveLoop(int argc, char **argv, FILE *fin, FILE *fout) { int iargc, totErrors, lineno; FileName fn; EmitInfo finfo; AbSyn ab; Stab stab; Foam foam; Bool readingInitFile = true, tmpHistory; Bool endOfInput = false; FILE *fin0 = fin; compInit(); iargc = cmdArguments(1, argc, argv); argc -= iargc; argv += iargc; emitDoneOptions(argc, argv); if (osFileIsThere(cmdInitFile)) { FileName fname; fname = fnameParse(cmdInitFile); fin = fileMustOpen(fname, osIoRdMode); fnameFree(fname); intStepNo = 0; tmpHistory = fintHistory; fintHistory = false; fprintf(fout, "Reading %s...\n", cmdInitFile); } else { intStepNo = 1; readingInitFile = false; tmpHistory = fintHistory; } fn = fnameStdin(); finfo = emitInfoNew(fn); lineno = 0; compFileInit(finfo); stab = stabFile(); comsgFini(); fintInit(); for (; !endOfInput; intStepNo++) { comsgInit(); breakSetRoot(NULL); car(stab)->isChecked = false; if (SetJmp(compFintJmpBuf)) { if (feof(fin)) break; } comsgPromptPrint(fin, fout, fintHistory ? "%%%d := " : "%%%d >> ", intStepNo); osSetBreakHandler(compFintBreakHandler0); ab = compFileFront(finfo, stab, fin, &lineno); breakSetRoot(ab); if (compIsMoreAfterFront(finfo) && !abIsEmptySequence(ab)) { ab = (AbSyn) fintWrap(ab, intStepNo); foam = compFileMiddle(finfo, stab, ab); if (foam) { Bool ok = fint(foam); if (ok && fintVerbose) fintPrintType(fout, ab); foamFree(foam); fintDisplayTimings(); } } comsgFini(); /* abFree(ab); !! ab is seeping into types. */ if (feof(fin)) { if (readingInitFile) { fclose(fin); fin = fin0; lineno = 0; readingInitFile = false; fintHistory = tmpHistory; intStepNo = 0; comsgFini(); } else endOfInput = true; } } totErrors = comsgErrorCount(); fintFini(); compFileFini(finfo); emitAllDone(); emitInfoFree(finfo); fnameFree(fn); 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); }