Op.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. /*
  2. * Copyright (c) 2021, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/FlyString.h>
  8. #include <LibJS/Bytecode/Instruction.h>
  9. #include <LibJS/Bytecode/Register.h>
  10. #include <LibJS/Heap/Cell.h>
  11. #include <LibJS/Runtime/Value.h>
  12. namespace JS::Bytecode::Op {
  13. class Load final : public Instruction {
  14. public:
  15. Load(Register dst, Value value)
  16. : m_dst(dst)
  17. , m_value(value)
  18. {
  19. }
  20. virtual ~Load() override { }
  21. virtual void execute(Bytecode::Interpreter&) const override;
  22. virtual String to_string() const override;
  23. private:
  24. Register m_dst;
  25. Value m_value;
  26. };
  27. class Add final : public Instruction {
  28. public:
  29. Add(Register dst, Register src1, Register src2)
  30. : m_dst(dst)
  31. , m_src1(src1)
  32. , m_src2(src2)
  33. {
  34. }
  35. virtual ~Add() override { }
  36. virtual void execute(Bytecode::Interpreter&) const override;
  37. virtual String to_string() const override;
  38. private:
  39. Register m_dst;
  40. Register m_src1;
  41. Register m_src2;
  42. };
  43. class Sub final : public Instruction {
  44. public:
  45. Sub(Register dst, Register src1, Register src2)
  46. : m_dst(dst)
  47. , m_src1(src1)
  48. , m_src2(src2)
  49. {
  50. }
  51. virtual ~Sub() override { }
  52. virtual void execute(Bytecode::Interpreter&) const override;
  53. virtual String to_string() const override;
  54. private:
  55. Register m_dst;
  56. Register m_src1;
  57. Register m_src2;
  58. };
  59. class NewString final : public Instruction {
  60. public:
  61. NewString(Register dst, String string)
  62. : m_dst(dst)
  63. , m_string(move(string))
  64. {
  65. }
  66. virtual ~NewString() override { }
  67. virtual void execute(Bytecode::Interpreter&) const override;
  68. virtual String to_string() const override;
  69. private:
  70. Register m_dst;
  71. String m_string;
  72. };
  73. class SetVariable final : public Instruction {
  74. public:
  75. SetVariable(FlyString identifier, Register src)
  76. : m_identifier(move(identifier))
  77. , m_src(src)
  78. {
  79. }
  80. virtual ~SetVariable() override { }
  81. virtual void execute(Bytecode::Interpreter&) const override;
  82. virtual String to_string() const override;
  83. private:
  84. FlyString m_identifier;
  85. Register m_src;
  86. };
  87. class GetVariable final : public Instruction {
  88. public:
  89. GetVariable(Register dst, FlyString identifier)
  90. : m_dst(dst)
  91. , m_identifier(move(identifier))
  92. {
  93. }
  94. virtual ~GetVariable() override { }
  95. virtual void execute(Bytecode::Interpreter&) const override;
  96. virtual String to_string() const override;
  97. private:
  98. Register m_dst;
  99. FlyString m_identifier;
  100. };
  101. }