Loading...
Searching...
No Matches
v8-template.h
Go to the documentation of this file.
1// Copyright 2021 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef INCLUDE_V8_TEMPLATE_H_
6#define INCLUDE_V8_TEMPLATE_H_
7
8#include <cstddef>
9#include <string_view>
10
11#include "v8-data.h" // NOLINT(build/include_directory)
12#include "v8-exception.h" // NOLINT(build/include_directory)
13#include "v8-function-callback.h" // NOLINT(build/include_directory)
14#include "v8-local-handle.h" // NOLINT(build/include_directory)
15#include "v8-memory-span.h" // NOLINT(build/include_directory)
16#include "v8-object.h" // NOLINT(build/include_directory)
17#include "v8config.h" // NOLINT(build/include_directory)
18
19namespace v8 {
20
21class CFunction;
22class FunctionTemplate;
23class ObjectTemplate;
24class Signature;
25
26// --- Templates ---
27
28#define V8_INTRINSICS_LIST(F) \
29 F(ArrayProto_entries, array_entries_iterator) \
30 F(ArrayProto_forEach, array_for_each_iterator) \
31 F(ArrayProto_keys, array_keys_iterator) \
32 F(ArrayProto_values, array_values_iterator) \
33 F(ArrayPrototype, initial_array_prototype) \
34 F(AsyncIteratorPrototype, initial_async_iterator_prototype) \
35 F(ErrorPrototype, initial_error_prototype) \
36 F(IteratorPrototype, initial_iterator_prototype) \
37 F(MapIteratorPrototype, initial_map_iterator_prototype) \
38 F(ObjProto_valueOf, object_value_of_function) \
39 F(SetIteratorPrototype, initial_set_iterator_prototype)
40
42#define V8_DECL_INTRINSIC(name, iname) k##name,
44#undef V8_DECL_INTRINSIC
45};
46
50class V8_EXPORT Template : public Data {
51 public:
57 void Set(Local<Name> name, Local<Data> value,
58 PropertyAttribute attributes = None);
59 void SetPrivate(Local<Private> name, Local<Data> value,
60 PropertyAttribute attributes = None);
61 V8_INLINE void Set(Isolate* isolate, const char* name, Local<Data> value,
62 PropertyAttribute attributes = None);
63
78 void SetAccessorProperty(
79 Local<Name> name,
82 PropertyAttribute attribute = None);
83
104 void SetNativeDataProperty(
106 AccessorNameSetterCallback setter = nullptr,
107 Local<Value> data = Local<Value>(), PropertyAttribute attribute = None,
108 SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect,
109 SideEffectType setter_side_effect_type = SideEffectType::kHasSideEffect);
110
115 void SetLazyDataProperty(
117 Local<Value> data = Local<Value>(), PropertyAttribute attribute = None,
118 SideEffectType getter_side_effect_type = SideEffectType::kHasSideEffect,
119 SideEffectType setter_side_effect_type = SideEffectType::kHasSideEffect);
120
125 void SetIntrinsicDataProperty(Local<Name> name, Intrinsic intrinsic,
126 PropertyAttribute attribute = None);
127
128 private:
129 Template();
131 friend class ObjectTemplate;
132 friend class FunctionTemplate;
133};
134
139enum class Intercepted : uint8_t { kNo = 0, kYes = 1 };
140
185 Local<Name> property, const PropertyCallbackInfo<Value>& info);
186// This variant will be deprecated soon.
187//
188// Use `info.GetReturnValue().Set()` to set the return value of the
189// intercepted get request. If the property does not exist the callback should
190// not set the result and must not produce side effects.
192 "Use NamedPropertyGetterCallback instead") =
193 void (*)(Local<Name> property, const PropertyCallbackInfo<Value>& info);
194
215 Intercepted (*)(Local<Name> property, Local<Value> value,
216 const PropertyCallbackInfo<void>& info);
217// This variant will be deprecated soon.
218//
219// Use `info.GetReturnValue()` to indicate whether the request was intercepted
220// or not. If the setter successfully intercepts the request, i.e., if the
221// request should not be further executed, call
222// `info.GetReturnValue().Set(value)`. If the setter did not intercept the
223// request, i.e., if the request should be handled as if no interceptor is
224// present, do not not call `Set()` and do not produce side effects.
226 "Use NamedPropertySetterCallback instead") =
227 void (*)(Local<Name> property, Local<Value> value,
228 const PropertyCallbackInfo<Value>& info);
229
257 Local<Name> property, const PropertyCallbackInfo<Integer>& info);
258// This variant will be deprecated soon.
259//
260// Use `info.GetReturnValue().Set(value)` to set the property attributes. The
261// value is an integer encoding a `v8::PropertyAttribute`. If the property does
262// not exist the callback should not set the result and must not produce side
263// effects.
265 "Use NamedPropertyQueryCallback instead") =
266 void (*)(Local<Name> property, const PropertyCallbackInfo<Integer>& info);
267
293 Local<Name> property, const PropertyCallbackInfo<Boolean>& info);
294// This variant will be deprecated soon.
295//
296// Use `info.GetReturnValue()` to indicate whether the request was intercepted
297// or not. If the deleter successfully intercepts the request, i.e., if the
298// request should not be further executed, call
299// `info.GetReturnValue().Set(value)` with a boolean `value`. The `value` is
300// used as the return value of `delete`. If the deleter does not intercept the
301// request then it should not set the result and must not produce side effects.
303 "Use NamedPropertyDeleterCallback instead") =
304 void (*)(Local<Name> property, const PropertyCallbackInfo<Boolean>& info);
305
313 void (*)(const PropertyCallbackInfo<Array>& info);
314// This variant will be deprecated soon.
315// This is just a renaming of the typedef.
317 "Use NamedPropertyEnumeratorCallback instead") =
319
340 Intercepted (*)(Local<Name> property, const PropertyDescriptor& desc,
341 const PropertyCallbackInfo<void>& info);
342// This variant will be deprecated soon.
343//
344// Use `info.GetReturnValue()` to indicate whether the request was intercepted
345// or not. If the definer successfully intercepts the request, i.e., if the
346// request should not be further executed, call
347// `info.GetReturnValue().Set(value)`. If the definer did not intercept the
348// request, i.e., if the request should be handled as if no interceptor is
349// present, do not not call `Set()` and do not produce side effects.
351 "Use NamedPropertyDefinerCallback instead") =
352 void (*)(Local<Name> property, const PropertyDescriptor& desc,
353 const PropertyCallbackInfo<Value>& info);
354
380 Local<Name> property, const PropertyCallbackInfo<Value>& info);
381// This variant will be deprecated soon.
382//
383// Use `info.GetReturnValue().Set()` to set the return value of the
384// intercepted request. The return value must be an object that
385// can be converted to a PropertyDescriptor, e.g., a `v8::Value` returned from
386// `v8::Object::getOwnPropertyDescriptor`.
388 "Use NamedPropertyDescriptorCallback instead") =
389 void (*)(Local<Name> property, const PropertyCallbackInfo<Value>& info);
390
391// TODO(ishell): Rename IndexedPropertyXxxCallbackV2 back to
392// IndexedPropertyXxxCallback once the old IndexedPropertyXxxCallback is
393// removed.
394
399 Intercepted (*)(uint32_t index, const PropertyCallbackInfo<Value>& info);
400// This variant will be deprecated soon.
402 "Use IndexedPropertyGetterCallbackV2 instead") =
403 void (*)(uint32_t index, const PropertyCallbackInfo<Value>& info);
404
409 uint32_t index, Local<Value> value, const PropertyCallbackInfo<void>& info);
410// This variant will be deprecated soon.
412 "Use IndexedPropertySetterCallbackV2 instead") =
413 void (*)(uint32_t index, Local<Value> value,
414 const PropertyCallbackInfo<Value>& info);
415
420 Intercepted (*)(uint32_t index, const PropertyCallbackInfo<Integer>& info);
421// This variant will be deprecated soon.
423 "Use IndexedPropertyQueryCallbackV2 instead") =
424 void (*)(uint32_t index, const PropertyCallbackInfo<Integer>& info);
425
430 Intercepted (*)(uint32_t index, const PropertyCallbackInfo<Boolean>& info);
431// This variant will be deprecated soon.
433 "Use IndexedPropertyDeleterCallbackV2 instead") =
434 void (*)(uint32_t index, const PropertyCallbackInfo<Boolean>& info);
435
443 void (*)(const PropertyCallbackInfo<Array>& info);
444
449 Intercepted (*)(uint32_t index, const PropertyDescriptor& desc,
450 const PropertyCallbackInfo<void>& info);
451// This variant will be deprecated soon.
453 "Use IndexedPropertyDefinerCallbackV2 instead") =
454 void (*)(uint32_t index, const PropertyDescriptor& desc,
455 const PropertyCallbackInfo<Value>& info);
456
461 Intercepted (*)(uint32_t index, const PropertyCallbackInfo<Value>& info);
462// This variant will be deprecated soon.
464 "Use IndexedPropertyDescriptorCallbackV2 instead") =
465 void (*)(uint32_t index, const PropertyCallbackInfo<Value>& info);
466
471using AccessCheckCallback = bool (*)(Local<Context> accessing_context,
472 Local<Object> accessed_object,
473 Local<Value> data);
475enum class ConstructorBehavior { kThrow, kAllow };
476
584class V8_EXPORT FunctionTemplate : public Template {
585 public:
587 static Local<FunctionTemplate> New(
588 Isolate* isolate, FunctionCallback callback = nullptr,
589 Local<Value> data = Local<Value>(),
590 Local<Signature> signature = Local<Signature>(), int length = 0,
591 ConstructorBehavior behavior = ConstructorBehavior::kAllow,
592 SideEffectType side_effect_type = SideEffectType::kHasSideEffect,
593 const CFunction* c_function = nullptr, uint16_t instance_type = 0,
594 uint16_t allowed_receiver_instance_type_range_start = 0,
595 uint16_t allowed_receiver_instance_type_range_end = 0);
596
598 static Local<FunctionTemplate> NewWithCFunctionOverloads(
599 Isolate* isolate, FunctionCallback callback = nullptr,
600 Local<Value> data = Local<Value>(),
601 Local<Signature> signature = Local<Signature>(), int length = 0,
602 ConstructorBehavior behavior = ConstructorBehavior::kAllow,
603 SideEffectType side_effect_type = SideEffectType::kHasSideEffect,
604 const MemorySpan<const CFunction>& c_function_overloads = {});
605
609 static Local<FunctionTemplate> NewWithCache(
610 Isolate* isolate, FunctionCallback callback,
611 Local<Private> cache_property, Local<Value> data = Local<Value>(),
612 Local<Signature> signature = Local<Signature>(), int length = 0,
613 SideEffectType side_effect_type = SideEffectType::kHasSideEffect);
614
616 V8_WARN_UNUSED_RESULT MaybeLocal<Function> GetFunction(
617 Local<Context> context);
618
626 V8_WARN_UNUSED_RESULT MaybeLocal<Object> NewRemoteInstance();
627
634 void SetCallHandler(
635 FunctionCallback callback, Local<Value> data = Local<Value>(),
636 SideEffectType side_effect_type = SideEffectType::kHasSideEffect,
637 const MemorySpan<const CFunction>& c_function_overloads = {});
638
640 void SetLength(int length);
641
643 Local<ObjectTemplate> InstanceTemplate();
644
650 void Inherit(Local<FunctionTemplate> parent);
651
656 Local<ObjectTemplate> PrototypeTemplate();
657
664 void SetPrototypeProviderTemplate(Local<FunctionTemplate> prototype_provider);
665
671 void SetClassName(Local<String> name);
672
677 void SetInterfaceName(Local<String> name);
678
683 void SetExceptionContext(ExceptionContext context);
684
689 void SetAcceptAnyReceiver(bool value);
690
695 void ReadOnlyPrototype();
696
701 void RemovePrototype();
702
707 bool HasInstance(Local<Value> object);
708
716 bool IsLeafTemplateForApiObject(v8::Local<v8::Value> value) const;
717
724 void SealAndPrepareForPromotionToReadOnly();
725
726 V8_INLINE static FunctionTemplate* Cast(Data* data);
727
728 private:
729 FunctionTemplate();
730
731 static void CheckCast(Data* that);
732 friend class Context;
733 friend class ObjectTemplate;
734};
735
740enum class PropertyHandlerFlags {
744 kNone = 0,
745
751 kNonMasking = 1,
752
757 kOnlyInterceptStrings = 1 << 1,
758
762 kHasNoSideEffect = 1 << 2,
763
772};
775 private:
776 static constexpr PropertyHandlerFlags WithNewSignatureFlag(
778 return static_cast<PropertyHandlerFlags>(
779 static_cast<int>(flags) |
780 static_cast<int>(
782 }
783
784 public:
795 : getter(getter),
796 setter(setter),
797 query(query),
802 data(data),
803 flags(flags) {}
813 : getter(getter),
814 setter(setter),
815 query(query),
818 definer(nullptr),
819 descriptor(nullptr),
820 data(data),
821 flags(flags) {}
832 : getter(getter),
833 setter(setter),
834 query(nullptr),
839 data(data),
840 flags(flags) {}
851};
854 private:
855 static constexpr PropertyHandlerFlags WithNewSignatureFlag(
857 return static_cast<PropertyHandlerFlags>(
858 static_cast<int>(flags) |
859 static_cast<int>(
861 }
862
863 public:
874 : getter(getter),
875 setter(setter),
876 query(query),
881 data(data),
882 flags(flags) {}
892 : getter(getter),
893 setter(setter),
894 query(query),
897 definer(nullptr),
898 descriptor(nullptr),
899 data(data),
900 flags(flags) {}
911 : getter(getter),
912 setter(setter),
913 query(nullptr),
918 data(data),
919 flags(flags) {}
930};
931
938class V8_EXPORT ObjectTemplate : public Template {
939 public:
941 static Local<ObjectTemplate> New(
942 Isolate* isolate,
944
951
963 void SetHandler(const NamedPropertyHandlerConfiguration& configuration);
964
975 void SetHandler(const IndexedPropertyHandlerConfiguration& configuration);
976
983 void SetCallAsFunctionHandler(FunctionCallback callback,
984 Local<Value> data = Local<Value>());
985
994 void MarkAsUndetectable();
995
1004 void SetAccessCheckCallback(AccessCheckCallback callback,
1005 Local<Value> data = Local<Value>());
1006
1013 void SetAccessCheckCallbackAndHandler(
1014 AccessCheckCallback callback,
1015 const NamedPropertyHandlerConfiguration& named_handler,
1016 const IndexedPropertyHandlerConfiguration& indexed_handler,
1017 Local<Value> data = Local<Value>());
1018
1023 int InternalFieldCount() const;
1024
1029 void SetInternalFieldCount(int value);
1030
1034 bool IsImmutableProto() const;
1035
1040 void SetImmutableProto();
1041
1051 void SetCodeLike();
1052 bool IsCodeLike() const;
1053
1054 V8_INLINE static ObjectTemplate* Cast(Data* data);
1055
1056 private:
1058
1059 static void CheckCast(Data* that);
1060 friend class FunctionTemplate;
1061};
1062
1066class V8_EXPORT DictionaryTemplate final {
1067 public:
1075 static Local<DictionaryTemplate> New(
1077
1088 Local<Context> context, MemorySpan<MaybeLocal<Value>> property_values);
1089
1090 V8_INLINE static DictionaryTemplate* Cast(Data* data);
1091
1092 private:
1093 static void CheckCast(Data* that);
1094
1096};
1097
1106class V8_EXPORT Signature : public Data {
1107 public:
1108 static Local<Signature> New(
1109 Isolate* isolate,
1111
1112 V8_INLINE static Signature* Cast(Data* data);
1113
1114 private:
1115 Signature();
1116
1117 static void CheckCast(Data* that);
1118};
1119
1120// --- Implementation ---
1122void Template::Set(Isolate* isolate, const char* name, Local<Data> value,
1123 PropertyAttribute attributes) {
1125 .ToLocalChecked(),
1126 value, attributes);
1127}
1130#ifdef V8_ENABLE_CHECKS
1131 CheckCast(data);
1132#endif
1133 return reinterpret_cast<FunctionTemplate*>(data);
1134}
1137#ifdef V8_ENABLE_CHECKS
1138 CheckCast(data);
1139#endif
1140 return reinterpret_cast<ObjectTemplate*>(data);
1141}
1144#ifdef V8_ENABLE_CHECKS
1145 CheckCast(data);
1146#endif
1147 return reinterpret_cast<DictionaryTemplate*>(data);
1148}
1151#ifdef V8_ENABLE_CHECKS
1152 CheckCast(data);
1153#endif
1154 return reinterpret_cast<Signature*>(data);
1155}
1156
1157} // namespace v8
1158
1159#endif // INCLUDE_V8_TEMPLATE_H_
Definition: v8-context.h:48
Definition: v8-data.h:18
Definition: v8-template.h:1065
static DictionaryTemplate * Cast(Data *data)
Definition: v8-template.h:1142
Definition: v8-template.h:583
static FunctionTemplate * Cast(Data *data)
Definition: v8-template.h:1128
Definition: v8-isolate.h:274
Definition: v8-local-handle.h:267
Definition: v8-local-handle.h:635
Definition: v8-memory-span.h:64
Definition: v8-template.h:937
static ObjectTemplate * Cast(Data *data)
Definition: v8-template.h:1135
Definition: v8-function-callback.h:187
Definition: v8-object.h:91
Definition: v8-container.h:148
Definition: v8-template.h:1105
static Signature * Cast(Data *data)
Definition: v8-template.h:1149
static MaybeLocal< String > NewFromUtf8(Isolate *isolate, const char *data, NewStringType type=NewStringType::kNormal, int length=-1)
Definition: v8-template.h:49
void Set(Local< Name > name, Local< Data > value, PropertyAttribute attributes=None)
Definition: libplatform.h:15
void(*)(uint32_t index, const PropertyCallbackInfo< Integer > &info) IndexedPropertyQueryCallback
Definition: v8-template.h:423
PropertyAttribute
Definition: v8-object.h:139
void(*)(Local< Name > property, const PropertyCallbackInfo< Value > &info) AccessorNameGetterCallback
Definition: v8-object.h:156
void(*)(Local< Name > property, const PropertyCallbackInfo< Value > &info) GenericNamedPropertyGetterCallback
Definition: v8-template.h:192
Intercepted(*)(Local< Name > property, Local< Value > value, const PropertyCallbackInfo< void > &info) NamedPropertySetterCallback
Definition: v8-template.h:215
void(*)(Local< Name > property, const PropertyDescriptor &desc, const PropertyCallbackInfo< Value > &info) GenericNamedPropertyDefinerCallback
Definition: v8-template.h:352
void(*)(uint32_t index, const PropertyDescriptor &desc, const PropertyCallbackInfo< Value > &info) IndexedPropertyDefinerCallback
Definition: v8-template.h:454
void(*)(uint32_t index, Local< Value > value, const PropertyCallbackInfo< Value > &info) IndexedPropertySetterCallback
Definition: v8-template.h:413
SideEffectType
Definition: v8-object.h:198
Intercepted(*)(Local< Name > property, const PropertyCallbackInfo< Value > &info) NamedPropertyDescriptorCallback
Definition: v8-template.h:379
void(*)(uint32_t index, const PropertyCallbackInfo< Boolean > &info) IndexedPropertyDeleterCallback
Definition: v8-template.h:433
Intercepted(*)(uint32_t index, Local< Value > value, const PropertyCallbackInfo< void > &info) IndexedPropertySetterCallbackV2
Definition: v8-template.h:408
Intercepted(*)(Local< Name > property, const PropertyCallbackInfo< Value > &info) NamedPropertyGetterCallback
Definition: v8-template.h:184
NamedPropertyEnumeratorCallback GenericNamedPropertyEnumeratorCallback
Definition: v8-template.h:317
void(*)(Local< Name > property, const PropertyCallbackInfo< Integer > &info) GenericNamedPropertyQueryCallback
Definition: v8-template.h:265
Intercepted(*)(Local< Name > property, const PropertyDescriptor &desc, const PropertyCallbackInfo< void > &info) NamedPropertyDefinerCallback
Definition: v8-template.h:340
void(*)(uint32_t index, const PropertyCallbackInfo< Value > &info) IndexedPropertyDescriptorCallback
Definition: v8-template.h:464
Intrinsic
Definition: v8-template.h:41
void(*)(const PropertyCallbackInfo< Array > &info) NamedPropertyEnumeratorCallback
Definition: v8-template.h:312
ConstructorBehavior
Definition: v8-template.h:474
void(*)(const FunctionCallbackInfo< Value > &info) FunctionCallback
Definition: v8-function-callback.h:314
Intercepted(*)(uint32_t index, const PropertyDescriptor &desc, const PropertyCallbackInfo< void > &info) IndexedPropertyDefinerCallbackV2
Definition: v8-template.h:449
Intercepted(*)(uint32_t index, const PropertyCallbackInfo< Boolean > &info) IndexedPropertyDeleterCallbackV2
Definition: v8-template.h:429
void(*)(uint32_t index, const PropertyCallbackInfo< Value > &info) IndexedPropertyGetterCallback
Definition: v8-template.h:402
void(*)(const PropertyCallbackInfo< Array > &info) IndexedPropertyEnumeratorCallback
Definition: v8-template.h:442
Intercepted(*)(uint32_t index, const PropertyCallbackInfo< Value > &info) IndexedPropertyDescriptorCallbackV2
Definition: v8-template.h:460
Intercepted(*)(Local< Name > property, const PropertyCallbackInfo< Integer > &info) NamedPropertyQueryCallback
Definition: v8-template.h:256
void(*)(Local< Name > property, Local< Value > value, const PropertyCallbackInfo< void > &info) AccessorNameSetterCallback
Definition: v8-object.h:160
void(*)(Local< Name > property, Local< Value > value, const PropertyCallbackInfo< Value > &info) GenericNamedPropertySetterCallback
Definition: v8-template.h:227
Intercepted(*)(uint32_t index, const PropertyCallbackInfo< Value > &info) IndexedPropertyGetterCallbackV2
Definition: v8-template.h:398
void(*)(Local< Name > property, const PropertyCallbackInfo< Value > &info) GenericNamedPropertyDescriptorCallback
Definition: v8-template.h:388
bool(*)(Local< Context > accessing_context, Local< Object > accessed_object, Local< Value > data) AccessCheckCallback
Definition: v8-template.h:472
Intercepted(*)(Local< Name > property, const PropertyCallbackInfo< Boolean > &info) NamedPropertyDeleterCallback
Definition: v8-template.h:292
void(*)(Local< Name > property, const PropertyCallbackInfo< Boolean > &info) GenericNamedPropertyDeleterCallback
Definition: v8-template.h:303
Intercepted(*)(uint32_t index, const PropertyCallbackInfo< Integer > &info) IndexedPropertyQueryCallbackV2
Definition: v8-template.h:419
PropertyHandlerFlags
Definition: v8-template.h:739
Intercepted
Definition: v8-template.h:138
Definition: v8-template.h:852
PropertyHandlerFlags flags
Definition: v8-template.h:928
IndexedPropertyQueryCallbackV2 query
Definition: v8-template.h:922
IndexedPropertyDeleterCallbackV2 deleter
Definition: v8-template.h:923
IndexedPropertyGetterCallbackV2 getter
Definition: v8-template.h:920
IndexedPropertyEnumeratorCallback enumerator
Definition: v8-template.h:924
Local< Value > data
Definition: v8-template.h:927
IndexedPropertyDescriptorCallbackV2 descriptor
Definition: v8-template.h:926
IndexedPropertySetterCallbackV2 setter
Definition: v8-template.h:921
IndexedPropertyDefinerCallbackV2 definer
Definition: v8-template.h:925
Definition: v8-template.h:773
NamedPropertyDescriptorCallback descriptor
Definition: v8-template.h:847
Local< Value > data
Definition: v8-template.h:848
NamedPropertySetterCallback setter
Definition: v8-template.h:842
NamedPropertyDeleterCallback deleter
Definition: v8-template.h:844
NamedPropertyEnumeratorCallback enumerator
Definition: v8-template.h:845
NamedPropertyQueryCallback query
Definition: v8-template.h:843
NamedPropertyGetterCallback getter
Definition: v8-template.h:841
NamedPropertyDefinerCallback definer
Definition: v8-template.h:846
PropertyHandlerFlags flags
Definition: v8-template.h:849
#define V8_INTRINSICS_LIST(F)
Definition: v8-template.h:28
#define V8_DECL_INTRINSIC(name, iname)
Definition: v8-template.h:42
#define V8_EXPORT
Definition: v8config.h:800
#define V8_INLINE
Definition: v8config.h:500
#define V8_DEPRECATE_SOON(message)
Definition: v8config.h:614
#define V8_WARN_UNUSED_RESULT
Definition: v8config.h:671