JsrtContext.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  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->javascriptLibrary->scriptContext; }
  12. Js::JavascriptLibrary* GetJavascriptLibrary() const { return this->javascriptLibrary; }
  13. JsrtRuntime * GetRuntime() const { return this->runtime; }
  14. void* GetExternalData() const { return this->externalData; }
  15. void SetExternalData(void * data) { this->externalData = data; }
  16. static JsrtContext * GetCurrent();
  17. static bool TrySetCurrent(JsrtContext * context);
  18. static bool Is(void * ref);
  19. virtual void Mark(Recycler * recycler) override sealed;
  20. #if ENABLE_TTD
  21. void OnScriptLoad_TTDCallback(Js::FunctionBody* body, Js::Utf8SourceInfo* utf8SourceInfo, CompileScriptException* compileException, bool notify);
  22. static void OnReplayDisposeContext_TTDCallback(FinalizableObject* jsrtCtx);
  23. #endif
  24. void OnScriptLoad(Js::JavascriptFunction * scriptFunction, Js::Utf8SourceInfo* utf8SourceInfo, CompileScriptException* compileException);
  25. protected:
  26. DEFINE_VTABLE_CTOR_NOBASE(JsrtContext);
  27. JsrtContext(JsrtRuntime * runtime);
  28. void Link();
  29. void Unlink();
  30. void SetJavascriptLibrary(Js::JavascriptLibrary * library);
  31. private:
  32. Field(Js::JavascriptLibrary *) javascriptLibrary;
  33. Field(JsrtRuntime *) runtime;
  34. Field(void*) externalData = nullptr;
  35. Field(TaggedPointer<JsrtContext>) previous;
  36. Field(TaggedPointer<JsrtContext>) next;
  37. };