mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 19:38:12 +00:00
LibJS: NewClass bytecode instruction
This adds a the NewClass bytecode instruction, enough of it is implemented for it to show it in the bytecode (js -d).
This commit is contained in:
parent
3694b8b690
commit
f6028c2534
6 changed files with 37 additions and 1 deletions
|
@ -1300,4 +1300,10 @@ void SwitchStatement::generate_bytecode(Bytecode::Generator& generator) const
|
|||
generator.switch_to_basic_block(end_block);
|
||||
}
|
||||
|
||||
void ClassDeclaration::generate_bytecode(Bytecode::Generator& generator) const
|
||||
{
|
||||
generator.emit<Bytecode::Op::NewClass>(m_class_expression);
|
||||
generator.emit<Bytecode::Op::SetVariable>(generator.intern_string(m_class_expression.ptr()->name()));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -72,7 +72,8 @@
|
|||
O(GetIterator) \
|
||||
O(IteratorNext) \
|
||||
O(IteratorResultDone) \
|
||||
O(IteratorResultValue)
|
||||
O(IteratorResultValue) \
|
||||
O(NewClass)
|
||||
|
||||
namespace JS::Bytecode {
|
||||
|
||||
|
|
|
@ -452,6 +452,11 @@ void IteratorResultValue::execute_impl(Bytecode::Interpreter& interpreter) const
|
|||
interpreter.accumulator() = iterator_value(interpreter.global_object(), *iterator_result);
|
||||
}
|
||||
|
||||
void NewClass::execute_impl(Bytecode::Interpreter&) const
|
||||
{
|
||||
TODO();
|
||||
}
|
||||
|
||||
String Load::to_string_impl(Bytecode::Executable const&) const
|
||||
{
|
||||
return String::formatted("Load {}", m_src);
|
||||
|
@ -598,6 +603,11 @@ String NewFunction::to_string_impl(Bytecode::Executable const&) const
|
|||
return "NewFunction";
|
||||
}
|
||||
|
||||
String NewClass::to_string_impl(Bytecode::Executable const&) const
|
||||
{
|
||||
return "NewClass";
|
||||
}
|
||||
|
||||
String Return::to_string_impl(Bytecode::Executable const&) const
|
||||
{
|
||||
return "Return";
|
||||
|
|
|
@ -484,6 +484,22 @@ private:
|
|||
Register m_arguments[];
|
||||
};
|
||||
|
||||
class NewClass final : public Instruction {
|
||||
public:
|
||||
explicit NewClass(ClassExpression const& class_expression)
|
||||
: Instruction(Type::NewClass)
|
||||
, m_class_expression(class_expression)
|
||||
{
|
||||
}
|
||||
|
||||
void execute_impl(Bytecode::Interpreter&) const;
|
||||
String to_string_impl(Bytecode::Executable const&) const;
|
||||
void replace_references_impl(BasicBlock const&, BasicBlock const&) { }
|
||||
|
||||
private:
|
||||
ClassExpression const& m_class_expression;
|
||||
};
|
||||
|
||||
class NewFunction final : public Instruction {
|
||||
public:
|
||||
explicit NewFunction(FunctionNode const& function_node)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue