Store params in stack properly as well

This commit is contained in:
Sofia 2026-04-14 00:25:11 +03:00
parent acd1e5d39b
commit 01d4999e14
2 changed files with 13 additions and 5 deletions

View File

@ -231,12 +231,17 @@ namespace AST {
int counter = 0; int counter = 0;
for (auto& param : this->m_params) { for (auto& param : this->m_params) {
auto param_ty_ptr = param_ty_ptrs[counter]; builder.builder->SetInsertPoint(BB);
auto arg_ptr = builder.builder->CreateAlloca(param_ty_ptrs[counter]->codegen(builder));
auto param_ty_ptr = std::shared_ptr<types::Type>{
new types::PointerType { param_ty_ptrs[counter]}
};
auto arg = function->getArg(counter++); auto arg = function->getArg(counter++);
builder.builder->CreateStore(arg, arg_ptr);
if (param.first) { if (param.first) {
arg->setName(*param.first); arg->setName(*param.first);
inner_scope.values[*param.first] = codegen::StackValue{ inner_scope.values[*param.first] = codegen::StackValue{
arg, arg_ptr,
param_ty_ptr, param_ty_ptr,
}; };
} }

9
test.c
View File

@ -6,10 +6,13 @@ int fibonacci(int n) {
return fibonacci(n - 1) + fibonacci(n - 2); return fibonacci(n - 1) + fibonacci(n - 2);
} }
void modifyvalue(char* otus) {
(*otus) = 20;
}
int main() { int main() {
printf("10th fibonacci number is %d!", fibonacci(10)); printf("10th fibonacci number is %d!", fibonacci(10));
char res = 0; char res = 10;
char* test = &res; modifyvalue(&res);
(*test) = 20;
return res; return res;
} }