Diff
Modified: trunk/Source/_javascript_Core/API/JSContextRef.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/API/JSContextRef.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/API/JSContextRef.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2006-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2006-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -290,7 +290,7 @@
{
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
if (m_remainingCapacityForFrameCapture) {
// If callee is unknown, but we've not added any frame yet, we should
@@ -298,7 +298,7 @@
if (visitor->callee().isCell()) {
JSCell* callee = visitor->callee().asCell();
if (!callee && visitor->index())
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
StringBuilder& builder = m_builder;
@@ -313,12 +313,12 @@
}
if (!visitor->callee().rawPtr())
- return StackVisitor::Done;
+ return IterationStatus::Done;
m_remainingCapacityForFrameCapture--;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
private:
Modified: trunk/Source/_javascript_Core/ChangeLog (293778 => 293779)
--- trunk/Source/_javascript_Core/ChangeLog 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/ChangeLog 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,3 +1,62 @@
+2022-05-04 Mark Lam <mark....@apple.com>
+
+ Use IterationStatus in more places.
+ https://bugs.webkit.org/show_bug.cgi?id=239864
+
+ Reviewed by Saam Barati.
+
+ There's no need for a StackVisitor::Status and a VMInspector::FunctorStatus which
+ represent the same idea.
+
+ * API/JSContextRef.cpp:
+ (BacktraceFunctor::operator() const):
+ * bytecode/CodeBlock.cpp:
+ (JSC::RecursionCheckFunctor::operator() const):
+ * debugger/DebuggerCallFrame.cpp:
+ (JSC::LineAndColumnFunctor::operator() const):
+ * inspector/ScriptCallStackFactory.cpp:
+ (Inspector::CreateScriptCallStackFunctor::operator() const):
+ * interpreter/CallFrame.cpp:
+ (JSC::CallFrame::callerSourceOrigin):
+ (JSC::CallFrame::globalObjectOfClosestCodeBlock):
+ * interpreter/CallFrame.h:
+ * interpreter/Interpreter.cpp:
+ (JSC::GetStackTraceFunctor::operator() const):
+ (JSC::Interpreter::getStackTrace):
+ (JSC::GetCatchHandlerFunctor::operator() const):
+ (JSC::UnwindFunctor::operator() const):
+ * interpreter/ShadowChicken.cpp:
+ (JSC::ShadowChicken::update):
+ * interpreter/StackVisitor.h:
+ (JSC::StackVisitor::visit):
+ (JSC::CallerFunctor::operator() const):
+ * jsc.cpp:
+ (FunctionJSCStackFunctor::operator() const):
+ (startTimeoutTimer):
+ * runtime/Error.cpp:
+ (JSC::FindFirstCallerFrameWithCodeblockFunctor::operator() const):
+ * runtime/FunctionPrototype.cpp:
+ (JSC::RetrieveArgumentsFunctor::operator() const):
+ (JSC::RetrieveCallerFunctionFunctor::operator() const):
+ * runtime/JSGlobalObject.cpp:
+ (JSC::JSC_DEFINE_HOST_FUNCTION):
+ * runtime/NullSetterFunction.cpp:
+ (JSC::GetCallerStrictnessFunctor::operator() const):
+ * tools/HeapVerifier.cpp:
+ (JSC::HeapVerifier::checkIfRecorded):
+ * tools/JSDollarVM.cpp:
+ (JSC::CallerFrameJITTypeFunctor::operator() const):
+ (JSC::JSC_DEFINE_HOST_FUNCTION):
+ * tools/VMInspector.cpp:
+ (JSC::VMInspector::forEachVM):
+ (JSC::VMInspector::isValidExecutableMemory):
+ (JSC::VMInspector::codeBlockForMachinePC):
+ (JSC::VMInspector::codeBlockForFrame):
+ (JSC::DumpFrameFunctor::operator() const):
+ (JSC::VMInspector::dumpRegisters):
+ * tools/VMInspector.h:
+ (JSC::VMInspector::WTF_REQUIRES_LOCK):
+
2022-04-30 Philippe Normand <ph...@igalia.com>
Web Inspector: Update jsmin to 3.0.1
Modified: trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/bytecode/CodeBlock.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -2339,7 +2339,7 @@
, m_didRecurse(false)
{ }
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
CallFrame* currentCallFrame = visitor->callFrame();
@@ -2349,14 +2349,14 @@
if (m_foundStartCallFrame) {
if (visitor->callFrame()->codeBlock() == m_codeBlock) {
m_didRecurse = true;
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
if (!m_depthToCheck--)
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
bool didRecurse() const { return m_didRecurse; }
Modified: trunk/Source/_javascript_Core/debugger/DebuggerCallFrame.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/debugger/DebuggerCallFrame.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/debugger/DebuggerCallFrame.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008, 2013-2014, 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2008-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -44,10 +44,10 @@
class LineAndColumnFunctor {
public:
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
visitor->computeLineAndColumn(m_line, m_column);
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
unsigned line() const { return m_line; }
Modified: trunk/Source/_javascript_Core/inspector/ScriptCallStackFactory.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/inspector/ScriptCallStackFactory.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/inspector/ScriptCallStackFactory.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
* Copyright (c) 2010 Google Inc. All rights reserved.
* Copyright (C) 2012 Research In Motion Limited. All rights reserved.
*
@@ -51,11 +51,11 @@
{
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
if (m_needToSkipAFrame) {
m_needToSkipAFrame = false;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
if (m_remainingCapacityForFrameCapture) {
@@ -65,10 +65,10 @@
m_frames.append(ScriptCallFrame(visitor->functionName(), visitor->sourceURL(), visitor->sourceID(), line, column));
m_remainingCapacityForFrameCapture--;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
private:
Modified: trunk/Source/_javascript_Core/interpreter/CallFrame.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/interpreter/CallFrame.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/interpreter/CallFrame.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -200,7 +200,7 @@
bool haveSkippedFirstFrame = false;
StackVisitor::visit(this, vm, [&](StackVisitor& visitor) {
if (!std::exchange(haveSkippedFirstFrame, true))
- return StackVisitor::Status::Continue;
+ return IterationStatus::Continue;
switch (visitor->codeType()) {
case StackVisitor::Frame::CodeType::Function:
@@ -213,7 +213,7 @@
// At that time, the generated eval code should have the source origin to the original caller of the forEach function
// instead of the source origin of the forEach function.
if (static_cast<FunctionExecutable*>(visitor->codeBlock()->ownerExecutable())->isBuiltinFunction())
- return StackVisitor::Status::Continue;
+ return IterationStatus::Continue;
FALLTHROUGH;
case StackVisitor::Frame::CodeType::Eval:
@@ -220,18 +220,18 @@
case StackVisitor::Frame::CodeType::Module:
case StackVisitor::Frame::CodeType::Global:
sourceOrigin = visitor->codeBlock()->ownerExecutable()->sourceOrigin();
- return StackVisitor::Status::Done;
+ return IterationStatus::Done;
case StackVisitor::Frame::CodeType::Native:
- return StackVisitor::Status::Continue;
+ return IterationStatus::Continue;
case StackVisitor::Frame::CodeType::Wasm:
// FIXME: Should return the source origin for WASM.
- return StackVisitor::Status::Done;
+ return IterationStatus::Done;
}
RELEASE_ASSERT_NOT_REACHED();
- return StackVisitor::Status::Done;
+ return IterationStatus::Done;
});
return sourceOrigin;
}
@@ -244,16 +244,16 @@
StackVisitor::visit(callFrame, vm, [&](StackVisitor& visitor) {
if (visitor->isWasmFrame()) {
globalObject = visitor->callFrame()->lexicalGlobalObject(vm);
- return StackVisitor::Status::Done;
+ return IterationStatus::Done;
}
if (auto* codeBlock = visitor->codeBlock()) {
if (codeBlock->codeType() == CodeType::FunctionCode && static_cast<FunctionExecutable*>(codeBlock->ownerExecutable())->isBuiltinFunction())
- return StackVisitor::Status::Continue;
+ return IterationStatus::Continue;
globalObject = codeBlock->globalObject();
- return StackVisitor::Status::Done;
+ return IterationStatus::Done;
}
ASSERT(visitor->codeType() == StackVisitor::Frame::CodeType::Native);
- return StackVisitor::Status::Continue;
+ return IterationStatus::Continue;
});
if (globalObject)
return globalObject;
Modified: trunk/Source/_javascript_Core/interpreter/CallFrame.h (293778 => 293779)
--- trunk/Source/_javascript_Core/interpreter/CallFrame.h 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/interpreter/CallFrame.h 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,7 +1,7 @@
/*
* Copyright (C) 1999-2001 Harri Porten (por...@kde.org)
* Copyright (C) 2001 Peter Kelly (p...@post.com)
- * Copyright (C) 2003-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2022 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
@@ -318,7 +318,7 @@
String friendlyFunctionName();
// CallFrame::iterate() expects a Functor that implements the following method:
- // StackVisitor::Status operator()(StackVisitor&) const;
+ // IterationStatus operator()(StackVisitor&) const;
// FIXME: This method is improper. We rely on the fact that we can call it with a null
// receiver. We should always be using StackVisitor directly.
// It's only valid to call this from a non-wasm top frame.
Modified: trunk/Source/_javascript_Core/interpreter/Interpreter.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/interpreter/Interpreter.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/interpreter/Interpreter.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -386,11 +386,11 @@
m_results.reserveInitialCapacity(capacity);
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
if (m_framesToSkip > 0) {
m_framesToSkip--;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
if (m_remainingCapacityForFrameCapture) {
@@ -405,9 +405,9 @@
}
m_remainingCapacityForFrameCapture--;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
private:
@@ -428,10 +428,10 @@
size_t framesCount = 0;
size_t maxFramesCountNeeded = maxStackSize + framesToSkip;
- StackVisitor::visit(callFrame, vm, [&] (StackVisitor&) -> StackVisitor::Status {
+ StackVisitor::visit(callFrame, vm, [&] (StackVisitor&) -> IterationStatus {
if (++framesCount < maxFramesCountNeeded)
- return StackVisitor::Continue;
- return StackVisitor::Done;
+ return IterationStatus::Continue;
+ return IterationStatus::Done;
});
if (framesCount <= framesToSkip)
return;
@@ -482,19 +482,19 @@
HandlerInfo* handler() { return m_handler; }
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
visitor.unwindToMachineCodeBlockFrame();
CodeBlock* codeBlock = visitor->codeBlock();
if (!codeBlock)
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
m_handler = findExceptionHandler(visitor, codeBlock, RequiredHandler::CatchHandler);
if (m_handler)
- return StackVisitor::Done;
+ return IterationStatus::Done;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
private:
@@ -561,7 +561,7 @@
#endif
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
visitor.unwindToMachineCodeBlockFrame();
m_callFrame = visitor->callFrame();
@@ -572,7 +572,7 @@
if (!m_isTermination) {
m_handler = { findExceptionHandler(visitor, m_codeBlock, RequiredHandler::AnyHandler), m_codeBlock };
if (m_handler.m_valid)
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
}
@@ -590,7 +590,7 @@
unsigned exceptionHandlerIndex = m_callFrame->callSiteIndex().bits();
m_handler = { wasmCallee->handlerForIndex(jsInstance->instance(), exceptionHandlerIndex, m_wasmTag), wasmCallee };
if (m_handler.m_valid)
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
}
#endif
@@ -607,9 +607,9 @@
bool shouldStopUnwinding = visitor->callerIsEntryFrame();
if (shouldStopUnwinding)
- return StackVisitor::Done;
+ return IterationStatus::Done;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
private:
Modified: trunk/Source/_javascript_Core/interpreter/ShadowChicken.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/interpreter/ShadowChicken.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/interpreter/ShadowChicken.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -173,13 +173,13 @@
if (!m_stack.isEmpty()) {
Vector<Frame> stackRightNow;
StackVisitor::visit(
- callFrame, vm, [&] (StackVisitor& visitor) -> StackVisitor::Status {
+ callFrame, vm, [&] (StackVisitor& visitor) -> IterationStatus {
if (visitor->isInlinedFrame())
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
if (visitor->isWasmFrame()) {
// FIXME: Make shadow chicken work with Wasm.
// https://bugs.webkit.org/show_bug.cgi?id=165441
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
bool isTailDeleted = false;
@@ -186,7 +186,7 @@
// FIXME: Make shadow chicken work with Wasm.
// https://bugs.webkit.org/show_bug.cgi?id=165441
stackRightNow.append(Frame(jsCast<JSObject*>(visitor->callee().asCell()), visitor->callFrame(), isTailDeleted));
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
});
stackRightNow.reverse();
@@ -294,16 +294,16 @@
Vector<Frame> toPush;
StackVisitor::visit(
- callFrame, vm, [&] (StackVisitor& visitor) -> StackVisitor::Status {
+ callFrame, vm, [&] (StackVisitor& visitor) -> IterationStatus {
if (visitor->isInlinedFrame()) {
// FIXME: Handle inlining.
// https://bugs.webkit.org/show_bug.cgi?id=155686
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
if (visitor->isWasmFrame()) {
// FIXME: Make shadow chicken work with Wasm.
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
CallFrame* callFrame = visitor->callFrame();
@@ -322,7 +322,7 @@
// that do not run into the current call frame but are left in the shadow stack.
// Those tail deleted frames should be validated somehow.
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
bool foundFrame = advanceIndexInLogTo(callFrame, callFrame->jsCallee(), callFrame->callerFrame());
@@ -392,7 +392,7 @@
}
}
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
});
if (ShadowChickenInternal::verbose)
Modified: trunk/Source/_javascript_Core/interpreter/StackVisitor.h (293778 => 293779)
--- trunk/Source/_javascript_Core/interpreter/StackVisitor.h 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/interpreter/StackVisitor.h 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2013-2018 Apple Inc. All rights reserved.
+ * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,6 +31,7 @@
#include "WasmIndexOrName.h"
#include <wtf/Function.h>
#include <wtf/Indenter.h>
+#include <wtf/IterationStatus.h>
#include <wtf/text/WTFString.h>
namespace JSC {
@@ -150,8 +151,8 @@
if (action == TerminateIfTopEntryFrameIsEmpty && visitor.topEntryFrameIsEmpty())
return;
while (visitor->callFrame()) {
- Status status = functor(visitor);
- if (status != Continue)
+ IterationStatus status = functor(visitor);
+ if (status != IterationStatus::Continue)
break;
visitor.gotoNextFrame();
}
@@ -188,15 +189,15 @@
CallFrame* callerFrame() const { return m_callerFrame; }
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
if (!m_hasSkippedFirstFrame) {
m_hasSkippedFirstFrame = true;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
m_callerFrame = visitor->callFrame();
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
private:
Modified: trunk/Source/_javascript_Core/jsc.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/jsc.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/jsc.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1376,10 +1376,10 @@
{
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
m_trace.append(makeString(" ", visitor->index(), " ", visitor->toString(), '\n'));
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
private:
@@ -2936,11 +2936,11 @@
{
Thread::create("jsc Timeout Thread", [=] () {
sleep(duration);
- VMInspector::forEachVM([&] (VM& vm) -> VMInspector::FunctorStatus {
+ VMInspector::forEachVM([&] (VM& vm) -> IterationStatus {
if (&vm != s_vm)
- return VMInspector::FunctorStatus::Continue;
+ return IterationStatus::Continue;
vm.notifyNeedShellTimeoutCheck();
- return VMInspector::FunctorStatus::Done;
+ return IterationStatus::Done;
});
if (const char* timeoutString = getenv("JSCTEST_hardTimeout")) {
Modified: trunk/Source/_javascript_Core/runtime/Error.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/runtime/Error.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/runtime/Error.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,7 +1,7 @@
/*
* Copyright (C) 1999-2001 Harri Porten (por...@kde.org)
* Copyright (C) 2001 Peter Kelly (p...@post.com)
- * Copyright (C) 2003-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2022 Apple Inc. All rights reserved.
* Copyright (C) 2007 Eric Seidel (e...@webkit.org)
*
* This library is free software; you can redistribute it and/or
@@ -127,7 +127,7 @@
, m_index(0)
{ }
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
if (!m_foundStartCallFrame && (visitor->callFrame() == m_startCallFrame))
m_foundStartCallFrame = true;
@@ -135,12 +135,12 @@
if (m_foundStartCallFrame) {
if (!visitor->isWasmFrame() && visitor->callFrame()->codeBlock()) {
m_foundCallFrame = visitor->callFrame();
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
m_index++;
}
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
CallFrame* foundCallFrame() const { return m_foundCallFrame; }
Modified: trunk/Source/_javascript_Core/runtime/FunctionPrototype.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/runtime/FunctionPrototype.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/runtime/FunctionPrototype.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,6 +1,6 @@
/*
* Copyright (C) 1999-2001 Harri Porten (por...@kde.org)
- * Copyright (C) 2003-2020 Apple Inc. All rights reserved.
+ * Copyright (C) 2003-2022 Apple Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -122,17 +122,17 @@
JSValue result() const { return m_result; }
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
if (!visitor->callee().isCell())
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
JSCell* callee = visitor->callee().asCell();
if (callee != m_targetCallee)
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
m_result = JSValue(visitor->createArguments(m_vm));
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
private:
@@ -174,28 +174,28 @@
JSValue result() const { return m_result; }
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
if (!visitor->callee().isCell())
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
JSCell* callee = visitor->callee().asCell();
if (callee && (callee->inherits<JSBoundFunction>() || callee->inherits<JSRemoteFunction>() || callee->type() == ProxyObjectType))
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
if (!m_hasFoundFrame && callee != m_targetCallee)
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
m_hasFoundFrame = true;
if (!m_hasSkippedToCallerFrame) {
m_hasSkippedToCallerFrame = true;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
if (callee)
m_result = callee;
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
private:
Modified: trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/runtime/JSGlobalObject.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2007-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2007-2022 Apple Inc. All rights reserved.
* Copyright (C) 2008 Cameron Zwarich (cwzwar...@uwaterloo.ca)
*
* Redistribution and use in source and binary forms, with or without
@@ -374,7 +374,7 @@
callFrame->iterate(globalObject->vm(), [&] (StackVisitor& visitor) {
if (!iteratedOnce) {
iteratedOnce = true;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
RELEASE_ASSERT(visitor->hasLineAndColumnInfo());
@@ -381,7 +381,7 @@
unsigned column;
visitor->computeLineAndColumn(line, column);
codeBlock = visitor->codeBlock();
- return StackVisitor::Done;
+ return IterationStatus::Done;
});
RELEASE_ASSERT(!!codeBlock);
RELEASE_ASSERT_WITH_MESSAGE(false, "JS assertion failed at line %u in:\n%s\n", line, codeBlock->sourceCodeForTools().data());
Modified: trunk/Source/_javascript_Core/runtime/NullSetterFunction.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/runtime/NullSetterFunction.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/runtime/NullSetterFunction.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015-2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -44,17 +44,17 @@
{
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
++m_iterations;
if (m_iterations < 2)
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
CodeBlock* codeBlock = visitor->codeBlock();
// This does not take into account that we might have an strict opcode in a non-strict context, but that's
// ok since we assert below that this function should never be called from any kind strict context.
m_callerIsStrict = codeBlock && codeBlock->ownerExecutable()->isInStrictContext();
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
bool callerIsStrict() const { return m_callerIsStrict; }
Modified: trunk/Source/_javascript_Core/tools/HeapVerifier.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/tools/HeapVerifier.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/tools/HeapVerifier.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2014-2019 Apple Inc. All rights reserved.
+ * Copyright (C) 2014-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -444,12 +444,12 @@
Locker locker { AdoptLock, inspector.getLock() };
inspector.iterate([&] (VM& vm) {
if (!vm.heap.m_verifier)
- return VMInspector::FunctorStatus::Continue;
+ return IterationStatus::Continue;
auto* verifier = vm.heap.m_verifier.get();
dataLog("Search for cell ", RawPointer(candidateHeapCell), " in VM ", RawPointer(&vm), ":\n");
verifier->checkIfRecorded(candidateHeapCell);
- return VMInspector::FunctorStatus::Continue;
+ return IterationStatus::Continue;
});
}
Modified: trunk/Source/_javascript_Core/tools/JSDollarVM.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/tools/JSDollarVM.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/tools/JSDollarVM.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2015-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2015-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -171,7 +171,7 @@
DollarVMAssertScope assertScope;
if (frameIndex++ != requestedFrameIndex)
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
addProperty(vm, "name"_s, jsString(vm, visitor->functionName()));
@@ -186,7 +186,7 @@
}
isValid = true;
- return StackVisitor::Done;
+ return IterationStatus::Done;
});
addProperty(vm, "valid"_s, jsBoolean(isValid));
@@ -2314,7 +2314,7 @@
DollarVMAssertScope assertScope;
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
unsigned index = m_currentFrame++;
// First frame (index 0) is `llintTrue` etc. function itself.
@@ -2321,9 +2321,9 @@
if (index == 1) {
if (visitor->codeBlock())
m_jitType = visitor->codeBlock()->jitType();
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
JITType jitType() { return m_jitType; }
@@ -2618,9 +2618,9 @@
callFrame->iterate(vm, [&] (StackVisitor& visitor) {
DollarVMAssertScope assertScope;
if (frameIndex++ != requestedFrameIndex)
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
VMInspector::dumpRegisters(visitor->callFrame());
- return StackVisitor::Done;
+ return IterationStatus::Done;
});
return encodedJSUndefined();
@@ -3251,15 +3251,15 @@
JSArray* result = constructEmptyArray(globalObject, nullptr);
RETURN_IF_EXCEPTION(scope, { });
- StackVisitor::visit(callFrame, vm, [&] (StackVisitor& visitor) -> StackVisitor::Status {
+ StackVisitor::visit(callFrame, vm, [&] (StackVisitor& visitor) -> IterationStatus {
DollarVMAssertScope assertScope;
if (visitor->isInlinedFrame())
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
if (visitor->isWasmFrame())
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
result->push(globalObject, jsCast<JSObject*>(visitor->callee().asCell()));
scope.releaseAssertNoException(); // This function is only called from tests.
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
});
RETURN_IF_EXCEPTION(scope, { });
return JSValue::encode(result);
Modified: trunk/Source/_javascript_Core/tools/VMInspector.cpp (293778 => 293779)
--- trunk/Source/_javascript_Core/tools/VMInspector.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/tools/VMInspector.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017-2020 Apple Inc. All rights reserved.
+ * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -75,7 +75,7 @@
}
#endif // ENABLE(JIT)
-void VMInspector::forEachVM(Function<FunctorStatus(VM&)>&& func)
+void VMInspector::forEachVM(Function<IterationStatus(VM&)>&& func)
{
VMInspector& inspector = instance();
Locker lock { inspector.getLock() };
@@ -87,7 +87,7 @@
#if ENABLE(JIT)
bool found = false;
bool hasTimeout = false;
- iterate([&] (VM&) -> FunctorStatus {
+ iterate([&] (VM&) -> IterationStatus {
auto& allocator = ExecutableAllocator::singleton();
auto& lock = allocator.getLock();
@@ -94,15 +94,15 @@
bool isSafeToLock = ensureIsSafeToLock(lock);
if (!isSafeToLock) {
hasTimeout = true;
- return FunctorStatus::Continue; // Skip this VM.
+ return IterationStatus::Continue; // Skip this VM.
}
Locker executableAllocatorLocker { lock };
if (allocator.isValidExecutableMemory(executableAllocatorLocker, machinePC)) {
found = true;
- return FunctorStatus::Done;
+ return IterationStatus::Done;
}
- return FunctorStatus::Continue;
+ return IterationStatus::Continue;
});
if (!found && hasTimeout)
@@ -121,7 +121,7 @@
bool hasTimeout = false;
iterate([&] (VM& vm) {
if (!vm.currentThreadIsHoldingAPILock())
- return FunctorStatus::Continue;
+ return IterationStatus::Continue;
// It is safe to call Heap::forEachCodeBlockIgnoringJITPlans here because:
// 1. CodeBlocks are added to the CodeBlockSet from the main thread before
@@ -138,7 +138,7 @@
bool isSafeToLock = ensureIsSafeToLock(codeBlockSetLock);
if (!isSafeToLock) {
hasTimeout = true;
- return FunctorStatus::Continue; // Skip this VM.
+ return IterationStatus::Continue; // Skip this VM.
}
Locker locker { codeBlockSetLock };
@@ -160,8 +160,8 @@
}
});
if (codeBlock)
- return FunctorStatus::Done;
- return FunctorStatus::Continue;
+ return IterationStatus::Done;
+ return IterationStatus::Continue;
});
if (!codeBlock && hasTimeout)
@@ -280,14 +280,14 @@
{
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
auto currentFrame = nextFrame++;
if (currentFrame == targetFrame) {
codeBlock = visitor->codeBlock();
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
unsigned targetFrame;
@@ -313,7 +313,7 @@
{
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
m_currentFrame++;
if (m_currentFrame > m_framesToSkip) {
@@ -322,8 +322,8 @@
});
}
if (m_action == DumpOne && m_currentFrame > m_framesToSkip)
- return StackVisitor::Done;
- return StackVisitor::Continue;
+ return IterationStatus::Done;
+ return IterationStatus::Continue;
}
private:
@@ -381,9 +381,9 @@
unsigned unusedColumn = 0;
visitor->computeLineAndColumn(line, unusedColumn);
dataLogF("[ReturnVPC] | %10p | %d (line %d)\n", it, visitor->bytecodeIndex().offset(), line);
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
});
--it;
@@ -425,9 +425,9 @@
if (topCallFrame) {
topCallFrame->iterate(vm, [&] (StackVisitor& visitor) {
if (callFrame == visitor->callFrame())
- return StackVisitor::Done;
+ return IterationStatus::Done;
nextCallFrame = visitor->callFrame();
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
});
}
Modified: trunk/Source/_javascript_Core/tools/VMInspector.h (293778 => 293779)
--- trunk/Source/_javascript_Core/tools/VMInspector.h 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/_javascript_Core/tools/VMInspector.h 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2017-2020 Apple Inc. All rights reserved.
+ * Copyright (C) 2017-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -29,6 +29,7 @@
#include "VM.h"
#include <wtf/DoublyLinkedList.h>
#include <wtf/Expected.h>
+#include <wtf/IterationStatus.h>
#include <wtf/Lock.h>
namespace JSC {
@@ -50,21 +51,16 @@
Lock& getLock() WTF_RETURNS_LOCK(m_lock) { return m_lock; }
- enum class FunctorStatus {
- Continue,
- Done
- };
-
template <typename Functor> void iterate(const Functor& functor) WTF_REQUIRES_LOCK(m_lock)
{
for (VM* vm = m_vmList.head(); vm; vm = vm->next()) {
- FunctorStatus status = functor(*vm);
- if (status == FunctorStatus::Done)
+ IterationStatus status = functor(*vm);
+ if (status == IterationStatus::Done)
return;
}
}
- JS_EXPORT_PRIVATE static void forEachVM(Function<FunctorStatus(VM&)>&&);
+ JS_EXPORT_PRIVATE static void forEachVM(Function<IterationStatus(VM&)>&&);
Expected<bool, Error> isValidExecutableMemory(void*) WTF_REQUIRES_LOCK(m_lock);
Expected<CodeBlock*, Error> codeBlockForMachinePC(void*) WTF_REQUIRES_LOCK(m_lock);
Modified: trunk/Source/WebCore/ChangeLog (293778 => 293779)
--- trunk/Source/WebCore/ChangeLog 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/WebCore/ChangeLog 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,3 +1,15 @@
+2022-05-04 Mark Lam <mark....@apple.com>
+
+ Use IterationStatus in more places.
+ https://bugs.webkit.org/show_bug.cgi?id=239864
+
+ Reviewed by Saam Barati.
+
+ * bindings/js/JSDOMGlobalObject.cpp:
+ (WebCore::callerGlobalObject):
+ * testing/Internals.cpp:
+ (WebCore::GetCallerCodeBlockFunctor::operator() const):
+
2022-05-04 Ziran Sun <z...@igalia.com>
[InputElement] Selection after type change needs to follow HTML specification
Modified: trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp (293778 => 293779)
--- trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/WebCore/bindings/js/JSDOMGlobalObject.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2008-2021 Apple Inc. All Rights Reserved.
+ * Copyright (C) 2008-2022 Apple Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -651,12 +651,12 @@
: m_skipFirstFrame(skipFirstFrame)
{ }
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
if (m_skipFirstFrame) {
if (!m_hasSkippedFirstFrame) {
m_hasSkippedFirstFrame = true;
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
}
}
@@ -670,7 +670,7 @@
if (visitor->callee().isCell() && visitor->callee().asCell()->isObject())
m_globalObject = jsCast<JSObject*>(visitor->callee().asCell())->globalObject();
}
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
JSC::JSGlobalObject* globalObject() const { return m_globalObject; }
Modified: trunk/Source/WebCore/testing/Internals.cpp (293778 => 293779)
--- trunk/Source/WebCore/testing/Internals.cpp 2022-05-04 17:21:04 UTC (rev 293778)
+++ trunk/Source/WebCore/testing/Internals.cpp 2022-05-04 17:44:44 UTC (rev 293779)
@@ -1,6 +1,6 @@
/*
* Copyright (C) 2012 Google Inc. All rights reserved.
- * Copyright (C) 2013-2021 Apple Inc. All rights reserved.
+ * Copyright (C) 2013-2022 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -2473,14 +2473,14 @@
{
}
- StackVisitor::Status operator()(StackVisitor& visitor) const
+ IterationStatus operator()(StackVisitor& visitor) const
{
++m_iterations;
if (m_iterations < 2)
- return StackVisitor::Continue;
+ return IterationStatus::Continue;
m_codeBlock = visitor->codeBlock();
- return StackVisitor::Done;
+ return IterationStatus::Done;
}
CodeBlock* codeBlock() const { return m_codeBlock; }