Foam compPhaseLoadFoam(EmitInfo finfo) { SymeList symes = 0; Foam foam; FileName fn = emitSrcFile(finfo); int ftype = ftypeNo(fnameType(fn)); phStart(PH_Load); foam = 0; if (ftype == FTYPENO_INTERMED) { Lib lib = libRead(fn); emitSetFileIdName(libGetFileId(lib)); if (emitIsOutputNeeded(finfo, FTYPENO_SYMEEXPR)) { symes = libGetSymes(lib); stabPutMeanings(stabFile(), symes); } foam = libGetFoam(lib); /*!! libClose(lib); */ } if (ftype == FTYPENO_FOAMEXPR) { FILE *fin; fin = fileRdOpen(fn); foam = foamRdSExpr(fin, &fn, NULL); fclose(fin); } phEnd((PhPrFun) foamPrint, (PhPrFun) 0, (Pointer) foam); return foam; }
int implPrint(FILE *file, SImpl impl) { int cc = 0; if (impl == NULL) return fprintf(file, "(Impl: <null>)"); cc += fprintf(file, "(Impl %s: ", implName(impl)); switch (implTag(impl)) { case SIMPL_None: case SIMPL_Unknown: break; case SIMPL_Inherit: cc += tfPrint(file, impl->implInherit.base); break; case SIMPL_Default: cc += symePrint(file, impl->implDefault.def); break; case SIMPL_Cond: cc += ablogPrint(file, impl->implBranch.cond); cc += implPrint(file, impl->implBranch.implTrue); break; case SIMPL_Branch: cc += ablogPrint(file, impl->implBranch.cond); cc += implPrint(file, impl->implBranch.implTrue); cc += implPrint(file, impl->implBranch.implFalse); break; case SIMPL_Local: cc += fprintf(file, "%d (%s.%d)", (int)impl->implLocal.defineIdx, impl->implLocal.constLib ? libGetFileId(impl->implLocal.constLib) : "Local", (int)impl->implLocal.constNum); case SIMPL_Import: break; default: fprintf(file, "Aaarghh: %d", implTag(impl)); break; } cc += fprintf(file, ")"); return cc; }
local void arFilter(Archive ar) { ArEntry arent0 = arFindEntry(ar, arCurrentFileName); ArEntryList alist; Bool precede = true; String tmp; if (arent0 == NULL) return; if (arent0->lib == NULL) return; tmp = libGetFileId(arent0->lib); if (!strEqual(tmp, arCurrentFileId)) return; arDEBUG(dbOut, "arFilter:\n"); comsgWarning(NULL, ALDOR_W_OverRideLibraryFile, arToString(ar)); arent0->mark = false; for (alist = ar->members; alist; alist = cdr(alist)) { ArEntry arent = car(alist); libLibrarySyme(arEntryLib(ar, arent)); if (!arUseExpanded) arent->mark = false; else if (arent == arent0) precede = false; else if (precede) arent->mark = true; else arFilterMarkExpanded(ar, arent); } if (!arUseExpanded) arFilterScanMember(ar, arent0); }