Bug 1847469 - Part 8: Use column number types in ubi. r=iain

Differential Revision: https://phabricator.services.mozilla.com/D185746
This commit is contained in:
Tooru Fujisawa
2023-08-16 17:31:37 +00:00
parent 1500b53947
commit 207870ed6d
6 changed files with 34 additions and 26 deletions

View File

@@ -8,6 +8,7 @@
#include <utility>
#include "js/ColumnNumber.h" // JS::TaggedColumnNumberOneOrigin
#include "js/UbiNode.h"
#include "js/UniquePtr.h"
#include "mozilla/HashFunctions.h"
@@ -158,7 +159,7 @@ struct DeserializedStackFrame {
StackFrameId id;
Maybe<StackFrameId> parent;
uint32_t line;
uint32_t column;
JS::TaggedColumnNumberOneOrigin column;
// Borrowed references to strings owned by this DeserializedStackFrame's
// owning HeapSnapshot.
const char16_t* source;
@@ -169,13 +170,11 @@ struct DeserializedStackFrame {
// AddRef'ing because this frame's lifetime is equal to that of its owner.
HeapSnapshot* owner;
explicit DeserializedStackFrame(StackFrameId id,
const Maybe<StackFrameId>& parent,
uint32_t line, uint32_t column,
const char16_t* source,
const char16_t* functionDisplayName,
bool isSystem, bool isSelfHosted,
HeapSnapshot& owner)
explicit DeserializedStackFrame(
StackFrameId id, const Maybe<StackFrameId>& parent, uint32_t line,
JS::TaggedColumnNumberOneOrigin column, const char16_t* source,
const char16_t* functionDisplayName, bool isSystem, bool isSelfHosted,
HeapSnapshot& owner)
: id(id),
parent(parent),
line(line),
@@ -198,7 +197,6 @@ struct DeserializedStackFrame {
: id(0),
parent(Nothing()),
line(0),
column(0),
source(nullptr),
functionDisplayName(nullptr),
isSystem(false),
@@ -281,7 +279,9 @@ class ConcreteStackFrame<DeserializedStackFrame> : public BaseStackFrame {
uint64_t identifier() const override { return get().id; }
uint32_t line() const override { return get().line; }
uint32_t column() const override { return get().column; }
JS::TaggedColumnNumberOneOrigin column() const override {
return get().column;
}
bool isSystem() const override { return get().isSystem; }
bool isSelfHosted(JSContext* cx) const override { return get().isSelfHosted; }
void trace(JSTracer* trc) override {}

View File

@@ -10,6 +10,7 @@
#include <google/protobuf/io/zero_copy_stream_impl_lite.h>
#include "js/Array.h" // JS::NewArrayObject
#include "js/ColumnNumber.h" // JS::LimitedColumnNumberOneOrigin, JS::TaggedColumnNumberOneOrigin
#include "js/Debug.h"
#include "js/PropertyAndElement.h" // JS_DefineProperty
#include "js/TypeDecls.h"
@@ -324,7 +325,8 @@ bool HeapSnapshot::saveStackFrame(const protobuf::StackFrame& frame,
uint32_t line = data.line();
if (!data.has_column()) return false;
uint32_t column = data.column();
JS::TaggedColumnNumberOneOrigin column(
JS::LimitedColumnNumberOneOrigin(data.column()));
if (!data.has_issystem()) return false;
bool isSystem = data.issystem();
@@ -1099,7 +1101,7 @@ class MOZ_STACK_CLASS StreamWriter : public CoreDumpWriter {
data->set_id(id);
data->set_line(frame.line());
data->set_column(frame.column());
data->set_column(frame.column().oneOriginValue());
data->set_issystem(frame.isSystem());
data->set_isselfhosted(frame.isSelfHosted(cx));

View File

@@ -8,6 +8,7 @@
// would like.
#include "DevTools.h"
#include "js/ColumnNumber.h" // JS::LimitedColumnNumberOneOrigin, JS::TaggedColumnNumberOneOrigin
#include "js/SavedFrameAPI.h"
#include "js/TypeDecls.h"
#include "mozilla/devtools/DeserializedNode.h"
@@ -23,7 +24,8 @@ struct MockDeserializedStackFrame : public DeserializedStackFrame {
DEF_TEST(DeserializedStackFrameUbiStackFrames, {
StackFrameId id = uint64_t(1) << 42;
uint32_t line = 1337;
uint32_t column = 9; // 3 space tabs!?
JS::TaggedColumnNumberOneOrigin column(
JS::LimitedColumnNumberOneOrigin(9)); // 3 space tabs!?
const char16_t* source = u"my-javascript-file.js";
const char16_t* functionDisplayName = u"myFunctionName";
@@ -62,7 +64,7 @@ DEF_TEST(DeserializedStackFrameUbiStackFrames, {
uint32_t frameColumn;
ASSERT_EQ(JS::SavedFrameResult::Ok,
JS::GetSavedFrameColumn(cx, principals, savedFrame, &frameColumn));
EXPECT_EQ(column, frameColumn);
EXPECT_EQ(column.oneOriginValue(), frameColumn);
JS::Rooted<JSObject*> parent(cx);
ASSERT_EQ(JS::SavedFrameResult::Ok,

View File

@@ -22,6 +22,7 @@
#include "jspubtd.h"
#include "js/AllocPolicy.h"
#include "js/ColumnNumber.h" // JS::TaggedColumnNumberOneOrigin
#include "js/HashTable.h"
#include "js/RootingAPI.h"
#include "js/TypeDecls.h"
@@ -248,8 +249,8 @@ class BaseStackFrame {
// Get this frame's line number (1-origin).
virtual uint32_t line() const = 0;
// Get this frame's column number in UTF-16 code units (1-origin).
virtual uint32_t column() const = 0;
// Get this frame's column number in UTF-16 code units.
virtual JS::TaggedColumnNumberOneOrigin column() const = 0;
// Get this frame's source name. Never null.
virtual AtomOrTwoByteChars source() const = 0;
@@ -421,7 +422,7 @@ class StackFrame {
return id;
}
uint32_t line() const { return base()->line(); }
uint32_t column() const { return base()->column(); }
JS::TaggedColumnNumberOneOrigin column() const { return base()->column(); }
AtomOrTwoByteChars source() const { return base()->source(); }
uint32_t sourceId() const { return base()->sourceId(); }
AtomOrTwoByteChars functionDisplayName() const {
@@ -470,7 +471,9 @@ class ConcreteStackFrame<void> : public BaseStackFrame {
}
uint32_t line() const override { MOZ_CRASH("null JS::ubi::StackFrame"); }
uint32_t column() const override { MOZ_CRASH("null JS::ubi::StackFrame"); }
JS::TaggedColumnNumberOneOrigin column() const override {
MOZ_CRASH("null JS::ubi::StackFrame");
}
AtomOrTwoByteChars source() const override {
MOZ_CRASH("null JS::ubi::StackFrame");
}

View File

@@ -261,7 +261,9 @@ class ConcreteStackFrame<SavedFrame> : public BaseStackFrame {
StackFrame parent() const override { return get().getParent(); }
uint32_t line() const override { return get().getLine(); }
uint32_t column() const override { return get().getColumn().rawValue(); }
JS::TaggedColumnNumberOneOrigin column() const override {
return get().getColumn();
}
AtomOrTwoByteChars source() const override {
auto source = get().getSource();

View File

@@ -2069,13 +2069,12 @@ JS_PUBLIC_API bool ConstructSavedFrameStackSlow(
auto principals =
js::ReconstructedSavedFramePrincipals::getSingleton(ubiFrame.get());
if (!stackChain.emplaceBack(
source, ubiFrame.get().sourceId(), ubiFrame.get().line(),
JS::TaggedColumnNumberOneOrigin::fromRaw(ubiFrame.get().column()),
functionDisplayName,
/* asyncCause */ nullptr,
/* parent */ nullptr, principals,
/* mutedErrors */ true)) {
if (!stackChain.emplaceBack(source, ubiFrame.get().sourceId(),
ubiFrame.get().line(), ubiFrame.get().column(),
functionDisplayName,
/* asyncCause */ nullptr,
/* parent */ nullptr, principals,
/* mutedErrors */ true)) {
ReportOutOfMemory(cx);
return false;
}