aboutsummaryrefslogtreecommitdiffstats
path: root/docs/contracts.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/contracts.rst')
-rw-r--r--docs/contracts.rst50
1 files changed, 32 insertions, 18 deletions
diff --git a/docs/contracts.rst b/docs/contracts.rst
index edc42c3d..9145f016 100644
--- a/docs/contracts.rst
+++ b/docs/contracts.rst
@@ -145,11 +145,11 @@ This means that cyclic creation dependencies are impossible.
.. index:: ! visibility, external, public, private, internal
-.. _visibility-and-accessors:
+.. _visibility-and-getters:
-************************
-Visibility and Accessors
-************************
+**********************
+Visibility and Getters
+**********************
Since Solidity knows two kinds of function calls (internal
ones that do not create an actual EVM call (also called
@@ -173,7 +173,7 @@ and the default is ``internal``.
``public``:
Public functions are part of the contract
interface and can be either called internally or via
- messages. For public state variables, an automatic accessor
+ messages. For public state variables, an automatic getter
function (see below) is generated.
``internal``:
@@ -243,12 +243,12 @@ In the following example, ``D``, can call ``c.getData()`` to retrieve the value
}
}
-.. index:: ! accessor;function, ! function;accessor
+.. index:: ! getter;function, ! function;getter
-Accessor Functions
-==================
+Getter Functions
+================
-The compiler automatically creates accessor functions for
+The compiler automatically creates getter functions for
all **public** state variables. For the contract given below, the compiler will
generate a function called ``data`` that does not take any
arguments and returns a ``uint``, the value of the state
@@ -271,7 +271,7 @@ be done at declaration.
}
}
-The accessor functions have external visibility. If the
+The getter functions have external visibility. If the
symbol is accessed internally (i.e. without ``this.``),
it is evaluated as a state variable and if it is accessed externally
(i.e. with ``this.``), it is evaluated as a function.
@@ -428,8 +428,25 @@ change by overriding).
Constant State Variables
************************
-State variables can be declared as constant (this is not yet implemented
-for array and struct types and not possible for mapping types).
+State variables can be declared as ``constant``. In this case, they have to be
+assigned from an expression which is a constant at compile time. Any expression
+that accesses storage, blockchain data (e.g. ``now``, ``this.balance`` or
+``block.number``) or
+execution data (``msg.gas``) or make calls to external contracts are disallowed. Expressions
+that might have a side-effect on memory allocation are allowed, but those that
+might have a side-effect on other memory objects are not. The built-in functions
+``keccak256``, ``sha256``, ``ripemd160``, ``ecrecover``, ``addmod`` and ``mulmod``
+are allowed (ever though they do call external contracts).
+
+The reason behind allowing side-effects on the memory allocator is that it
+should be possible to construct complex objects like e.g. lookup-tables.
+This feature is not yet fully usable.
+
+The compiler does not reserve a storage slot for these variables and every occurrence is
+replaced by the respective constant expression (which might be computed to a single value by the optimizer).
+
+Not all types for constants are implemented at this time. The only supported types are
+value types and strings.
::
@@ -438,12 +455,9 @@ for array and struct types and not possible for mapping types).
contract C {
uint constant x = 32**22 + 8;
string constant text = "abc";
+ bytes32 constant myHash = keccak256("abc");
}
-This has the effect that the compiler does not reserve a storage slot
-for these variables and every occurrence is replaced by their constant value.
-
-The value expression can only contain integer arithmetics.
******************
Constant Functions
@@ -462,7 +476,7 @@ Functions can be declared constant. These functions promise not to modify the st
}
.. note::
- Accessor methods are marked constant.
+ Getter methods are marked constant.
.. warning::
The compiler does not enforce yet that a constant method is not modifying state.
@@ -882,7 +896,7 @@ Inheriting Different Kinds of Members of the Same Name
When the inheritance results in a contract with a function and a modifier of the same name, it is considered as an error.
This error is produced also by an event and a modifier of the same name, and a function and an event of the same name.
-As an exception, a state variable accessor can override a public function.
+As an exception, a state variable getter can override a public function.
.. index:: ! contract;abstract, ! abstract contract