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); }
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); }
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; }