mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-05-02 17:28:48 +00:00
LibJS: Fix evaluation order for tagged template literals
This ensures that the tag function is evaluated first.
This commit is contained in:
parent
2d48fe894f
commit
9dc9ddbf82
Notes:
sideshowbarker
2024-07-18 12:31:15 +09:00
Author: https://github.com/gunnarbeutner
Commit: 9dc9ddbf82
Pull-request: https://github.com/SerenityOS/serenity/pull/7961
1 changed files with 4 additions and 4 deletions
|
@ -655,6 +655,10 @@ void TemplateLiteral::generate_bytecode(Bytecode::Generator& generator) const
|
||||||
|
|
||||||
void TaggedTemplateLiteral::generate_bytecode(Bytecode::Generator& generator) const
|
void TaggedTemplateLiteral::generate_bytecode(Bytecode::Generator& generator) const
|
||||||
{
|
{
|
||||||
|
m_tag->generate_bytecode(generator);
|
||||||
|
auto tag_reg = generator.allocate_register();
|
||||||
|
generator.emit<Bytecode::Op::Store>(tag_reg);
|
||||||
|
|
||||||
Vector<Bytecode::Register> string_regs;
|
Vector<Bytecode::Register> string_regs;
|
||||||
auto& expressions = m_template_literal->expressions();
|
auto& expressions = m_template_literal->expressions();
|
||||||
for (size_t i = 0; i < expressions.size(); ++i) {
|
for (size_t i = 0; i < expressions.size(); ++i) {
|
||||||
|
@ -698,10 +702,6 @@ void TaggedTemplateLiteral::generate_bytecode(Bytecode::Generator& generator) co
|
||||||
generator.emit<Bytecode::Op::Load>(strings_reg);
|
generator.emit<Bytecode::Op::Load>(strings_reg);
|
||||||
generator.emit<Bytecode::Op::PutById>(raw_strings_reg, generator.intern_string("raw"));
|
generator.emit<Bytecode::Op::PutById>(raw_strings_reg, generator.intern_string("raw"));
|
||||||
|
|
||||||
m_tag->generate_bytecode(generator);
|
|
||||||
auto tag_reg = generator.allocate_register();
|
|
||||||
generator.emit<Bytecode::Op::Store>(tag_reg);
|
|
||||||
|
|
||||||
generator.emit<Bytecode::Op::LoadImmediate>(js_undefined());
|
generator.emit<Bytecode::Op::LoadImmediate>(js_undefined());
|
||||||
auto this_reg = generator.allocate_register();
|
auto this_reg = generator.allocate_register();
|
||||||
generator.emit<Bytecode::Op::Store>(this_reg);
|
generator.emit<Bytecode::Op::Store>(this_reg);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue