mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-05 22:48:42 +00:00
type_check_visitor FindSubExpressionMethodAndUpdate fixes, fixes
This commit is contained in:
parent
a90bcb5d92
commit
868d514bcc
6 changed files with 79 additions and 49 deletions
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue