[Oberon] Module finalization in PO2013

Andreas Pirklbauer andreas_pirklbauer at yahoo.com
Wed Dec 30 09:34:43 CET 2020

   > This *could* be solved by a considerably more complex piece of code in Modules.SetClose.


Following our earlier exchange:

Actually, a brute force method would be to simply move the call to Oberon.Loop down
to Modules (as on Ceres Oberon) and set curmod := NIL *after* loading module Oberon.

  MODULE Modules;
    VAR loop: Command;
  BEGIN Init; Load("Oberon", M); curmod := NIL; (*so that SetClose would also work in module Oberon*)
    IF res = noerr THEN loop := ThisCommand(M, "Loop"); loop    (*<— Oberon.Loop now called HERE*)
    ELSE LED(res); REPEAT UNTIL FALSE  (*if load fails, e.g. if body of Oberon calls SetClose(externalcmd)*)
  END Modules.

  MODULE Oberon;
    Modules.Load("System", Mod); Mod := NIL    (*<— Loop is no longer called HERE*)
   END Oberon.

That would solve it too. But as stated earlier: Not worth the trouble, since module Oberon is never
unloaded anyway => the solution is good the way it is.


More information about the Oberon mailing list