Unify function declarations and definitions. (#896)

This commit is contained in:
Geoff Romer
2021-10-18 16:21:39 -07:00
committed by GitHub
parent c4d7adde9a
commit a3eac75a5b
13 changed files with 113 additions and 181 deletions
+29 -1
View File
@@ -13,7 +13,7 @@ using llvm::cast;
void Declaration::Print(llvm::raw_ostream& out) const {
switch (kind()) {
case Kind::FunctionDeclaration:
out << cast<FunctionDeclaration>(*this).definition();
cast<FunctionDeclaration>(*this).PrintDepth(-1, out);
break;
case Kind::ClassDeclaration: {
@@ -45,4 +45,32 @@ void Declaration::Print(llvm::raw_ostream& out) const {
}
}
void FunctionDeclaration::PrintDepth(int depth, llvm::raw_ostream& out) const {
out << "fn " << name_ << " ";
if (!deduced_parameters_.empty()) {
out << "[";
unsigned int i = 0;
for (const auto& deduced : deduced_parameters_) {
if (i != 0) {
out << ", ";
}
out << deduced.name << ":! ";
deduced.type->Print(out);
++i;
}
out << "]";
}
out << *param_pattern_;
if (!is_omitted_return_type_) {
out << " -> " << *return_type_;
}
if (body_) {
out << " {\n";
(*body_)->PrintDepth(depth, out);
out << "\n}\n";
} else {
out << ";\n";
}
}
} // namespace Carbon