示例#1
0
文件: axlcomp.c 项目: nilqed/aldor
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;
}
示例#2
0
文件: axlcomp.c 项目: nilqed/aldor
AbSyn
compPhaseLoadAbSyn(EmitInfo finfo)
{
	FileName	fn = emitSrcFile(finfo);
	AbSyn		ab;
	FILE		*fin;

	phStart(PH_Load);

	fin  = fileRdOpen(fn);
	ab   = abRdSExpr(fin, &fn, NULL);
	fclose(fin);

	phEnd((PhPrFun) abPrint, (PhPrFun) abPrettyPrint, (Pointer) ab);
	return ab;
}
示例#3
0
文件: file_t.c 项目: dokterp/aldor
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); */

}
示例#4
0
文件: include.c 项目: pdo/aldor
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);
}