PrivateEnvironment.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * Copyright (c) 2021, David Tuin <davidot@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/FlyString.h>
  8. #include <LibJS/Heap/Cell.h>
  9. namespace JS {
  10. struct PrivateName {
  11. PrivateName(u64 unique_id, FlyString description)
  12. : unique_id(unique_id)
  13. , description(move(description))
  14. {
  15. }
  16. u64 unique_id { 0 };
  17. FlyString description;
  18. bool operator==(PrivateName const& rhs) const;
  19. };
  20. class PrivateEnvironment : public Cell {
  21. public:
  22. explicit PrivateEnvironment(PrivateEnvironment* parent);
  23. PrivateName resolve_private_identifier(FlyString const& identifier) const;
  24. void add_private_name(Badge<ClassExpression>, FlyString description);
  25. private:
  26. virtual char const* class_name() const override { return "PrivateEnvironment"; }
  27. auto find_private_name(FlyString const& description) const
  28. {
  29. return m_private_names.find_if([&](PrivateName const& private_name) {
  30. return private_name.description == description;
  31. });
  32. }
  33. static u64 s_next_id;
  34. PrivateEnvironment* m_outer_environment { nullptr }; // [[OuterEnv]]
  35. Vector<PrivateName> m_private_names; // [[Names]]
  36. u64 m_unique_id;
  37. };
  38. }