forked from chakra-core/ChakraCore
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFunctionInfo.cpp
More file actions
76 lines (64 loc) · 2.99 KB
/
Copy pathFunctionInfo.cpp
File metadata and controls
76 lines (64 loc) · 2.99 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
76
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#include "RuntimeBasePch.h"
namespace Js
{
FunctionInfo::FunctionInfo(JavascriptMethod entryPoint, Attributes attributes, LocalFunctionId functionId, FunctionProxy* functionBodyImpl)
: originalEntryPoint(entryPoint), attributes(attributes), functionBodyImpl(functionBodyImpl), functionId(functionId), compileCount(0)
{
#if !DYNAMIC_INTERPRETER_THUNK
Assert(entryPoint != nullptr);
#endif
}
FunctionInfo::FunctionInfo(JavascriptMethod entryPoint, _no_write_barrier_tag, Attributes attributes, LocalFunctionId functionId, FunctionProxy* functionBodyImpl)
: originalEntryPoint(entryPoint), attributes(attributes), functionBodyImpl(FORCE_NO_WRITE_BARRIER_TAG(functionBodyImpl)), functionId(functionId), compileCount(0)
{
#if !DYNAMIC_INTERPRETER_THUNK
Assert(entryPoint != nullptr);
#endif
}
FunctionInfo::FunctionInfo(FunctionInfo& that)
: originalEntryPoint(that.originalEntryPoint), attributes(that.attributes),
functionBodyImpl(FORCE_NO_WRITE_BARRIER_TAG(that.functionBodyImpl)), functionId(that.functionId), compileCount(that.compileCount)
{
}
void FunctionInfo::VerifyOriginalEntryPoint() const
{
Assert(!this->HasBody() || this->IsDeferredParseFunction() || this->IsDeferredDeserializeFunction() || this->GetFunctionProxy()->HasValidEntryPoint());
}
JavascriptMethod
FunctionInfo::GetOriginalEntryPoint() const
{
VerifyOriginalEntryPoint();
return GetOriginalEntryPoint_Unchecked();
}
JavascriptMethod FunctionInfo::GetOriginalEntryPoint_Unchecked() const
{
return originalEntryPoint;
}
void FunctionInfo::SetOriginalEntryPoint(const JavascriptMethod originalEntryPoint)
{
Assert(originalEntryPoint);
this->originalEntryPoint = originalEntryPoint;
}
FunctionBody *
FunctionInfo::GetFunctionBody() const
{
return functionBodyImpl == nullptr ? nullptr : functionBodyImpl->GetFunctionBody();
}
FunctionInfo::Attributes FunctionInfo::GetAttributes(Js::RecyclableObject * function)
{
return function->GetTypeId() == Js::TypeIds_Function ?
Js::UnsafeVarTo<Js::JavascriptFunction>(function)->GetFunctionInfo()->GetAttributes() : Js::FunctionInfo::None;
}
bool FunctionInfo::IsBuiltInApplyFunction()
{
return Js::JavascriptLibrary::GetBuiltInForFuncInfo(this->GetLocalFunctionId()) == Js::BuiltinFunction::JavascriptFunction_Apply;
}
bool FunctionInfo::IsBuiltInCallFunction()
{
return Js::JavascriptLibrary::GetBuiltInForFuncInfo(this->GetLocalFunctionId()) == Js::BuiltinFunction::JavascriptFunction_Call;
}
}