api-experimental.cc 3.63 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13
// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

/**
 * Implementation for v8-experimental.h.
 */

#include "src/api-experimental.h"

#include "include/v8.h"
#include "include/v8-experimental.h"
#include "src/api.h"
14
#include "src/fast-accessor-assembler.h"
15 16 17

namespace {

18
v8::internal::FastAccessorAssembler* FromApi(
19
    v8::experimental::FastAccessorBuilder* builder) {
20
  return reinterpret_cast<v8::internal::FastAccessorAssembler*>(builder);
21 22 23
}

v8::experimental::FastAccessorBuilder* FromInternal(
24
    v8::internal::FastAccessorAssembler* fast_accessor_assembler) {
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
  return reinterpret_cast<v8::experimental::FastAccessorBuilder*>(
      fast_accessor_assembler);
}

}  // namespace

namespace v8 {
namespace internal {
namespace experimental {


MaybeHandle<Code> BuildCodeFromFastAccessorBuilder(
    v8::experimental::FastAccessorBuilder* fast_handler) {
  i::MaybeHandle<i::Code> code;
  if (fast_handler != nullptr) {
    auto faa = FromApi(fast_handler);
    code = faa->Build();
    CHECK(!code.is_null());
    delete faa;
  }
  return code;
}

}  // namespace experimental
}  // namespace internal


namespace experimental {


FastAccessorBuilder* FastAccessorBuilder::New(Isolate* isolate) {
  i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
57 58
  internal::FastAccessorAssembler* faa =
      new internal::FastAccessorAssembler(i_isolate);
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
  return FromInternal(faa);
}


FastAccessorBuilder::ValueId FastAccessorBuilder::IntegerConstant(
    int const_value) {
  return FromApi(this)->IntegerConstant(const_value);
}


FastAccessorBuilder::ValueId FastAccessorBuilder::GetReceiver() {
  return FromApi(this)->GetReceiver();
}


FastAccessorBuilder::ValueId FastAccessorBuilder::LoadInternalField(
    ValueId value, int field_no) {
  return FromApi(this)->LoadInternalField(value, field_no);
}

79 80 81 82
FastAccessorBuilder::ValueId FastAccessorBuilder::LoadInternalFieldUnchecked(
    ValueId value, int field_no) {
  return FromApi(this)->LoadInternalFieldUnchecked(value, field_no);
}
83 84 85 86 87 88 89 90 91 92 93 94

FastAccessorBuilder::ValueId FastAccessorBuilder::LoadValue(ValueId value_id,
                                                            int offset) {
  return FromApi(this)->LoadValue(value_id, offset);
}


FastAccessorBuilder::ValueId FastAccessorBuilder::LoadObject(ValueId value_id,
                                                             int offset) {
  return FromApi(this)->LoadObject(value_id, offset);
}

95 96 97
FastAccessorBuilder::ValueId FastAccessorBuilder::ToSmi(ValueId value_id) {
  return FromApi(this)->ToSmi(value_id);
}
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

void FastAccessorBuilder::ReturnValue(ValueId value) {
  FromApi(this)->ReturnValue(value);
}


void FastAccessorBuilder::CheckFlagSetOrReturnNull(ValueId value_id, int mask) {
  FromApi(this)->CheckFlagSetOrReturnNull(value_id, mask);
}


void FastAccessorBuilder::CheckNotZeroOrReturnNull(ValueId value_id) {
  FromApi(this)->CheckNotZeroOrReturnNull(value_id);
}


FastAccessorBuilder::LabelId FastAccessorBuilder::MakeLabel() {
  return FromApi(this)->MakeLabel();
}


void FastAccessorBuilder::SetLabel(LabelId label_id) {
  FromApi(this)->SetLabel(label_id);
}

123 124 125
void FastAccessorBuilder::Goto(LabelId label_id) {
  FromApi(this)->Goto(label_id);
}
126 127 128 129 130 131

void FastAccessorBuilder::CheckNotZeroOrJump(ValueId value_id,
                                             LabelId label_id) {
  FromApi(this)->CheckNotZeroOrJump(value_id, label_id);
}

132 133 134 135 136
FastAccessorBuilder::ValueId FastAccessorBuilder::Call(
    v8::FunctionCallback callback, ValueId value_id) {
  return FromApi(this)->Call(callback, value_id);
}

137 138
}  // namespace experimental
}  // namespace v8