private ExprParamPair GenDefValue(DefineValue ph, Expression prev, ParamList defined, ParamList overlapCandidate)
            {
                Contract.Requires <ArgumentNullException>(ph != null);
                if (ph.Value == null && prev == null)
                {
                    throw Error("値が指定されていません。", ph.Range.Start);
                }
                if (ph.Value != null && prev != null)
                {
                    throw Error("値が二重に指定されています。", ph.Range.Start);
                }
                ParameterExpression variable =
                    ParamList.Search(overlapCandidate, p => p.Name == ph.Name) ??
                    Expression.Parameter(typeof(object), ph.Name);
                var value  = prev ?? ElemGen.GenElem(ph.Value);
                var assign = Expression.Assign(variable, value);

                defined = new ParamList(variable, defined);
                return(new ExprParamPair(assign, defined));
            }
 private ExprParamPair GenDefValue(DefineValue ph, Expression prev, ParamList defined, ParamList overlapCandidate)
 {
     Contract.Requires<ArgumentNullException>(ph != null);
     if (ph.Value == null && prev == null)
         throw Error("値が指定されていません。", ph.Range.Start);
     if (ph.Value != null && prev != null)
         throw Error("値が二重に指定されています。", ph.Range.Start);
     ParameterExpression variable =
         ParamList.Search(overlapCandidate, p => p.Name == ph.Name) ??
         Expression.Parameter(typeof(object), ph.Name);
     var value = prev ?? ElemGen.GenElem(ph.Value);
     var assign = Expression.Assign(variable, value);
     defined = new ParamList(variable, defined);
     return new ExprParamPair(assign, defined);
 }