This commit is contained in:
2026-08-02 15:14:43 +10:00
parent 16846d13bb
commit cf79fd00b9
3 changed files with 154 additions and 21 deletions

View File

@@ -9,7 +9,7 @@
namespace Solstice {
class TypeChecker {
std::unordered_map<std::string, Type> variables;
std::unordered_map<std::string, PossibleType> variables;
std::unordered_map<std::string, Type> types;
std::unordered_map<TypePair, Type> addOverloads;
@@ -21,7 +21,7 @@ namespace Solstice {
std::unordered_map<TypePair, Type> greaterThanOverloads;
std::unordered_map<TypePair, Type> lesserThanOverloads;
Node& input;
Node* input;
bool inFunction = false;
@@ -37,15 +37,38 @@ namespace Solstice {
void checkCodeBlockType(Node& node);
void checkAddType(Node& node);
void checkSubtractType(Node& node);
void checkMultiplyType(Node& node);
void checkDivideType(Node& node);
void checkEqualType(Node& node);
void checkNotEqualType(Node& node);
void checkGreaterThanType(Node& node);
void checkLesserThanType(Node& node);
void checkNodeType(Node& node);
public:
TypeChecker() = delete;
TypeChecker(Node& node) : input(node) {
TypeChecker(Node& node) : input(&node) {
initOverloads();
}
void setNode(Node& node) {
input = &node;
}
// Only for use as a public function.
void setVariable(const std::string& name, const Type& type) {
variables[name] = {{type}};
}
void setVariableUnknown(const std::string& name) {
variables[name].unknownType = true;
}
void checkTypes();
};
}