JsrtContext.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. #include "JsrtRuntime.h"
  7. class JsrtContext : public FinalizableObject
  8. {
  9. public:
  10. static JsrtContext *New(JsrtRuntime * runtime);
  11. Js::ScriptContext * GetScriptContext() const { return this->scriptContext; }
  12. JsrtRuntime * GetRuntime() const { return this->runtime; }
  13. void* GetExternalData() const { return this->externalData; }
  14. void SetExternalData(void * data) { this->externalData = data; }
  15. static bool Initialize();
  16. static void Uninitialize();
  17. static JsrtContext * GetCurrent();
  18. static bool TrySetCurrent(JsrtContext * context);
  19. static bool Is(void * ref);
  20. virtual void Finalize(bool isShutdown) override sealed;
  21. virtual void Mark(Recycler * recycler) override sealed;
  22. void OnScriptLoad(Js::JavascriptFunction * scriptFunction, Js::Utf8SourceInfo* utf8SourceInfo);
  23. protected:
  24. DEFINE_VTABLE_CTOR_NOBASE(JsrtContext);
  25. JsrtContext(JsrtRuntime * runtime);
  26. void Link();
  27. void Unlink();
  28. void SetScriptContext(Js::ScriptContext * scriptContext);
  29. void PinCurrentJsrtContext();
  30. private:
  31. static DWORD s_tlsSlot;
  32. Js::ScriptContext * scriptContext;
  33. JsrtRuntime * runtime;
  34. void * externalData = nullptr;
  35. JsrtContext * previous;
  36. JsrtContext * next;
  37. };