FORECAST UlamTypePrimitive::explicitlyCastable(UTI typidx) { FORECAST scr = UlamType::safeCast(typidx); //default if(scr == CAST_CLEAR) { // primitives must be the same sizes when casting to a reference type if(isReference() && !UlamType::checkReferenceCast(typidx)) scr = CAST_BAD; // strings cannot be cast explicitly to other primitive types, except Void (t3961) UlamType * vut = m_state.getUlamTypeByIndex(typidx); ULAMTYPE valtypEnum = vut->getUlamTypeEnum(); if((getUlamTypeEnum() != Void) && ((valtypEnum == String) ^ (getUlamTypeEnum() == String))) scr = CAST_BAD; //only quarks may be cast to Ints, explicitly or not; requires toInt method (t3996) if(valtypEnum == Class) { ULAMCLASSTYPE vclasstype = vut->getUlamClassType(); if(vclasstype != UC_QUARK) scr = CAST_BAD; } } return scr; } //explicitlyCastable
const std::string UlamType::getUlamTypeMangledType() { // e.g. parsing overloaded functions, may not be complete. std::ostringstream mangled; s32 bitsize = getBitSize(); s32 arraysize = getArraySize(); if(isReference()) //includes ALT_ARRAYITEM (t3147); not isAltRefType (t3114) mangled << "r"; //e.g. t3114 if(arraysize > 0) mangled << ToLeximitedNumber(arraysize); // else if(arraysize == 0) // mangled << ToLeximitedNumber(-1); //distinct from scalar else mangled << 10; //scalar NONARRAYSIZE if(bitsize > 0) mangled << ToLeximitedNumber(bitsize); else mangled << 10; std::string ecode(UlamType::getUlamTypeEnumCodeChar(getUlamTypeEnum())); mangled << ToLeximited(ecode).c_str(); return mangled.str(); } //getUlamTypeMangledType
const std::string UlamTypePrimitive::getUlamTypeMangledType() { // e.g. parsing overloaded functions, may not be complete. std::ostringstream mangled; s32 bitsize = getBitSize(); s32 arraysize = getArraySize(); if(isReference()) //includes ALT_ARRAYITEM (t3147) mangled << "r"; if(arraysize > 0) mangled << ToLeximitedNumber(arraysize); else mangled << 10; if(bitsize > 0) mangled << ToLeximitedNumber(bitsize); else mangled << 10; std::string ecode(UlamTypePrimitive::getUlamTypeEnumCodeChar(getUlamTypeEnum())); mangled << ToLeximited(ecode).c_str(); return mangled.str(); } //getUlamTypeMangledType
const char * UlamType::getUlamTypeAsSingleLowercaseLetter() { return UlamType::getUlamTypeEnumCodeChar(getUlamTypeEnum()); } //getUlamTypeAsSingleLowercaseLetter