1014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Copyright 2015 the V8 project authors. All rights reserved.
2014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch// found in the LICENSE file.
4014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
5014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch/**
6014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch * Implementation for v8-experimental.h.
7014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch */
8014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
9014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/api-experimental.h"
10014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
11014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "include/v8-experimental.h"
1262ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include "include/v8.h"
13014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch#include "src/api.h"
143b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch#include "src/fast-accessor-assembler.h"
1562ed631aa0ff23db68a47fd423efa9c019ff2c9eBen Murdoch#include "src/objects-inl.h"
16014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
17014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace {
18014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
193b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdochv8::internal::FastAccessorAssembler* FromApi(
20014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    v8::experimental::FastAccessorBuilder* builder) {
213b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  return reinterpret_cast<v8::internal::FastAccessorAssembler*>(builder);
22014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
23014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
24014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochv8::experimental::FastAccessorBuilder* FromInternal(
253b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch    v8::internal::FastAccessorAssembler* fast_accessor_assembler) {
26014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return reinterpret_cast<v8::experimental::FastAccessorBuilder*>(
27014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch      fast_accessor_assembler);
28014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
29014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
30014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace
31014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
32014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace v8 {
33014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace internal {
34014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace experimental {
35014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
36014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
37014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochMaybeHandle<Code> BuildCodeFromFastAccessorBuilder(
38014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    v8::experimental::FastAccessorBuilder* fast_handler) {
39014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  i::MaybeHandle<i::Code> code;
40014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  if (fast_handler != nullptr) {
41014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    auto faa = FromApi(fast_handler);
42014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    code = faa->Build();
43014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    CHECK(!code.is_null());
44014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    delete faa;
45014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  }
46014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return code;
47014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
48014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
49014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace experimental
50014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace internal
51014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
52014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
53014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochnamespace experimental {
54014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
55014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
56014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder* FastAccessorBuilder::New(Isolate* isolate) {
57014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
583b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch  internal::FastAccessorAssembler* faa =
593b9bc31999c9787eb726ecdbfd5796bfdec32a18Ben Murdoch      new internal::FastAccessorAssembler(i_isolate);
60014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return FromInternal(faa);
61014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
62014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
63014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
64014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::IntegerConstant(
65014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    int const_value) {
66014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return FromApi(this)->IntegerConstant(const_value);
67014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
68014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
69014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
70014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::GetReceiver() {
71014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return FromApi(this)->GetReceiver();
72014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
73014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
74014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
75014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::LoadInternalField(
76014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch    ValueId value, int field_no) {
77014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return FromApi(this)->LoadInternalField(value, field_no);
78014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
79014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
80f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::LoadInternalFieldUnchecked(
81f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch    ValueId value, int field_no) {
82f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  return FromApi(this)->LoadInternalFieldUnchecked(value, field_no);
83f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}
84014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
85014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::LoadValue(ValueId value_id,
86014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch                                                            int offset) {
87014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return FromApi(this)->LoadValue(value_id, offset);
88014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
89014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
90014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
91014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::LoadObject(ValueId value_id,
92014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch                                                             int offset) {
93014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return FromApi(this)->LoadObject(value_id, offset);
94014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
95014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
96f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::ToSmi(ValueId value_id) {
97f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  return FromApi(this)->ToSmi(value_id);
98f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}
99014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
100014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::ReturnValue(ValueId value) {
101014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  FromApi(this)->ReturnValue(value);
102014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
103014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
104014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
105014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::CheckFlagSetOrReturnNull(ValueId value_id, int mask) {
106014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  FromApi(this)->CheckFlagSetOrReturnNull(value_id, mask);
107014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
108014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
109014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
110014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::CheckNotZeroOrReturnNull(ValueId value_id) {
111014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  FromApi(this)->CheckNotZeroOrReturnNull(value_id);
112014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
113014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
114014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
115014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben MurdochFastAccessorBuilder::LabelId FastAccessorBuilder::MakeLabel() {
116014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  return FromApi(this)->MakeLabel();
117014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
118014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
119014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
120014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::SetLabel(LabelId label_id) {
121014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  FromApi(this)->SetLabel(label_id);
122014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
123014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
124f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdochvoid FastAccessorBuilder::Goto(LabelId label_id) {
125f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch  FromApi(this)->Goto(label_id);
126f91f0611dbaf29ca0f1d4aecb357ce243a19d2faBen Murdoch}
127014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
128014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdochvoid FastAccessorBuilder::CheckNotZeroOrJump(ValueId value_id,
129014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch                                             LabelId label_id) {
130014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch  FromApi(this)->CheckNotZeroOrJump(value_id, label_id);
131014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}
132014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch
133109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben MurdochFastAccessorBuilder::ValueId FastAccessorBuilder::Call(
134109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch    v8::FunctionCallback callback, ValueId value_id) {
135109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch  return FromApi(this)->Call(callback, value_id);
136109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch}
137109988c7ccb6f3fd1a58574fa3dfb88beaef6632Ben Murdoch
138014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace experimental
139014dc512cdd3e367bee49a713fdc5ed92584a3e5Ben Murdoch}  // namespace v8
140