aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--language/type-definition.rst8
1 files changed, 7 insertions, 1 deletions
diff --git a/language/type-definition.rst b/language/type-definition.rst
index 327fb4d..b596d0a 100644
--- a/language/type-definition.rst
+++ b/language/type-definition.rst
@@ -5,7 +5,8 @@ Defining Types
Crowbar has three different kinds of user-defined types.
-.. crowbar:element:: StructDefinition <- 'struct' identifier '{' VariableDeclaration+ '}'
+.. crowbar:element:: StructDefinition <- NormalStructDefinition / OpaqueStructDefinition
+ NormalStructDefinition <- 'struct' identifier '{' VariableDeclaration+ '}'
A ``struct`` defines a composite type with several members.
@@ -13,6 +14,11 @@ Defining Types
define struct layout in memory
+.. crowbar:element:: OpaqueStructDefinition <- 'opaque' 'struct' identifier ';'
+
+ An *opaque struct* is a struct whose name is part of an API boundary but whose contents are not.
+ Its size is left unspecified, and it can only be used as the target of a pointer.
+
.. crowbar:element:: EnumDefinition <- 'enum' identifier '{' EnumMember (',' EnumMember)* ','? '}'
EnumMember <- identifier ('=' Expression)?