mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Rephrase documentation of memoryguard
This commit is contained in:
parent
f4b42d1c72
commit
0eb32b3f60
20
docs/yul.rst
20
docs/yul.rst
@ -956,16 +956,22 @@ memoryguard
|
||||
^^^^^^^^^^^
|
||||
|
||||
This function is available in the EVM dialect with objects. The caller of
|
||||
``let ptr := memoryguard(size)`` promises that they only use memory in either
|
||||
the range ``[0, size)`` or the unbounded range above ``ptr``. The Yul optimizer
|
||||
promises to only use the memory range ``[size, ptr)`` for its purposes.
|
||||
If the optimizer does not need to reserve any memory, it holds that ``ptr := size``.
|
||||
``let ptr := memoryguard(size)`` (where ``size`` has to be a literal number)
|
||||
promises that they only use memory in either the range ``[0, size)`` or the
|
||||
unbounded range above ``ptr``.
|
||||
|
||||
Since the presence of a ``memoryguard`` call indicates that all memory access
|
||||
adheres to this restriction, it allows the optimizer to perform additional
|
||||
optimization steps, for example the stack limit evader, which attempts to move
|
||||
stack variables that would otherwise be unreachable to memory.
|
||||
|
||||
The Yul optimizer promises to only use the memory range ``[size, ptr)`` for its purposes.
|
||||
If the optimizer does not need to reserve any memory, it holds that ``ptr == size``.
|
||||
|
||||
``memoryguard`` can be called multiple times, but needs to have the same literal as argument
|
||||
within one Yul subobject. If at least one ``memoryguard`` call is found in a subobject,
|
||||
the Yul optimiser will try to perform experimental steps like the stack limit evader,
|
||||
which attempts to move stack variables that would otherwise be unreachable
|
||||
to memory.
|
||||
the additional optimiser steps will be run on it.
|
||||
|
||||
|
||||
.. _yul-object:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user