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(
|
void TypeChecker::typeCheckFunctionGeneralChecks(
|
||||||
FunctionCall const& _functionCall,
|
FunctionCall const& _functionCall,
|
||||||
FunctionTypePointer _functionType
|
FunctionTypePointer _functionType
|
||||||
@ -2433,6 +2459,12 @@ bool TypeChecker::visit(FunctionCall const& _functionCall)
|
|||||||
case FunctionType::Kind::MetaType:
|
case FunctionType::Kind::MetaType:
|
||||||
returnTypes = typeCheckMetaTypeFunctionAndRetrieveReturnType(_functionCall);
|
returnTypes = typeCheckMetaTypeFunctionAndRetrieveReturnType(_functionCall);
|
||||||
break;
|
break;
|
||||||
|
case FunctionType::Kind::BytesConcat:
|
||||||
|
{
|
||||||
|
typeCheckBytesConcatFunction(_functionCall, functionType);
|
||||||
|
returnTypes = functionType->returnParameterTypes();
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
typeCheckFunctionCall(_functionCall, functionType);
|
typeCheckFunctionCall(_functionCall, functionType);
|
||||||
|
@ -111,6 +111,12 @@ private:
|
|||||||
FunctionTypePointer _functionType
|
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(InheritanceSpecifier const& _inheritance) override;
|
||||||
void endVisit(ModifierDefinition const& _modifier) override;
|
void endVisit(ModifierDefinition const& _modifier) override;
|
||||||
bool visit(FunctionDefinition const& _function) override;
|
bool visit(FunctionDefinition const& _function) override;
|
||||||
|
Loading…
Reference in New Issue
Block a user