internal Ast AddVariables(Ast expression) {
ReadOnlyCollectionBuilder<MSAst.ParameterExpression> locals = new ReadOnlyCollectionBuilder<MSAst.ParameterExpression>();
MSAst.ParameterExpression localContext = null;
if (NeedsLocalContext) {
localContext = _compContext;
locals.Add(_compContext);
}
List<MSAst.Expression> body = new List<MSAst.Expression>();
CreateVariables(locals, body);
if (localContext != null) {
var createLocal = CreateLocalContext(_comprehension.Parent.LocalContext);
body.Add(Ast.Assign(_compContext, createLocal));
body.Add(expression);
} else {
body.Add(expression);
}
return Expression.Block(
locals,
body
);
}
}