private void PreProcessFieldInitializer(Field node)
{
Expression initializer = node.Initializer;
if (node.IsFinal && node.IsStatic)
{
if (IsValidLiteralInitializer(initializer))
{
ProcessLiteralField(node);
return;
}
}
BlockExpression closure = node.Initializer as BlockExpression;
if (closure != null)
{
InferClosureSignature(closure);
}
Method method = GetInitializerMethod(node);
InternalMethod entity = (InternalMethod)method.Entity;
ReferenceExpression temp = new ReferenceExpression(TempInitializerName);
BinaryExpression assignment = new BinaryExpression(
node.LexicalInfo,
BinaryOperatorType.Assign,
temp,
initializer);
ProcessNodeInMethodContext(entity, entity, assignment);
method.Locals.RemoveByEntity(temp.Entity);
IType initializerType = GetExpressionType(assignment.Right);
ProcessFieldInitializerType(node, initializerType);
node.Initializer = assignment.Right;
}