コード例 #1
0
ファイル: test_syme.c プロジェクト: pdo/aldor
local void
testSymeAddCondition()
{
	String B_imp = "import from Boolean";
	String C_txt = "C: Category == with";
	String D1_txt = "D1: with == add";
	String D2_txt = "D2: with == add";
	StringList lines = listList(String)(4, B_imp, C_txt, D1_txt, D2_txt);
	AbSynList code = listCons(AbSyn)(stdtypes(), abqParseLines(lines));
	
	AbSyn absyn = abNewSequenceL(sposNone, code);

	initFile();
	Stab stab = stabFile();
	
	abPutUse(absyn, AB_Use_NoValue);
	scopeBind(stab, absyn);
	typeInfer(stab, absyn);
	
	AbSyn D1 = abFrSyme(uniqueMeaning(stabFile(), "D1"));
	AbSyn D2 = abFrSyme(uniqueMeaning(stabFile(), "D2"));
	AbSyn C = abFrSyme(uniqueMeaning(stabFile(), "C"));
	Syme syme1 = symeNewExport(symInternConst("syme2"), tfNewAbSyn(TF_General, id("D")), car(stab));
	symeAddCondition(syme1, sefo(has(D1, C)), true);
	testIntEqual("test1", 1, listLength(Sefo)(symeCondition(syme1)));

	Syme syme2 = symeNewExport(symInternConst("syme1"),tfNewAbSyn(TF_General, id("D")), car(stab));
	symeAddCondition(syme2, sefo(and(has(D1, C),
					 has(D2, C))), true);
	
	testIntEqual("test2", 2, listLength(Sefo)(symeCondition(syme2)));

	finiFile();
}
コード例 #2
0
ファイル: token.c プロジェクト: dokterp/aldor
void
keyInit(void)
{
	int	i, ch, lastch;

	for (ch = 0; ch < CHAR_MAX+1; ch++)
		keyIx[ch] = KeyNope;

	lastch = 0;
	for (i = KW_ALPHA_START; i < KW_ALPHA_LIMIT; i++) {
		ch = tokInfo(i).str[0];
		if (ch != lastch) {
			keyIx[ch] = i;
			lastch = ch;
		}
	}
	lastch = 0;
	for (i = KW_SYMBOL_START; i < KW_SYMBOL_LIMIT; i++) {
		ch = tokInfo(i).str[0];
		if (ch != lastch) {
			keyIx[ch] = i;
			lastch = ch;
		}
	}

	for (i = KW_ALPHA_START; i < KW_ALPHA_LIMIT; i++)
		tokInfo(i).sym = symInternConst(tokInfo(i).str);

	for (i = KW_SYMBOL_START; i < KW_SYMBOL_LIMIT; i++)
		tokInfo(i).sym = symInternConst(tokInfo(i).str);
}
コード例 #3
0
ファイル: showexports.c プロジェクト: dokterp/aldor
/*
 * Usage: showexports libName type-expression
 * Example: showexports libaldor.al 'List(Integer)'
 */
