mirror of
https://codeberg.org/ProgramSnail/lang_2023.git
synced 2025-12-29 02:08:45 +00:00
optional variable deffinition added, annotations removed
This commit is contained in:
parent
7ce8513ad0
commit
de7c1e062f
20 changed files with 178 additions and 57 deletions
|
|
@ -99,9 +99,10 @@ private:
|
|||
|
||||
void Visit(PartitionName* node) override;
|
||||
void Visit(NameExpression* node) override;
|
||||
void Visit(OptionalName* node) override;
|
||||
void Visit(TupleName* node) override;
|
||||
void Visit(VariantName* node) override;
|
||||
void Visit(AnnotatedName* node) override;
|
||||
void Visit(Name* node) override;
|
||||
|
||||
void Visit(AnyName& node) override; // variant
|
||||
|
||||
|
|
|
|||
|
|
@ -108,9 +108,10 @@ private:
|
|||
|
||||
// // void Visit(PartitionName* node) override;
|
||||
void Visit(NameExpression* node) override;
|
||||
void Visit(OptionalName* node) override;
|
||||
void Visit(TupleName* node) override;
|
||||
void Visit(VariantName* node) override;
|
||||
void Visit(AnnotatedName* node) override;
|
||||
void Visit(Name* node) override;
|
||||
|
||||
// Type, typeclass, etc. -----------------
|
||||
|
||||
|
|
@ -190,8 +191,12 @@ private:
|
|||
// local types store types graph ids
|
||||
|
||||
utils::IdType current_value_;
|
||||
|
||||
std::optional<LoopControlExpression> active_loop_control_expression_;
|
||||
|
||||
std::optional<utils::IsConstModifier> is_const_definition_;
|
||||
bool is_definition_failed_ = false;
|
||||
|
||||
bool case_matched_;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -84,9 +84,10 @@ private:
|
|||
|
||||
// // void Visit(PartitionName* node) override;
|
||||
// // void Visit(NameExpression* node) override;
|
||||
// // void Visit(OptionalName* node) override;
|
||||
// // void Visit(TupleName* node) override;
|
||||
// // void Visit(VariantName* node) override;
|
||||
// // void Visit(AnnotatedName* node) override;
|
||||
// // void Visit(Name* node) override;
|
||||
|
||||
// Type, typeclass, etc. -----------------
|
||||
|
||||
|
|
|
|||
|
|
@ -192,13 +192,15 @@ struct PartitionName {
|
|||
};
|
||||
|
||||
struct NameExpression;
|
||||
struct OptionalName;
|
||||
struct TupleName;
|
||||
struct VariantName;
|
||||
struct AnnotatedName;
|
||||
struct Name;
|
||||
|
||||
// // ScopedAnyName <-> AnyName
|
||||
using AnyName = std::variant<
|
||||
std::unique_ptr<AnnotatedName>,
|
||||
std::unique_ptr<Name>,
|
||||
std::unique_ptr<OptionalName>,
|
||||
std::unique_ptr<TupleName>,
|
||||
std::unique_ptr<VariantName>>;
|
||||
|
||||
|
|
@ -599,6 +601,12 @@ struct NameExpression {
|
|||
std::vector<NameIdentifier> names;
|
||||
};
|
||||
|
||||
struct OptionalName {
|
||||
BaseNode base;
|
||||
|
||||
ScopedAnyName name;
|
||||
};
|
||||
|
||||
struct TupleName {
|
||||
BaseNode base;
|
||||
|
||||
|
|
@ -611,11 +619,10 @@ struct VariantName {
|
|||
std::vector<ScopedAnyName> names;
|
||||
};
|
||||
|
||||
struct AnnotatedName {
|
||||
struct Name {
|
||||
BaseNode base;
|
||||
|
||||
NameIdentifier name;
|
||||
std::optional<ScopedAnyType> type;
|
||||
};
|
||||
|
||||
// ----------------- Type, typeclass, etc. -----------------
|
||||
|
|
|
|||
|
|
@ -93,9 +93,10 @@ private:
|
|||
|
||||
// // void Visit(PartitionName* node) override;
|
||||
// // void Visit(NameExpression* node) override;
|
||||
// // void Visit(OptionalName* node) override;
|
||||
// // void Visit(TupleName* node) override;
|
||||
// // void Visit(VariantName* node) override;
|
||||
// // void Visit(AnnotatedName* node) override;
|
||||
// // void Visit(Name* node) override;
|
||||
|
||||
// Type, typeclass, etc. -----------------
|
||||
|
||||
|
|
|
|||
|
|
@ -84,9 +84,10 @@ const std::string LoopControlExpression = "loop_control_expression";
|
|||
|
||||
const std::string PartitionName = "partition_name";
|
||||
const std::string NameExpression = "name_expression";
|
||||
const std::string OptionalName = "optional_name";
|
||||
const std::string TupleName = "tuple_name";
|
||||
const std::string VariantName = "variant_name";
|
||||
const std::string AnnotatedName = "annotated_name";
|
||||
const std::string Name = "name";
|
||||
const std::string AnyName = "any_name";
|
||||
const std::string ScopedAnyName = "scoped_any_name";
|
||||
|
||||
|
|
|
|||
|
|
@ -82,9 +82,10 @@ private:
|
|||
|
||||
void Visit(PartitionName* node) override;
|
||||
void Visit(NameExpression* node) override;
|
||||
void Visit(OptionalName* node) override;
|
||||
void Visit(TupleName* node) override;
|
||||
void Visit(VariantName* node) override;
|
||||
void Visit(AnnotatedName* node) override;
|
||||
void Visit(Name* node) override;
|
||||
|
||||
// Type, typeclass, etc. -----------------
|
||||
|
||||
|
|
|
|||
|
|
@ -103,9 +103,10 @@ private:
|
|||
|
||||
void Visit(PartitionName* node) override;
|
||||
void Visit(NameExpression* node) override;
|
||||
void Visit(OptionalName* node) override;
|
||||
void Visit(TupleName* node) override;
|
||||
void Visit(VariantName* node) override;
|
||||
void Visit(AnnotatedName* node) override;
|
||||
void Visit(Name* node) override;
|
||||
|
||||
// Type, typeclass, etc. -----------------
|
||||
|
||||
|
|
@ -261,6 +262,7 @@ private:
|
|||
std::unordered_map<info::type::InternalType, utils::IdType> internal_to_abstract_type_;
|
||||
|
||||
std::optional<utils::IsConstModifier> is_const_definition_;
|
||||
bool definition_can_fail_ = false; // for optional patterns
|
||||
|
||||
bool is_in_statement_ = false;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -84,9 +84,10 @@ private:
|
|||
|
||||
void Visit(PartitionName* node) override;
|
||||
void Visit(NameExpression* node) override;
|
||||
void Visit(OptionalName* node) override;
|
||||
void Visit(TupleName* node) override;
|
||||
void Visit(VariantName* node) override;
|
||||
void Visit(AnnotatedName* node) override;
|
||||
void Visit(Name* node) override;
|
||||
|
||||
// Type, typeclass, etc. -----------------
|
||||
|
||||
|
|
|
|||
|
|
@ -230,6 +230,11 @@ public:
|
|||
const std::unordered_set<utils::IdType>& type_namespaces) const;
|
||||
|
||||
std::string ToString() const;
|
||||
|
||||
utils::IdType GetType() const {
|
||||
return type_;
|
||||
}
|
||||
|
||||
private:
|
||||
utils::IdType type_;
|
||||
TypeManager* type_manager_ = nullptr;
|
||||
|
|
|
|||
|
|
@ -96,9 +96,10 @@ protected:
|
|||
|
||||
virtual void Visit(PartitionName* node);
|
||||
virtual void Visit(NameExpression* node);
|
||||
virtual void Visit(OptionalName* node);
|
||||
virtual void Visit(TupleName* node);
|
||||
virtual void Visit(VariantName* node);
|
||||
virtual void Visit(AnnotatedName* node);
|
||||
virtual void Visit(Name* node);
|
||||
|
||||
virtual void Visit(AnyName& node); // variant
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue