summaryrefslogtreecommitdiff
path: root/chapter29/docs/29-grammar.ja.md
diff options
context:
space:
mode:
Diffstat (limited to 'chapter29/docs/29-grammar.ja.md')
-rw-r--r--chapter29/docs/29-grammar.ja.md8
1 files changed, 7 insertions, 1 deletions
diff --git a/chapter29/docs/29-grammar.ja.md b/chapter29/docs/29-grammar.ja.md
index 48251d9b..b7794410 100644
--- a/chapter29/docs/29-grammar.ja.md
+++ b/chapter29/docs/29-grammar.ja.md
@@ -41,7 +41,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.