mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-24 20:40:11 +01:00
This is intended to be used only when creating source locations that are known to be ignored because they are fed into operations whose diagnostics are discarded and that do not store the location in any created object. As requested in review of #2321.
59 lines
1.8 KiB
C++
59 lines
1.8 KiB
C++
// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
|
|
// Exceptions. See /LICENSE for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
|
|
#ifndef CARBON_EXPLORER_COMMON_SOURCE_LOCATION_H_
|
|
#define CARBON_EXPLORER_COMMON_SOURCE_LOCATION_H_
|
|
|
|
#include <string>
|
|
#include <string_view>
|
|
|
|
#include "common/ostream.h"
|
|
#include "explorer/common/nonnull.h"
|
|
|
|
namespace Carbon {
|
|
|
|
class SourceLocation {
|
|
public:
|
|
// Produce a source location that is known to not be used, because it is fed
|
|
// into an operation that creates no AST nodes and whose diagnostics are
|
|
// discarded.
|
|
static auto DiagnosticsIgnored() -> SourceLocation {
|
|
return SourceLocation("", 0);
|
|
}
|
|
|
|
// The filename should be eternal or arena-allocated to eliminate copies.
|
|
constexpr SourceLocation(const char* filename, int line_num)
|
|
: filename_(filename), line_num_(line_num) {}
|
|
SourceLocation(Nonnull<const std::string*> filename, int line_num)
|
|
: filename_(filename->c_str()), line_num_(line_num) {}
|
|
|
|
SourceLocation(const SourceLocation&) = default;
|
|
SourceLocation(SourceLocation&&) = default;
|
|
auto operator=(const SourceLocation&) -> SourceLocation& = default;
|
|
auto operator=(SourceLocation&&) -> SourceLocation& = default;
|
|
|
|
auto operator==(SourceLocation other) const -> bool {
|
|
return filename_ == other.filename_ && line_num_ == other.line_num_;
|
|
}
|
|
|
|
void Print(llvm::raw_ostream& out) const {
|
|
out << filename_ << ":" << line_num_;
|
|
}
|
|
auto ToString() const -> std::string {
|
|
std::string result;
|
|
llvm::raw_string_ostream out(result);
|
|
Print(out);
|
|
return result;
|
|
}
|
|
LLVM_DUMP_METHOD void Dump() const { Print(llvm::errs()); }
|
|
|
|
private:
|
|
std::string_view filename_;
|
|
int line_num_;
|
|
};
|
|
|
|
} // namespace Carbon
|
|
|
|
#endif // CARBON_EXPLORER_COMMON_SOURCE_LOCATION_H_
|