blob: 98d62e33a2f035c6920cb0a89881d14d5a2b2597 [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/**
6 * Implementation for v8-experimental.h.
7 */
8
9#include "src/api-experimental.h"
10
11#include "include/v8.h"
12#include "include/v8-experimental.h"
13#include "src/api.h"
14#include "src/compiler/fast-accessor-assembler.h"
15
16namespace {
17
18
19v8::internal::compiler::FastAccessorAssembler* FromApi(
20 v8::experimental::FastAccessorBuilder* builder) {
21 return reinterpret_cast<v8::internal::compiler::FastAccessorAssembler*>(
22 builder);
23}
24
25
26v8::experimental::FastAccessorBuilder* FromInternal(
27 v8::internal::compiler::FastAccessorAssembler* fast_accessor_assembler) {
28 return reinterpret_cast<v8::experimental::FastAccessorBuilder*>(
29 fast_accessor_assembler);
30}
31
32} // namespace
33
34namespace v8 {
35namespace internal {
36namespace experimental {
37
38
39MaybeHandle<Code> BuildCodeFromFastAccessorBuilder(
40 v8::experimental::FastAccessorBuilder* fast_handler) {
41 i::MaybeHandle<i::Code> code;
42 if (fast_handler != nullptr) {
43 auto faa = FromApi(fast_handler);
44 code = faa->Build();
45 CHECK(!code.is_null());
46 delete faa;
47 }
48 return code;
49}
50
51} // namespace experimental
52} // namespace internal
53
54
55namespace experimental {
56
57
58FastAccessorBuilder* FastAccessorBuilder::New(Isolate* isolate) {
59 i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
60 internal::compiler::FastAccessorAssembler* faa =
61 new internal::compiler::FastAccessorAssembler(i_isolate);
62 return FromInternal(faa);
63}
64
65
66FastAccessorBuilder::ValueId FastAccessorBuilder::IntegerConstant(
67 int const_value) {
68 return FromApi(this)->IntegerConstant(const_value);
69}
70
71
72FastAccessorBuilder::ValueId FastAccessorBuilder::GetReceiver() {
73 return FromApi(this)->GetReceiver();
74}
75
76
77FastAccessorBuilder::ValueId FastAccessorBuilder::LoadInternalField(
78 ValueId value, int field_no) {
79 return FromApi(this)->LoadInternalField(value, field_no);
80}
81
82
83FastAccessorBuilder::ValueId FastAccessorBuilder::LoadValue(ValueId value_id,
84 int offset) {
85 return FromApi(this)->LoadValue(value_id, offset);
86}
87
88
89FastAccessorBuilder::ValueId FastAccessorBuilder::LoadObject(ValueId value_id,
90 int offset) {
91 return FromApi(this)->LoadObject(value_id, offset);
92}
93
94
95void FastAccessorBuilder::ReturnValue(ValueId value) {
96 FromApi(this)->ReturnValue(value);
97}
98
99
100void FastAccessorBuilder::CheckFlagSetOrReturnNull(ValueId value_id, int mask) {
101 FromApi(this)->CheckFlagSetOrReturnNull(value_id, mask);
102}
103
104
105void FastAccessorBuilder::CheckNotZeroOrReturnNull(ValueId value_id) {
106 FromApi(this)->CheckNotZeroOrReturnNull(value_id);
107}
108
109
110FastAccessorBuilder::LabelId FastAccessorBuilder::MakeLabel() {
111 return FromApi(this)->MakeLabel();
112}
113
114
115void FastAccessorBuilder::SetLabel(LabelId label_id) {
116 FromApi(this)->SetLabel(label_id);
117}
118
119
120void FastAccessorBuilder::CheckNotZeroOrJump(ValueId value_id,
121 LabelId label_id) {
122 FromApi(this)->CheckNotZeroOrJump(value_id, label_id);
123}
124
Ben Murdoch097c5b22016-05-18 11:27:45 +0100125FastAccessorBuilder::ValueId FastAccessorBuilder::Call(
126 v8::FunctionCallback callback, ValueId value_id) {
127 return FromApi(this)->Call(callback, value_id);
128}
129
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000130} // namespace experimental
131} // namespace v8