aboutsummaryrefslogtreecommitdiffstats
path: root/docs/contracts.rst
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2019-01-08 07:07:17 +0800
committerGitHub <noreply@github.com>2019-01-08 07:07:17 +0800
commit8da3aa14ded6fdbeb14822c3fd1524bd597d50df (patch)
treecb12ef3dafd44f8121dab4010fd9cb74c717e402 /docs/contracts.rst
parent28c25efc809f450307115b0addf62debd482ae2e (diff)
parentc9b2e5da8f1218248284b14dc40cfe1c6b96e229 (diff)
downloaddexon-solidity-8da3aa14ded6fdbeb14822c3fd1524bd597d50df.tar.gz
dexon-solidity-8da3aa14ded6fdbeb14822c3fd1524bd597d50df.tar.zst
dexon-solidity-8da3aa14ded6fdbeb14822c3fd1524bd597d50df.zip
Merge pull request #5744 from ethereum/docs-split-func-mod
[DOCS] Split Function modifiers doc into smaller file
Diffstat (limited to 'docs/contracts.rst')
-rw-r--r--docs/contracts.rst112
1 files changed, 1 insertions, 111 deletions
diff --git a/docs/contracts.rst b/docs/contracts.rst
index 2a713ec3..859cd9e9 100644
--- a/docs/contracts.rst
+++ b/docs/contracts.rst
@@ -16,117 +16,7 @@ inaccessible.
.. include:: contracts/visibility-and-getters.rst
-.. index:: ! function;modifier
-
-.. _modifiers:
-
-******************
-Function Modifiers
-******************
-
-Modifiers can be used to easily change the behaviour of functions. For example,
-they can automatically check a condition prior to executing the function. Modifiers are
-inheritable properties of contracts and may be overridden by derived contracts.
-
-::
-
- pragma solidity ^0.5.0;
-
- contract owned {
- constructor() public { owner = msg.sender; }
- address payable owner;
-
- // This contract only defines a modifier but does not use
- // it: it will be used in derived contracts.
- // The function body is inserted where the special symbol
- // `_;` in the definition of a modifier appears.
- // This means that if the owner calls this function, the
- // function is executed and otherwise, an exception is
- // thrown.
- modifier onlyOwner {
- require(
- msg.sender == owner,
- "Only owner can call this function."
- );
- _;
- }
- }
-
- contract mortal is owned {
- // This contract inherits the `onlyOwner` modifier from
- // `owned` and applies it to the `close` function, which
- // causes that calls to `close` only have an effect if
- // they are made by the stored owner.
- function close() public onlyOwner {
- selfdestruct(owner);
- }
- }
-
- contract priced {
- // Modifiers can receive arguments:
- modifier costs(uint price) {
- if (msg.value >= price) {
- _;
- }
- }
- }
-
- contract Register is priced, owned {
- mapping (address => bool) registeredAddresses;
- uint price;
-
- constructor(uint initialPrice) public { price = initialPrice; }
-
- // It is important to also provide the
- // `payable` keyword here, otherwise the function will
- // automatically reject all Ether sent to it.
- function register() public payable costs(price) {
- registeredAddresses[msg.sender] = true;
- }
-
- function changePrice(uint _price) public onlyOwner {
- price = _price;
- }
- }
-
- contract Mutex {
- bool locked;
- modifier noReentrancy() {
- require(
- !locked,
- "Reentrant call."
- );
- locked = true;
- _;
- locked = false;
- }
-
- /// This function is protected by a mutex, which means that
- /// reentrant calls from within `msg.sender.call` cannot call `f` again.
- /// The `return 7` statement assigns 7 to the return value but still
- /// executes the statement `locked = false` in the modifier.
- function f() public noReentrancy returns (uint) {
- (bool success,) = msg.sender.call("");
- require(success);
- return 7;
- }
- }
-
-Multiple modifiers are applied to a function by specifying them in a
-whitespace-separated list and are evaluated in the order presented.
-
-.. warning::
- In an earlier version of Solidity, ``return`` statements in functions
- having modifiers behaved differently.
-
-Explicit returns from a modifier or function body only leave the current
-modifier or function body. Return variables are assigned and
-control flow continues after the "_" in the preceding modifier.
-
-Arbitrary expressions are allowed for modifier arguments and in this context,
-all symbols visible from the function are visible in the modifier. Symbols
-introduced in the modifier are not visible in the function (as they might
-change by overriding).
+.. include:: contracts/function-modifiers.rst
.. include:: contracts/constant-state-variables.rst