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