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