blob: 986a370325cc8564461c783324c703b1c3dc076c [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#pragma once
#include "JsrtRuntime.h"
class JsrtContext : public FinalizableObject
{
public:
static JsrtContext *New(JsrtRuntime * runtime);
Js::ScriptContext * GetScriptContext() const { return this->javascriptLibrary->scriptContext; }
Js::JavascriptLibrary* GetJavascriptLibrary() const { return this->javascriptLibrary; }
JsrtRuntime * GetRuntime() const { return this->runtime; }
void* GetExternalData() const { return this->externalData; }
void SetExternalData(void * data) { this->externalData = data; }
static JsrtContext * GetCurrent();
static bool TrySetCurrent(JsrtContext * context);
static bool Is(void * ref);
virtual void Mark(Recycler * recycler) override sealed;
#if ENABLE_TTD
void OnScriptLoad_TTDCallback(Js::FunctionBody* body, Js::Utf8SourceInfo* utf8SourceInfo, CompileScriptException* compileException, bool notify);
static void OnReplayDisposeContext_TTDCallback(FinalizableObject* jsrtCtx);
#endif
void OnScriptLoad(Js::JavascriptFunction * scriptFunction, Js::Utf8SourceInfo* utf8SourceInfo, CompileScriptException* compileException);
protected:
DEFINE_VTABLE_CTOR_NOBASE(JsrtContext);
JsrtContext(JsrtRuntime * runtime);
void Link();
void Unlink();
void SetJavascriptLibrary(Js::JavascriptLibrary * library);
private:
Field(Js::JavascriptLibrary *) javascriptLibrary;
Field(JsrtRuntime *) runtime;
Field(void*) externalData = nullptr;
Field(TaggedPointer<JsrtContext>) previous;
Field(TaggedPointer<JsrtContext>) next;
};