MCPcopy Create free account
hub / github.com/argotorg/solidity / declareTypeConstructor

Method declareTypeConstructor

libsolidity/experimental/ast/TypeSystem.cpp:269–297  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

267}
268
269TypeConstructor TypeSystem::declareTypeConstructor(std::string _name, std::string _canonicalName, size_t _arguments, Declaration const* _declaration)
270{
271 solAssert(m_canonicalTypeNames.insert(_canonicalName).second, "Duplicate canonical type name.");
272 Sort baseSort{{primitiveClass(PrimitiveClass::Type)}};
273 size_t index = m_typeConstructors.size();
274 m_typeConstructors.emplace_back(TypeConstructorInfo{
275 _name,
276 _canonicalName,
277 {Arity{std::vector<Sort>{_arguments, baseSort}, primitiveClass(PrimitiveClass::Type)}},
278 _declaration
279 });
280 TypeConstructor constructor{index};
281 if (_arguments)
282 {
283 std::vector<Sort> argumentSorts;
284 std::generate_n(std::back_inserter(argumentSorts), _arguments, [&](){ return Sort{{primitiveClass(PrimitiveClass::Type)}}; });
285 std::vector<Type> argumentTypes;
286 std::generate_n(std::back_inserter(argumentTypes), _arguments, [&](){ return freshVariable({}); });
287 m_globalTypeEnvironment.fixTypeVars(argumentTypes);
288 auto error = instantiateClass(type(constructor, argumentTypes), Arity{argumentSorts, primitiveClass(PrimitiveClass::Type)});
289 solAssert(!error, *error);
290 }
291 else
292 {
293 auto error = instantiateClass(type(constructor, {}), Arity{{}, primitiveClass(PrimitiveClass::Type)});
294 solAssert(!error, *error);
295 }
296 return constructor;
297}
298
299std::variant<TypeClass, std::string> TypeSystem::declareTypeClass(std::string _name, Declaration const* _declaration, bool _primitive)
300{

Callers 2

visitMethod · 0.80
endVisitMethod · 0.80

Calls 4

typeFunction · 0.85
insertMethod · 0.80
fixTypeVarsMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected