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); }