Add InitializationStatement AST

This commit is contained in:
Sofia 2026-04-09 15:18:36 +03:00
parent 927ed01fac
commit 7aaa665058
3 changed files with 28 additions and 0 deletions

View File

@ -11,6 +11,16 @@ namespace AST {
return out.str();
}
std::string InitializationStatement::formatted() {
std::stringstream out{ "" };
out << this->m_type->formatted() << " " << this->m_name;
if (this->m_expr) {
out << " = " << this->m_expr->get()->formatted();
}
out << ";";
return out.str();
}
std::string IntLiteralExpression::formatted() {
std::stringstream out{ "" };
out << this->m_value;

View File

@ -52,6 +52,20 @@ namespace AST {
virtual void codegen(codegen::Builder& builder) override;
};
class InitializationStatement : public Statement {
private:
std::unique_ptr<Type> m_type;
std::string m_name;
std::optional<std::unique_ptr<Expression>> m_expr;
public:
InitializationStatement(std::unique_ptr<Type> ty, std::string name, std::optional<std::unique_ptr<Expression>> expr)
: m_type{ std::move(ty) }, m_name{ name }, m_expr{ std::move(expr) } {
}
virtual ~InitializationStatement() override = default;
virtual std::string formatted() override;
virtual void codegen(codegen::Builder& builder) override;
};
class TopLevelStatement : public Node {
public:
virtual void codegen(codegen::Builder& builder) = 0;

View File

@ -22,6 +22,10 @@ namespace AST {
builder.builder->CreateRet(value);
}
void InitializationStatement::codegen(codegen::Builder& builder) {
return;
}
void Function::codegen(codegen::Builder& builder) {
auto ret_ty = this->m_return_ty->codegen(builder);
std::vector<llvm::Type*> params{};