[Oberon] Conditional compilation using IF const THEN

Chris Burrows chris at cfbsoftware.com
Sat Aug 11 10:09:37 CEST 2018

> -----Original Message-----
> From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of
> Andreas Pirklbauer
> Sent: Saturday, 11 August 2018 5:06 PM
> To: ETH Oberon and related systems
> Subject: [Oberon] Conditional compilation using IF const THEN
>    > I have tried to work out how the authors of ETH-M2 and GPCP
>    > achieved this but have been unsuccessful so far.
> First, note that the ETH Modula-2 compilers has seen multiple re-
> implementations over the years. As hardware with more and more RAM
> became available, the number of passes was reduced.
> That s a topic in and by itself, but only of historic interest.

Yes - I have the historical interest. I've been trying to get hold of a copy of the source of Wirth's single-pass Lilith Modula-2 compiler for the last 10 years! I don't suppose you'd know any squirrels who might have get a copy?
> A. Here is an excerpt of Pass3 of the ETH Modula-2 Multi-Pass
> Compiler in the Lilith implementation Version C18 of 10.02.82:
>     PROCEDURE IfStatement;
>        ...
>     BEGIN (*IfStatement*)
>       jumpList := NIL;
>       LOOP Expression(lat);
>         IF lat.mode=constantMod THEN
>           IF BOOLEAN(lat.value) THEN           (*<-------*)
>             StatSeq3(endsy, elsifsy, elsesy);
>             IF sy<>endsy THEN Skip(endsy, endsy) END;
>             EXIT
>           ELSE Skip(elsesy, elsifsy);
>             IF sy <> elsifsy THEN EXIT END;
>             GetSymbol
>           END

Thanks for tracking that down for me..

> I have no way to check this today (no access to Lilith ;-), but I
> believe* this is what is happening.

You *can* have access to Lilith if you want it. Only a week or so ago I was experimenting with compiling the sources of the MacMeth version of Wirth's single-pass compiler on a Lilith. Well - actually it is a Lilith emulator, an amazing piece of software called EmuLith written by Jos Dreesen (who has a real Lilith):


It is emulating at the microcode level. 

As well as the Emulith software there is a lot of Lilith hardware related material, photos, schematics, disk images that you can download. The software sources include 'microcode.txt', the microcode for  

  M-CODE INTERPRETER                                  .
  BOOTSTRAP/DUMP                                      .
  DISPLAY HANDLING PROCEDURES                         .

and a microcode assembler. Awesome. 

All of this makes it all the more amazing what Wirth & Co achieved at the time when using the real Lilith especially as the hardware was temperamental by all accounts. 

> To replicate that on Project Oberon on RISC you d need to adjust
> ORP.StatSequence accordingly and check the x after Expression(x)
> whether it is a boolean constant.
> a) BOOLEAN converts lat.value
>    (in M2 on Lilith the field  lat  is an attribute and a
>    descriptor of the operand in an expression,
>    in Project Oberon it would correspond to x.a)
> b) The IF BOOLEAN(lat.value) THEN expression
>    then becomes either IF TRUE or IF FALSE
> c) If it is FALSE, then Skip(elsesy, elsifsy) is
>    executed (see above code), i.e. NO code is generated.
> Again, I have no way to check, but I believe that this
> *may* be the way it was done.

Great! Thank you very much!


CFB Software

More information about the Oberon mailing list