Allow mapping arguments and return values in internal library functions.

This commit is contained in:
Daniel Kirchner
2018-08-13 14:31:10 +02:00
parent a2c754b3fe
commit 57ada1d69e
15 changed files with 245 additions and 1 deletions
+8 -1
View File
@@ -629,7 +629,14 @@ bool TypeChecker::visit(FunctionDefinition const& _function)
}
for (ASTPointer<VariableDeclaration> const& var: _function.parameters() + _function.returnParameters())
{
if (!type(*var)->canLiveOutsideStorage())
if (
!type(*var)->canLiveOutsideStorage() &&
!(
isLibraryFunction &&
(_function.visibility() <= FunctionDefinition::Visibility::Internal) &&
type(*var)->category() == Type::Category::Mapping
)
)
m_errorReporter.typeError(var->location(), "Type is required to live outside storage.");
if (_function.visibility() >= FunctionDefinition::Visibility::Public && !(type(*var)->interfaceType(isLibraryFunction)))
m_errorReporter.fatalTypeError(var->location(), "Internal or recursive type is not allowed for public or external functions.");