1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-10 09:07:35 +00:00

LibJS/Bytecode: Add support for direct eval()

This is implemented as a special mode of the Call opcode that invokes
the PerformEval AO (instead of the Call or Construct AO).
This commit is contained in:
Andreas Kling 2023-06-15 13:16:01 +02:00
parent 8a3e350321
commit 2ac8a4bbb7
3 changed files with 25 additions and 4 deletions

View file

@ -1379,6 +1379,8 @@ Bytecode::CodeGenerationErrorOr<void> CallExpression::generate_bytecode(Bytecode
Bytecode::Op::Call::CallType call_type;
if (is<NewExpression>(*this)) {
call_type = Bytecode::Op::Call::CallType::Construct;
} else if (m_callee->is_identifier() && static_cast<Identifier const&>(*m_callee).string() == "eval"sv) {
call_type = Bytecode::Op::Call::CallType::DirectEval;
} else {
call_type = Bytecode::Op::Call::CallType::Call;
}