Use static allocator
This commit is contained in:
parent
8530e1162d
commit
d3d487159a
@ -20,7 +20,7 @@ namespace AST {
|
||||
return this->m_ty;
|
||||
}
|
||||
|
||||
codegen::StackValue IntLiteralExpression::codegen(codegen::Builder& builder, codegen::Scope& scope, codegen::StackAllocator& allocator) {
|
||||
codegen::StackValue IntLiteralExpression::codegen(codegen::Builder& builder, codegen::Scope& scope, codegen::StackAllocator&) {
|
||||
auto ty = this->m_ty->codegen(builder, scope.structs);
|
||||
|
||||
return codegen::StackValue{
|
||||
@ -38,7 +38,7 @@ namespace AST {
|
||||
return std::shared_ptr<types::Type> {stack_type};
|
||||
}
|
||||
|
||||
codegen::StackValue StringLiteralExpression::codegen(codegen::Builder& builder, codegen::Scope& scope, codegen::StackAllocator& allocator) {
|
||||
codegen::StackValue StringLiteralExpression::codegen(codegen::Builder& builder, codegen::Scope& scope, codegen::StackAllocator&) {
|
||||
auto stack_type = new types::ArrayType{
|
||||
std::make_shared<types::FundamentalType>(true, types::FundamentalTypeKind::Char),
|
||||
static_cast<uint32_t>(this->m_value.size()) + 1,
|
||||
@ -78,7 +78,7 @@ namespace AST {
|
||||
}
|
||||
}
|
||||
|
||||
codegen::StackValue ValueReferenceExpression::codegen(codegen::Builder& builder, codegen::Scope& scope, codegen::StackAllocator& allocator) {
|
||||
codegen::StackValue ValueReferenceExpression::codegen(codegen::Builder& builder, codegen::Scope& scope, codegen::StackAllocator&) {
|
||||
auto value = scope.values.find(this->m_name);
|
||||
if (value != scope.values.end()) {
|
||||
if (scope.is_lvalue) {
|
||||
@ -393,7 +393,7 @@ namespace AST {
|
||||
}
|
||||
|
||||
codegen::StackValue ListInitializerExpression::codegen(codegen::Builder& builder, codegen::Scope& scope, codegen::StackAllocator& allocator) {
|
||||
auto value_ptr = builder.builder->CreateAlloca(this->m_ty->codegen(builder, scope.structs));
|
||||
auto value_ptr = allocator.pop_alloca(this->m_ty);
|
||||
|
||||
if (this->m_ty->m_kind == types::TypeKind::Array) {
|
||||
auto array_ty = dynamic_cast<types::ArrayType*>(this->m_ty.get());
|
||||
@ -475,8 +475,7 @@ namespace AST {
|
||||
builder.builder->SetInsertPoint(builder.block);
|
||||
|
||||
if (this->m_type->m_kind == types::TypeKind::Array) {
|
||||
auto raw_llvm_ty = this->m_type->codegen(builder, scope.structs);
|
||||
auto ptr = builder.builder->CreateAlloca(raw_llvm_ty);
|
||||
auto ptr = allocator.pop_alloca(this->m_type);
|
||||
if (this->m_expr.has_value()) {
|
||||
auto value = this->m_expr->get()->codegen(builder, scope, allocator);
|
||||
builder.builder->CreateStore(value.value, ptr, false);
|
||||
@ -486,8 +485,7 @@ namespace AST {
|
||||
return;
|
||||
}
|
||||
|
||||
auto ty = this->m_type->codegen(builder, scope.structs);
|
||||
auto ptr = builder.builder->CreateAlloca(ty);
|
||||
auto ptr = allocator.pop_alloca(this->m_type);
|
||||
if (this->m_expr.has_value()) {
|
||||
auto value = this->m_expr->get()->codegen(builder, scope, allocator);
|
||||
builder.builder->CreateStore(value.value, ptr, false);
|
||||
|
||||
@ -72,10 +72,10 @@ namespace AST {
|
||||
}
|
||||
|
||||
void InitializationStatement::codegen_alloca(codegen::StackAllocator& allocator) {
|
||||
allocator.push_alloca(this->m_type, this->m_name);
|
||||
if (this->m_expr) {
|
||||
(*this->m_expr)->codegen_alloca(allocator);
|
||||
}
|
||||
allocator.push_alloca(this->m_type, this->m_name);
|
||||
}
|
||||
|
||||
void ExpressionStatement::codegen_alloca(codegen::StackAllocator& allocator) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user