mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Fix new Solidity warnings, for #3379
This commit is contained in:
parent
bd3692f1e6
commit
b517ebb8bc
@ -54,7 +54,7 @@ idea is that assembly libraries will be used to enhance the language in such way
|
|||||||
pragma solidity ^0.4.0;
|
pragma solidity ^0.4.0;
|
||||||
|
|
||||||
library GetCode {
|
library GetCode {
|
||||||
function at(address _addr) public returns (bytes o_code) {
|
function at(address _addr) public view returns (bytes o_code) {
|
||||||
assembly {
|
assembly {
|
||||||
// retrieve the size of the code, this needs assembly
|
// retrieve the size of the code, this needs assembly
|
||||||
let size := extcodesize(_addr)
|
let size := extcodesize(_addr)
|
||||||
@ -78,12 +78,12 @@ you really know what you are doing.
|
|||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
pragma solidity ^0.4.12;
|
pragma solidity ^0.4.16;
|
||||||
|
|
||||||
library VectorSum {
|
library VectorSum {
|
||||||
// This function is less efficient because the optimizer currently fails to
|
// This function is less efficient because the optimizer currently fails to
|
||||||
// remove the bounds checks in array access.
|
// remove the bounds checks in array access.
|
||||||
function sumSolidity(uint[] _data) public returns (uint o_sum) {
|
function sumSolidity(uint[] _data) public view returns (uint o_sum) {
|
||||||
for (uint i = 0; i < _data.length; ++i)
|
for (uint i = 0; i < _data.length; ++i)
|
||||||
o_sum += _data[i];
|
o_sum += _data[i];
|
||||||
}
|
}
|
||||||
@ -91,7 +91,7 @@ you really know what you are doing.
|
|||||||
// We know that we only access the array in bounds, so we can avoid the check.
|
// We know that we only access the array in bounds, so we can avoid the check.
|
||||||
// 0x20 needs to be added to an array because the first slot contains the
|
// 0x20 needs to be added to an array because the first slot contains the
|
||||||
// array length.
|
// array length.
|
||||||
function sumAsm(uint[] _data) public returns (uint o_sum) {
|
function sumAsm(uint[] _data) public view returns (uint o_sum) {
|
||||||
for (uint i = 0; i < _data.length; ++i) {
|
for (uint i = 0; i < _data.length; ++i) {
|
||||||
assembly {
|
assembly {
|
||||||
o_sum := add(o_sum, mload(add(add(_data, 0x20), mul(i, 0x20))))
|
o_sum := add(o_sum, mload(add(add(_data, 0x20), mul(i, 0x20))))
|
||||||
@ -100,7 +100,7 @@ you really know what you are doing.
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Same as above, but accomplish the entire code within inline assembly.
|
// Same as above, but accomplish the entire code within inline assembly.
|
||||||
function sumPureAsm(uint[] _data) public returns (uint o_sum) {
|
function sumPureAsm(uint[] _data) public view returns (uint o_sum) {
|
||||||
assembly {
|
assembly {
|
||||||
// Load the length (first 32 bytes)
|
// Load the length (first 32 bytes)
|
||||||
let len := mload(_data)
|
let len := mload(_data)
|
||||||
@ -459,10 +459,10 @@ be just ``0``, but it can also be a complex functional-style expression.
|
|||||||
|
|
||||||
.. code::
|
.. code::
|
||||||
|
|
||||||
pragma solidity ^0.4.0;
|
pragma solidity ^0.4.16;
|
||||||
|
|
||||||
contract C {
|
contract C {
|
||||||
function f(uint x) public returns (uint b) {
|
function f(uint x) public view returns (uint b) {
|
||||||
assembly {
|
assembly {
|
||||||
let v := add(x, 1)
|
let v := add(x, 1)
|
||||||
mstore(0x80, v)
|
mstore(0x80, v)
|
||||||
@ -710,10 +710,10 @@ Example:
|
|||||||
We will follow an example compilation from Solidity to desugared assembly.
|
We will follow an example compilation from Solidity to desugared assembly.
|
||||||
We consider the runtime bytecode of the following Solidity program::
|
We consider the runtime bytecode of the following Solidity program::
|
||||||
|
|
||||||
pragma solidity ^0.4.0;
|
pragma solidity ^0.4.16;
|
||||||
|
|
||||||
contract C {
|
contract C {
|
||||||
function f(uint x) public returns (uint y) {
|
function f(uint x) public pure returns (uint y) {
|
||||||
y = 1;
|
y = 1;
|
||||||
for (uint i = 0; i < x; i++)
|
for (uint i = 0; i < x; i++)
|
||||||
y = 2 * y;
|
y = 2 * y;
|
||||||
|
Loading…
Reference in New Issue
Block a user