Grammatical fixes

This commit is contained in:
AN 2022-07-23 21:21:28 +05:30 committed by GitHub
parent 800088e38b
commit b828da248f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,7 +8,7 @@ Inline Assembly
You can interleave Solidity statements with inline assembly in a language close You can interleave Solidity statements with inline assembly in a language close
to the one of the Ethereum virtual machine. This gives you more fine-grained control, to the one of the Ethereum Virtual Machine. This gives you more fine-grained control,
which is especially useful when you are enhancing the language by writing libraries. which is especially useful when you are enhancing the language by writing libraries.
The language used for inline assembly in Solidity is called :ref:`Yul <yul>` The language used for inline assembly in Solidity is called :ref:`Yul <yul>`
@ -126,15 +126,15 @@ You can access Solidity variables and other identifiers by using their name.
Local variables of value type are directly usable in inline assembly. Local variables of value type are directly usable in inline assembly.
They can both be read and assigned to. They can both be read and assigned to.
Local variables that refer to memory evaluate to the address of the variable in memory not the value itself. Local variables that refer to memory evaluate to the address of the variable in memory, not the value itself.
Such variables can also be assigned to, but note that an assignment will only change the pointer and not the data Such variables can also be assigned to, but note that an assignment will only change the pointer and not the data
and that it is your responsibility to respect Solidity's memory management. and that it is your responsibility to respect Solidity's memory management.
See :ref:`Conventions in Solidity <conventions-in-solidity>`. See :ref:`Conventions in Solidity <conventions-in-solidity>`.
Similarly, local variables that refer to statically-sized calldata arrays or calldata structs Similarly, local variables that refer to statically-sized calldata arrays or calldata structs
evaluate to the address of the variable in calldata, not the value itself. evaluate to the address of the variable in calldata, not the value itself.
The variable can also be assigned a new offset, but note that no validation to ensure that The variable can also be assigned a new offset, but note that no validation is performed to ensure that
the variable will not point beyond ``calldatasize()`` is performed. the variable will not point beyond ``calldatasize()``.
For external function pointers the address and the function selector can be For external function pointers the address and the function selector can be
accessed using ``x.address`` and ``x.selector``. accessed using ``x.address`` and ``x.selector``.
@ -205,7 +205,7 @@ Local Solidity variables are available for assignments, for example:
``assembly { signextend(<num_bytes_of_x_minus_one>, x) }`` ``assembly { signextend(<num_bytes_of_x_minus_one>, x) }``
Since Solidity 0.6.0 the name of a inline assembly variable may not Since Solidity 0.6.0, the name of a inline assembly variable may not
shadow any declaration visible in the scope of the inline assembly block shadow any declaration visible in the scope of the inline assembly block
(including variable, contract and function declarations). (including variable, contract and function declarations).
@ -253,7 +253,7 @@ starting from where this pointer points at and update it.
There is no guarantee that the memory has not been used before and thus There is no guarantee that the memory has not been used before and thus
you cannot assume that its contents are zero bytes. you cannot assume that its contents are zero bytes.
There is no built-in mechanism to release or free allocated memory. There is no built-in mechanism to release or free allocated memory.
Here is an assembly snippet you can use for allocating memory that follows the process outlined above Here is an assembly snippet you can use for allocating memory that follows the process outlined above:
.. code-block:: yul .. code-block:: yul
@ -276,7 +276,7 @@ first slot of the array and followed by the array elements.
.. warning:: .. warning::
Statically-sized memory arrays do not have a length field, but it might be added later Statically-sized memory arrays do not have a length field, but it might be added later
to allow better convertibility between statically- and dynamically-sized arrays, so to allow better convertibility between statically and dynamically-sized arrays; so,
do not rely on this. do not rely on this.
Memory Safety Memory Safety
@ -290,7 +290,7 @@ perform additional memory optimizations, if it can rely on certain assumptions a
While we recommend to always respect Solidity's memory model, inline assembly allows you to use memory While we recommend to always respect Solidity's memory model, inline assembly allows you to use memory
in an incompatible way. Therefore, moving stack variables to memory and additional memory optimizations are, in an incompatible way. Therefore, moving stack variables to memory and additional memory optimizations are,
by default, disabled in the presence of any inline assembly block that contains a memory operation or assigns by default, disabled in the presence of any inline assembly block that contains a memory operation or assigns
to solidity variables in memory. to Solidity variables in memory.
However, you can specifically annotate an assembly block to indicate that it in fact respects Solidity's memory However, you can specifically annotate an assembly block to indicate that it in fact respects Solidity's memory
model as follows: model as follows:
@ -346,7 +346,7 @@ If the memory operations use a length of zero, it is also fine to just use any o
} }
Note that not only memory operations in inline assembly itself can be memory-unsafe, but also assignments to Note that not only memory operations in inline assembly itself can be memory-unsafe, but also assignments to
solidity variables of reference type in memory. For example the following is not memory-safe: Solidity variables of reference type in memory. For example the following is not memory-safe:
.. code-block:: solidity .. code-block:: solidity
@ -356,7 +356,7 @@ solidity variables of reference type in memory. For example the following is not
} }
x[0x20] = 0x42; x[0x20] = 0x42;
Inline assembly that neither involves any operations that access memory nor assigns to any solidity variables Inline assembly that neither involves any operations that access memory nor assigns to any Solidity variables
in memory is automatically considered memory-safe and does not need to be annotated. in memory is automatically considered memory-safe and does not need to be annotated.
.. warning:: .. warning::
@ -364,9 +364,8 @@ in memory is automatically considered memory-safe and does not need to be annota
an assembly block as memory-safe, but violate one of the memory assumptions, this **will** lead to incorrect and an assembly block as memory-safe, but violate one of the memory assumptions, this **will** lead to incorrect and
undefined behaviour that cannot easily be discovered by testing. undefined behaviour that cannot easily be discovered by testing.
The annotation was introduced in version 0.8.13 and is not supported by older compilers.
In case you are developing a library that is meant to be compatible across multiple versions In case you are developing a library that is meant to be compatible across multiple versions
of Solidity, you can use a special Natspec comment that has the same effect but is ignored in older versions: of Solidity, you can use a special comment to annotate an assembly block as memory-safe:
.. code-block:: solidity .. code-block:: solidity
@ -375,5 +374,5 @@ of Solidity, you can use a special Natspec comment that has the same effect but
... ...
} }
Note that we will disallow the annotation via comment in a future breaking release, so if you are not concerned with Note that we will disallow the annotation via comment in a future breaking release; so, if you are not concerned with
backwards-compatibility with older compiler versions, prefer using the dialect string. backwards-compatibility with older compiler versions, prefer using the dialect string.