// 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_API_API_ARGUMENTS_H_ #define V8_API_API_ARGUMENTS_H_ #include "include/v8-template.h" #include "src/builtins/builtins-utils.h" #include "src/execution/isolate.h" #include "src/objects/slots.h" #include "src/objects/visitors.h" namespace v8 { namespace internal { // Custom arguments replicate a small segment of stack that can be // accessed through an Arguments object the same way the actual stack // can. class CustomArgumentsBase : public Relocatable { … }; template <typename T> class CustomArguments : public CustomArgumentsBase { … }; // Note: Calling args.Call() sets the return value on args. For multiple // Call()'s, a new args should be used every time. // This class also serves as a side effects detection scope (JavaScript code // execution). It is used for ensuring correctness of the interceptor callback // implementations. The idea is that the interceptor callback that does not // intercept an operation must not produce side effects. If the callback // signals that it has handled the operation (by either returning a respective // result or by throwing an exception) then the AcceptSideEffects() method // must be called to "accept" the side effects that have happened during the // lifetime of the PropertyCallbackArguments object. class PropertyCallbackArguments final : public CustomArguments<PropertyCallbackInfo<Value> > { … }; class FunctionCallbackArguments : public CustomArguments<FunctionCallbackInfo<Value> > { … }; static_assert …; static_assert …; } // namespace internal } // namespace v8 #endif // V8_API_API_ARGUMENTS_H_