38 lines
986 B
C++
38 lines
986 B
C++
|
|
#pragma once
|
||
|
|
|
||
|
|
#include "type.hpp"
|
||
|
|
#include "../parser/parser.hpp"
|
||
|
|
|
||
|
|
#include <string>
|
||
|
|
#include <unordered_map>
|
||
|
|
|
||
|
|
namespace Solstice {
|
||
|
|
|
||
|
|
class TypeChecker {
|
||
|
|
std::unordered_map<std::string, Type> variables;
|
||
|
|
std::unordered_map<std::string, Type> types;
|
||
|
|
|
||
|
|
std::unordered_map<TypePair, Type> addOverloads;
|
||
|
|
std::unordered_map<TypePair, Type> subtractOverloads;
|
||
|
|
std::unordered_map<TypePair, Type> multiplyOverloads;
|
||
|
|
std::unordered_map<TypePair, Type> divideOverloads;
|
||
|
|
std::unordered_map<TypePair, Type> equalOverloads;
|
||
|
|
std::unordered_map<TypePair, Type> notEqualOverloads;
|
||
|
|
std::unordered_map<TypePair, Type> greaterThanOverloads;
|
||
|
|
std::unordered_map<TypePair, Type> lesserThanOverloads;
|
||
|
|
|
||
|
|
Node& input;
|
||
|
|
|
||
|
|
void initOverloads();
|
||
|
|
|
||
|
|
public:
|
||
|
|
|
||
|
|
TypeChecker() = delete;
|
||
|
|
TypeChecker(Node& node) : input(node) {
|
||
|
|
initOverloads();
|
||
|
|
}
|
||
|
|
|
||
|
|
void checkTypes();
|
||
|
|
};
|
||
|
|
}
|