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
|
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
|
``let ptr := memoryguard(size)`` (where ``size`` has to be a literal number)
|
||||||
the range ``[0, size)`` or the unbounded range above ``ptr``. The Yul optimizer
|
promises that they only use memory in either the range ``[0, size)`` or the
|
||||||
promises to only use the memory range ``[size, ptr)`` for its purposes.
|
unbounded range above ``ptr``.
|
||||||
If the optimizer does not need to reserve any memory, it holds that ``ptr := size``.
|
|
||||||
|
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
|
``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,
|
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,
|
the additional optimiser steps will be run on it.
|
||||||
which attempts to move stack variables that would otherwise be unreachable
|
|
||||||
to memory.
|
|
||||||
|
|
||||||
.. _yul-object:
|
.. _yul-object:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user