Start working on type checker

This commit is contained in:
2026-08-01 22:12:05 +10:00
parent 372be46394
commit a8da871aa4
6 changed files with 205 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
#include "typechecker.hpp"
namespace Solstice {
void TypeChecker::initOverloads() {
addOverloads = {
{{BaseType::Int, BaseType::Int}, BaseType::Int},
{{BaseType::Double, BaseType::Double}, BaseType::Double},
{{BaseType::Int, BaseType::Double}, BaseType::Double},
{{BaseType::Double, BaseType::Int}, BaseType::Double},
{{BaseType::String, BaseType::String}, BaseType::String},
{{BaseType::String, BaseType::Char}, BaseType::String},
{{BaseType::Char, BaseType::String}, BaseType::String},
{{BaseType::Char, BaseType::Char}, BaseType::Char}
};
subtractOverloads = {
{{BaseType::Int, BaseType::Int}, BaseType::Int},
{{BaseType::Double, BaseType::Double}, BaseType::Double},
{{BaseType::Int, BaseType::Double}, BaseType::Double},
{{BaseType::Double, BaseType::Int}, BaseType::Double},
{{BaseType::Char, BaseType::Char}, BaseType::Char}
};
multiplyOverloads = {
{{BaseType::Int, BaseType::Int}, BaseType::Int},
{{BaseType::Double, BaseType::Double}, BaseType::Double},
{{BaseType::Int, BaseType::Double}, BaseType::Double},
{{BaseType::Double, BaseType::Int}, BaseType::Double},
{{BaseType::Char, BaseType::Char}, BaseType::Char}
};
divideOverloads = {
{{BaseType::Int, BaseType::Int}, BaseType::Double},
{{BaseType::Double, BaseType::Double}, BaseType::Double},
{{BaseType::Int, BaseType::Double}, BaseType::Double},
{{BaseType::Double, BaseType::Int}, BaseType::Double},
{{BaseType::Char, BaseType::Char}, BaseType::Char}
};
equalOverloads = {
{{BaseType::Int, BaseType::Int}, BaseType::Bool},
{{BaseType::Double, BaseType::Double}, BaseType::Bool},
{{BaseType::Int, BaseType::Double}, BaseType::Bool},
{{BaseType::Double, BaseType::Int}, BaseType::Bool},
{{BaseType::String, BaseType::String}, BaseType::Bool},
{{BaseType::Char, BaseType::Char}, BaseType::Bool},
{{BaseType::Bool, BaseType::Bool}, BaseType::Bool},
};
notEqualOverloads = {
{{BaseType::Int, BaseType::Int}, BaseType::Bool},
{{BaseType::Double, BaseType::Double}, BaseType::Bool},
{{BaseType::Int, BaseType::Double}, BaseType::Bool},
{{BaseType::Double, BaseType::Int}, BaseType::Bool},
{{BaseType::String, BaseType::String}, BaseType::Bool},
{{BaseType::Char, BaseType::Char}, BaseType::Bool},
{{BaseType::Bool, BaseType::Bool}, BaseType::Bool},
};
greaterThanOverloads = {
{{BaseType::Int, BaseType::Int}, BaseType::Bool},
{{BaseType::Double, BaseType::Double}, BaseType::Bool},
{{BaseType::Int, BaseType::Double}, BaseType::Bool},
{{BaseType::Double, BaseType::Int}, BaseType::Bool},
{{BaseType::Char, BaseType::Char}, BaseType::Bool},
};
lesserThanOverloads = {
{{BaseType::Int, BaseType::Int}, BaseType::Bool},
{{BaseType::Double, BaseType::Double}, BaseType::Bool},
{{BaseType::Int, BaseType::Double}, BaseType::Bool},
{{BaseType::Double, BaseType::Int}, BaseType::Bool},
{{BaseType::Char, BaseType::Char}, BaseType::Bool},
};
}
}