forked from chakra-core/ChakraCore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathjsrtExternalObject.cpp
More file actions
72 lines (62 loc) · 2.03 KB
/
jsrtExternalObject.cpp
File metadata and controls
72 lines (62 loc) · 2.03 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
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#include "JsrtPch.h"
#include "JsrtExternalObject.h"
#include "Types\PathTypeHandler.h"
JsrtExternalType::JsrtExternalType(Js::ScriptContext* scriptContext, JsFinalizeCallback finalizeCallback)
: Js::DynamicType(
scriptContext,
Js::TypeIds_Object,
scriptContext->GetLibrary()->GetObjectPrototype(),
nullptr,
Js::SimplePathTypeHandler::New(scriptContext, scriptContext->GetRootPath(), 0, 0, 0, true, true),
true,
true)
, jsFinalizeCallback(finalizeCallback)
{
}
JsrtExternalObject::JsrtExternalObject(JsrtExternalType * type, void *data) :
slot(data),
Js::DynamicObject(type)
{
}
bool JsrtExternalObject::Is(Js::Var value)
{
if (Js::TaggedNumber::Is(value))
{
return false;
}
return (VirtualTableInfo<JsrtExternalObject>::HasVirtualTable(value)) ||
(VirtualTableInfo<Js::CrossSiteObject<JsrtExternalObject>>::HasVirtualTable(value));
}
JsrtExternalObject * JsrtExternalObject::FromVar(Js::Var value)
{
Assert(Is(value));
return static_cast<JsrtExternalObject *>(value);
}
void JsrtExternalObject::Finalize(bool isShutdown)
{
JsFinalizeCallback finalizeCallback = this->GetExternalType()->GetJsFinalizeCallback();
if (nullptr != finalizeCallback)
{
finalizeCallback(this->slot);
}
}
void JsrtExternalObject::Dispose(bool isShutdown)
{
}
void * JsrtExternalObject::GetSlotData() const
{
return this->slot;
}
void JsrtExternalObject::SetSlotData(void * data)
{
this->slot = data;
}
Js::DynamicType* JsrtExternalObject::DuplicateType()
{
return RecyclerNew(this->GetScriptContext()->GetRecycler(), JsrtExternalType,
this->GetExternalType());
}