1 |
|
|
#include "env-inl.h" |
2 |
|
|
#include "node.h" |
3 |
|
|
#include "node_external_reference.h" |
4 |
|
|
|
5 |
|
|
using v8::Context; |
6 |
|
|
using v8::FunctionCallbackInfo; |
7 |
|
|
using v8::Local; |
8 |
|
|
using v8::Object; |
9 |
|
|
using v8::Value; |
10 |
|
|
|
11 |
|
|
namespace node { |
12 |
|
|
namespace { |
13 |
|
|
|
14 |
|
|
#define VALUE_METHOD_MAP(V) \ |
15 |
|
|
V(External) \ |
16 |
|
|
V(Date) \ |
17 |
|
|
V(ArgumentsObject) \ |
18 |
|
|
V(BigIntObject) \ |
19 |
|
|
V(BooleanObject) \ |
20 |
|
|
V(NumberObject) \ |
21 |
|
|
V(StringObject) \ |
22 |
|
|
V(SymbolObject) \ |
23 |
|
|
V(NativeError) \ |
24 |
|
|
V(RegExp) \ |
25 |
|
|
V(AsyncFunction) \ |
26 |
|
|
V(GeneratorFunction) \ |
27 |
|
|
V(GeneratorObject) \ |
28 |
|
|
V(Promise) \ |
29 |
|
|
V(Map) \ |
30 |
|
|
V(Set) \ |
31 |
|
|
V(MapIterator) \ |
32 |
|
|
V(SetIterator) \ |
33 |
|
|
V(WeakMap) \ |
34 |
|
|
V(WeakSet) \ |
35 |
|
|
V(ArrayBuffer) \ |
36 |
|
|
V(DataView) \ |
37 |
|
|
V(SharedArrayBuffer) \ |
38 |
|
|
V(Proxy) \ |
39 |
|
|
V(ModuleNamespaceObject) \ |
40 |
|
|
|
41 |
|
|
|
42 |
|
|
#define V(type) \ |
43 |
|
|
static void Is##type(const FunctionCallbackInfo<Value>& args) { \ |
44 |
|
|
args.GetReturnValue().Set(args[0]->Is##type()); \ |
45 |
|
|
} |
46 |
|
|
|
47 |
✓✗✓✓
|
2370472 |
VALUE_METHOD_MAP(V) |
48 |
|
|
#undef V |
49 |
|
|
|
50 |
|
171550 |
static void IsAnyArrayBuffer(const FunctionCallbackInfo<Value>& args) { |
51 |
✓✗✓✓
|
343100 |
args.GetReturnValue().Set( |
52 |
✓✓✓✓
|
336292 |
args[0]->IsArrayBuffer() || args[0]->IsSharedArrayBuffer()); |
53 |
|
171550 |
} |
54 |
|
|
|
55 |
|
28126 |
static void IsBoxedPrimitive(const FunctionCallbackInfo<Value>& args) { |
56 |
✓✗✓✓
|
56252 |
args.GetReturnValue().Set( |
57 |
✓✓ |
56154 |
args[0]->IsNumberObject() || |
58 |
✓✓ |
55915 |
args[0]->IsStringObject() || |
59 |
✓✓ |
55685 |
args[0]->IsBooleanObject() || |
60 |
✓✓✓✓
|
83952 |
args[0]->IsBigIntObject() || |
61 |
|
27743 |
args[0]->IsSymbolObject()); |
62 |
|
28126 |
} |
63 |
|
|
|
64 |
|
844 |
void InitializeTypes(Local<Object> target, |
65 |
|
|
Local<Value> unused, |
66 |
|
|
Local<Context> context, |
67 |
|
|
void* priv) { |
68 |
|
844 |
Environment* env = Environment::GetCurrent(context); |
69 |
|
|
|
70 |
|
|
#define V(type) env->SetMethodNoSideEffect(target, \ |
71 |
|
|
"is" #type, \ |
72 |
|
|
Is##type); |
73 |
|
844 |
VALUE_METHOD_MAP(V) |
74 |
|
|
#undef V |
75 |
|
|
|
76 |
|
844 |
env->SetMethodNoSideEffect(target, "isAnyArrayBuffer", IsAnyArrayBuffer); |
77 |
|
844 |
env->SetMethodNoSideEffect(target, "isBoxedPrimitive", IsBoxedPrimitive); |
78 |
|
844 |
} |
79 |
|
|
|
80 |
|
|
} // anonymous namespace |
81 |
|
|
|
82 |
|
5111 |
void RegisterTypesExternalReferences(ExternalReferenceRegistry* registry) { |
83 |
|
|
#define V(type) registry->Register(Is##type); |
84 |
|
5111 |
VALUE_METHOD_MAP(V) |
85 |
|
|
#undef V |
86 |
|
|
|
87 |
|
5111 |
registry->Register(IsAnyArrayBuffer); |
88 |
|
5111 |
registry->Register(IsBoxedPrimitive); |
89 |
|
5111 |
} |
90 |
|
|
} // namespace node |
91 |
|
|
|
92 |
|
5169 |
NODE_MODULE_CONTEXT_AWARE_INTERNAL(types, node::InitializeTypes) |
93 |
|
5111 |
NODE_MODULE_EXTERNAL_REFERENCE(types, node::RegisterTypesExternalReferences) |