Var without initializer
This commit is contained in:
@@ -203,14 +203,19 @@ void ModuleBuilder::buildVarDeclaration(shared_ptr<StatementVariable> statement)
|
||||
if (!setAlloca(statement->getName(), alloca))
|
||||
return;
|
||||
} else {
|
||||
llvm::Value *value = valueForExpression(statement->getExpression());
|
||||
if (value == nullptr)
|
||||
return;
|
||||
llvm::AllocaInst *alloca = builder->CreateAlloca(typeForValueType(statement->getValueType(), 0), nullptr, statement->getName());
|
||||
|
||||
if (!setAlloca(statement->getName(), alloca))
|
||||
return;
|
||||
builder->CreateStore(value, alloca);
|
||||
|
||||
// set initial value
|
||||
if (statement->getExpression() != nullptr) {
|
||||
llvm::Value *value = nullptr;
|
||||
value = valueForExpression(statement->getExpression());
|
||||
if (value == nullptr)
|
||||
return;
|
||||
builder->CreateStore(value, alloca);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -271,7 +271,10 @@ string Logger::toString(shared_ptr<StatementMetaExternFunction> statement) {
|
||||
}
|
||||
|
||||
string Logger::toString(shared_ptr<StatementVariable> statement) {
|
||||
return format("{}({}|{})", statement->getName(), toString(statement->getValueType()), toString(statement->getExpression()));
|
||||
if (statement->getExpression() != nullptr)
|
||||
return format("{}({}|{})", statement->getName(), toString(statement->getValueType()), toString(statement->getExpression()));
|
||||
else
|
||||
return format("{}({})", statement->getName(), toString(statement->getValueType()));
|
||||
}
|
||||
|
||||
string Logger::toString(shared_ptr<StatementFunction> statement) {
|
||||
|
||||
@@ -192,8 +192,14 @@ shared_ptr<Statement> Parser::matchStatementVariable() {
|
||||
{
|
||||
Parsee::tokenParsee(TokenKind::IDENTIFIER, true, true, false),
|
||||
Parsee::valueTypeParsee(true, true, false),
|
||||
Parsee::tokenParsee(TokenKind::LEFT_ARROW, true, false, true),
|
||||
Parsee::expressionParsee(true, true, true)
|
||||
Parsee::groupParsee(
|
||||
ParseeGroup(
|
||||
{
|
||||
Parsee::tokenParsee(TokenKind::LEFT_ARROW, true, false, false),
|
||||
Parsee::expressionParsee(true, true, true)
|
||||
}
|
||||
), false, true, false
|
||||
)
|
||||
}
|
||||
)
|
||||
);
|
||||
@@ -203,7 +209,7 @@ shared_ptr<Statement> Parser::matchStatementVariable() {
|
||||
|
||||
string identifier = resultsGroup.getResults().at(0).getToken()->getLexme();
|
||||
shared_ptr<ValueType> valueType = resultsGroup.getResults().at(1).getValueType();
|
||||
shared_ptr<Expression> expression = resultsGroup.getResults().at(2).getExpression();
|
||||
shared_ptr<Expression> expression = resultsGroup.getResults().size() > 2 ? resultsGroup.getResults().at(2).getExpression() : nullptr;
|
||||
|
||||
return make_shared<StatementVariable>(identifier, valueType, expression);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user