Beispiel #1
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)));
}
Beispiel #2
0
SymeList
genGetSymeInlined(Syme syme)
{
	Length	dindex;

	if (symeExtension(syme)) syme = symeExtension(syme);

	dindex = symeDefnNum(syme);

	if (dindex < gen0SymeTableC && gen0SymeTableV[dindex])
		return symeInlined(gen0SymeTableV[dindex]);
	else
		return listNil(Syme);
}
Beispiel #3
0
Datei: syme.c Projekt: pdo/aldor
TForm
symeType(Syme syme)
{
	Syme	ext;
	TForm	tf;

	/* Use the type of the extension if present. */
	ext = symeExtension(syme);
	if (ext) return symeType(ext);

	/* Trigger symes from other libraries. */
	symeTrigger(syme);

	/* Fill types on lazy symbol meanings. */
	if (symeIsLazy(syme))
		return symeFillType(syme);

	/* Follow forward types if present. */
	tf = syme->type;

	/* BDS: tfIsForward(tf) dereferences tf.  Consequently, it will seg
           fault if tf is null.  If everything works properly, we should
           never reach this point without tf pointing to something valid. */
        assert(tf != NULL);

	if (tfIsForward(tf))
		tf = symeSetType(syme, tfFollowOnly(tf));

	return tf;
}
Beispiel #4
0
Bool
genHasConstNum(Syme syme)
{
	Length	dindex;
	
	if (symeExtension(syme))
		syme = symeExtension(syme);

	if (symeHasConstNum(syme) && 
	    symeConstLib(syme) != NULL)
		return true;

	dindex = symeDefnNum(syme);
	
	if (0 < dindex && dindex < gen0SymeTableC && gen0SymeTableV[dindex]) {
		symeSetConstNum(syme, symeConstNum(gen0SymeTableV[dindex]));
		symeSetHashNum(syme,  symeHashNum(gen0SymeTableV[dindex]));
		symeSetDVMark(syme,   symeDVMark(gen0SymeTableV[dindex]));
	}

	return symeHasConstNum(syme);
}
Beispiel #5
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;
}