Add void and char types

This commit is contained in:
Sofia 2026-04-11 21:40:59 +03:00
parent 7cf752f67b
commit 6855360a97
5 changed files with 32 additions and 4 deletions

View File

@ -222,6 +222,10 @@ namespace types {
return builder.builder->getInt32Ty(); return builder.builder->getInt32Ty();
case FundamentalTypeKind::Bool: case FundamentalTypeKind::Bool:
return builder.builder->getInt1Ty(); return builder.builder->getInt1Ty();
case FundamentalTypeKind::Char:
return builder.builder->getInt8Ty();
case FundamentalTypeKind::Void:
return builder.builder->getVoidTy();
default: default:
return builder.builder->getVoidTy(); return builder.builder->getVoidTy();
} }

View File

@ -14,8 +14,24 @@ namespace parsing {
stream.m_position = inner.m_position; stream.m_position = inner.m_position;
auto ty = new types::FundamentalType{ types::FundamentalTypeKind::Int }; // TODO eventually make this be potentially more than one word
return std::unique_ptr<types::Type>{ ty }; std::string type_name = token.content;
if (type_name == "int") {
auto ty = new types::FundamentalType{ types::FundamentalTypeKind::Int };
return std::unique_ptr<types::Type>{ ty };
}
else if (type_name == "char") {
auto ty = new types::FundamentalType{ types::FundamentalTypeKind::Char };
return std::unique_ptr<types::Type>{ ty };
}
else if (type_name == "void") {
auto ty = new types::FundamentalType{ types::FundamentalTypeKind::Void };
return std::unique_ptr<types::Type>{ ty };
}
else {
throw std::runtime_error("Expected type name, got " + type_name);
}
} }
catch (std::runtime_error& error) { catch (std::runtime_error& error) {
return std::string{ error.what() }; return std::string{ error.what() };

View File

@ -42,6 +42,12 @@ namespace types {
switch (this->m_ty) { switch (this->m_ty) {
case FundamentalTypeKind::Int: case FundamentalTypeKind::Int:
return "Int"; return "Int";
case FundamentalTypeKind::Bool:
return "Bool";
case FundamentalTypeKind::Char:
return "Char";
case FundamentalTypeKind::Void:
return "Void";
default: default:
return "Unknown"; return "Unknown";
} }

View File

@ -20,7 +20,9 @@ namespace types {
enum FundamentalTypeKind { enum FundamentalTypeKind {
Int, Int,
Bool Bool,
Char,
Void,
}; };
class Type { class Type {

2
test.c
View File

@ -1,4 +1,4 @@
void printf(int b); void printf(char b);
int fibonacci(int n) { int fibonacci(int n) {
if (n < 2) if (n < 2)