Variables can now be read from

This commit is contained in:
Pasha Bibko
2025-04-28 21:16:54 +01:00
parent cbc179411a
commit ce8f1619a4
4 changed files with 19 additions and 4 deletions

View File

@@ -92,6 +92,9 @@ namespace LX::AST
llvm::Value* VariableAccess::GenIR(InfoLLVM& LLVM)
{
return nullptr;
llvm::AllocaInst* var = LLVM.scope->GetVar(m_Name);
ThrowIf<Scope::VariableDoesntExist>(var == nullptr);
return LLVM.builder.CreateLoad(llvm::Type::getInt32Ty(LLVM.context), var, m_Name + "_val");
}
}

View File

@@ -42,6 +42,10 @@ namespace LX
case Token::NUMBER_LITERAL:
return std::make_unique<AST::NumberLiteral>(p.tokens[p.index++].GetContents());
// If an Identifier has got here it means a variable is being accessed //
case Token::IDENTIFIER:
return std::make_unique<AST::VariableAccess>(p.tokens[p.index++].GetContents());
// TODO: Fix this //
case Token::OPEN_BRACKET:
p.scopeDepth++;

View File

@@ -3,10 +3,10 @@
This is my custom compiled language written in C++ based off of the LLVM toolchain. Do not use the language in it's current state unless you are insane.
### Planned features
- Variables
- Operations (Maths + BinOp)
- Functions
- More than just int as a type
- References / Pointers
- Structs / Classes (Polymorphism + vtables)
### Stuff I want to do later

View File

@@ -1,5 +1,13 @@
func main()
{
int result
result = 4
int a
a = 4
int b
b = 7
int c
c = a + b
return c
}