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.