Add InitializationStatement AST
This commit is contained in:
parent
927ed01fac
commit
7aaa665058
10
src/ast.cpp
10
src/ast.cpp
@ -11,6 +11,16 @@ namespace AST {
|
|||||||
return out.str();
|
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::string IntLiteralExpression::formatted() {
|
||||||
std::stringstream out{ "" };
|
std::stringstream out{ "" };
|
||||||
out << this->m_value;
|
out << this->m_value;
|
||||||
|
|||||||
14
src/ast.h
14
src/ast.h
@ -52,6 +52,20 @@ namespace AST {
|
|||||||
virtual void codegen(codegen::Builder& builder) override;
|
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 {
|
class TopLevelStatement : public Node {
|
||||||
public:
|
public:
|
||||||
virtual void codegen(codegen::Builder& builder) = 0;
|
virtual void codegen(codegen::Builder& builder) = 0;
|
||||||
|
|||||||
@ -22,6 +22,10 @@ namespace AST {
|
|||||||
builder.builder->CreateRet(value);
|
builder.builder->CreateRet(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void InitializationStatement::codegen(codegen::Builder& builder) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void Function::codegen(codegen::Builder& builder) {
|
void Function::codegen(codegen::Builder& builder) {
|
||||||
auto ret_ty = this->m_return_ty->codegen(builder);
|
auto ret_ty = this->m_return_ty->codegen(builder);
|
||||||
std::vector<llvm::Type*> params{};
|
std::vector<llvm::Type*> params{};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user