From 156d5c7cb7d2c26e6628dcb7f4648d34f01f96a1 Mon Sep 17 00:00:00 2001 From: Daniel Kirchner Date: Tue, 27 Jun 2023 00:41:11 +0200 Subject: [PATCH] tmp --- libsolidity/ast/experimental/TypeSystem.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/libsolidity/ast/experimental/TypeSystem.cpp b/libsolidity/ast/experimental/TypeSystem.cpp index 0c1bfd057..91bbcb5d9 100644 --- a/libsolidity/ast/experimental/TypeSystem.cpp +++ b/libsolidity/ast/experimental/TypeSystem.cpp @@ -262,7 +262,22 @@ TypeConstructor TypeSystem::declareTypeConstructor(string _name, string _canonic {Arity{vector{_arguments, baseSort}, primitiveClass(PrimitiveClass::Type)}}, _declaration }); - return TypeConstructor{index}; + TypeConstructor constructor{index}; + if (_arguments) + { + std::vector argumentSorts; + std::generate_n(std::back_inserter(argumentSorts), _arguments, [&](){ return Sort{{primitiveClass(PrimitiveClass::Type)}}; }); + std::vector argumentTypes; + std::generate_n(std::back_inserter(argumentTypes), _arguments, [&](){ return freshVariable({}); }); + auto error = instantiateClass(type(constructor, argumentTypes), Arity{argumentSorts, primitiveClass(PrimitiveClass::Kind)}, {}); + solAssert(!error, *error); + } + else + { + auto error = instantiateClass(type(constructor, {}), Arity{{}, primitiveClass(PrimitiveClass::Type)}, {}); + solAssert(!error, *error); + } + return constructor; } std::variant TypeSystem::declareTypeClass(Type _typeVariable, std::map _functions, std::string _name, Declaration const* _declaration)