Home | History | Annotate | Download | only in include
      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  * This header contains a set of experimental V8 APIs. We hope these will
      7  * become a part of standard V8, but they may also be removed if we deem the
      8  * experiment to not be successul.
      9  */
     10 #ifndef V8_INCLUDE_V8_EXPERIMENTAL_H_
     11 #define V8_INCLUDE_V8_EXPERIMENTAL_H_
     12 
     13 #include "v8.h"  // NOLINT(build/include)
     14 
     15 namespace v8 {
     16 namespace experimental {
     17 
     18 // Allow the embedder to construct accessors that V8 can compile and use
     19 // directly, without jumping into the runtime.
     20 class V8_EXPORT FastAccessorBuilder {
     21  public:
     22   struct ValueId {
     23     size_t value_id;
     24   };
     25   struct LabelId {
     26     size_t label_id;
     27   };
     28 
     29   static FastAccessorBuilder* New(Isolate* isolate);
     30 
     31   ValueId IntegerConstant(int int_constant);
     32   ValueId GetReceiver();
     33   ValueId LoadInternalField(ValueId value_id, int field_no);
     34   ValueId LoadInternalFieldUnchecked(ValueId value_id, int field_no);
     35   ValueId LoadValue(ValueId value_id, int offset);
     36   ValueId LoadObject(ValueId value_id, int offset);
     37   ValueId ToSmi(ValueId value_id);
     38 
     39   void ReturnValue(ValueId value_id);
     40   void CheckFlagSetOrReturnNull(ValueId value_id, int mask);
     41   void CheckNotZeroOrReturnNull(ValueId value_id);
     42   LabelId MakeLabel();
     43   void SetLabel(LabelId label_id);
     44   void Goto(LabelId label_id);
     45   void CheckNotZeroOrJump(ValueId value_id, LabelId label_id);
     46   ValueId Call(v8::FunctionCallback callback, ValueId value_id);
     47 
     48  private:
     49   FastAccessorBuilder() = delete;
     50   FastAccessorBuilder(const FastAccessorBuilder&) = delete;
     51   ~FastAccessorBuilder() = delete;
     52   void operator=(const FastAccessorBuilder&) = delete;
     53 };
     54 
     55 }  // namespace experimental
     56 }  // namespace v8
     57 
     58 #endif  // V8_INCLUDE_V8_EXPERIMENTAL_H_
     59