From 9dc9ddbf82d1e838197e8e94de54bbe74b6a435c Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 9 Jun 2021 22:07:18 +0200 Subject: [PATCH] LibJS: Fix evaluation order for tagged template literals This ensures that the tag function is evaluated first. --- Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index 18ff42d866..8daa80b2c1 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -655,6 +655,10 @@ void TemplateLiteral::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(tag_reg); + Vector string_regs; auto& expressions = m_template_literal->expressions(); for (size_t i = 0; i < expressions.size(); ++i) { @@ -698,10 +702,6 @@ void TaggedTemplateLiteral::generate_bytecode(Bytecode::Generator& generator) co generator.emit(strings_reg); generator.emit(raw_strings_reg, generator.intern_string("raw")); - m_tag->generate_bytecode(generator); - auto tag_reg = generator.allocate_register(); - generator.emit(tag_reg); - generator.emit(js_undefined()); auto this_reg = generator.allocate_register(); generator.emit(this_reg);