<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Ah, fair enough.  I didn't think to study the for-loop that
      closely yet since I haven't really found a need to check its
      code.  Sometimes I feel silly blurting out my ideas like this, but
      at least you stopped me from doing a fool's errand.  Thanks.</p>
    <p>Gareth aka. Kit<br>
    </p>
    <div class="moz-cite-prefix">On 05/06/2019 22:38, Sven Barth via
      fpc-devel wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAFMUeB9SfiWAHTkNDK62D8z3cSQPn=wFrYLrrLWTxmKf7LaB_g@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="auto">
        <div class="gmail_quote" dir="auto">
          <div dir="ltr" class="gmail_attr">J. Gareth Moreton <<a
              href="mailto:gareth@moreton-family.com"
              moz-do-not-send="true">gareth@moreton-family.com</a>>
            schrieb am Mi., 5. Juni 2019, 18:06:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div text="#000000" bgcolor="#FFFFFF">
              <p><br>
              </p>
              <p><tt><b>for </b>X := 0 <b>to </b>Min(BUFFER_SIZE,
                  DataLeft) <b>- 1 do</b></tt><tt><br>
                </tt><b><tt>begin</tt></b><tt><br>
                </tt><tt>  { Do some work that doesn't modify DataLeft }</tt><tt><br>
                </tt><tt><b>end</b>;</tt></p>
              <p>Say that Min is given the <b>pure </b>directive,
                BUFFER_SIZE is a <b>const </b>and DataLeft is a
                property or some non-local variable.  Since no volatile
                intrinsic is used to safeguard multi-threading issues,
                and DataLeft isn't modified by the for-loop, DataLeft
                can be promoted to the stack or a register.  Even though
                its exact value is not known, DataLeft is determined to
                be constant within the confines of the for-loop, hence
                since both arguments in "Min(BUFFER_SIZE, DataLeft)" are
                constants, the result must also be constant, since it's
                a pure function, therefore the function only has to be
                called once and its result be stored on the stack,
                recalled during each iteration of the for-loop.  At
                least that's the theory.  Of course, you can just store
                the result yourself in a local variable and use that as
                part of the for-loop, but it's just a thought where pure
                functions could be used that doesn't involve computing
                their result at compile-time. </p>
            </div>
          </blockquote>
        </div>
        <div dir="auto"><br>
        </div>
        <div dir="auto">With properties or global variables you can't
          guarantee that DataLeft is constant as the for loop might call
          some routine that more or less indirectly might change what
          DataLeft returns. </div>
        <div dir="auto">That said: the end-expression of a for-loop is
          specified to be evaluated only once anyway (in contrast to
          C-like languages). </div>
        <div dir="auto"><br>
        </div>
        <div dir="auto">Regards, </div>
        <div dir="auto">Sven </div>
        <div class="gmail_quote" dir="auto">
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
          </blockquote>
        </div>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
fpc-devel maillist  -  <a class="moz-txt-link-abbreviated" href="mailto:fpc-devel@lists.freepascal.org">fpc-devel@lists.freepascal.org</a>
<a class="moz-txt-link-freetext" href="http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel">http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel</a>
</pre>
    </blockquote>
  <div id="DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2"><br />
<table style="border-top: 1px solid #D3D4DE;">
        <tr>
        <td style="width: 55px; padding-top: 13px;"><a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient" target="_blank"><img src="https://ipmcdn.avast.com/images/icons/icon-envelope-tick-round-orange-animated-no-repeat-v1.gif" alt="" width="46" height="29" style="width: 46px; height: 29px;" /></a></td>
                <td style="width: 470px; padding-top: 12px; color: #41424e; font-size: 13px; font-family: Arial, Helvetica, sans-serif; line-height: 18px;">Virus-free. <a href="https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient" target="_blank" style="color: #4453ea;">www.avast.com</a>
                </td>
        </tr>
</table><a href="#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2" width="1" height="1"> </a></div></body>
</html>