This interface reveals those aspects of the BooleanProp module that are related to proxied objects and to interfacing with an embedded language such as Obliq. It should be imported only by modules that implement this embedded language.
INTERFACEProxy Maker (PM) procedures for the various proxied object types are registered by assigning them to these variables.BooleanPropProxy ; IMPORT Prop, ProxiedObj; FROM BooleanProp IMPORT Name, Val, ConstBeh, SyncBeh, AsyncBeh, DepBeh, Request;
VAR NamePM : PROCEDURE (x : Name) := NIL; ValPM : PROCEDURE (x : Val) := NIL; ConstBehPM : PROCEDURE (x : ConstBeh) := NIL; SyncBehPM : PROCEDURE (x : SyncBeh) := NIL; AsyncBehPM : PROCEDURE (x : AsyncBeh) := NIL; DepBehPM : PROCEDURE (x : DepBeh) := NIL; RequestPM : PROCEDURE (x : Request) := NIL;The
AsyncBeh
and DepBeh
types are abstract supertypes; concrete
asynchronous and dependent behaviors are created by overriding the value
method. We want to be able to do this not only from Modula-3, but also from
the embedded language (e.g. Obliq). This is achieved by providing special
proxy types.
The proxy
field of AsyncBeh
and DepBeh
must contain either NIL or
an object of type AsyncBehProxy
or DepBehProxy
.
TYPE AsyncBehProxy = ProxiedObj.Proxy OBJECT METHODS compute (time : LONGREAL) : BOOLEAN RAISES {Prop.BadMethod}; END; DepBehProxy = ProxiedObj.Proxy OBJECT METHODS compute (time : LONGREAL) : BOOLEAN RAISES {Prop.BadMethod}; END; RequestProxy = ProxiedObj.Proxy OBJECT METHODS value (startval : BOOLEAN; reltime : REAL) : BOOLEAN RAISES {Prop.BadMethod}; END; END BooleanPropProxy.