Implementing conversion from calldata slices to memory arrays.

This commit is contained in:
Djordje Mijovic 2020-12-11 11:06:30 +01:00
parent 0efd52a38e
commit b99a74fb34
2 changed files with 6 additions and 5 deletions

View File

@ -3,6 +3,7 @@
Language Features:
* Code generator: Support copying dynamically encoded structs from calldata to memory.
* Code generator: Support copying of nested arrays from calldata to memory.
* Code generator: Support conversion from calldata slices to memory and storage arrays.
* The fallback function can now also have a single ``calldata`` argument (equaling ``msg.data``) and return ``bytes memory`` (which will not be ABI-encoded but returned as-is).
* Wasm backend: Add ``i32.select`` and ``i64.select`` instructions.

View File

@ -1051,11 +1051,11 @@ void CompilerUtils::convertType(
case Type::Category::ArraySlice:
{
auto& typeOnStack = dynamic_cast<ArraySliceType const&>(_typeOnStack);
solUnimplementedAssert(
_targetType.dataStoredIn(DataLocation::CallData),
"Conversion from calldata slices to memory not yet implemented."
);
solAssert(_targetType == typeOnStack.arrayType(), "");
solAssert(_targetType.category() == Type::Category::Array, "");
auto const& targetArrayType = dynamic_cast<ArrayType const&>(_targetType);
solAssert(targetArrayType == *typeOnStack.arrayType().copyForLocation(targetArrayType.location(), false), "");
if (!_targetType.dataStoredIn(DataLocation::CallData))
return convertType(typeOnStack.arrayType(), _targetType);
solUnimplementedAssert(
typeOnStack.arrayType().location() == DataLocation::CallData &&
typeOnStack.arrayType().isDynamicallySized() &&