forked from chakra-core/ChakraCore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJsrtExternalObject.h
More file actions
75 lines (58 loc) · 2.57 KB
/
JsrtExternalObject.h
File metadata and controls
75 lines (58 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
//-------------------------------------------------------------------------------------------------------
// 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 "ChakraCommon.h"
#define BEGIN_INTERCEPTOR(scriptContext) \
BEGIN_LEAVE_SCRIPT(scriptContext) \
try {
#define END_INTERCEPTOR(scriptContext) \
} \
catch (...) \
{ \
Assert(false); \
} \
END_LEAVE_SCRIPT(scriptContext) \
\
if (scriptContext->HasRecordedException()) \
{ \
scriptContext->RethrowRecordedException(NULL); \
}
class JsrtExternalType sealed : public Js::DynamicType
{
public:
JsrtExternalType(JsrtExternalType *type) : Js::DynamicType(type), jsFinalizeCallback(type->jsFinalizeCallback) {}
JsrtExternalType(Js::ScriptContext* scriptContext, JsFinalizeCallback finalizeCallback);
//Js::PropertyId GetNameId() const { return ((Js::PropertyRecord *)typeDescription.className)->GetPropertyId(); }
JsFinalizeCallback GetJsFinalizeCallback() const { return this->jsFinalizeCallback; }
private:
JsFinalizeCallback jsFinalizeCallback;
};
AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(JsrtExternalType, &Js::Type::DumpObjectFunction);
class JsrtExternalObject : public Js::DynamicObject
{
protected:
DEFINE_VTABLE_CTOR(JsrtExternalObject, Js::DynamicObject);
DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JsrtExternalObject);
public:
JsrtExternalObject(JsrtExternalType * type, void *data);
static bool Is(Js::Var value);
static JsrtExternalObject * FromVar(Js::Var value);
static JsrtExternalObject * Create(void *data, JsFinalizeCallback finalizeCallback, Js::ScriptContext *scriptContext);
JsrtExternalType * GetExternalType() const { return (JsrtExternalType *)this->GetType(); }
void Finalize(bool isShutdown) override;
void Dispose(bool isShutdown) override;
bool HasReadOnlyPropertiesInvisibleToTypeHandler() override { return true; }
Js::DynamicType* DuplicateType() override;
void * GetSlotData() const;
void SetSlotData(void * data);
private:
void * slot;
#if ENABLE_TTD
public:
virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override;
virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override;
#endif
};
AUTO_REGISTER_RECYCLER_OBJECT_DUMPER(JsrtExternalObject, &Js::RecyclableObject::DumpObjectFunction);