1 // Copyright 2015 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 V8_API_NATIVES_H_ 6 #define V8_API_NATIVES_H_ 7 8 #include "src/handles.h" 9 #include "src/property-details.h" 10 11 namespace v8 { 12 namespace internal { 13 14 // Forward declarations. 15 class ObjectTemplateInfo; 16 class TemplateInfo; 17 18 class ApiNatives { 19 public: 20 static const int kInitialFunctionCacheSize = 256; 21 22 MUST_USE_RESULT static MaybeHandle<JSFunction> InstantiateFunction( 23 Handle<FunctionTemplateInfo> data); 24 25 MUST_USE_RESULT static MaybeHandle<JSObject> InstantiateObject( 26 Handle<ObjectTemplateInfo> data); 27 28 MUST_USE_RESULT static MaybeHandle<FunctionTemplateInfo> ConfigureInstance( 29 Isolate* isolate, Handle<FunctionTemplateInfo> instance, 30 Handle<JSObject> data); 31 32 enum ApiInstanceType { 33 JavaScriptObjectType, 34 GlobalObjectType, 35 GlobalProxyType 36 }; 37 38 static Handle<JSFunction> CreateApiFunction(Isolate* isolate, 39 Handle<FunctionTemplateInfo> obj, 40 Handle<Object> prototype, 41 ApiInstanceType instance_type); 42 43 static void AddDataProperty(Isolate* isolate, Handle<TemplateInfo> info, 44 Handle<Name> name, Handle<Object> value, 45 PropertyAttributes attributes); 46 47 static void AddDataProperty(Isolate* isolate, Handle<TemplateInfo> info, 48 Handle<Name> name, v8::Intrinsic intrinsic, 49 PropertyAttributes attributes); 50 51 static void AddAccessorProperty(Isolate* isolate, Handle<TemplateInfo> info, 52 Handle<Name> name, 53 Handle<FunctionTemplateInfo> getter, 54 Handle<FunctionTemplateInfo> setter, 55 PropertyAttributes attributes); 56 57 static void AddNativeDataProperty(Isolate* isolate, Handle<TemplateInfo> info, 58 Handle<AccessorInfo> property); 59 }; 60 61 } // namespace internal 62 } // namespace v8 63 64 #endif 65