Clarify prefix check on interned string type

This commit is contained in:
Michael Hansen
2023-11-09 15:45:43 -08:00
parent 21c35b2f4c
commit c7d3315156
2 changed files with 9 additions and 4 deletions

View File

@@ -64,6 +64,11 @@ public:
return (m_maj >= 3) || (m_code->flags() & PycCode::CO_FUTURE_UNICODE_LITERALS) != 0;
}
bool internIsBytes() const
{
return (m_maj < 3) && (m_code->flags() & PycCode::CO_FUTURE_UNICODE_LITERALS) != 0;
}
PycRef<PycCode> code() const { return m_code; }
void intern(PycRef<PycString> str) { m_interns.emplace_back(std::move(str)); }

View File

@@ -68,14 +68,14 @@ void PycString::print(std::ostream &pyc_output, PycModule* mod, bool triple,
prefix = mod->strIsUnicode() ? 0 : 'u';
break;
case PycObject::TYPE_INTERNED:
prefix = mod->internIsBytes() ? 'b' : 0;
break;
case PycObject::TYPE_ASCII:
case PycObject::TYPE_ASCII_INTERNED:
case PycObject::TYPE_SHORT_ASCII:
case PycObject::TYPE_SHORT_ASCII_INTERNED:
if (mod->majorVer() >= 3)
// These types don't exist until Python 3.4
prefix = 0;
else
prefix = mod->strIsUnicode() ? 'b' : 0;
break;
default:
throw std::runtime_error("Invalid string type");