// Copyright 2016 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. #ifndef V8_BUILTINS_BUILTINS_UTILS_H_ #define V8_BUILTINS_BUILTINS_UTILS_H_ #include "src/base/logging.h" #include "src/builtins/builtins.h" #include "src/execution/arguments.h" #include "src/execution/frame-constants.h" #include "src/execution/isolate.h" #include "src/heap/factory.h" #include "src/logging/runtime-call-stats-scope.h" namespace v8 { namespace internal { // Arguments object passed to C++ builtins. class BuiltinArguments : public JavaScriptArguments { … }; #define ASSERT_OFFSET … ASSERT_OFFSET …; ASSERT_OFFSET …; ASSERT_OFFSET …; ASSERT_OFFSET …; ASSERT_OFFSET …; #undef ASSERT_OFFSET static_assert …; static_assert …; // ---------------------------------------------------------------------------- // Support macro for defining builtins in C++. // ---------------------------------------------------------------------------- // // A builtin function is defined by writing: // // BUILTIN(name) { // ... // } // // In the body of the builtin function the arguments can be accessed // through the BuiltinArguments object args. // TODO(cbruni): add global flag to check whether any tracing events have been // enabled. #define BUILTIN_RCS(name) … #define BUILTIN_NO_RCS(name) … #ifdef V8_RUNTIME_CALL_STATS #define BUILTIN(name) … #else // V8_RUNTIME_CALL_STATS #define BUILTIN … #endif // V8_RUNTIME_CALL_STATS // ---------------------------------------------------------------------------- #define CHECK_RECEIVER(Type, name, method) … // Throws a TypeError for {method} if the receiver is not coercible to Object, // or converts the receiver to a String otherwise and assigns it to a new var // with the given {name}. #define TO_THIS_STRING(name, method) … } // namespace internal } // namespace v8 #endif // V8_BUILTINS_BUILTINS_UTILS_H_