mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2026-01-25 13:07:13 +00:00
contexts merged with type_info_contexts
This commit is contained in:
parent
e1b9d42da1
commit
6850863f58
7 changed files with 143 additions and 315 deletions
|
|
@ -293,25 +293,25 @@ private:
|
|||
class TypeManager {
|
||||
public:
|
||||
template<typename T>
|
||||
utils::IdType AddType(const T& type, utils::ValueType value_type) {
|
||||
utils::IdType AddValue(const T& type, utils::ValueType value_type) {
|
||||
types_.push_back(std::pair<Type, utils::ValueType> {type, value_type});
|
||||
return types_.size() - 1;
|
||||
}
|
||||
|
||||
utils::IdType AddAnyType(Type&& type, utils::ValueType value_type) {
|
||||
utils::IdType AddAnyValue(Type&& type, utils::ValueType value_type) {
|
||||
types_.push_back(std::pair<Type, utils::ValueType> {std::move(type), value_type});
|
||||
return types_.size() - 1;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
std::optional<T*> GetType(utils::IdType type_id) {
|
||||
std::optional<T*> GetValue(utils::IdType type_id) {
|
||||
if (!std::holds_alternative<T>(types_.at(type_id).first.GetType())) {
|
||||
return std::nullopt;
|
||||
}
|
||||
return &std::get<T>(types_.at(type_id).first.GetType());
|
||||
}
|
||||
|
||||
Type* GetAnyType(utils::IdType type_id) {
|
||||
Type* GetAnyValue(utils::IdType type_id) {
|
||||
return &types_.at(type_id).first;
|
||||
}
|
||||
|
||||
|
|
@ -320,11 +320,11 @@ public:
|
|||
}
|
||||
|
||||
bool EqualTypes(utils::IdType first_type, utils::IdType second_type) {
|
||||
return GetAnyType(first_type)->Same(*GetAnyType(second_type));
|
||||
return GetAnyValue(first_type)->Same(*GetAnyValue(second_type));
|
||||
}
|
||||
|
||||
bool AddTypeRequirement(utils::IdType type, utils::IdType requrement) {
|
||||
return *GetAnyType(requrement) < *GetAnyType(type);
|
||||
return *GetAnyValue(requrement) < *GetAnyValue(type);
|
||||
}
|
||||
|
||||
private:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue