From c70ebfd241cc3dc6d19847d94b11784da1c79cdd Mon Sep 17 00:00:00 2001
From: Alex Beregszaszi <alex@rtfs.hu>
Date: Tue, 11 Jul 2017 18:10:42 +0100
Subject: Document function selectors

---
 docs/abi-spec.rst |  2 ++
 docs/types.rst    | 11 +++++++++++
 2 files changed, 13 insertions(+)

(limited to 'docs')

diff --git a/docs/abi-spec.rst b/docs/abi-spec.rst
index fc1a3adb..3ce7f50c 100644
--- a/docs/abi-spec.rst
+++ b/docs/abi-spec.rst
@@ -17,6 +17,8 @@ We assume the interface functions of a contract are strongly typed, known at com
 
 This specification does not address contracts whose interface is dynamic or otherwise known only at run-time. Should these cases become important they can be adequately handled as facilities built within the Ethereum ecosystem.
 
+.. _abi_function_selector:
+
 Function Selector
 =================
 
diff --git a/docs/types.rst b/docs/types.rst
index 3335655a..5c291f35 100644
--- a/docs/types.rst
+++ b/docs/types.rst
@@ -400,6 +400,17 @@ Note that public functions of the current contract can be used both as an
 internal and as an external function. To use ``f`` as an internal function,
 just use ``f``, if you want to use its external form, use ``this.f``.
 
+Additionally, public (or external) functions also have a special member called ``selector``,
+which returns the :ref:`ABI function selector <abi_function_selector>`::
+
+    pragma solidity ^0.4.0;
+
+    contract Selector {
+      function f() returns (bytes4) {
+        return this.f.selector;
+      }
+    }
+
 Example that shows how to use internal function types::
 
     pragma solidity ^0.4.5;
-- 
cgit v1.2.3