Replace int lines with file-associated SourceLocations (#779)

Most interesting changes should be ast/source_location.h and syntax/parse_and_lex_context.h
This commit is contained in:
Jon Meow
2021-08-26 10:07:16 -07:00
committed by GitHub
parent 33daf64329
commit 3ec550a85f
46 changed files with 607 additions and 518 deletions
+8 -8
View File
@@ -55,7 +55,7 @@ void Pattern::Print(llvm::raw_ostream& out) const {
}
TuplePattern::TuplePattern(const Expression* tuple_literal)
: Pattern(Kind::TuplePattern, tuple_literal->LineNumber()) {
: Pattern(Kind::TuplePattern, tuple_literal->SourceLoc()) {
const auto& tuple = cast<TupleLiteral>(*tuple_literal);
for (const FieldInitializer& init : tuple.Fields()) {
fields.push_back(Field(
@@ -63,30 +63,30 @@ TuplePattern::TuplePattern(const Expression* tuple_literal)
}
}
auto PatternFromParenContents(int line_num,
auto PatternFromParenContents(SourceLocation loc,
const ParenContents<Pattern>& paren_contents)
-> const Pattern* {
std::optional<const Pattern*> single_term = paren_contents.SingleTerm();
if (single_term.has_value()) {
return *single_term;
} else {
return TuplePatternFromParenContents(line_num, paren_contents);
return TuplePatternFromParenContents(loc, paren_contents);
}
}
auto TuplePatternFromParenContents(int line_num,
auto TuplePatternFromParenContents(SourceLocation loc,
const ParenContents<Pattern>& paren_contents)
-> const TuplePattern* {
return global_arena->RawNew<TuplePattern>(
line_num, paren_contents.TupleElements<TuplePattern::Field>(line_num));
loc, paren_contents.TupleElements<TuplePattern::Field>(loc));
}
AlternativePattern::AlternativePattern(int line_num,
AlternativePattern::AlternativePattern(SourceLocation loc,
const Expression* alternative,
const TuplePattern* arguments)
: Pattern(Kind::AlternativePattern, line_num), arguments(arguments) {
: Pattern(Kind::AlternativePattern, loc), arguments(arguments) {
if (alternative->Tag() != Expression::Kind::FieldAccessExpression) {
FATAL_PROGRAM_ERROR(alternative->LineNumber())
FATAL_PROGRAM_ERROR(alternative->SourceLoc())
<< "Alternative pattern must have the form of a field access.";
}
const auto& field_access = cast<FieldAccessExpression>(*alternative);