Esempio n. 1
0
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;
}
Esempio n. 2
0
SymeList
arGetSymes(Archive ar)
{
	ArEntryList	alist;
	SymeList	symes;

	if (!ar) return 0;

	if (ar->symes)
		return ar->symes;

	arFilter(ar);

	for (alist = ar->members; alist; alist = cdr(alist)) {
		ArEntry		arent = car(alist);
		if (!arent->mark) continue;
		symes = listReverse(Syme)(libGetSymes(arEntryLib(ar, arent)));
		ar->symes = listNConcat(Syme)(symes, ar->symes);
	}

	ar->symes = listNReverse(Syme)(ar->symes);
	return ar->symes;
}