variables and the use of '&' to convert methods into function pointers.
[ ] Conversions: can we say: "type T int; T(3.0)" ?
[ ] Is . import implemented?
+[ ] Do we allow empty statements? If so, do we allow empty statements after a label?
+ and if so, does a label followed by an empty statement (a semicolon) still denote
+ a for loop that is following, and can break L be used inside it?
Decisions in need of integration into the doc:
SimpleStat =
ExpressionStat | IncDecStat | Assignment | SimpleVarDecl .
+
Statements in a statement list are separated by semicolons, which can be
omitted in some cases as expressed by the OptSemicolon production.
-They are optional immediately after a closing parenthesis ")" terminating a
-list of declarations, or a closing brace terminating a type declaration or
-a block. Specifically, they cannot be omitted after the closing brace of a
-composite literal.
- StatementList = Statement { OptSemicolon Statement } [ ";" ] .
+ StatementList = Statement { OptSemicolon Statement } .
+
+A semicolon may be omitted immediately following:
+
+ - a closing parenthesis ")" ending a list of declarations (§Declarations and scope rules)
+ - a closing brace "}" ending a type declaration (§Type declarations)
+ - a closing brace "}" ending a block (including switch and select statements)
+ - a label declaration (§Label declarations)
+
+In all other cases a semicolon is required to separate two statements. Since there
+is an empty statement, a statement list can always be ``terminated'' with a semicolon.
Label declarations