public void EmitName(Parse.Statement statement, string[] components)
{
// var nameVar = new Name();
var nameVar = DeclareLocal(statement, typeof(Name), null);
IL.Emit(OpCodes.Ldloca, nameVar);
IL.Emit(OpCodes.Initobj, typeof(Name));
// <stack> = new string[components.Length];
IL.Emit(OpCodes.Ldloca, nameVar);
IL.Emit(OpCodes.Ldc_I4, components.Length);
IL.Emit(OpCodes.Newarr, typeof(string));
for (int i = 0; i < components.Length; i++)
{
// <stack>[i] = components[i]
IL.Emit(OpCodes.Dup);
IL.Emit(OpCodes.Ldc_I4, i);
IL.Emit(OpCodes.Ldstr, components[i]);
IL.Emit(OpCodes.Stelem_Ref);
}
// nameVar.Components = <stack>
IL.Emit(OpCodes.Stfld, ReflectionUtility.NameComponents);
// return nameVar;
IL.Emit(OpCodes.Ldloc, nameVar);
}