An allocation operation has the form:
NEW(T, ...)where
T
is a reference type other than REFANY
, ADDRESS
,
or NULL
. The operation returns the address of a newly-allocated
variable of T
's referent type; or if T
is an object type, a
newly-allocated data record paired with a method suite. The reference
returned by NEW
is distinct from all existing references. The
allocated type of the new reference is T
.
It is a static error if T
's referent type is empty. If T
is
declared as an opaque type, NEW(T)
is legal only in scopes where
T
's concrete type is known completely, or is known to be an object
type.
The initial state of the referent generally represents an arbitrary value of
its type. If T
is an object type or a reference to a record or open
array then NEW
takes additional arguments to control the initial state
of the new variable.
If T
is a reference to an array with k
open dimensions, the
NEW
operation has the form:
NEW(T, n_1, ..., n_k)where the
n
's are integer-valued expressions that specify the lengths
of the new array in its first k
dimensions. The values in the array
will be arbitrary values of their type.
If T
is an object type or a reference to a record, the NEW
operation has the form:
NEW(T, Bindings)where
Bindings
is a list of keyword bindings used to initialize the new
fields. Positional bindings are not allowed.
Each binding f := v
initializes the field f
to the value
v
. Fields for which no binding is supplied will be initialized to
their defaults if they have defaults; otherwise they will be initialized to
arbitrary values of their types.
The order of the field bindings makes no difference.
If T
is an object type then Bindings
can also include method
overrides of the form m := P
, where m
is a method of T
and P
is a top-level procedure constant. This is syntactic sugar for
the allocation of a subtype of T
that includes the given overrides, in
the given order. For example, NEW(T, m := P)
is sugar for
NEW(T OBJECT OVERRIDES m := P END).
m3-support@elego.de