internal void CreateVariables(ReadOnlyCollectionBuilder<MSAst.ParameterExpression> locals, List<MSAst.Expression> init) {
if (Variables != null) {
foreach (PythonVariable variable in Variables.Values) {
if(variable.Kind != VariableKind.Global) {
ClosureExpression closure = GetVariableExpression(variable) as ClosureExpression;
if (closure != null) {
init.Add(closure.Create());
locals.Add((MSAst.ParameterExpression)closure.ClosureCell);
} else if (variable.Kind == VariableKind.Local) {
locals.Add((MSAst.ParameterExpression)GetVariableExpression(variable));
if (variable.ReadBeforeInitialized) {
init.Add(
AssignValue(
GetVariableExpression(variable),
MSAst.Expression.Field(null, typeof(Uninitialized).GetField("Instance"))
)
);
}
}
}
}
}
if (IsClosure) {
Type tupleType = Parent.GetClosureTupleType();
Debug.Assert(tupleType != null);
init.Add(
MSAst.Expression.Assign(
LocalParentTuple,
MSAst.Expression.Convert(
GetParentClosureTuple(),
tupleType
)
)
);
locals.Add(LocalParentTuple);
}
}