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