protected override void EmitSetImpl(CodeEmitter ilgen) { FieldInfo fi = GetField(); if(!IsStatic && DeclaringType.IsNonPrimitiveValueType) { CodeEmitterLocal temp = ilgen.DeclareLocal(FieldTypeWrapper.TypeAsSignatureType); ilgen.Emit(OpCodes.Stloc, temp); ilgen.Emit(OpCodes.Unbox, DeclaringType.TypeAsTBD); ilgen.Emit(OpCodes.Ldloc, temp); } if(IsVolatile) { ilgen.Emit(OpCodes.Volatile); } ilgen.Emit(IsStatic ? OpCodes.Stsfld : OpCodes.Stfld, fi); if(IsVolatile) { ilgen.EmitMemoryBarrier(); } }