<<>> <> <> <> <> <<>> <> <<>> PropList: CEDAR DEFINITIONS ~ BEGIN List: TYPE = REF ListContainer; ListContainer: TYPE; IsPropList: PROC [x: REF] RETURNS [BOOL]; NarrowPropList: PROC [x: REF] RETURNS [List]; NewPropList: PROC [] RETURNS [List]; NewCopy: PROC [list: List ¬ NIL] RETURNS [List]; <> GetProp: PROC [list: List, key: REF] RETURNS [REF]; <> <<>> PutProp: PROC [list: List, key, val: REF] RETURNS [REF]; <> <> <<>> RemProp: PROC [list: List, key: REF] RETURNS [REF]; <> ConditionalPutProp: PROC [list: List, key, expect, new: REF] RETURNS [val: REF, done: BOOL]; <> InitializeProcType: TYPE ~ PROC [data: REF, key: REF] RETURNS [val: REF ¬ $x]; <> GetPropOrInit: PROC [list: List, key: REF, init: InitializeProcType, data: REF ¬ NIL] RETURNS [val: REF, done: BOOL]; <> <> <> EachPropProc: TYPE = PROC [data: REF, key, val: REF] RETURNS [quit: BOOL ¬ FALSE]; <> Enumerate: PROC [list: List, map: EachPropProc, data: REF ¬ NIL] RETURNS [quit: BOOL ¬ FALSE]; <> <> TrustedAddNewProp: PROC [list: List, key, val: REF]; <> <> <<>> NiloutPropList: PROC [list: List]; <> <<>> END.