[Oberon] Module finalization in PO2013
andreas_pirklbauer at yahoo.com
Wed Dec 30 08:08:02 CET 2020
Just a small note of caution on Modules.SetClose(command): The solution
*wouldn’t* work if Modules.SetClose was used in module *Oberon* itself.
Reason: This has to do with the Oberon boot process: There, the call to Load(“Oberon”)
in the initialization sequence of module Modules actually never (!) terminates. So we always
have Modules.curmod = “Oberon” once the system is running. Only when a new module
M is loaded is Modules.curmod temporarily set to “M” (before being set back to “Oberon”)
Two cases where this is problematic:
1) Adding a command P to module Oberon, which *calls* Modules.SetClose(somecommand)
-> when the user clicks on Oberon.P, this is NOT caught by Modules.SetClose
2) Adding a call Modules.SetClose(externalcommand) to the initialization *body* of Oberon
-> this IS actually caught by Modules.SetClose, but there is no error message
This *could* be solved by a considerably more complex piece of code in Modules.SetClose.
But it was decided *not* to solve this one issue, because module Oberon is *known*
to have no module finalizers *and* it also wouldn’t make sense to add one (the module
is never unloaded).
> Andreas: wonderful! Thank you very much!
> From: Oberon [oberon-bounces at lists.inf.ethz.ch] on behalf of Andreas Pirklbauer [andreas_pirklbauer at yahoo.com]
> Sent: Tuesday, December 29, 2020 6:44 PM
> To: Oberon List
> Subject: [EXT] [Oberon] Module finalization in PO2013
> A simple module finalization mechanism that does NOT require a change in the
> Oberon-07 language (i.e. no CLOSE as as Component Pascal) is available at
More information about the Oberon