The make statement has the form
make "{" [<ivar_inits>] "}" [then <body> end]All make statements have a (possibly empty) ivar_inits section surrounded by curly braces. This section (which is identical to the class constructor expression (7.4)) consists of two parts:
<ivar_inits> -> <field_inits> ";" <maker_invoc> | <field_inits> | <maker_invoc> <field_inits> -> <field_init> ["," <field_init>]* <field_init> -> <idn> ":=" <expr> <maker_invoc> -> <idn> [<actual_parms>] "(" [<args>] ")"
The field_inits part initializes the instance variables of the maker's class (10.4); there must be one field_init for each instance variable. (If the class has no instance variables, field_inits is not used.) The maker_invoc part is used to initialize inherited instance variables. This invocation is present iff the maker's class has a superclass (10.5.3); [tex2html_wrap2954] must name a maker (10.5.2) provided by the superclass (10.5.1).
The make statement has an optional then body end clause that can be used to do additional work after the instance variables have been assigned initial values. Within this clause, the newly created object can be referred to using the variable "self", and the instance variables of the newly-created object can be used directly as variables, as in a method body (10.4).
A make statement is evaluated in three steps; later steps are performed only if earlier steps complete normally (i.e., they do not raise an exception). The steps are:
A make statement cannot appear in the body of another make statement.