src/c-types-impl.lisp, src/c-types-parse.lisp: Support C11 `_Alignas'.
[sod] / src / sod-module.5
index 5de8432..1837524 100644 (file)
@@ -480,7 +480,7 @@ any character other than newline
 .B code
 .I identifier
 .B
-.I identifier
+.I item-name
 .RI [ constraints ]
 .B {
 .I c-fragment
@@ -494,7 +494,15 @@ any character other than newline
 .br
 .I constraint
 ::=
+.IR item-name \*+
+.br
+.I item-name
+::=
+.I identifier
+|
+.B (
 .IR identifier \*+
+.B )
 .
 .SS Class definitions
 .I
@@ -520,9 +528,14 @@ class-definition
 .IR list [ identifier ]
 .<
 .B {
-.IR class-item \**
+.IR properties-class-item \**
 .B }
 .br
+.I properties-class-item
+::=
+.RI [ properties ]
+.I class-item
+.br
 .I class-item
 ::=
 .I slot-item
@@ -536,7 +549,6 @@ class-definition
 .I slot-item
 ::=
 .<
-.RI [ properties ]
 .IR declaration-specifier \*+
 .IR list [ init-declarator ]
 .B ;
@@ -549,7 +561,6 @@ class-definition
 .br
 .I initializer-item
 ::=
-.RI [ properties ]
 .RB [ class ]
 .IR list [ slot-initializer ]
 .B ;
@@ -570,19 +581,16 @@ class-definition
 .br
 .I message-item
 ::=
-.RI [ properties ]
 .<
 .IR declaration-specifier \*+
 .I simple-declarator
-.<
 .RI [ method-body ]
 .br
 .I method-item
-.RI [ properties ]
+::=
 .<
 .IR declaration-specifier \*+
-.I dotted-declarator
-.<
+.IR declarator [ dotted-name ]
 .I method-body
 .br
 .I method-body
@@ -691,24 +699,85 @@ class-definition
 |
 .B unsigned
 .|
+.B bool
+|
+.B _Bool
+.|
+.B imaginary
+|
+.B _Imaginary
+|
+.B complex
+|
+.B _Complex
+.|
 .I qualifier
+.|
+.I storage-specifier
+.|
+.I atomic-type
 .br
 .I qualifier
 ::=
+.I atomic
+|
 .B const
 |
 .B volatile
 |
 .B restrict
 .br
+.I atomic-type
+::=
+.I
+atomic
+.B (
+.IR declaration-specifier \*+
+.I abstract-declarator
+.B )
+.br
+.I atomic
+::=
+.B atomic
+|
+.B _Atomic
+.br
+.I storage-specifier
+::=
+.I alignas
+.B (
+.I c-fragment
+.B )
+.br
+.I alignas
+::=
+.B alignas
+|
+.B _Alignas
+.br
 .I type-name
 ::=
 .I identifier
 .PP
+The following
+.IR type-name s
+are defined in the built-in module.
+.hP \*o
+.B va_list
+.hP \*o
+.B size_t
+.hP \*o
+.B ptrdiff_t
+.hP \*o
+.B wchar_t
+.PP
 Declaration specifiers may appear in any order.
 However, not all combinations are permitted.
 A declaration specifier must consist of 
-zero or more qualifiers,
+zero or more
+.IR qualifier s,
+zero or more
+.IR storage-specifier s,
 and one of the following, up to reordering.
 .hP \*o
 .I type-name
@@ -759,6 +828,22 @@ and one of the following, up to reordering.
 .BR float ,
 .BR double ,
 .B long double
+.hP \*o
+.BR "float _Imaginary" ,
+.BR "double _Imaginary" ,
+.B "long double _Imaginary"
+.hP \*o
+.BR "float imaginary" ,
+.BR "double imaginary" ,
+.B "long double imaginary"
+.hP \*o
+.BR "float _Complex" ,
+.BR "double _Complex" ,
+.B "long double _Complex"
+.hP \*o
+.BR "float complex" ,
+.BR "double complex" ,
+.B "long double complex"
 .PP
 .IR declarator [ k ]
 ::=
@@ -805,6 +890,10 @@ and one of the following, up to reordering.
 .IR declaration-specifier \*+
 .I argument-declarator
 .br
+.I abstract-declarator
+::=
+.IR declarator [\*e]
+.br
 .I argument-declarator
 ::=
 .IR declarator [ identifier " | \*e]"
@@ -818,11 +907,7 @@ and one of the following, up to reordering.
 .I identifier
 .B .\&
 .I identifier
-.br
-.I dotted-declarator
-::=
-.IR declarator [ dotted-name ]
-
+.
 .\"--------------------------------------------------------------------------
 .SH SEE ALSO
 .BR sod (1),