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

View file

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

View file

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

View file

@ -13,24 +13,19 @@ namespace info::value {
struct Unit {};
struct InternalValue {
public:
InternalValue() = default;
explicit InternalValue(std::variant<double,
long long,
std::string,
char,
bool,
Unit>&& value) : value(std::move(value)) {}
template<typename T>
explicit InternalValue(const T& value) : value(value) {} // move ??
template<typename T>
std::optional<T*> GetValue() {
if (!std::holds_alternative<T>(value)) {
return std::nullopt;
}
return std::get<T>(value);
return &std::get<T>(value);
}
public:
std::variant<double,
@ -107,6 +102,13 @@ public:
};
struct Value { // DefinedValue ??
public:
Value() = default;
template<typename T>
explicit Value(const T& value) : value(value) {} // move ??
public:
std::variant<InternalValue,
TupleValue,
VariantValue,
@ -120,7 +122,7 @@ class ValueManager {
public:
template<typename T>
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;
}
@ -144,6 +146,11 @@ public:
utils::ValueType GetValueType(utils::IdType value_id) {
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:
std::vector<std::pair<Value, utils::ValueType>> values_;
};

View file

@ -5,7 +5,6 @@
// for clangd
#include "../include/parse_tree.hpp"
#include "../include/global_info.hpp"
#include "../include/type_info_contexts.hpp"
#include "../include/interpreter_tree.hpp"
#include "../include/build_visitor.hpp"
#include "../include/print_visitor.hpp"
@ -13,6 +12,7 @@
#include "../include/link_symbols_visitor.hpp"
#include "../include/type_check_visitor.hpp"
#include "../include/typed_print_visitor.hpp"
#include "../include/execute_visitor.hpp"
#include "../include/error_handling.hpp"
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>();
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::PrintVisitor print_visitor(std::cout);
interpreter::FindSymbolsVisitor find_symbols_visitor(global_info);
interpreter::LinkSymbolsVisitor link_symbols_visitor(global_info);
interpreter::TypeCheckVisitor type_check_visitor(global_info, context_manager);
interpreter::TypedPrintVisitor typed_print_visitor(std::cout, context_manager);
interpreter::TypeCheckVisitor type_check_visitor(global_info, type_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());

View file

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

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> 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()) {
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 {
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 {
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 {
@ -61,14 +61,14 @@ bool DefinedType::operator>(const DefinedType& type) 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) {
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()) {
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) {
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;
}
}
@ -98,7 +98,7 @@ bool TupleType::operator<(const TupleType& type) const {
}
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;
}
}
@ -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> 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()) {
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 {
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 {
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 {
@ -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> 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()) {
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 {
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 {
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 {
@ -221,7 +221,7 @@ bool ReferenceToType::operator>(const ReferenceToType& type) 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) {
for (size_t i = 0; i < argument_types_.size(); ++i) {
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()) {
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) {
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;
}
}
@ -259,7 +259,7 @@ bool FunctionType::operator<(const FunctionType& type) const {
}
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;
}
}
@ -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> 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()) {
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 {
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 {
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 {