42 constexpr
parse_location(
std::
string file,
int line = 1,
int column = 1) noexcept : _file(
std::move(file)), _line(line - 1), _column(column - 1) {}
50 [[nodiscard]]
constexpr bool has_file() const noexcept
52 return not _file.
empty();
55 [[nodiscard]]
constexpr std::string file() const noexcept
60 [[nodiscard]]
constexpr int line() const noexcept
65 [[nodiscard]]
constexpr int column() const noexcept
72 return {_line + 1, _column + 1};
80 constexpr void set_line(
int line)
noexcept
85 constexpr void set_column(
int column)
noexcept
92 _line = line_and_column.first - 1;
93 _column = line_and_column.second - 1;
96 constexpr void increment_column() noexcept
101 constexpr void tab_column() noexcept
108 constexpr void increment_line() noexcept
114 constexpr parse_location& operator+=(
char c)
noexcept
118 _column = ((_column / 8) + 1) * 8;
134 constexpr parse_location& operator+=(
std::string const& s)
noexcept
142 constexpr parse_location& operator+=(
char const *s)
noexcept
144 hi_assert_not_null(s);
145 while (hilet c = *s++) {
151 constexpr parse_location& operator+=(parse_location
const& location)
noexcept
153 if (location._line == 0) {
154 _column += location._column;
156 _line += location._line;
157 _column = location._column;
164 return std::format(
"{}:{}:{}", l.file(), l.line(), l.column());
177struct std::formatter<
hi::parse_location, CharT> : std::formatter<string_view, CharT> {
178 auto format(hi::parse_location t,
auto& fc)
const
180 return std::formatter<string_view, CharT>::format(
to_string(t), fc);