LibJS/Bytecode: Make IdentifierTableIndex a 32-bit index

This makes a bunch of instructions smaller.
This commit is contained in:
Andreas Kling 2024-05-06 10:12:02 +02:00
commit 37d722f4a6
Notes: sideshowbarker 2024-07-17 05:02:35 +09:00
3 changed files with 10 additions and 6 deletions

View file

@ -11,12 +11,13 @@ namespace JS::Bytecode {
IdentifierTableIndex IdentifierTable::insert(DeprecatedFlyString string)
{
m_identifiers.append(move(string));
return m_identifiers.size() - 1;
VERIFY(m_identifiers.size() <= NumericLimits<u32>::max());
return { static_cast<u32>(m_identifiers.size() - 1) };
}
DeprecatedFlyString const& IdentifierTable::get(IdentifierTableIndex index) const
{
return m_identifiers[index.value()];
return m_identifiers[index.value];
}
void IdentifierTable::dump() const

View file

@ -12,7 +12,10 @@
namespace JS::Bytecode {
AK_TYPEDEF_DISTINCT_NUMERIC_GENERAL(size_t, IdentifierTableIndex, Comparison);
struct IdentifierTableIndex {
bool is_valid() const { return value != NumericLimits<u32>::max(); }
u32 value { 0 };
};
class IdentifierTable {
AK_MAKE_NONMOVABLE(IdentifierTable);

View file

@ -1758,7 +1758,7 @@ ByteString GetGlobal::to_byte_string_impl(Bytecode::Executable const& executable
ByteString DeleteVariable::to_byte_string_impl(Bytecode::Executable const& executable) const
{
return ByteString::formatted("DeleteVariable {} ({})", m_identifier, executable.identifier_table->get(m_identifier));
return ByteString::formatted("DeleteVariable {}", executable.identifier_table->get(m_identifier));
}
ByteString CreateLexicalEnvironment::to_byte_string_impl(Bytecode::Executable const&) const
@ -1769,7 +1769,7 @@ ByteString CreateLexicalEnvironment::to_byte_string_impl(Bytecode::Executable co
ByteString CreateVariable::to_byte_string_impl(Bytecode::Executable const& executable) const
{
auto mode_string = m_mode == EnvironmentMode::Lexical ? "Lexical" : "Variable";
return ByteString::formatted("CreateVariable env:{} immutable:{} global:{} {} ({})", mode_string, m_is_immutable, m_is_global, m_identifier, executable.identifier_table->get(m_identifier));
return ByteString::formatted("CreateVariable env:{} immutable:{} global:{} {}", mode_string, m_is_immutable, m_is_global, executable.identifier_table->get(m_identifier));
}
ByteString EnterObjectEnvironment::to_byte_string_impl(Executable const& executable) const
@ -2010,7 +2010,7 @@ ByteString NewClass::to_byte_string_impl(Bytecode::Executable const& executable)
if (!name.is_empty())
builder.appendff(", {}", name);
if (m_lhs_name.has_value())
builder.appendff(", lhs_name:{}"sv, m_lhs_name.value());
builder.appendff(", lhs_name:{}"sv, executable.get_identifier(m_lhs_name.value()));
return builder.to_byte_string();
}