Ancestry.QueryProcessor.Compile.MethodContext.EmitName C# (CSharp) Method

EmitName() public method

public EmitName ( Parse statement, string components ) : void
statement Parse
components string
return void
        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);
        }