[Oberon] Newlines and Carriage-Returns

Jörg joerg.straube at iaeth.ch
Mon Jan 7 12:05:53 CET 2019


Chris

Your mentioned change in Texts was originated by me. I pointed out to NW that it is just superfluous code that got cleaned up now.
Has nothing to do with Scan.

Both lines
(a)   WHILE ~S.eot & (ch <= " ") DO .. END;
(b)   WHILE (ch = " ") OR (ch = TAB) OR (ch = CR) DO .. END;
will not hang the system. (b) will not hang due to the fact that ch = 0X if S.eot is TRUE.

(a) has the beauty that it's shorter and will "swallow" the LF as well. But also other characters with ORD() values smaller than space are "swallowed".
(b) is didactically cleaner, as it exactly states what characters are defined as "white spaces" and hence eaten away.

(a) is more kind of "error recovery" until Scan hits something known.
(b) is an explicit list of allowed white spaces.

br
Jörg

Am 07.01.19, 11:37 schrieb "Oberon im Auftrag von Chris Burrows" <oberon-bounces at lists.inf.ethz.ch im Auftrag von chris at cfbsoftware.com>:

    > 
    > On Sat, Jan 5, 2019 at 12:52 PM Andreas Pirklbauer
    > <andreas_pirklbauer at yahoo.com> wrote:
    > 
    > For procedure Texts.Scan it is actually slightly better to use the
    > following code for the WHILE loop instead:
    > 
    >      WHILE ~S.eot & (ch <= " ") DO
    > 
    > Reason: This code will *not* hang the system if an EOT is encountered
    > in the file before any of the characters in the WHILE condition.. for
    > example with a file which consists *just* of an EOT.
    > 
    > This  bug  was already fixed at one point at www.projectoberon.com,
    > but now the old version is back.
    
    I'm not so sure. I recommend you check the other change that was made at the same time. i.e. in Texts.Read before drawing any conclusions:
    
    Before:
    
          IF R.ref.f = TrailerFile THEN R.eot := TRUE END;
          R.org := R.org + R.off; R.off := 0;
          R.ref := R.ref.next; R.org := R.org + R.off; R.off := 0; 
    
    After:
    
          IF R.ref.f = TrailerFile THEN R.eot := TRUE END;
          R.ref := R.ref.next; R.org := R.org + R.off; R.off := 0;
    
    Regards,
    Chris
    
    Chris Burrows
    CFB Software
    http://www.astrobe.com
    
    
    
    --
    Oberon at lists.inf.ethz.ch mailing list for ETH Oberon and related systems
    https://lists.inf.ethz.ch/mailman/listinfo/oberon
    




More information about the Oberon mailing list