aboutsummaryrefslogtreecommitdiff
path: root/language/type-definition.rst
diff options
context:
space:
mode:
authorMelody Horn <melody@boringcactus.com>2020-10-31 21:59:00 -0600
committerMelody Horn <melody@boringcactus.com>2020-10-31 21:59:00 -0600
commit5af481d62df80d8be3f5835042d30372ef9cbe04 (patch)
tree6d995adefedd90fd3db269f898a527313a37af10 /language/type-definition.rst
parentc916253f17b329550250549ea0aef4b67ced026f (diff)
downloadspec-5af481d62df80d8be3f5835042d30372ef9cbe04.tar.gz
spec-5af481d62df80d8be3f5835042d30372ef9cbe04.zip
define and annotate some language elements
Diffstat (limited to 'language/type-definition.rst')
-rw-r--r--language/type-definition.rst23
1 files changed, 23 insertions, 0 deletions
diff --git a/language/type-definition.rst b/language/type-definition.rst
new file mode 100644
index 0000000..02616b8
--- /dev/null
+++ b/language/type-definition.rst
@@ -0,0 +1,23 @@
+Defining Types
+--------------
+
+.. crowbar:element:: TypeDefinition <- StructDefinition / EnumDefinition / UnionDefinition
+
+ Crowbar has three different kinds of user-defined types.
+
+.. crowbar:element:: StructDefinition <- 'struct' identifier '{' VariableDeclaration+ '}' ';'
+
+ A ``struct`` defines a composite type with several members.
+
+ .. todo::
+
+ define struct layout in memory
+
+.. crowbar:element:: EnumDefinition <- 'enum' identifier '{' EnumMember (',' EnumMember)* ','? '}' ';'
+ EnumMember <- identifier ('=' Expression)?
+
+ An ``enum`` defines a type which can take one of several specified values.
+
+ .. todo::
+
+ define enum value assignment, type-related behavior