Exemple #1
0
Syme
symeExportingSyme(Syme syme)
{
	Syme	ext;

	assert(symeIsImport(syme));

	/* Use the exporter of the extension if present. */
	ext = symeExtension(syme);
	if (ext && symeIsImport(ext))
		return symeExportingSyme(ext);

	return syme;
}
Exemple #2
0
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);
}
Exemple #3
0
Bool 
otSymeIsFoamConst(Syme syme)
{
	TForm tf;
	Sefo  sf;

	if (syme == NULL)
		return false;

	if (symeHasDefault(syme))
		return false;

	if (!otSymeConstEnvIndep(syme))
		return false;

	if (!symeIsImport(syme) && !symeIsExport(syme))
		return false;

	if (symeIsExport(syme))
		return true;

	tf = symeExporter(syme);

	if (!tfIsGeneral(tf))
		return true;
	
	sf = tfExpr(tf);
	if (abIsLeaf(sf))
		return otIsConstSyme(abSyme(sf));
	else
		return !otSefoIsParameterized(sf->abApply.op);
}
Exemple #4
0
Hash
gen0SymeTypeCode(Syme syme)
{
	if (symeExtension(syme))
		return gen0SymeTypeCode(symeExtension(syme));
	else if (symeIsLazy(syme) && symeIsImport(syme))
		return symeHash(syme);
	else
		return tfHash(symeType(symeOriginal(syme)));
}
Exemple #5
0
Bool
otIsConstSyme(Syme syme)
{
	Bool	result = true;

	if (syme == NULL || symeHasDefault(syme))
		result = false;

	else if (symeIsImport(syme)) {
		TForm	tf = symeExporter(syme);
		if (tfIsGeneral(tf) && otSefoIsParameterized(tfExpr(tf)))
			result = false;
	}

	return result;
}
Exemple #6
0
TForm
symeExporter(Syme syme)
{
	assert(symeIsImport(syme));
	return (TForm) symeGetField(symeExportingSyme(syme), SYFI_Exporter);
}