blob: fcca4a5a17e63834cd001adcd242b9ceb9ef34d9 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// 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
11namespace v8 {
12namespace internal {
13
14// Forward declarations.
15class ObjectTemplateInfo;
16class TemplateInfo;
17
18class 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