コード例 #1
0
ファイル: syme.c プロジェクト: hemmecke/aldor
Hash
symeTypeCode(Syme syme)
{
	Hash		h = 0;

	h = symeHash(syme);
	if (h) return h;
	tfHashDEBUG(dbOut, "Hash: %s %pSyme %pTForm\n",
		    symeString(syme), syme, symeType(syme));
	if (symeIsExport(syme) || symeIsParam(syme) || symeIsSelf(syme)) {
		h = tfHash(symeType(syme));
		symeHashArg(h, (Hash) symeKind(syme));
		symeHashArg(h, symeDefLevel(syme)->hash);
	}

	else if (symeIsImport(syme)) {
		h = tfHash(symeType(syme));
		symeHashArg(h, tfHash(symeExporter(syme)));
	}

	else {
		h = tfHash(symeType(syme));
		symeHashArg(h, symeDefLevel(syme)->hash);
	}

	tfHashDEBUG(dbOut, "Hash: %s %pSyme = %d\n",
		    symeString(syme), syme, h);
	return symeSetHash(syme, h);
}
コード例 #2
0
ファイル: gf_syme.c プロジェクト: dokterp/aldor
/* Return true if a leaf of sefo has a symbol meaning
 * which is a SYME_Param.
 */
local Bool
otSefoIsParameterized(Sefo sefo)
{
	if (abIsLeaf(sefo)) {
		Syme	syme = abSyme(sefo);
		assert(syme);
		if (symeIsParam(syme))
			return true;
	}
	else {
		Length	i;
		for (i = 0; i < abArgc(sefo); i += 1)
			if (otSefoIsParameterized(abArgv(sefo)[i]))
				return true;
	}

	return false;
}