int
main(int argc, char *argv[])
{
	osInit();
	sxiInit();
	keyInit();
	ssymInit();
	dbInit();
	stabInitGlobal();
	tfInit();
	foamInit();
	optInit();
	tinferInit();
	pathInit();

	sposInit();
	ablogInit();
	comsgInit();

	macexInitFile();
	comsgInit();
	scobindInitFile();
	stabInitFile();

	fileAddLibraryDirectory(".");

	String archive = argv[1];
	String expression = argv[2];

	scmdHandleLibrary("LIB", archive);

	AbSyn ab = shexpParse(expression);
	Stab stab = stabFile();
	Syme syme = stabGetArchive(symInternConst("LIB"));
	AbSyn arAbSyn = abNewId(sposNone, symInternConst("LIB"));

	stabImportTForm(stab, tiGetTForm(stab, arAbSyn));
	abPutUse(ab, AB_Use_Value);
	scopeBind(stab, ab);
	typeInfer(stab, ab);
	TForm tf = tiGetTForm(stab, ab);

	SymeList list = tfStabGetDomImports(stab, tf);

	for (; list != listNil(Syme); list = cdr(list)) {
		Syme syme = car(list);
		aprintf("%s %d %d %s\n", symeString(syme),
			symeDefnNum(syme), symeConstNum(syme), tfPretty(symeType(syme)));
	}

	scobindFiniFile();
	stabFiniFile();
	comsgFini();
	macexFiniFile();

}
コード例 #4
0
ファイル: test_scobind.c プロジェクト: pbroadbery/aldor
local void
testScobindConditionMulti(void)
{
	Stab stabGlobal, stabFile, stab;
	AbSyn ab;

	initFile();
	stabGlobal = stabNewGlobal();
	stabFile = stabNewFile(stabGlobal);
	stab = stabPushLevel(stabFile, sposNone, STAB_LEVEL_LARGE);
	
	finiFile();
	return;
	/*
	  ideally, I'd like to test this here, but
	  comsgNote (used for multiple defs) doesn't play nice.
	*/
#if 0
	AbSyn ab = abqParse("if A then { f: X == 1; f: X == 1}");
	
	scopeBind(stab, ab);
	Symbol sym_f = symInternConst("f");
	scobindTestCheckUnique(stab, sym_f);
#endif
}
コード例 #5
0
ファイル: test_syme.c プロジェクト: pdo/aldor
local void
testSymeSExpr()
{

	String aSimpleDomain = "+++Comment\nDom: Category == with {f: () -> () ++ f\n}";
	StringList lines = listList(String)(1, aSimpleDomain);
	AbSynList code = listCons(AbSyn)(stdtypes(), abqParseLines(lines));
	
	AbSyn absyn = abNewSequenceL(sposNone, code);

	initFile();
	Stab stab = stabFile();
	
	abPutUse(absyn, AB_Use_NoValue);
	scopeBind(stab, absyn);
	typeInfer(stab, absyn);

	testTrue("Declare is sefo", abIsSefo(absyn));
	testIntEqual("Error Count", 0, comsgErrorCount());

	SymeList symes = stabGetMeanings(stab, ablogFalse(), symInternConst("Dom"));
	testIntEqual("unique meaning", 1, listLength(Syme)(symes));

	Syme syme = car(symes);
	SExpr sx = symeSExprAList(syme);
	
	finiFile();
}
コード例 #6
0
ファイル: test_scobind.c プロジェクト: pbroadbery/aldor
local void
testScobind(void)
{
	Stab stabGlobal, stabFile, stab;
	AbSyn ab;

	initFile();
	stabGlobal = stabNewGlobal();
	stabFile = stabNewFile(stabGlobal);
	stab = stabPushLevel(stabFile, sposNone, STAB_LEVEL_LARGE);
	
	ab = abqParse("X: with == add");
	
	scopeBind(stab, ab);
	scobindTestCheckUnique(stab, symInternConst("X"));
	finiFile();
}
コード例 #7
0
ファイル: test_scobind.c プロジェクト: pbroadbery/aldor
local void
testScobindCondition(void)
{
	Stab stabGlobal, stabFile, stab;
	AbSyn ab;
	Symbol sym_f;

	initFile();
	stabGlobal = stabNewGlobal();
	stabFile = stabNewFile(stabGlobal);
	stab = stabPushLevel(stabFile, sposNone, STAB_LEVEL_LARGE);
	
	ab = abqParse("if A then f: () -> ()");
	
	scopeBind(stab, ab);
	sym_f = symInternConst("f");
	scobindTestCheckUnique(stab, sym_f);
	
	finiFile();
}
コード例 #8
0
ファイル: showexports.c プロジェクト: pdo/aldor
/*
 * Usage: showexports libName type-expression
 * Example: showexports libaldor.al 'List(Integer)'
 */
int
main(int argc, char *argv[])
{
	osInit();
	sxiInit();
	keyInit();
	ssymInit();
	dbInit();
	stabInitGlobal();
	tfInit();
	foamInit();
	optInit();
	tinferInit();
	pathInit();

	sposInit();
	ablogInit();
	comsgInit();

	macexInitFile();
	comsgInit();
	scobindInitFile();
	stabInitFile();

	fileAddLibraryDirectory(".");

	String archive = argv[1];
	String expression = argv[2];

	scmdHandleLibrary("LIB", archive);

	AbSyn ab = shexpParse(expression);
	Stab stab = stabFile();
	Syme syme = stabGetArchive(symInternConst("LIB"));
	AbSyn arAbSyn = abNewId(sposNone, symInternConst("LIB"));
	AbSyn boolean = abNewId(sposNone, symInternConst("Boolean"));

	stabImportTForm(stab, tiGetTForm(stab, arAbSyn));
	stabImportTForm(stab, tiGetTForm(stab, boolean));
	abPutUse(ab, AB_Use_Value);
	scopeBind(stab, ab);
	typeInfer(stab, ab);
	TForm tf = tiGetTForm(stab, ab);
	aprintf("Type: %s Cat: %d\n", tfPretty(tf), tfSatCat(tf));
	if (tfSatDom(tf)) {
		SymeList list = tfGetCatExports(tf);
		aprintf("Category\n");
		for (; list != listNil(Syme); list = cdr(list)) {
			Syme syme = car(list);
			aprintf("%5s %3d %s %pAbSynList\n", symeString(syme), symeHasDefault(syme),
				tfPretty(symeType(syme)), symeCondition(syme));
		}
	}
	else {
		aprintf(">>> Exports\n");
		SymeList list = tfStabGetDomImports(stab, tf);

		for (; list != listNil(Syme); list = cdr(list)) {
			Syme syme = car(list);
			aprintf("%s %d %d %s\n", symeString(syme),
				symeDefnNum(syme), symeConstNum(syme), tfPretty(symeType(syme)));
		}

		TQualList tqList;
		aprintf(">>> Cascades\n");
		tqList = tfGetDomCascades(tf);

		for (; tqList != listNil(TQual); tqList = cdr(tqList)) {
			TQual tq = car(tqList);
			aprintf("--> %s\n", tfPretty(tqBase(tq)));
		}
	}

	scobindFiniFile();
	stabFiniFile();
	comsgFini();
	macexFiniFile();

}