mirror of
https://github.com/fergalmoran/ladybird.git
synced 2025-12-29 04:37:55 +00:00
LibJS: Store strings in a string table
Instead of using Strings in the bytecode ops this adds a global string table to the Executable struct which individual operations can refer to using indices. This brings bytecode ops one step closer to being pointer free.
This commit is contained in:
committed by
Andreas Kling
parent
4efccbd030
commit
6a0d1fa259
33
Userland/Libraries/LibJS/Bytecode/StringTable.h
Normal file
33
Userland/Libraries/LibJS/Bytecode/StringTable.h
Normal file
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Copyright (c) 2021, Gunnar Beutner <gbeutner@serenityos.org>
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-2-Clause
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <AK/DistinctNumeric.h>
|
||||
#include <AK/String.h>
|
||||
#include <AK/Vector.h>
|
||||
|
||||
namespace JS::Bytecode {
|
||||
|
||||
TYPEDEF_DISTINCT_NUMERIC_GENERAL(size_t, false, true, false, false, false, false, StringTableIndex);
|
||||
|
||||
class StringTable {
|
||||
AK_MAKE_NONMOVABLE(StringTable);
|
||||
AK_MAKE_NONCOPYABLE(StringTable);
|
||||
|
||||
public:
|
||||
StringTable() = default;
|
||||
|
||||
StringTableIndex insert(StringView string);
|
||||
String const& get(StringTableIndex) const;
|
||||
void dump() const;
|
||||
bool is_empty() const { return m_strings.is_empty(); }
|
||||
|
||||
private:
|
||||
Vector<String> m_strings;
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user