diff options
Diffstat (limited to 'chapter29/docs/29-grammar.md')
| -rw-r--r-- | chapter29/docs/29-grammar.md | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/chapter29/docs/29-grammar.md b/chapter29/docs/29-grammar.md index 58c9b30c..cb231ce0 100644 --- a/chapter29/docs/29-grammar.md +++ b/chapter29/docs/29-grammar.md @@ -47,7 +47,13 @@ structDeclaration : 'struct' IDENTIFIER '{' structMember* '}' ';' ; structMember : constructorDeclaration | methodDeclaration | statement ; // The constructor name must match the enclosing struct's name. -constructorDeclaration : 'new' IDENTIFIER '=' functionExpression ';' ; +constructorDeclaration : 'new' IDENTIFIER '=' constructorExpression ';' ; +constructorExpression : '{' constructorParameterList? '->' statement* '}' ; +constructorParameterList : (constructorParameter ','?)+ ; +constructorParameter : type '^'? bindingModifier? IDENTIFIER ; +// ^ accepts an unfinished struct reference; ? independently permits null. +// Only self may be read while incomplete; ^ arguments may be stored/forwarded. +// A new result is incomplete iff an actual argument is. See construction-groups.md. // A method is an ordinary fixed function binding in a struct definition. // The compiler supplies self; it is not written in parameterList. |
