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

Method clearStorageStructFunction

libsolidity/codegen/YulUtilFunctions.cpp:1913–1964  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1911}
1912
1913std::string YulUtilFunctions::clearStorageStructFunction(StructType const& _type)
1914{
1915 solAssert(_type.location() == DataLocation::Storage, "");
1916
1917 std::string functionName = "clear_struct_storage_" + _type.identifier();
1918
1919 return m_functionCollector.createFunction(functionName, [&] {
1920 MemberList::MemberMap structMembers = _type.nativeMembers(nullptr);
1921 std::vector<std::map<std::string, std::string>> memberSetValues;
1922
1923 std::set<u256> slotsCleared;
1924 for (auto const& member: structMembers)
1925 {
1926 if (member.type->category() == Type::Category::Mapping)
1927 continue;
1928 if (member.type->storageBytes() < 32)
1929 {
1930 auto const& slotDiff = _type.storageOffsetsOfMember(member.name).first;
1931 if (!slotsCleared.count(slotDiff))
1932 {
1933 memberSetValues.emplace_back().emplace("clearMember", "sstore(add(slot, " + slotDiff.str() + "), 0)");
1934 slotsCleared.emplace(slotDiff);
1935 }
1936 }
1937 else
1938 {
1939 auto const& [memberSlotDiff, memberStorageOffset] = _type.storageOffsetsOfMember(member.name);
1940 solAssert(memberStorageOffset == 0, "");
1941
1942 memberSetValues.emplace_back().emplace("clearMember", Whiskers(R"(
1943 <setZero>(add(slot, <memberSlotDiff>), <memberStorageOffset>)
1944 )")
1945 ("setZero", storageSetToZeroFunction(*member.type, VariableDeclaration::Location::Unspecified))
1946 ("memberSlotDiff", memberSlotDiff.str())
1947 ("memberStorageOffset", std::to_string(memberStorageOffset))
1948 .render()
1949 );
1950 }
1951 }
1952
1953 return Whiskers(R"(
1954 function <functionName>(slot) {
1955 <#member>
1956 <clearMember>
1957 </member>
1958 }
1959 )")
1960 ("functionName", functionName)
1961 ("member", memberSetValues)
1962 .render();
1963 });
1964}
1965
1966std::string YulUtilFunctions::copyArrayToStorageFunction(ArrayType const& _fromType, ArrayType const& _toType)
1967{

Callers

nothing calls this directly

Calls 11

WhiskersClass · 0.85
identifierMethod · 0.80
strMethod · 0.80
renderMethod · 0.80
to_stringFunction · 0.50
locationMethod · 0.45
createFunctionMethod · 0.45
nativeMembersMethod · 0.45
categoryMethod · 0.45
storageBytesMethod · 0.45
countMethod · 0.45

Tested by

no test coverage detected