// ===== ===== ===== ===== ===== method ===== ===== ===== ===== =====
 public LambdaExpression Generate(Lambda lambda)
 {
     Contract.Requires<ArgumentNullException>(lambda != null);
     Contract.Ensures(Contract.Result<LambdaExpression>() != null);
     var expr = GenElem(lambda.Element);
     var tmp = Expression.Parameter(expr.Type);
     var body = Expression.Block(
         new[] { tmp },
         StmtGen.DebugInfo(lambda.Range),
         Expression.Assign(tmp, expr),
         StmtGen.ClearInfo(),
         tmp);
     return Expression.Lambda(body, ParamList.ToEnum(_params).Reverse());
 }
 private LambdaExpression GenLambda(Lambda elem)
 {
     Contract.Requires<ArgumentNullException>(elem != null);
     Contract.Ensures(Contract.Result<Expression>() != null);
     return new LambdaGen(this.StmtGen).Generate(elem);
 }