[webkit-changes] [WebKit/WebKit] a9319f: Introducing LineColumn.

Commit Queue noreply at github.com
Sat Jan 13 11:28:08 PST 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: a9319f524ab7a73affd9e90d36048e46924b0a21
      https://github.com/WebKit/WebKit/commit/a9319f524ab7a73affd9e90d36048e46924b0a21
  Author: Mark Lam <mark.lam at apple.com>
  Date:   2024-01-13 (Sat, 13 Jan 2024)

  Changed paths:
    M Source/JavaScriptCore/API/JSContextRef.cpp
    M Source/JavaScriptCore/CMakeLists.txt
    M Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
    M Source/JavaScriptCore/bytecode/CodeBlock.cpp
    M Source/JavaScriptCore/bytecode/CodeBlock.h
    M Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h
    A Source/JavaScriptCore/bytecode/LineColumn.h
    M Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp
    M Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h
    M Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.cpp
    M Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.h
    M Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h
    M Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp
    M Source/JavaScriptCore/inspector/InjectedScriptManager.cpp
    M Source/JavaScriptCore/inspector/InjectedScriptModule.cpp
    M Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp
    M Source/JavaScriptCore/inspector/ScriptCallFrame.cpp
    M Source/JavaScriptCore/inspector/ScriptCallFrame.h
    M Source/JavaScriptCore/inspector/ScriptCallStackFactory.cpp
    M Source/JavaScriptCore/interpreter/StackVisitor.cpp
    M Source/JavaScriptCore/interpreter/StackVisitor.h
    M Source/JavaScriptCore/runtime/Error.cpp
    M Source/JavaScriptCore/runtime/Error.h
    M Source/JavaScriptCore/runtime/ErrorInstance.cpp
    M Source/JavaScriptCore/runtime/ErrorInstance.h
    M Source/JavaScriptCore/runtime/FileBasedFuzzerAgent.cpp
    M Source/JavaScriptCore/runtime/FileBasedFuzzerAgentBase.cpp
    M Source/JavaScriptCore/runtime/FileBasedFuzzerAgentBase.h
    M Source/JavaScriptCore/runtime/JSGlobalObject.cpp
    M Source/JavaScriptCore/runtime/SamplingProfiler.cpp
    M Source/JavaScriptCore/runtime/SamplingProfiler.h
    M Source/JavaScriptCore/runtime/StackFrame.cpp
    M Source/JavaScriptCore/runtime/StackFrame.h
    M Source/JavaScriptCore/tools/VMInspector.cpp
    M Source/WebCore/bindings/js/SerializedScriptValue.cpp

  Log Message:
  -----------
  Introducing LineColumn.
https://bugs.webkit.org/show_bug.cgi?id=267499
rdar://120949750

Reviewed by Justin Michaud.

In ExpressionRangeInfo code (and a lot of other places in JSC), we pass line and column values
around as a pair.  Sometimes, we have to pass these as references.  Introducing a LineColumn data
structure to pair the 2 values together.  As a result, the code reads more compact and concise.
We also get some minimal efficiency because we can now pass a single LineColumn reference
instead of 2 unsigned references for the 2 values.  We can also now return a LineColumn value
Instead of have to pass in 2 unsigned references to getters that compute these values.

Also applied the usage of LineColumn throughout JSC, with the exception of the Parser and
Debugger where they use slightly "coordinate" systems for the encoding line and column.
Changing them to use LineColumn may incur significant logic change.  Since this patch is
intended as a minimal refactoring patch, we'll leave those sub-systems alone for now.

This change is a stepping stone towards an upcoming patch to compress the encoding of
ExpressionRangeInfo for memory savings.

