Lex and parse array expression

This commit is contained in:
Rafał Grodziński
2025-07-07 14:53:56 +09:00
parent 18926f3477
commit 18dd7d05d4
12 changed files with 117 additions and 6 deletions

View File

@@ -6,6 +6,7 @@
#include "Parser/Expression/ExpressionGrouping.h"
#include "Parser/Expression/ExpressionLiteral.h"
#include "Parser/Expression/ExpressionArrayLiteral.h"
#include "Parser/Expression/ExpressionVariable.h"
#include "Parser/Expression/ExpressionCall.h"
#include "Parser/Expression/ExpressionIfElse.h"
@@ -132,6 +133,21 @@ void ModuleBuilder::buildVarDeclaration(shared_ptr<StatementVariable> statement)
if (!setAlloca(statement->getName(), alloca))
return;
builder->CreateStore(value, alloca);
/*auto *aType = llvm::ArrayType::get(typeSint32, 7);
llvm::AllocaInst *allocaArr = builder->CreateAlloca(aType, nullptr, statement->getName() + "_Arr");
//llvm::AllocaInst *allocaBrr = builder->CreateAlloca(typeSint32, nullptr, statement->getName() + "_Arr");
vector<llvm::Constant *> values;
auto *bType = llvm::ArrayType::get(typeSint32, 9);
for (int i=0; i<9; i++) {
llvm::Constant *cnst = llvm::ConstantInt::get(typeSint32, i, true);
values.push_back(cnst);
}
llvm::Constant *ar = (llvm::ConstantArray *)llvm::ConstantArray::get(bType, values);
//auto vAr = ar->getAggregateElement(0);
llvm::AllocaInst *arAlloca = builder->CreateAlloca(bType, nullptr, "arBtype");
builder->CreateStore(ar, arAlloca);*/
}
void ModuleBuilder::buildAssignment(shared_ptr<StatementAssignment> statement) {
@@ -234,6 +250,8 @@ llvm::Value *ModuleBuilder::valueForExpression(shared_ptr<Expression> expression
switch (expression->getKind()) {
case ExpressionKind::LITERAL:
return valueForLiteral(dynamic_pointer_cast<ExpressionLiteral>(expression));
case ExpressionKind::ARRAY_LITERAL:
return valueForArrayLiteral(dynamic_pointer_cast<ExpressionArrayLiteral>(expression));
case ExpressionKind::GROUPING:
return valueForExpression(dynamic_pointer_cast<ExpressionGrouping>(expression)->getExpression());
case ExpressionKind::BINARY:
@@ -266,6 +284,10 @@ llvm::Value *ModuleBuilder::valueForLiteral(shared_ptr<ExpressionLiteral> expres
}
}
llvm::Value *ModuleBuilder::valueForArrayLiteral(shared_ptr<ExpressionArrayLiteral> expression) {
return nullptr;
}
llvm::Value *ModuleBuilder::valueForGrouping(shared_ptr<ExpressionGrouping> expression) {
return valueForExpression(expression->getExpression());
}