Skip to content

Commit

Permalink
feat: Added low level types for better FFI interop
Browse files Browse the repository at this point in the history
  • Loading branch information
alinalihassan committed May 27, 2022
1 parent 95a45c4 commit 19ee297
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 2 deletions.
16 changes: 16 additions & 0 deletions src/liblesma/Backend/Codegen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -376,8 +376,16 @@ void Codegen::visit(Statement *node) {
llvm::Type *Codegen::visit(lesma::Type *node) {
if (node->getType() == TokenType::INT_TYPE)
return Builder->getInt64Ty();
if (node->getType() == TokenType::INT8_TYPE)
return Builder->getInt8Ty();
if (node->getType() == TokenType::INT16_TYPE)
return Builder->getInt16Ty();
if (node->getType() == TokenType::INT32_TYPE)
return Builder->getInt32Ty();
if (node->getType() == TokenType::FLOAT_TYPE)
return Builder->getDoubleTy();
if (node->getType() == TokenType::FLOAT32_TYPE)
return Builder->getFloatTy();
else if (node->getType() == TokenType::BOOL_TYPE)
return Builder->getInt1Ty();
else if (node->getType() == TokenType::STRING_TYPE)
Expand Down Expand Up @@ -1086,8 +1094,16 @@ llvm::Value *Codegen::visit(Else * /*node*/) {
std::string Codegen::getTypeMangledName(llvm::SMRange span, llvm::Type *type) {
if (type->isIntegerTy(1))
return "b";
else if (type->isIntegerTy(8))
return "c";
else if (type->isIntegerTy(16))
return "i16";
else if (type->isIntegerTy(32))
return "i32";
else if (type->isIntegerTy())
return "i";
else if (type->isFloatTy())
return "f32";
else if (type->isFloatingPointTy())
return "f";
else if (type->isVoidTy())
Expand Down
2 changes: 1 addition & 1 deletion src/liblesma/Frontend/Parser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ Type *Parser::ParseType() {
auto element_type = ParseType();
return new Type({type->getStart(), element_type->getEnd()}, "*" + element_type->getName(), TokenType::PTR_TYPE, element_type);
} else if (CheckAny<TokenType::INT_TYPE, TokenType::FLOAT_TYPE, TokenType::STRING_TYPE, TokenType::BOOL_TYPE,
TokenType::VOID_TYPE>()) {
TokenType::INT8_TYPE, TokenType::INT16_TYPE, TokenType::INT32_TYPE, TokenType::FLOAT32_TYPE, TokenType::VOID_TYPE>()) {
Advance();
return new Type(type->span, type->lexeme, type->type);
} else if (Check(TokenType::FUNC)) {
Expand Down
10 changes: 9 additions & 1 deletion src/liblesma/Token/Token.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,10 +71,18 @@ TokenType Token::GetIdentifierType(const std::string &identifier, Token *lastTok
return TokenType::IS;
else if (identifier == "in")
return TokenType::IN;
else if (identifier == "int")
else if (identifier == "int" || identifier == "int64")
return TokenType::INT_TYPE;
else if (identifier == "int8")
return TokenType::INT8_TYPE;
else if (identifier == "int16")
return TokenType::INT16_TYPE;
else if (identifier == "int32")
return TokenType::INT32_TYPE;
else if (identifier == "float")
return TokenType::FLOAT_TYPE;
else if (identifier == "float32")
return TokenType::FLOAT32_TYPE;
else if (identifier == "str")
return TokenType::STRING_TYPE;
else if (identifier == "bool")
Expand Down
4 changes: 4 additions & 0 deletions src/liblesma/Token/TokenType.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ namespace lesma {
FUNC_TYPE,
PTR_TYPE,
CUSTOM_TYPE,
INT8_TYPE,
INT16_TYPE,
INT32_TYPE,
FLOAT32_TYPE,

// Keywords.
AND,
Expand Down

0 comments on commit 19ee297

Please sign in to comment.