mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Simplify static memory access functions.
This commit is contained in:
parent
2d169748b7
commit
b5672d5ae0
@ -91,13 +91,11 @@ void CompilerUtils::loadFromMemoryDynamic(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned CompilerUtils::storeInMemory(unsigned _offset, Type const& _type, bool _padToWordBoundaries)
|
void CompilerUtils::storeInMemory(unsigned _offset)
|
||||||
{
|
{
|
||||||
solAssert(_type.getCategory() != Type::Category::Array, "Unable to statically store dynamic type.");
|
unsigned numBytes = prepareMemoryStore(IntegerType(256), true);
|
||||||
unsigned numBytes = prepareMemoryStore(_type, _padToWordBoundaries);
|
|
||||||
if (numBytes > 0)
|
if (numBytes > 0)
|
||||||
m_context << u256(_offset) << eth::Instruction::MSTORE;
|
m_context << u256(_offset) << eth::Instruction::MSTORE;
|
||||||
return numBytes;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompilerUtils::storeInMemoryDynamic(Type const& _type, bool _padToWordBoundaries)
|
void CompilerUtils::storeInMemoryDynamic(Type const& _type, bool _padToWordBoundaries)
|
||||||
@ -599,11 +597,10 @@ unsigned CompilerUtils::getSizeOnStack(vector<shared_ptr<Type const>> const& _va
|
|||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CompilerUtils::computeHashStatic(Type const& _type, bool _padToWordBoundaries)
|
void CompilerUtils::computeHashStatic()
|
||||||
{
|
{
|
||||||
unsigned length = storeInMemory(0, _type, _padToWordBoundaries);
|
storeInMemory(0);
|
||||||
solAssert(length <= CompilerUtils::freeMemoryPointer, "");
|
m_context << u256(32) << u256(0) << eth::Instruction::SHA3;
|
||||||
m_context << u256(length) << u256(0) << eth::Instruction::SHA3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned CompilerUtils::loadFromMemoryHelper(Type const& _type, bool _fromCalldata, bool _padToWordBoundaries)
|
unsigned CompilerUtils::loadFromMemoryHelper(Type const& _type, bool _fromCalldata, bool _padToWordBoundaries)
|
||||||
|
@ -65,16 +65,10 @@ public:
|
|||||||
bool _padToWordBoundaries = true,
|
bool _padToWordBoundaries = true,
|
||||||
bool _keepUpdatedMemoryOffset = true
|
bool _keepUpdatedMemoryOffset = true
|
||||||
);
|
);
|
||||||
/// Stores data from stack in memory.
|
/// Stores a 256 bit integer from stack in memory.
|
||||||
/// @param _offset offset in memory
|
/// @param _offset offset in memory
|
||||||
/// @param _type type of the data on the stack
|
/// @param _type type of the data on the stack
|
||||||
/// @param _padToWordBoundaries if true, pad the data to word (32 byte) boundaries
|
void storeInMemory(unsigned _offset);
|
||||||
/// @returns the number of bytes written to memory (can be different from _bytes if
|
|
||||||
/// _padToWordBoundaries is true)
|
|
||||||
unsigned storeInMemory(unsigned _offset,
|
|
||||||
Type const& _type = IntegerType(256),
|
|
||||||
bool _padToWordBoundaries = false
|
|
||||||
);
|
|
||||||
/// Dynamic version of @see storeInMemory, expects the memory offset below the value on the stack
|
/// Dynamic version of @see storeInMemory, expects the memory offset below the value on the stack
|
||||||
/// and also updates that. For arrays, only copies the data part.
|
/// and also updates that. For arrays, only copies the data part.
|
||||||
/// Stack pre: memory_offset value...
|
/// Stack pre: memory_offset value...
|
||||||
@ -124,10 +118,8 @@ public:
|
|||||||
static unsigned getSizeOnStack(std::vector<T> const& _variables);
|
static unsigned getSizeOnStack(std::vector<T> const& _variables);
|
||||||
static unsigned getSizeOnStack(std::vector<std::shared_ptr<Type const>> const& _variableTypes);
|
static unsigned getSizeOnStack(std::vector<std::shared_ptr<Type const>> const& _variableTypes);
|
||||||
|
|
||||||
/// Appends code that computes tha SHA3 hash of the topmost stack element of type @a _type.
|
/// Appends code that computes tha SHA3 hash of the topmost stack element of 32 byte type.
|
||||||
/// If @a _pad is set, padds the type to muliples of 32 bytes.
|
void computeHashStatic();
|
||||||
/// @note Only works for types of fixed size.
|
|
||||||
void computeHashStatic(Type const& _type = IntegerType(256), bool _padToWordBoundaries = false);
|
|
||||||
|
|
||||||
/// Bytes we need to the start of call data.
|
/// Bytes we need to the start of call data.
|
||||||
/// - The size in bytes of the function (hash) identifier.
|
/// - The size in bytes of the function (hash) identifier.
|
||||||
|
Loading…
Reference in New Issue
Block a user