Implemented value assignment

This commit is contained in:
Rafał Grodziński
2025-06-26 17:04:43 +09:00
parent 293522315b
commit abb3239ed1
8 changed files with 86 additions and 7 deletions

View File

@@ -10,6 +10,7 @@
#include "Parser/Statement/StatementFunction.h"
#include "Parser/Statement/StatementVariable.h"
#include "Parser/Statement/StatementAssignment.h"
#include "Parser/Statement/StatementReturn.h"
#include "Parser/Statement/StatementExpression.h"
#include "Parser/Statement/StatementLoop.h"
@@ -44,6 +45,9 @@ void ModuleBuilder::buildStatement(shared_ptr<Statement> statement) {
case StatementKind::VARIABLE:
buildVarDeclaration(dynamic_pointer_cast<StatementVariable>(statement));
break;
case StatementKind::ASSIGNMENT:
buildAssignment(dynamic_pointer_cast<StatementAssignment>(statement));
break;
case StatementKind::BLOCK:
buildBlock(dynamic_pointer_cast<StatementBlock>(statement));
break;
@@ -111,6 +115,15 @@ void ModuleBuilder::buildVarDeclaration(shared_ptr<StatementVariable> statement)
builder->CreateStore(value, alloca);
}
void ModuleBuilder::buildAssignment(shared_ptr<StatementAssignment> statement) {
llvm::AllocaInst *alloca = allocaMap[statement->getName()];
if (alloca == nullptr)
failWithMessage("Variable " + statement->getName() + " not defined");
llvm::Value *value = valueForExpression(statement->getExpression());
builder->CreateStore(value, alloca);
}
void ModuleBuilder::buildBlock(shared_ptr<StatementBlock> statement) {
for (shared_ptr<Statement> &innerStatement : statement->getStatements())
buildStatement(innerStatement);