The quasiparallel assignment statements are used to indirectly assign values to property variables (Section 7.1, “Property Variables”) via a queue of assignment requests.
QuasiParallel Assignment Statements  


The left hand side of the assignment must be a property variable, or a compiletime error occurs. The type of the right hand side must be assignable to the type of the property variable, or a compiletime error occurs. In addition, some operators have restrictions on the types of their operands.
The operators :+=
,
:=
, :*=
,
and :/=
, are only defined
for numeric types. A statement of the form
p
:=
e
;
is treated as being the
statement p
:+= 
e
;
.
The operators :&=
,
:=
, and :^=
, are only defined
for integral types and boolean
.
The meaning of the quasiparallel assignment operators is similar to their normal counterparts without the colon prefix. Actually, this should be ensured by the implementation of runtime models (Section 3.2, “RunTime Model”), because the semantics of these operators is implemented by runtime models. Namely, the execution of a quasiparallel assignment statement is done as follows:
The current extended state x
(Chapter 4, Extended State of the Virtual Machine)
and the current queue collection c
(Section 3.2.2, “Current Queue Collection”) are determined.
The current property modification queue
q
is determined by the method invocation
c
.getPropertyModificationQueue()
.
If this returns null
, a
NullPointerException
is thrown.
The property variable of the left hand side is evaluated, i. e.,
the corresponding object o
and the
runtime property p
are determined
(Section 7.1, “Property Variables”, Section 16.5, “Bracket Access Expressions”).
This includes that indices of component properties are pushed onto
x
's int
stack.
The right hand side is evaluated, resulting in a value
v
.
The method q
.m
(
o
,
p
, v
)
is invoked. Its name m
is constructed
as follows: Let A
be the type affix
(Section 6.1, “Type Affixes and Type Letters”) of the type of the property, then the
method name is
set
A
for the operator
:=
,
add
A
for the operator
:+=
,
mul
A
for the operator
:*=
,
div
A
for the operator
:/=
,
and
A
for the operator
:&=
,
or
A
for the operator
:=
,
xor
A
for the operator
:^=
.
Note that quasiparallel assignments are statements, while normal assignments are expressions.