diff --git a/pyc_module.h b/pyc_module.h index 4f93abd..8880998 100644 --- a/pyc_module.h +++ b/pyc_module.h @@ -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 code() const { return m_code; } void intern(PycRef str) { m_interns.emplace_back(std::move(str)); } diff --git a/pyc_string.cpp b/pyc_string.cpp index 0a04956..5dd7806 100644 --- a/pyc_string.cpp +++ b/pyc_string.cpp @@ -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) - prefix = 0; - else - prefix = mod->strIsUnicode() ? 'b' : 0; + // These types don't exist until Python 3.4 + prefix = 0; break; default: throw std::runtime_error("Invalid string type");