• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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