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();
case FundamentalTypeKind::Bool:
return builder.builder->getInt1Ty();
case FundamentalTypeKind::Char:
return builder.builder->getInt8Ty();
case FundamentalTypeKind::Void:
return builder.builder->getVoidTy();
default:
return builder.builder->getVoidTy();
}

View File

@ -14,9 +14,25 @@ namespace parsing {
stream.m_position = inner.m_position;
// TODO eventually make this be potentially more than one word
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) {
return std::string{ error.what() };
}

View File

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

View File

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

2
test.c
View File

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