* Source/JavaScriptCore/API/JSContextRef.cpp:
(BacktraceFunctor::operator() const):
* Source/JavaScriptCore/CMakeLists.txt:
* Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj:
* Source/JavaScriptCore/bytecode/CodeBlock.cpp:
(JSC::CodeBlock::lineColumnForBytecodeIndex const):
(JSC::CodeBlock::expressionRangeForBytecodeIndex const):
(JSC::CodeBlock::hasOpDebugForLineAndColumn):
(JSC::CodeBlock::lineNumberForBytecodeIndex): Deleted.
(JSC::CodeBlock::columnNumberForBytecodeIndex): Deleted.
* Source/JavaScriptCore/bytecode/CodeBlock.h:
* Source/JavaScriptCore/bytecode/ExpressionRangeInfo.h:
(JSC::ExpressionRangeInfo::encodeFatLineMode):
(JSC::ExpressionRangeInfo::encodeFatColumnMode):
(JSC::ExpressionRangeInfo::decodeFatLineMode const):
(JSC::ExpressionRangeInfo::decodeFatColumnMode const):
* Source/JavaScriptCore/bytecode/LineColumn.h: Copied from Source/JavaScriptCore/runtime/FileBasedFuzzerAgentBase.h.
(JSC::LineColumn::operator== const):
* Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:
(JSC::UnlinkedCodeBlock::lineColumnForBytecodeIndex):
(JSC::UnlinkedCodeBlock::getLineAndColumn const):
(JSC::dumpLineColumnEntry):
(JSC::UnlinkedCodeBlock::dumpExpressionRangeInfo):
(JSC::UnlinkedCodeBlock::expressionRangeForBytecodeIndex const):
(JSC::UnlinkedCodeBlock::lineNumberForBytecodeIndex): Deleted.
* Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.h:
* Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.cpp:
(JSC::UnlinkedCodeBlockGenerator::addExpressionInfo):
* Source/JavaScriptCore/bytecode/UnlinkedCodeBlockGenerator.h:
* Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:
(JSC::BytecodeGenerator::emitExpressionInfo):
* Source/JavaScriptCore/debugger/DebuggerCallFrame.cpp:
(JSC::LineAndColumnFunctor::operator() const):
(JSC::LineAndColumnFunctor::line const):
(JSC::LineAndColumnFunctor::column const):
(JSC::DebuggerCallFrame::currentPosition):
(): Deleted.
* Source/JavaScriptCore/inspector/InjectedScriptManager.cpp:
(Inspector::InjectedScriptManager::injectedScriptFor):
* Source/JavaScriptCore/inspector/InjectedScriptModule.cpp:
(Inspector::InjectedScriptModule::ensureInjected):
* Source/JavaScriptCore/inspector/JSGlobalObjectInspectorController.cpp:
(Inspector::JSGlobalObjectInspectorController::appendAPIBacktrace):
* Source/JavaScriptCore/inspector/ScriptCallFrame.cpp:
(Inspector::ScriptCallFrame::ScriptCallFrame):
(Inspector::ScriptCallFrame::isEqual const):
(Inspector::ScriptCallFrame::buildInspectorObject const):
* Source/JavaScriptCore/inspector/ScriptCallFrame.h:
* Source/JavaScriptCore/inspector/ScriptCallStackFactory.cpp:
(Inspector::CreateScriptCallStackFunctor::operator() const):
(Inspector::extractSourceInformationFromException):
(Inspector::createScriptCallStackFromException):
* Source/JavaScriptCore/interpreter/StackVisitor.cpp:
(JSC::StackVisitor::Frame::toString const):
(JSC::StackVisitor::Frame::computeLineAndColumn const):
(JSC::StackVisitor::Frame::dump const):
(JSC::StackVisitor::Frame::retrieveExpressionInfo const): Deleted.
* Source/JavaScriptCore/interpreter/StackVisitor.h:
* Source/JavaScriptCore/runtime/Error.cpp:
(JSC::getLineColumnAndSource):
(JSC::addErrorInfo):
* Source/JavaScriptCore/runtime/Error.h:
* Source/JavaScriptCore/runtime/ErrorInstance.cpp:
(JSC::ErrorInstance::create):
(JSC::appendSourceToErrorMessage):
(JSC::ErrorInstance::finishCreation):
(JSC::ErrorInstance::computeErrorInfo):
(JSC::ErrorInstance::materializeErrorInfoIfNeeded):
* Source/JavaScriptCore/runtime/ErrorInstance.h:
* Source/JavaScriptCore/runtime/FileBasedFuzzerAgent.cpp:
(JSC::FileBasedFuzzerAgent::getPredictionInternal):
* Source/JavaScriptCore/runtime/FileBasedFuzzerAgentBase.cpp:
(JSC::FileBasedFuzzerAgentBase::getPrediction):
* Source/JavaScriptCore/runtime/FileBasedFuzzerAgentBase.h:
* Source/JavaScriptCore/runtime/JSGlobalObject.cpp:
(JSC::JSC_DEFINE_HOST_FUNCTION):
* Source/JavaScriptCore/runtime/SamplingProfiler.cpp:
(JSC::SamplingProfiler::processUnverifiedStackTraces):
* Source/JavaScriptCore/runtime/SamplingProfiler.h:
(JSC::SamplingProfiler::StackFrame::CodeLocation::hasExpressionInfo const):
(JSC::SamplingProfiler::StackFrame::lineNumber const):
(JSC::SamplingProfiler::StackFrame::columnNumber const):
* Source/JavaScriptCore/runtime/StackFrame.cpp:
(JSC::StackFrame::computeLineAndColumn const):
(JSC::StackFrame::toString const):
* Source/JavaScriptCore/runtime/StackFrame.h:
* Source/JavaScriptCore/tools/VMInspector.cpp:
(JSC::VMInspector::dumpRegisters):
* Source/WebCore/bindings/js/SerializedScriptValue.cpp:
(WebCore::CloneDeserializer::readTerminal):

Canonical link: https://commits.webkit.org/273012@main




More information about the webkit-changes mailing list