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
VALUE_METHOD_MAP(V)47 VALUE_METHOD_MAP(V)
48 #undef V
49
50 static void IsAnyArrayBuffer(const FunctionCallbackInfo<Value>& args) {
51 args.GetReturnValue().Set(
52 args[0]->IsArrayBuffer() || args[0]->IsSharedArrayBuffer());
53 }
54
IsBoxedPrimitive(const FunctionCallbackInfo<Value> & args)55 static void IsBoxedPrimitive(const FunctionCallbackInfo<Value>& args) {
56 args.GetReturnValue().Set(
57 args[0]->IsNumberObject() ||
58 args[0]->IsStringObject() ||
59 args[0]->IsBooleanObject() ||
60 args[0]->IsBigIntObject() ||
61 args[0]->IsSymbolObject());
62 }
63
InitializeTypes(Local<Object> target,Local<Value> unused,Local<Context> context,void * priv)64 void InitializeTypes(Local<Object> target,
65 Local<Value> unused,
66 Local<Context> context,
67 void* priv) {
68 #define V(type) SetMethodNoSideEffect(context, target, "is" #type, Is##type);
69 VALUE_METHOD_MAP(V)
70 #undef V
71
72 SetMethodNoSideEffect(context, target, "isAnyArrayBuffer", IsAnyArrayBuffer);
73 SetMethodNoSideEffect(context, target, "isBoxedPrimitive", IsBoxedPrimitive);
74 }
75
76 } // anonymous namespace
77
RegisterTypesExternalReferences(ExternalReferenceRegistry * registry)78 void RegisterTypesExternalReferences(ExternalReferenceRegistry* registry) {
79 #define V(type) registry->Register(Is##type);
80 VALUE_METHOD_MAP(V)
81 #undef V
82
83 registry->Register(IsAnyArrayBuffer);
84 registry->Register(IsBoxedPrimitive);
85 }
86 } // namespace node
87
88 NODE_BINDING_CONTEXT_AWARE_INTERNAL(types, node::InitializeTypes)
89 NODE_BINDING_EXTERNAL_REFERENCE(types, node::RegisterTypesExternalReferences)
90