Fix a bug with cross evaluation.

Namely, in the statement a = expr, where a is an immediate and expr is
a lazy expression, there are two cases: either expr can immediately
evaluate into a, or we have to go through a temporary.