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

Method operatorDefinitions

libsolidity/ast/Types.cpp:387–417  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

385}
386
387std::set<FunctionDefinition const*, ASTNode::CompareByID> Type::operatorDefinitions(
388 Token _token,
389 ASTNode const& _scope,
390 bool _unary
391) const
392{
393 if (!typeDefinition())
394 return {};
395
396 std::set<FunctionDefinition const*, ASTNode::CompareByID> matchingDefinitions;
397 for (UsingForDirective const* directive: usingForDirectivesForType(*this, _scope))
398 for (auto const& [identifierPath, operator_]: directive->functionsAndOperators())
399 {
400 if (operator_ != _token)
401 continue;
402
403 auto const& functionDefinition = dynamic_cast<FunctionDefinition const&>(
404 *identifierPath->annotation().referencedDeclaration
405 );
406 auto const* functionType = dynamic_cast<FunctionType const*>(
407 functionDefinition.libraryFunction() ? functionDefinition.typeViaContractName() : functionDefinition.type()
408 );
409 solAssert(functionType && !functionType->parameterTypes().empty());
410
411 size_t parameterCount = functionDefinition.parameterList().parameters().size();
412 if (*this == *functionType->parameterTypes().front() && (_unary ? parameterCount == 1 : parameterCount == 2))
413 matchingDefinitions.insert(&functionDefinition);
414 }
415
416 return matchingDefinitions;
417}
418
419MemberList::MemberMap Type::attachedFunctions(Type const& _type, ASTNode const& _scope)
420{

Callers 2

visitMethod · 0.80
endVisitMethod · 0.80

Calls 10

functionsAndOperatorsMethod · 0.80
libraryFunctionMethod · 0.80
parameterTypesMethod · 0.80
parametersMethod · 0.80
insertMethod · 0.80
typeViaContractNameMethod · 0.45
typeMethod · 0.45
emptyMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected