according to the spec, a op= b; is semantically equivalent to a = a op b; but this doesn't seem to be strictly true. for example: char c = 'a'; real r = 3.14; c = c + r; // error c += r; // accepted; seems to be doing c += floor(r); is this behavior intentional?