contexts fixes

This commit is contained in:
ProgramSnail 2023-05-09 15:51:13 +03:00
parent 6850863f58
commit ab29a785bf
7 changed files with 106 additions and 94 deletions

View file

@ -19,7 +19,6 @@ include_directories(include
add_executable(lang_interpreter src/main.cpp add_executable(lang_interpreter src/main.cpp
src/types.cpp src/types.cpp
src/global_info.cpp src/global_info.cpp
include/type_info_contexts.hpp
include/definitions.hpp include/definitions.hpp
src/visitor.cpp src/visitor.cpp
src/build_visitor.cpp src/build_visitor.cpp
@ -28,6 +27,7 @@ add_executable(lang_interpreter src/main.cpp
src/link_symbols_visitor.cpp src/link_symbols_visitor.cpp
src/type_check_visitor.cpp src/type_check_visitor.cpp
src/typed_print_visitor.cpp src/typed_print_visitor.cpp
src/execute_visitor.cpp
lang-parser/src/parser.c lang-parser/src/parser.c
lang-parser/src/tree_sitter/parser.h lang-parser/src/tree_sitter/parser.h
tree-sitter/lib/src/lib.c) tree-sitter/lib/src/lib.c)

View file

@ -6,7 +6,6 @@
#include "contexts.hpp" #include "contexts.hpp"
#include "global_info.hpp" #include "global_info.hpp"
#include "interpreter_tree.hpp" #include "interpreter_tree.hpp"
#include "type_info_contexts.hpp"
#include "types.hpp" #include "types.hpp"
#include "utils.hpp" #include "utils.hpp"
#include "values.hpp" #include "values.hpp"

View file

@ -3,15 +3,16 @@
#include <ostream> #include <ostream>
// for clangd // for clangd
#include "type_info_contexts.hpp"
#include "visitor.hpp" #include "visitor.hpp"
#include "types.hpp"
#include "contexts.hpp"
namespace interpreter { namespace interpreter {
class TypedPrintVisitor : public Visitor { class TypedPrintVisitor : public Visitor {
public: public:
explicit TypedPrintVisitor(std::ostream& out, explicit TypedPrintVisitor(std::ostream& out,
info::TypeInfoContextManager& context_manager) info::ContextManager<info::type::Type, info::type::TypeManager>& context_manager)
: out_(out), context_manager_(context_manager) {} : out_(out), context_manager_(context_manager) {}
private: private:
@ -123,7 +124,7 @@ private:
private: private:
std::ostream& out_; std::ostream& out_;
info::TypeInfoContextManager& context_manager_; info::ContextManager<info::type::Type, info::type::TypeManager>& context_manager_;
}; };
} // namespace interpreter } // namespace interpreter

View file

@ -13,24 +13,19 @@ namespace info::value {
struct Unit {}; struct Unit {};
struct InternalValue { struct InternalValue {
public: public:
InternalValue() = default; InternalValue() = default;
explicit InternalValue(std::variant<double,
long long, template<typename T>
std::string, explicit InternalValue(const T& value) : value(value) {} // move ??
char,
bool,
Unit>&& value) : value(std::move(value)) {}
template<typename T> template<typename T>
std::optional<T*> GetValue() { std::optional<T*> GetValue() {
if (!std::holds_alternative<T>(value)) { if (!std::holds_alternative<T>(value)) {
return std::nullopt; return std::nullopt;
} }
return std::get<T>(value); return &std::get<T>(value);
} }
public: public:
std::variant<double, std::variant<double,
@ -107,6 +102,13 @@ public:
}; };
struct Value { // DefinedValue ?? struct Value { // DefinedValue ??
public:
Value() = default;
template<typename T>
explicit Value(const T& value) : value(value) {} // move ??
public:
std::variant<InternalValue, std::variant<InternalValue,
TupleValue, TupleValue,
VariantValue, VariantValue,
@ -120,7 +122,7 @@ class ValueManager {
public: public:
template<typename T> template<typename T>
utils::IdType AddValue(const T& value, utils::ValueType value_type) { utils::IdType AddValue(const T& value, utils::ValueType value_type) {
values_.push_back(std::pair<Value, utils::ValueType> {value, value_type}); values_.push_back(std::pair<Value, utils::ValueType> {Value(value), value_type});
return values_.size() - 1; return values_.size() - 1;
} }
@ -144,6 +146,11 @@ public:
utils::ValueType GetValueType(utils::IdType value_id) { utils::ValueType GetValueType(utils::IdType value_id) {
return values_.at(value_id).second; return values_.at(value_id).second;
} }
bool EqualTypes(utils::IdType first_type, utils::IdType second_type) = delete; // TODO
bool AddTypeRequirement(utils::IdType type, utils::IdType requrement) = delete;
private: private:
std::vector<std::pair<Value, utils::ValueType>> values_; std::vector<std::pair<Value, utils::ValueType>> values_;
}; };

View file

@ -5,7 +5,6 @@
// for clangd // for clangd
#include "../include/parse_tree.hpp" #include "../include/parse_tree.hpp"
#include "../include/global_info.hpp" #include "../include/global_info.hpp"
#include "../include/type_info_contexts.hpp"
#include "../include/interpreter_tree.hpp" #include "../include/interpreter_tree.hpp"
#include "../include/build_visitor.hpp" #include "../include/build_visitor.hpp"
#include "../include/print_visitor.hpp" #include "../include/print_visitor.hpp"
@ -13,6 +12,7 @@
#include "../include/link_symbols_visitor.hpp" #include "../include/link_symbols_visitor.hpp"
#include "../include/type_check_visitor.hpp" #include "../include/type_check_visitor.hpp"
#include "../include/typed_print_visitor.hpp" #include "../include/typed_print_visitor.hpp"
#include "../include/execute_visitor.hpp"
#include "../include/error_handling.hpp" #include "../include/error_handling.hpp"
int main(int argc, char** argv) { // TODO, only test version int main(int argc, char** argv) { // TODO, only test version
@ -44,14 +44,19 @@ int main(int argc, char** argv) { // TODO, only test version
std::make_unique<interpreter::tokens::SourceFile>(); std::make_unique<interpreter::tokens::SourceFile>();
info::GlobalInfo global_info; info::GlobalInfo global_info;
info::TypeInfoContextManager context_manager; info::ContextManager<info::type::Type, info::type::TypeManager> type_context_manager;
info::ContextManager<info::value::Value, info::value::ValueManager> context_manager;
interpreter::BuildVisitor build_visitor(parse_tree); interpreter::BuildVisitor build_visitor(parse_tree);
interpreter::PrintVisitor print_visitor(std::cout); interpreter::PrintVisitor print_visitor(std::cout);
interpreter::FindSymbolsVisitor find_symbols_visitor(global_info); interpreter::FindSymbolsVisitor find_symbols_visitor(global_info);
interpreter::LinkSymbolsVisitor link_symbols_visitor(global_info); interpreter::LinkSymbolsVisitor link_symbols_visitor(global_info);
interpreter::TypeCheckVisitor type_check_visitor(global_info, context_manager); interpreter::TypeCheckVisitor type_check_visitor(global_info, type_context_manager);
interpreter::TypedPrintVisitor typed_print_visitor(std::cout, context_manager); interpreter::TypedPrintVisitor typed_print_visitor(std::cout, type_context_manager);
interpreter::ExecuteVisitor execute_visitor(global_info,
type_context_manager,
context_manager,
nullptr); // TODO
build_visitor.VisitSourceFile(source_file.get()); build_visitor.VisitSourceFile(source_file.get());

View file

@ -9,7 +9,7 @@ void TypedPrintVisitor::Visit(SourceFile* node) {
out_ << "[SourceFile : "; out_ << "[SourceFile : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] (\n\n"; out_ << "] (\n\n";
@ -25,7 +25,7 @@ void TypedPrintVisitor::Visit(NamespaceSources* node) {
out_ << "[NamespaceSources : "; out_ << "[NamespaceSources : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "](\n"; out_ << "](\n";
@ -39,7 +39,7 @@ void TypedPrintVisitor::Visit(Namespace* node) {
out_ << "[Namespace : "; out_ << "[Namespace : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] "; out_ << "] ";
@ -81,7 +81,7 @@ void TypedPrintVisitor::Visit(AliasDefinitionStatement* node) {
out_ << "[Alias : ("; out_ << "[Alias : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -107,7 +107,7 @@ void TypedPrintVisitor::Visit(VariableDefinitionStatement* node) {
out_ << "[Variable : ("; out_ << "[Variable : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -134,7 +134,7 @@ void TypedPrintVisitor::Visit(FunctionDeclaration* node) {
out_ << ": ("; out_ << ": (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -152,7 +152,7 @@ void TypedPrintVisitor::Visit(FunctionDefinitionStatement* node) {
out_ << "[Function : "; out_ << "[Function : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -166,7 +166,7 @@ void TypedPrintVisitor::Visit(TypeDefinitionStatement* node) {
out_ << "[Type : ("; out_ << "[Type : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -192,7 +192,7 @@ void TypedPrintVisitor::Visit(AbstractTypeDefinitionStatement* node) {
out_ << "[AbstractType : ("; out_ << "[AbstractType : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -213,7 +213,7 @@ void TypedPrintVisitor::Visit(TypeclassDefinitionStatement* node) {
out_ << "[Typeclass : "; out_ << "[Typeclass : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -233,7 +233,7 @@ void TypedPrintVisitor::Visit(PartitionStatement* node) {
out_ << "[Partition : ("; out_ << "[Partition : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -257,7 +257,7 @@ void TypedPrintVisitor::Visit(FunctionDefinition* node) {
out_ << "[FunctionDefinition : ("; out_ << "[FunctionDefinition : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -286,7 +286,7 @@ void TypedPrintVisitor::Visit(TypeDefinition* node) {
out_ << "[TypeDefinition : "; out_ << "[TypeDefinition : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -306,7 +306,7 @@ void TypedPrintVisitor::Visit(AnyAnnotatedType* node) {
out_ << "[Annotated (Abstract) Type : ("; out_ << "[Annotated (Abstract) Type : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -328,7 +328,7 @@ void TypedPrintVisitor::Visit(TypeConstructorPatternParameter* node) {
out_ << "[TypeConstructorPatternParameter : ("; out_ << "[TypeConstructorPatternParameter : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -344,7 +344,7 @@ void TypedPrintVisitor::Visit(TypeConstructorPattern* node) {
out_ << "[TypeConstructorPattern : ("; out_ << "[TypeConstructorPattern : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -367,7 +367,7 @@ void TypedPrintVisitor::Visit(MatchCase* node) {
out_ << "[MatchCase | : ("; out_ << "[MatchCase | : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -387,7 +387,7 @@ void TypedPrintVisitor::Visit(Match* node) {
out_ << "[Match : "; out_ << "[Match : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -403,7 +403,7 @@ void TypedPrintVisitor::Visit(Condition* node) {
out_ << "[If : "; out_ << "[If : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -430,7 +430,7 @@ void TypedPrintVisitor::Visit(DoWhileLoop* node) {
out_ << "[Do : "; out_ << "[Do : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] (\n"; out_ << "] (\n";
@ -444,7 +444,7 @@ void TypedPrintVisitor::Visit(WhileLoop* node) {
out_ << "[While : "; out_ << "[While : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -457,7 +457,7 @@ void TypedPrintVisitor::Visit(ForLoop* node) {
out_ << "[For : "; out_ << "[For : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -481,7 +481,7 @@ void TypedPrintVisitor::Visit(LoopLoop* node) {
out_ << "[Loop : "; out_ << "[Loop : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] (\n"; out_ << "] (\n";
@ -495,7 +495,7 @@ void TypedPrintVisitor::Visit(Block* node) {
out_ << "[Block : "; out_ << "[Block : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] {\n"; out_ << "] {\n";
@ -509,7 +509,7 @@ void TypedPrintVisitor::Visit(ScopedStatement* node) {
out_ << "[Scoped : "; out_ << "[Scoped : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ( "; out_ << "] ( ";
@ -534,7 +534,7 @@ void TypedPrintVisitor::Visit(BinaryOperatorExpression* node) {
out_ << "[BinaryOperator : "; out_ << "[BinaryOperator : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -550,7 +550,7 @@ void TypedPrintVisitor::Visit(UnaryOperatorExpression* node) {
out_ << "[UnaryOperator : ("; out_ << "[UnaryOperator : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -564,7 +564,7 @@ void TypedPrintVisitor::Visit(ReferenceExpression* node) {
out_ << "[ReferenceExpression : ("; out_ << "[ReferenceExpression : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -587,7 +587,7 @@ void TypedPrintVisitor::Visit(AccessExpression* node) {
out_ << "[AccessExpression : "; out_ << "[AccessExpression : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -603,7 +603,7 @@ void TypedPrintVisitor::Visit(FunctionCallExpression* node) {
out_ << "[FunctionCall : ("; out_ << "[FunctionCall : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -651,7 +651,7 @@ void TypedPrintVisitor::Visit(TupleExpression* node) {
out_ << "[TupleExpression : "; out_ << "[TupleExpression : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -666,7 +666,7 @@ void TypedPrintVisitor::Visit(VariantExpression* node) {
out_ << "[VariantExpression : "; out_ << "[VariantExpression : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -681,7 +681,7 @@ void TypedPrintVisitor::Visit(ReturnExpression* node) {
out_ << "[Return : "; out_ << "[Return : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -693,7 +693,7 @@ void TypedPrintVisitor::Visit(TypeConstructorParameter* node) {
out_ << "[TypeConstructorParameter : ("; out_ << "[TypeConstructorParameter : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -716,7 +716,7 @@ void TypedPrintVisitor::Visit(TypeConstructor* node) {
out_ << "[TypeConstructor : ("; out_ << "[TypeConstructor : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -739,7 +739,7 @@ void TypedPrintVisitor::Visit(LambdaFunction* node) {
out_ << "[LambdaFunction : "; out_ << "[LambdaFunction : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -761,7 +761,7 @@ void TypedPrintVisitor::Visit(ArrayExpression* node) {
out_ << "[ArrayExpression : "; out_ << "[ArrayExpression : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ( ,"; out_ << "] ( ,";
@ -778,7 +778,7 @@ void TypedPrintVisitor::Visit(PartitionName* node) {
out_ << "[PartitionName : "; out_ << "[PartitionName : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -794,7 +794,7 @@ void TypedPrintVisitor::Visit(NameExpression* node) {
out_ << "[NameExpression : "; out_ << "[NameExpression : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -811,7 +811,7 @@ void TypedPrintVisitor::Visit(TupleName* node) {
out_ << "[TupleName : "; out_ << "[TupleName : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -826,7 +826,7 @@ void TypedPrintVisitor::Visit(VariantName* node) {
out_ << "[VariantName : "; out_ << "[VariantName : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -841,7 +841,7 @@ void TypedPrintVisitor::Visit(AnnotatedName* node) {
out_ << "[AnnotatedName : ("; out_ << "[AnnotatedName : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -862,7 +862,7 @@ void TypedPrintVisitor::Visit(FunctionType* node) {
out_ << "[FunctionType : "; out_ << "[FunctionType : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -881,7 +881,7 @@ void TypedPrintVisitor::Visit(TupleType* node) {
out_ << "[TupleType : ("; out_ << "[TupleType : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -904,7 +904,7 @@ void TypedPrintVisitor::Visit(VariantType* node) {
out_ << "[VariantType : ("; out_ << "[VariantType : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -929,7 +929,7 @@ void TypedPrintVisitor::Visit(TypeExpression* node) {
out_ << "[TypeExpression : ("; out_ << "[TypeExpression : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -950,7 +950,7 @@ void TypedPrintVisitor::Visit(ExtendedScopedAnyType* node) {
out_ << "[ExtendedScopedAnyType : ("; out_ << "[ExtendedScopedAnyType : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") "; out_ << ") ";
@ -987,7 +987,7 @@ void TypedPrintVisitor::Visit(ParametrizedType* node) {
out_ << "[ParametrizedType : "; out_ << "[ParametrizedType : ";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << "] ("; out_ << "] (";
@ -1005,7 +1005,7 @@ void TypedPrintVisitor::Visit(ExtendedName* node) {
out_ << "[ExtendedName : ("; out_ << "[ExtendedName : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") " << node->name << "] "; out_ << ") " << node->name << "] ";
@ -1019,7 +1019,7 @@ void TypedPrintVisitor::Visit(FloatNumberLiteral* node) {
out_ << "[FloatNumber : ("; out_ << "[FloatNumber : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") " << node->value << "] "; out_ << ") " << node->value << "] ";
@ -1029,7 +1029,7 @@ void TypedPrintVisitor::Visit(NumberLiteral* node) {
out_ << "[Number : ("; out_ << "[Number : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") " << node->value << "] "; out_ << ") " << node->value << "] ";
@ -1039,7 +1039,7 @@ void TypedPrintVisitor::Visit(StringLiteral* node) {
out_ << "[String : ("; out_ << "[String : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") " << node->value << "] "; out_ << ") " << node->value << "] ";
@ -1049,7 +1049,7 @@ void TypedPrintVisitor::Visit(CharLiteral* node) {
out_ << "[Char : ("; out_ << "[Char : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") " << node->value << "] "; out_ << ") " << node->value << "] ";
@ -1059,7 +1059,7 @@ void TypedPrintVisitor::Visit(UnitLiteral* node) {
out_ << "[Unit : ("; out_ << "[Unit : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") ()] "; out_ << ") ()] ";
@ -1069,7 +1069,7 @@ void TypedPrintVisitor::Visit(BoolLiteral* node) {
out_ << "[bool : ("; out_ << "[bool : (";
if (node->base.type_.has_value()) { if (node->base.type_.has_value()) {
out_ << context_manager_.GetAnyType(node->base.type_.value())->GetTypeName(); out_ << context_manager_.GetAnyValue(node->base.type_.value())->GetTypeName();
} }
out_ << ") " << (node->value ? "true" : "false") << "] "; out_ << ") " << (node->value ? "true" : "false") << "] ";

View file

@ -37,7 +37,7 @@ std::optional<utils::IdType> AbstractType::GetFieldType(const std::string& name)
// //
std::optional<utils::IdType> DefinedType::InContext(const std::unordered_map<std::string, utils::IdType>& context) { std::optional<utils::IdType> DefinedType::InContext(const std::unordered_map<std::string, utils::IdType>& context) {
std::optional<utils::IdType> maybe_type_replacement = type_manager_->GetAnyType(type_)->InContext(context); std::optional<utils::IdType> maybe_type_replacement = type_manager_->GetAnyValue(type_)->InContext(context);
if (maybe_type_replacement.has_value()) { if (maybe_type_replacement.has_value()) {
type_ = maybe_type_replacement.value(); type_ = maybe_type_replacement.value();
@ -48,12 +48,12 @@ std::optional<utils::IdType> DefinedType::InContext(const std::unordered_map<std
bool DefinedType::Same(const DefinedType& type) const { bool DefinedType::Same(const DefinedType& type) const {
return type_id_ == type.type_id_ return type_id_ == type.type_id_
&& type_manager_->GetAnyType(type_)->Same(*type_manager_->GetAnyType(type.type_)); && type_manager_->GetAnyValue(type_)->Same(*type_manager_->GetAnyValue(type.type_));
} }
bool DefinedType::operator<(const DefinedType& type) const { bool DefinedType::operator<(const DefinedType& type) const {
return type_id_ == type.type_id_ return type_id_ == type.type_id_
&& *type_manager_->GetAnyType(type_) < *type_manager_->GetAnyType(type.type_); && *type_manager_->GetAnyValue(type_) < *type_manager_->GetAnyValue(type.type_);
} }
bool DefinedType::operator>(const DefinedType& type) const { bool DefinedType::operator>(const DefinedType& type) const {
@ -61,14 +61,14 @@ bool DefinedType::operator>(const DefinedType& type) const {
} }
std::optional<utils::IdType> DefinedType::GetFieldType(const std::string& name) const { std::optional<utils::IdType> DefinedType::GetFieldType(const std::string& name) const {
return type_manager_->GetAnyType(type_)->GetFieldType(name); return type_manager_->GetAnyValue(type_)->GetFieldType(name);
} }
// //
std::optional<utils::IdType> TupleType::InContext(const std::unordered_map<std::string, utils::IdType>& context) { std::optional<utils::IdType> TupleType::InContext(const std::unordered_map<std::string, utils::IdType>& context) {
for (size_t i = 0; i < fields_.size(); ++i) { for (size_t i = 0; i < fields_.size(); ++i) {
std::optional<utils::IdType> maybe_field_replacement = type_manager_->GetAnyType(fields_[i].second)->InContext(context); std::optional<utils::IdType> maybe_field_replacement = type_manager_->GetAnyValue(fields_[i].second)->InContext(context);
if (maybe_field_replacement.has_value()) { if (maybe_field_replacement.has_value()) {
fields_[i].second = maybe_field_replacement.value(); fields_[i].second = maybe_field_replacement.value();
@ -84,7 +84,7 @@ bool TupleType::Same(const TupleType& type) const {
} }
for (size_t i = 0; i < fields_.size(); ++i) { for (size_t i = 0; i < fields_.size(); ++i) {
if (!type_manager_->GetAnyType(fields_[i].second)->Same(*type_manager_->GetAnyType(type.fields_[i].second))) { if (!type_manager_->GetAnyValue(fields_[i].second)->Same(*type_manager_->GetAnyValue(type.fields_[i].second))) {
return false; return false;
} }
} }
@ -98,7 +98,7 @@ bool TupleType::operator<(const TupleType& type) const {
} }
for (size_t i = 0; i < fields_.size(); ++i) { for (size_t i = 0; i < fields_.size(); ++i) {
if (!(*type_manager_->GetAnyType(fields_[i].second) < *type_manager_->GetAnyType(type.fields_[i].second))) { if (!(*type_manager_->GetAnyValue(fields_[i].second) < *type_manager_->GetAnyValue(type.fields_[i].second))) {
return false; return false;
} }
} }
@ -171,7 +171,7 @@ std::optional<utils::IdType> VariantType::GetFieldType(const std::string& name)
// //
std::optional<utils::IdType> OptionalType::InContext(const std::unordered_map<std::string, utils::IdType>& context) { std::optional<utils::IdType> OptionalType::InContext(const std::unordered_map<std::string, utils::IdType>& context) {
std::optional<utils::IdType> maybe_type_replacement = type_manager_->GetAnyType(type_)->InContext(context); std::optional<utils::IdType> maybe_type_replacement = type_manager_->GetAnyValue(type_)->InContext(context);
if (maybe_type_replacement.has_value()) { if (maybe_type_replacement.has_value()) {
type_ = maybe_type_replacement.value(); type_ = maybe_type_replacement.value();
@ -181,11 +181,11 @@ std::optional<utils::IdType> OptionalType::InContext(const std::unordered_map<st
} }
bool OptionalType::Same(const OptionalType& type) const { bool OptionalType::Same(const OptionalType& type) const {
return type_manager_->GetAnyType(type_)->Same(*type_manager_->GetAnyType(type.type_)); return type_manager_->GetAnyValue(type_)->Same(*type_manager_->GetAnyValue(type.type_));
} }
bool OptionalType::operator<(const OptionalType& type) const { bool OptionalType::operator<(const OptionalType& type) const {
return *type_manager_->GetAnyType(type_) < *type_manager_->GetAnyType(type.type_); return *type_manager_->GetAnyValue(type_) < *type_manager_->GetAnyValue(type.type_);
} }
bool OptionalType::operator>(const OptionalType& type) const { bool OptionalType::operator>(const OptionalType& type) const {
@ -199,7 +199,7 @@ std::optional<utils::IdType> OptionalType::GetFieldType(const std::string& name)
// //
std::optional<utils::IdType> ReferenceToType::InContext(const std::unordered_map<std::string, utils::IdType>& context) { std::optional<utils::IdType> ReferenceToType::InContext(const std::unordered_map<std::string, utils::IdType>& context) {
std::optional<utils::IdType> maybe_type_replacement = type_manager_->GetAnyType(type_)->InContext(context); std::optional<utils::IdType> maybe_type_replacement = type_manager_->GetAnyValue(type_)->InContext(context);
if (maybe_type_replacement.has_value()) { if (maybe_type_replacement.has_value()) {
type_ = maybe_type_replacement.value(); type_ = maybe_type_replacement.value();
@ -209,11 +209,11 @@ std::optional<utils::IdType> ReferenceToType::InContext(const std::unordered_map
} }
bool ReferenceToType::Same(const ReferenceToType& type) const { bool ReferenceToType::Same(const ReferenceToType& type) const {
return references_ == type.references_ && type_manager_->GetAnyType(type_)->Same(*type_manager_->GetAnyType(type.type_)); return references_ == type.references_ && type_manager_->GetAnyValue(type_)->Same(*type_manager_->GetAnyValue(type.type_));
} }
bool ReferenceToType::operator<(const ReferenceToType& type) const { bool ReferenceToType::operator<(const ReferenceToType& type) const {
return references_ == type.references_ && *type_manager_->GetAnyType(type_) < *type_manager_->GetAnyType(type.type_); return references_ == type.references_ && *type_manager_->GetAnyValue(type_) < *type_manager_->GetAnyValue(type.type_);
} }
bool ReferenceToType::operator>(const ReferenceToType& type) const { bool ReferenceToType::operator>(const ReferenceToType& type) const {
@ -221,7 +221,7 @@ bool ReferenceToType::operator>(const ReferenceToType& type) const {
} }
std::optional<utils::IdType> ReferenceToType::GetFieldType(const std::string& name) const { std::optional<utils::IdType> ReferenceToType::GetFieldType(const std::string& name) const {
return type_manager_->GetAnyType(type_)->GetFieldType(name); return type_manager_->GetAnyValue(type_)->GetFieldType(name);
} }
// //
@ -229,7 +229,7 @@ std::optional<utils::IdType> ReferenceToType::GetFieldType(const std::string& na
std::optional<utils::IdType> FunctionType::InContext(const std::unordered_map<std::string, utils::IdType>& context) { std::optional<utils::IdType> FunctionType::InContext(const std::unordered_map<std::string, utils::IdType>& context) {
for (size_t i = 0; i < argument_types_.size(); ++i) { for (size_t i = 0; i < argument_types_.size(); ++i) {
std::optional<utils::IdType> maybe_argument_type_replacement = std::optional<utils::IdType> maybe_argument_type_replacement =
type_manager_->GetAnyType(argument_types_[i])->InContext(context); type_manager_->GetAnyValue(argument_types_[i])->InContext(context);
if (maybe_argument_type_replacement.has_value()) { if (maybe_argument_type_replacement.has_value()) {
argument_types_[i] = maybe_argument_type_replacement.value(); argument_types_[i] = maybe_argument_type_replacement.value();
@ -245,7 +245,7 @@ bool FunctionType::Same(const FunctionType& type) const {
} }
for (size_t i = 0; i < argument_types_.size(); ++i) { for (size_t i = 0; i < argument_types_.size(); ++i) {
if (!type_manager_->GetAnyType(argument_types_[i])->Same(*type_manager_->GetAnyType(type.argument_types_[i]))) { if (!type_manager_->GetAnyValue(argument_types_[i])->Same(*type_manager_->GetAnyValue(type.argument_types_[i]))) {
return false; return false;
} }
} }
@ -259,7 +259,7 @@ bool FunctionType::operator<(const FunctionType& type) const {
} }
for (size_t i = 0; i < argument_types_.size(); ++i) { for (size_t i = 0; i < argument_types_.size(); ++i) {
if (!(*type_manager_->GetAnyType(argument_types_[i]) < *type_manager_->GetAnyType(type.argument_types_[i]))) { if (!(*type_manager_->GetAnyValue(argument_types_[i]) < *type_manager_->GetAnyValue(type.argument_types_[i]))) {
return false; return false;
} }
} }
@ -279,7 +279,7 @@ std::optional<utils::IdType> FunctionType::GetFieldType(const std::string& name)
std::optional<utils::IdType> ArrayType::InContext(const std::unordered_map<std::string, utils::IdType>& context) { std::optional<utils::IdType> ArrayType::InContext(const std::unordered_map<std::string, utils::IdType>& context) {
std::optional<utils::IdType> maybe_elements_type_replacement = std::optional<utils::IdType> maybe_elements_type_replacement =
type_manager_->GetAnyType(elements_type_)->InContext(context); type_manager_->GetAnyValue(elements_type_)->InContext(context);
if (maybe_elements_type_replacement.has_value()) { if (maybe_elements_type_replacement.has_value()) {
elements_type_ = maybe_elements_type_replacement.value(); elements_type_ = maybe_elements_type_replacement.value();
@ -289,11 +289,11 @@ std::optional<utils::IdType> ArrayType::InContext(const std::unordered_map<std::
} }
bool ArrayType::Same(const ArrayType& type) const { bool ArrayType::Same(const ArrayType& type) const {
return size_ == type.size_ && type_manager_->GetAnyType(elements_type_)->Same(*type_manager_->GetAnyType(type.elements_type_)); return size_ == type.size_ && type_manager_->GetAnyValue(elements_type_)->Same(*type_manager_->GetAnyValue(type.elements_type_));
} }
bool ArrayType::operator<(const ArrayType& type) const { bool ArrayType::operator<(const ArrayType& type) const {
return size_ == type.size_ && *type_manager_->GetAnyType(elements_type_) < *type_manager_->GetAnyType(type.elements_type_); return size_ == type.size_ && *type_manager_->GetAnyValue(elements_type_) < *type_manager_->GetAnyValue(type.elements_type_);
} }
bool ArrayType::operator>(const ArrayType& type) const { bool ArrayType::operator>(const ArrayType& type) const {