Boo.Lang.Compiler.Steps.EmitAssembly.SetField C# (CSharp) Метод

SetField() приватный Метод

private SetField ( Node sourceNode, IField field, Expression reference, Expression value, bool leaveValueOnStack ) : void
sourceNode Node
field IField
reference Expression
value Expression
leaveValueOnStack bool
Результат void
        void SetField(Node sourceNode, IField field, Expression reference, Expression value, bool leaveValueOnStack)
        {
            OpCode opSetField = OpCodes.Stsfld;
            if (!field.IsStatic)
            {
                opSetField = OpCodes.Stfld;
                if (null != reference)
                {
                    LoadMemberTarget(
                        ((MemberReferenceExpression)reference).Target,
                        field);
                }
            }

            LoadExpressionWithType(field.Type, value);

            LocalBuilder local = null;
            if (leaveValueOnStack)
            {
                Dup();
                local = _il.DeclareLocal(GetSystemType(field.Type));
                _il.Emit(OpCodes.Stloc, local);
            }

            if (field.IsVolatile)
                _il.Emit(OpCodes.Volatile);
            _il.Emit(opSetField, GetFieldInfo(field));

            if (leaveValueOnStack)
            {
                _il.Emit(OpCodes.Ldloc, local);
                PushType(field.Type);
            }
        }
EmitAssembly