mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 13:48:12 +00:00
LibJS/Bytecode: Don't reparse regular expressions on instantiation
The RegExpLiteral AST node already has the parsed regex::Parser::Result so let's plumb that over to the bytecode executable instead of reparsing the regex every time NewRegExp is executed. ~12% speed-up on language/literals/regexp/S7.8.5_A2.1_T2.js in test262.
This commit is contained in:
parent
a098f38cab
commit
c0f985ffcf
9 changed files with 109 additions and 4 deletions
|
@ -13,6 +13,7 @@
|
|||
#include <LibJS/Bytecode/IdentifierTable.h>
|
||||
#include <LibJS/Bytecode/Instruction.h>
|
||||
#include <LibJS/Bytecode/Label.h>
|
||||
#include <LibJS/Bytecode/RegexTable.h>
|
||||
#include <LibJS/Bytecode/Register.h>
|
||||
#include <LibJS/Bytecode/StringTable.h>
|
||||
#include <LibJS/Heap/Cell.h>
|
||||
|
@ -196,10 +197,11 @@ public:
|
|||
|
||||
class NewRegExp final : public Instruction {
|
||||
public:
|
||||
NewRegExp(StringTableIndex source_index, StringTableIndex flags_index)
|
||||
NewRegExp(StringTableIndex source_index, StringTableIndex flags_index, RegexTableIndex regex_index)
|
||||
: Instruction(Type::NewRegExp)
|
||||
, m_source_index(source_index)
|
||||
, m_flags_index(flags_index)
|
||||
, m_regex_index(regex_index)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -211,6 +213,7 @@ public:
|
|||
private:
|
||||
StringTableIndex m_source_index;
|
||||
StringTableIndex m_flags_index;
|
||||
RegexTableIndex m_regex_index;
|
||||
};
|
||||
|
||||
#define JS_ENUMERATE_NEW_BUILTIN_ERROR_OPS(O) \
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue