зеркало из https://github.com/mozilla/gecko-dev.git
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:
Родитель
bfacc80d7c
Коммит
4d70b24e9d
|
@ -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 = ¬es[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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче