Download as a PDF

Transcript
INTERFACE RefStack;
TYPE
T <: Public;
Public = OBJECT
push(r: REFANY);
pop(): REFANY;
END;
END RefStack.
MODULE RefStack;
REVEAL
T = Public BRANDED OBJECT
elems: ARRAY [0..99] OF REFANY;
sp: INTEGER := 0;
OVERRIDES
push := Push;
pop := Pop;
END;
PROCEDURE Push(self: T; elem: REFANY) =
BEGIN
self.elems[self.sp] := elem; INC(self.sp);
END Push;
PROCEDURE Pop(self: T): REFANY =
BEGIN
DEC(self.sp); RETURN self.elems[self.sp];
END Pop;
BEGIN END RefStack.
Figure 1: References hidden by abstraction.