Chained numeric assignments
Stone, Joshua I
joshua.i.stone@intel.com
Thu Jun 14 15:49:00 GMT 2007
Mike Mason wrote:
> Should the following chained assignment:
> writes[execname()] = total_io[execname()] += $return
> be equivalent to:
> writes[execname()] += $return total_io[execname()] += $return
Not if we mimic C's operator associativity, which is right-to-left for
assignment operators. So your statement is effectively:
writes[execname()] = ( total_io[execname()] += $return )
Or equivalent to:
total_io[execname()] += $return
writes[execname()] = total_io[execname()]
Also, if you look at the -p1 output, it will show you the explicit
associativity that was parsed. e.g.
$ stap -ue 'probe begin { a = b += c }' -p1
# parse tree dump
# file <input>
probe begin{
(a) = ((b) += (c))
}
> They yield different results in a couple scripts I tried (see below).
> For example, it appears that writes[] gets assigned total_io[] instead
> of += $return.
That's correct. But if you're seeing inconsistent results, please file
a bug and commit a testcase.
Josh
More information about the Systemtap
mailing list