On 2006-06-07, Akim Demaille <akim(a)lrde.epita.fr> wrote:
>>
"SIGOURE" == SIGOURE Benoit <sigoure.benoit(a)lrde.epita.fr> writes:
DesugarUnaryOps:
- Plus(Int(i)) -> Int(i)
+ Plus(Int(i){a*}) -> Int(i){a*}
If you don't write this, you loose the annotations?
Yes because you're building something new. Remember, this is only sugar and
is desugared to: ?Plus(Int(i)); !Int(i)
How can the compiler guess whether or not the newly built term has some
relevant link with the formerly matched term and thus carry the annotations
around? In many cases the new term will have a different meaning and thus it
doesn't make sense to copy the annotations.
Even worse, what about the annotations of the subterms?
For instance, in the case you quoted, how can the compiler guess that the
Int() located withing the Plus() has some link with the newly built Int?
--
SIGOURE Benoit aka Tsuna
_____
/EPITA\ Promo 2008.CSI Rock & tRoll