Subject: Re: bug#10616: flush procedure for soft ports isn't called

From: [email-masked] (Ludovic Courtès)
Date: Thu, 08 Mar 2012 14:53:32 +0100

Hello!

Ian Price <[email-masked]> skribis:

>  
> -  if (pt->write_pos > pt->write_buf)
> -    {
> -      /* write the byte. */
> -      scm_call_1 (SCM_SIMPLE_VECTOR_REF (stream, 0),
> -		  SCM_MAKE_CHAR (*pt->write_buf));
> -      pt->write_pos = pt->write_buf;
> -  
> -      /* flush the output.  */
> -      {
> -	SCM f = SCM_SIMPLE_VECTOR_REF (stream, 2);
> +  SCM f = SCM_SIMPLE_VECTOR_REF (stream, 2);
> +
> +  if (scm_is_true (f))
> +    scm_call_0 (f);
>  
> -	if (scm_is_true (f))
> -	  scm_call_0 (f);
> -      }
> -    }
>  }

It’s a bit late to reply (sorry, Ian!), but the reason it took me so
long, is that I wanted to understand the rationale for the ‘if’, and the
implications of dropping it (which I never got around to, as you can
see.  ;-))

Mark: what’s your take on this?  I’m especially concerned with
undesirable side effects in user code.

Thanks,
Ludo’.