From 5599d22744f8d43621455e61face7f55eba157e8 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 25 Oct 2021 16:05:04 +0200 Subject: [PATCH] LibJS: Support calling result of a computed MemberExpression in bytecode This patch adds support for calls of the form o.f[expr]() --- Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp index 7e68e4265a..f7a59926c5 100644 --- a/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp +++ b/Userland/Libraries/LibJS/Bytecode/ASTCodegen.cpp @@ -873,11 +873,13 @@ void CallExpression::generate_bytecode(Bytecode::Generator& generator) const } else { member_expression.object().generate_bytecode(generator); generator.emit(this_reg); - // FIXME: Don't copy this logic here, make MemberExpression generate it. - if (!is(member_expression.property())) - TODO(); - auto identifier_table_ref = generator.intern_identifier(static_cast(member_expression.property()).string()); - generator.emit(identifier_table_ref); + if (member_expression.is_computed()) { + member_expression.property().generate_bytecode(generator); + generator.emit(this_reg); + } else { + auto identifier_table_ref = generator.intern_identifier(verify_cast(member_expression.property()).string()); + generator.emit(identifier_table_ref); + } generator.emit(callee_reg); } } else {