Bug 1862692 - Part 13: Use 1-origin column number type in source notes. r=iain

Differential Revision: https://phabricator.services.mozilla.com/D193026
This commit is contained in:
Tooru Fujisawa 2023-11-09 11:41:09 +00:00
Родитель bfacc80d7c
Коммит 4d70b24e9d
5 изменённых файлов: 31 добавлений и 38 удалений

Просмотреть файл

@ -58,7 +58,7 @@
#include "frontend/TDZCheckCache.h" // TDZCheckCache
#include "frontend/TryEmitter.h" // TryEmitter
#include "frontend/WhileEmitter.h" // WhileEmitter
#include "js/ColumnNumber.h" // JS::LimitedColumnNumberZeroOrigin, JS::ColumnNumberOffset
#include "js/ColumnNumber.h" // JS::LimitedColumnNumberOneOrigin, JS::ColumnNumberOffset
#include "js/friend/ErrorMessages.h" // JSMSG_*
#include "js/friend/StackLimits.h" // AutoCheckRecursionLimit
#include "util/StringBuffer.h" // StringBuffer
@ -610,9 +610,9 @@ bool BytecodeEmitter::updateSourceCoordNotes(uint32_t offset) {
errorReporter().columnAt(offset);
// Assert colspan is always representable.
static_assert((0 - ptrdiff_t(JS::LimitedColumnNumberZeroOrigin::Limit)) >=
static_assert((0 - ptrdiff_t(JS::LimitedColumnNumberOneOrigin::Limit)) >=
SrcNote::ColSpan::MinColSpan);
static_assert((ptrdiff_t(JS::LimitedColumnNumberZeroOrigin::Limit) - 0) <=
static_assert((ptrdiff_t(JS::LimitedColumnNumberOneOrigin::Limit) - 0) <=
SrcNote::ColSpan::MaxColSpan);
JS::ColumnNumberOffset colspan = columnIndex - bytecodeSection().lastColumn();
@ -625,14 +625,12 @@ bool BytecodeEmitter::updateSourceCoordNotes(uint32_t offset) {
const SrcNotesVector& notes = bytecodeSection().notes();
SrcNoteType type = notes[lastLineOnlySrcNoteIndex].type();
if (type == SrcNoteType::NewLine) {
if (!convertLastNewLineToNewLineColumn(
JS::LimitedColumnNumberZeroOrigin(columnIndex))) {
if (!convertLastNewLineToNewLineColumn(columnIndex)) {
return false;
}
} else {
MOZ_ASSERT(type == SrcNoteType::SetLine);
if (!convertLastSetLineToSetLineColumn(
JS::LimitedColumnNumberZeroOrigin(columnIndex))) {
if (!convertLastSetLineToSetLineColumn(columnIndex)) {
return false;
}
}
@ -12653,7 +12651,7 @@ bool BytecodeEmitter::newSrcNote2(SrcNoteType type, ptrdiff_t offset,
}
bool BytecodeEmitter::convertLastNewLineToNewLineColumn(
JS::LimitedColumnNumberZeroOrigin column) {
JS::LimitedColumnNumberOneOrigin column) {
SrcNotesVector& notes = bytecodeSection().notes();
MOZ_ASSERT(lastLineOnlySrcNoteIndex == notes.length() - 1);
SrcNote* sn = &notes[lastLineOnlySrcNoteIndex];
@ -12669,7 +12667,7 @@ bool BytecodeEmitter::convertLastNewLineToNewLineColumn(
}
bool BytecodeEmitter::convertLastSetLineToSetLineColumn(
JS::LimitedColumnNumberZeroOrigin column) {
JS::LimitedColumnNumberOneOrigin column) {
SrcNotesVector& notes = bytecodeSection().notes();
// The Line operand is either 1 byte or 4 bytes.
MOZ_ASSERT(lastLineOnlySrcNoteIndex == notes.length() - 1 - 1 ||

Просмотреть файл

@ -34,7 +34,7 @@
#include "frontend/SourceNotes.h" // SrcNoteType
#include "frontend/ValueUsage.h" // ValueUsage
#include "js/AllocPolicy.h" // ReportOutOfMemory
#include "js/ColumnNumber.h" // JS::LimitedColumnNumberZeroOrigin
#include "js/ColumnNumber.h" // JS::LimitedColumnNumberOneOrigin
#include "js/TypeDecls.h" // jsbytecode
#include "vm/BuiltinObjectKind.h" // BuiltinObjectKind
#include "vm/CheckIsObjectKind.h" // CheckIsObjectKind
@ -495,9 +495,9 @@ struct MOZ_STACK_CLASS BytecodeEmitter {
[[nodiscard]] bool newSrcNote2(SrcNoteType type, ptrdiff_t operand,
unsigned* indexp = nullptr);
[[nodiscard]] bool convertLastNewLineToNewLineColumn(
JS::LimitedColumnNumberZeroOrigin column);
JS::LimitedColumnNumberOneOrigin column);
[[nodiscard]] bool convertLastSetLineToSetLineColumn(
JS::LimitedColumnNumberZeroOrigin column);
JS::LimitedColumnNumberOneOrigin column);
[[nodiscard]] bool newSrcNoteOperand(ptrdiff_t operand);

Просмотреть файл

@ -14,7 +14,7 @@
#include <stdint.h> // int8_t, uint8_t, uint32_t
#include "jstypes.h" // js::{Bit, BitMask}
#include "js/ColumnNumber.h" // JS::ColumnNumberOffset, JS::LimitedColumnNumberZeroOrigin
#include "js/ColumnNumber.h" // JS::ColumnNumberOffset, JS::LimitedColumnNumberOneOrigin
namespace js {
@ -264,19 +264,17 @@ class SrcNote {
enum class Operands { Column, Count };
private:
static inline JS::LimitedColumnNumberZeroOrigin fromOperand(
static inline JS::LimitedColumnNumberOneOrigin fromOperand(
ptrdiff_t operand) {
return JS::LimitedColumnNumberZeroOrigin(operand);
return JS::LimitedColumnNumberOneOrigin(operand);
}
public:
static inline ptrdiff_t toOperand(
JS::LimitedColumnNumberZeroOrigin column) {
return column.zeroOriginValue();
static inline ptrdiff_t toOperand(JS::LimitedColumnNumberOneOrigin column) {
return column.oneOriginValue();
}
static inline JS::LimitedColumnNumberZeroOrigin getColumn(
const SrcNote* sn);
static inline JS::LimitedColumnNumberOneOrigin getColumn(const SrcNote* sn);
};
class SetLine {
@ -318,20 +316,19 @@ class SrcNote {
return size_t(operand);
}
static inline JS::LimitedColumnNumberZeroOrigin columnFromOperand(
static inline JS::LimitedColumnNumberOneOrigin columnFromOperand(
ptrdiff_t operand) {
return JS::LimitedColumnNumberZeroOrigin(operand);
return JS::LimitedColumnNumberOneOrigin(operand);
}
public:
static inline ptrdiff_t columnToOperand(
JS::LimitedColumnNumberZeroOrigin column) {
return column.zeroOriginValue();
JS::LimitedColumnNumberOneOrigin column) {
return column.oneOriginValue();
}
static inline size_t getLine(const SrcNote* sn, size_t initialLine);
static inline JS::LimitedColumnNumberZeroOrigin getColumn(
const SrcNote* sn);
static inline JS::LimitedColumnNumberOneOrigin getColumn(const SrcNote* sn);
};
friend class SrcNoteWriter;
@ -444,7 +441,7 @@ inline JS::ColumnNumberOffset SrcNote::ColSpan::getSpan(const SrcNote* sn) {
}
/* static */
inline JS::LimitedColumnNumberZeroOrigin SrcNote::NewLineColumn::getColumn(
inline JS::LimitedColumnNumberOneOrigin SrcNote::NewLineColumn::getColumn(
const SrcNote* sn) {
return fromOperand(SrcNoteReader::getOperand(sn, unsigned(Operands::Column)));
}
@ -463,7 +460,7 @@ inline size_t SrcNote::SetLineColumn::getLine(const SrcNote* sn,
}
/* static */
inline JS::LimitedColumnNumberZeroOrigin SrcNote::SetLineColumn::getColumn(
inline JS::LimitedColumnNumberOneOrigin SrcNote::SetLineColumn::getColumn(
const SrcNote* sn) {
return columnFromOperand(
SrcNoteReader::getOperand(sn, unsigned(Operands::Column)));

Просмотреть файл

@ -208,15 +208,13 @@ class BytecodeRangeWithPosition : private BytecodeRange {
column = JS::LimitedColumnNumberOneOrigin();
} else if (type == SrcNoteType::SetLineColumn) {
lineno = SrcNote::SetLineColumn::getLine(sn, initialLine);
column = JS::LimitedColumnNumberOneOrigin(
SrcNote::SetLineColumn::getColumn(sn));
column = SrcNote::SetLineColumn::getColumn(sn);
} else if (type == SrcNoteType::NewLine) {
lineno++;
column = JS::LimitedColumnNumberOneOrigin();
} else if (type == SrcNoteType::NewLineColumn) {
lineno++;
column = JS::LimitedColumnNumberOneOrigin(
SrcNote::NewLineColumn::getColumn(sn));
column = SrcNote::NewLineColumn::getColumn(sn);
} else if (type == SrcNoteType::Breakpoint) {
isBreakpoint = true;
} else if (type == SrcNoteType::BreakpointStepSep) {

Просмотреть файл

@ -2652,15 +2652,13 @@ unsigned js::PCToLineNumber(unsigned startLine,
column = JS::LimitedColumnNumberOneOrigin();
} else if (type == SrcNoteType::SetLineColumn) {
lineno = SrcNote::SetLineColumn::getLine(sn, startLine);
column = JS::LimitedColumnNumberOneOrigin(
SrcNote::SetLineColumn::getColumn(sn));
column = SrcNote::SetLineColumn::getColumn(sn);
} else if (type == SrcNoteType::NewLine) {
lineno++;
column = JS::LimitedColumnNumberOneOrigin();
} else if (type == SrcNoteType::NewLineColumn) {
lineno++;
column = JS::LimitedColumnNumberOneOrigin(
SrcNote::NewLineColumn::getColumn(sn));
column = SrcNote::NewLineColumn::getColumn(sn);
} else if (type == SrcNoteType::ColSpan) {
column += SrcNote::ColSpan::getSpan(sn);
}
@ -3513,7 +3511,8 @@ bool JSScript::dumpSrcNotes(JSContext* cx, JS::Handle<JSScript*> script,
case SrcNoteType::SetLineColumn:
lineno = SrcNote::SetLineColumn::getLine(sn, script->lineno());
column = SrcNote::SetLineColumn::getColumn(sn);
column = JS::LimitedColumnNumberZeroOrigin(
SrcNote::SetLineColumn::getColumn(sn));
sp->printf(" lineno %u column %u", lineno, column.zeroOriginValue());
break;
@ -3523,7 +3522,8 @@ bool JSScript::dumpSrcNotes(JSContext* cx, JS::Handle<JSScript*> script,
break;
case SrcNoteType::NewLineColumn:
column = SrcNote::NewLineColumn::getColumn(sn);
column = JS::LimitedColumnNumberZeroOrigin(
SrcNote::NewLineColumn::getColumn(sn));
sp->printf(" column %u", column.zeroOriginValue());
++lineno;
break;