Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What I did
Allow for releasing and reuse of memory slots.
How I did it
release_memory
that accepts an offset and length. Released memory is tracked in a a list usingFreeMemory
objects. These objects are essentially 2 item lists, but I think the special class makes the code more readable.increase_memory
check for available slots in released memory, and if found they are reused instead of expanding memory.make_blockscope
context manager, all memory variables that are no longer accessible are released.internal_memory_scope
. It works identically tomake_blockscope
. I added it to differentiate between an actual user-defined scope (for loop, if branches) and an internal scope (event generation, assertions). I applied it to several areas where we generate temporary memory variables.How to verify it
Run the tests. I haven't added any specific cases around this, but it should factor into the majority of the test suite. I verified the behavior by compiling and running the tests at https://github.com/curvefi/curve-contract and everything works.
Cute Animal Picture