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:
@@ -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 {}
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user