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
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;
}
Esempio n. 3
0
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);
}