• 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 #ifndef V8_INTERPRETER_INTERPRETER_INTRINSICS_H_
6 #define V8_INTERPRETER_INTERPRETER_INTRINSICS_H_
7 
8 #include "src/runtime/runtime.h"
9 
10 namespace v8 {
11 namespace internal {
12 namespace interpreter {
13 
14 // List of supported intrisics, with upper case name, lower case name and
15 // expected number of arguments (-1 denoting argument count is variable).
16 #define INTRINSICS_LIST(V)                                          \
17   V(AsyncFunctionAwaitCaught, async_function_await_caught, 2)       \
18   V(AsyncFunctionAwaitUncaught, async_function_await_uncaught, 2)   \
19   V(AsyncFunctionEnter, async_function_enter, 2)                    \
20   V(AsyncFunctionReject, async_function_reject, 2)                  \
21   V(AsyncFunctionResolve, async_function_resolve, 2)                \
22   V(AsyncGeneratorAwaitCaught, async_generator_await_caught, 2)     \
23   V(AsyncGeneratorAwaitUncaught, async_generator_await_uncaught, 2) \
24   V(AsyncGeneratorReject, async_generator_reject, 2)                \
25   V(AsyncGeneratorResolve, async_generator_resolve, 3)              \
26   V(AsyncGeneratorYield, async_generator_yield, 3)                  \
27   V(CreateJSGeneratorObject, create_js_generator_object, 2)         \
28   V(GeneratorGetResumeMode, generator_get_resume_mode, 1)           \
29   V(GeneratorClose, generator_close, 1)                             \
30   V(GetImportMetaObject, get_import_meta_object, 0)                 \
31   V(CopyDataProperties, copy_data_properties, 2)                    \
32   V(CopyDataPropertiesWithExcludedPropertiesOnStack,                \
33     copy_data_properties_with_excluded_properties_on_stack, -1)     \
34   V(CreateIterResultObject, create_iter_result_object, 2)           \
35   V(CreateAsyncFromSyncIterator, create_async_from_sync_iterator, 1)
36 
37 class IntrinsicsHelper {
38  public:
39   enum class IntrinsicId {
40 #define DECLARE_INTRINSIC_ID(name, lower_case, count) k##name,
41     INTRINSICS_LIST(DECLARE_INTRINSIC_ID)
42 #undef DECLARE_INTRINSIC_ID
43         kIdCount
44   };
45   STATIC_ASSERT(static_cast<uint32_t>(IntrinsicId::kIdCount) <= kMaxUInt8);
46 
47   V8_EXPORT_PRIVATE static bool IsSupported(Runtime::FunctionId function_id);
48   static IntrinsicId FromRuntimeId(Runtime::FunctionId function_id);
49   static Runtime::FunctionId ToRuntimeId(IntrinsicId intrinsic_id);
50 
51  private:
52   DISALLOW_IMPLICIT_CONSTRUCTORS(IntrinsicsHelper);
53 };
54 
55 }  // namespace interpreter
56 }  // namespace internal
57 }  // namespace v8
58 
59 #endif  // V8_INTERPRETER_INTERPRETER_INTRINSICS_H_
60