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