mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Check if all types in bytes.concat are fixed bytes or byte array.
This commit is contained in:
parent
1493326e48
commit
840df80dac
@ -2027,6 +2027,32 @@ void TypeChecker::typeCheckABIEncodeFunctions(
|
||||
}
|
||||
}
|
||||
|
||||
void TypeChecker::typeCheckBytesConcatFunction(
|
||||
FunctionCall const& _functionCall,
|
||||
FunctionType const* _functionType
|
||||
)
|
||||
{
|
||||
solAssert(_functionType, "");
|
||||
solAssert(_functionType->kind() == FunctionType::Kind::BytesConcat, "");
|
||||
solAssert(_functionCall.names().empty(), "");
|
||||
|
||||
typeCheckFunctionGeneralChecks(_functionCall, _functionType);
|
||||
|
||||
for (shared_ptr<Expression const> const& argument: _functionCall.arguments())
|
||||
if (
|
||||
Type const* argumentType = type(*argument);
|
||||
!argumentType->isImplicitlyConvertibleTo(*TypeProvider::fixedBytes(32)) &&
|
||||
!argumentType->isImplicitlyConvertibleTo(*TypeProvider::bytesMemory())
|
||||
)
|
||||
m_errorReporter.typeError(
|
||||
8015_error,
|
||||
argument->location(),
|
||||
"Invalid type for argument in the bytes.concat function call. "
|
||||
"bytes or fixed bytes type is required, but " +
|
||||
argumentType->toString(true) + " provided."
|
||||
);
|
||||
}
|
||||
|
||||
void TypeChecker::typeCheckFunctionGeneralChecks(
|
||||
FunctionCall const& _functionCall,
|
||||
FunctionTypePointer _functionType
|
||||
@ -2433,6 +2459,12 @@ bool TypeChecker::visit(FunctionCall const& _functionCall)
|
||||
case FunctionType::Kind::MetaType:
|
||||
returnTypes = typeCheckMetaTypeFunctionAndRetrieveReturnType(_functionCall);
|
||||
break;
|
||||
case FunctionType::Kind::BytesConcat:
|
||||
{
|
||||
typeCheckBytesConcatFunction(_functionCall, functionType);
|
||||
returnTypes = functionType->returnParameterTypes();
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
typeCheckFunctionCall(_functionCall, functionType);
|
||||
|
@ -111,6 +111,12 @@ private:
|
||||
FunctionTypePointer _functionType
|
||||
);
|
||||
|
||||
/// Performs general checks and checks specific to bytes concat function call
|
||||
void typeCheckBytesConcatFunction(
|
||||
FunctionCall const& _functionCall,
|
||||
FunctionType const* _functionType
|
||||
);
|
||||
|
||||
void endVisit(InheritanceSpecifier const& _inheritance) override;
|
||||
void endVisit(ModifierDefinition const& _modifier) override;
|
||||
bool visit(FunctionDefinition const& _function) override;
|
||||
|
Loading…
Reference in New Issue
Block a user