type_check_visitor FindSubExpressionMethodAndUpdate fixes, fixes

This commit is contained in:
ProgramSnail 2023-05-17 11:51:14 +03:00
parent a90bcb5d92
commit 868d514bcc
6 changed files with 79 additions and 49 deletions

View file

@ -144,13 +144,11 @@ private:
std::optional<FunctionDeclaration*>
FindSubExpressionMethodAndUpdate(FunctionCallExpression* node,
SubExpressionToken* expression_node,
const std::string& name,
const BaseNode& base_node);
std::optional<FunctionDeclaration*>
FindTypeFunctionAndUpdate(FunctionCallExpression* node,
TypeExpression* type_node,
const std::string& name,
std::unordered_map<std::string, utils::IdType>& context);
private:

View file

@ -21,12 +21,21 @@ public:
AbstractType() = default;
AbstractType(utils::AbstractTypeModifier modifier,
const std::string& name,
const std::vector<utils::IdType>& requirements) : modifier_(modifier), name_(name) {
for (auto& typeclass : requirements) {
requirements_.insert(typeclass);
const std::vector<utils::IdType>& requirement_graph_ids)
: modifier_(modifier),
name_(name) {
for (auto& typeclass : requirement_graph_ids) {
requirement_graph_ids_.insert(typeclass);
}
}
AbstractType(utils::AbstractTypeModifier modifier,
const std::string& name,
const std::unordered_set<utils::IdType>& requirement_graph_ids)
: modifier_(modifier),
name_(name),
requirement_graph_ids_(requirement_graph_ids) {}
std::optional<utils::IdType> InContext(const std::unordered_map<std::string, utils::IdType>& context);
bool Same(const AbstractType& type) const;
bool operator<(const AbstractType& type) const;
@ -35,10 +44,14 @@ public:
std::optional<utils::IdType> GetFieldType(const std::string& name,
const std::unordered_set<utils::IdType>& type_namespaces) const;
bool HasTypeclass(utils::IdType graph_id) {
return requirement_graph_ids_.count(graph_id) != 0;
}
private:
utils::AbstractTypeModifier modifier_;
std::string name_;
std::unordered_set<utils::IdType> requirements_; // TODO: all typeclasses from tree
std::unordered_set<utils::IdType> requirement_graph_ids_; // TODO: all typeclasses from tree
};
class DefinedType {