// Copyright 2019 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. #include "src/objects/stack-frame-info.h" #include "src/base/strings.h" #include "src/objects/shared-function-info.h" #include "src/objects/stack-frame-info-inl.h" #include "src/strings/string-builder-inl.h" namespace v8 { namespace internal { bool StackFrameInfo::IsPromiseAll() const { if (!IsAsync()) return false; JSFunction fun = JSFunction::cast(function()); return fun == fun.native_context().promise_all(); } bool StackFrameInfo::IsPromiseAny() const { if (!IsAsync()) return false; JSFunction fun = JSFunction::cast(function()); return fun == fun.native_context().promise_any(); } bool StackFrameInfo::IsNative() const { if (auto script = GetScript()) { return script->type() == Script::TYPE_NATIVE; } return false; } bool StackFrameInfo::IsEval() const { if (auto script = GetScript()) { return script->compilation_type() == Script::COMPILATION_TYPE_EVAL; } return false; } bool StackFrameInfo::IsUserJavaScript() const { #if V8_ENABLE_WEBASSEMBLY if (IsWasm()) return false; #endif // V8_ENABLE_WEBASSEMBLY return GetSharedFunctionInfo().IsUserJavaScript(); } bool StackFrameInfo::IsMethodCall() const { #if V8_ENABLE_WEBASSEMBLY if (IsWasm()) return false; #endif // V8_ENABLE_WEBASSEMBLY return !IsToplevel() && !IsConstructor(); } bool StackFrameInfo::IsToplevel() const { return receiver_or_instance().IsJSGlobalProxy() || receiver_or_instance().IsNullOrUndefined(); } // static int StackFrameInfo::GetLineNumber(Handle info) { Isolate* isolate = info->GetIsolate(); #if V8_ENABLE_WEBASSEMBLY if (info->IsWasm() && !info->IsAsmJsWasm()) { return 1; } #endif // V8_ENABLE_WEBASSEMBLY Handle