1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 23:58:11 +00:00

LibJS: Generate bytecode for throw statements

This commit is contained in:
Gunnar Beutner 2021-06-09 18:18:56 +02:00 committed by Andreas Kling
parent e9bafd768d
commit b78f1c1261
5 changed files with 35 additions and 1 deletions

View file

@ -1,6 +1,7 @@
/*
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2021, Gunnar Beutner <gbeutner@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -668,4 +669,10 @@ void UpdateExpression::generate_bytecode(Bytecode::Generator& generator) const
TODO();
}
void ThrowStatement::generate_bytecode(Bytecode::Generator& generator) const
{
m_argument->generate_bytecode(generator);
generator.emit<Bytecode::Op::Throw>();
}
}

View file

@ -56,7 +56,8 @@
O(InstanceOf) \
O(ConcatString) \
O(Increment) \
O(Decrement)
O(Decrement) \
O(Throw)
namespace JS::Bytecode {

View file

@ -1,6 +1,7 @@
/*
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2021, Gunnar Beutner <gbeutner@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -255,6 +256,11 @@ void Decrement::execute(Bytecode::Interpreter& interpreter) const
interpreter.accumulator() = js_bigint(interpreter.vm().heap(), old_value.as_bigint().big_integer().minus(Crypto::SignedBigInteger { 1 }));
}
void Throw::execute(Bytecode::Interpreter& interpreter) const
{
interpreter.vm().throw_exception(interpreter.global_object(), interpreter.accumulator());
}
String Load::to_string(Bytecode::Executable const&) const
{
return String::formatted("Load {}", m_src);
@ -383,4 +389,9 @@ String Decrement::to_string(Bytecode::Executable const&) const
return "Decrement";
}
String Throw::to_string(Bytecode::Executable const&) const
{
return "Throw";
}
}

View file

@ -1,6 +1,7 @@
/*
* Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
* Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
* Copyright (c) 2021, Gunnar Beutner <gbeutner@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -395,6 +396,19 @@ public:
String to_string(Bytecode::Executable const&) const;
};
class Throw final : public Instruction {
public:
constexpr static bool IsTerminator = true;
Throw()
: Instruction(Type::Throw)
{
}
void execute(Bytecode::Interpreter&) const;
String to_string(Bytecode::Executable const&) const;
};
}
namespace JS::Bytecode {