diff options
author | Melody Horn <melody@boringcactus.com> | 2020-11-02 12:27:17 -0700 |
---|---|---|
committer | Melody Horn <melody@boringcactus.com> | 2020-11-02 12:27:17 -0700 |
commit | 83e23b6b449112f4a85d09c57e5601faa87856ca (patch) | |
tree | 543e4821f276055a6de591287964f51af42a1306 /language | |
parent | 8b9abf740a41e8feb7db7638ce27f7cecc16d633 (diff) | |
download | spec-83e23b6b449112f4a85d09c57e5601faa87856ca.tar.gz spec-83e23b6b449112f4a85d09c57e5601faa87856ca.zip |
add function declarations
Diffstat (limited to 'language')
-rw-r--r-- | language/functions.rst | 20 | ||||
-rw-r--r-- | language/index.rst | 1 | ||||
-rw-r--r-- | language/scanning.rst | 2 |
3 files changed, 22 insertions, 1 deletions
diff --git a/language/functions.rst b/language/functions.rst new file mode 100644 index 0000000..86d1144 --- /dev/null +++ b/language/functions.rst @@ -0,0 +1,20 @@ +Functions +--------- + +.. crowbar:element:: FunctionDeclaration <- FunctionSignature ';' + + A function declaration defines the return type, name, and arguments of a function without specifying its behavior. + It is generally used as part of an API boundary. + +.. crowbar:element:: FunctionDefinition <- FunctionSignature Block + + A function definition provides the actual behavior of a function, which may have been declared previously or may not. + + .. todo:: + + define function linkage/exportedness + +.. crowbar:element:: FunctionSignature <- Type identifier '(' SignatureArguments? ')' + SignatureArguments <- Type identifier (',' Type identifier)* ','? + + A function signature specifies the return type, name, and arguments of a function. diff --git a/language/index.rst b/language/index.rst index eb2d92c..66492a9 100644 --- a/language/index.rst +++ b/language/index.rst @@ -18,3 +18,4 @@ Syntax elements in this document are given in the form of `parsing expression gr source-file include type-definition + functions diff --git a/language/scanning.rst b/language/scanning.rst index c45e6b8..3ed9bfe 100644 --- a/language/scanning.rst +++ b/language/scanning.rst @@ -14,7 +14,7 @@ Scanning One of the literal words ``bool``, ``break``, ``case``, ``char``, ``const``, ``continue``, ``default``, ``do``, ``double``, ``else``, ``enum``, ``extern``, ``float``, ``for``, ``fragile``, - ``function``, ``if``, :crowbar:ref:`include <IncludeStatement>`, ``int``, ``long``, ``return``, + ``function``, ``if``, :crowbar:ref:`include <IncludeStatement>`, ``int``, ``long``, ``opaque``, ``return``, ``short``, ``signed``, ``sizeof``, ``struct``, ``switch``, ``union``, ``unsigned``, ``void``, or ``while``. |