diff --git a/src/ast.cpp b/src/ast.cpp index b2373a7..a97a72a 100644 --- a/src/ast.cpp +++ b/src/ast.cpp @@ -19,7 +19,10 @@ namespace AST { std::string Function::formatted() { std::stringstream out{ "" }; - out << "Function() {\n"; + out << this->m_name; + out << "() -> "; + out << this->m_return_ty->formatted(); + out << " {\n"; for (auto& statement : this->m_statements) { out << " " << statement->formatted() << "\n"; } @@ -27,4 +30,14 @@ namespace AST { out << "}"; return out.str(); } + + std::string FundamentalType::formatted() { + switch (this->m_ty) { + case FundamentalTypeKind::Int: + return "Int"; + default: + return "Unknown"; + } + + } } \ No newline at end of file diff --git a/src/ast.h b/src/ast.h index 6733f7a..79ec60e 100644 --- a/src/ast.h +++ b/src/ast.h @@ -12,7 +12,10 @@ namespace AST { }; class Expression : public Node {}; - class Type {}; + class Type { + public: + virtual std::string formatted() = 0; + }; class Statement : public Node {}; class IntLiteralExpression : public Expression { @@ -63,6 +66,7 @@ namespace AST { FundamentalTypeKind m_ty; public: FundamentalType(FundamentalTypeKind kind) : m_ty{ kind } {} + virtual std::string formatted() override; }; }