% @(#)$Id: Pointer.lsl,v 1.35 1995/12/24 02:51:14 leavens Exp $ % Pointers to single objects (perhaps within an array, but not to arrays) Pointer(Loc, Val): trait includes Array(Loc, Val), PointerWithNull(Loc[Val]), PointerAllocatedAuxFuns(Ptr[Loc[Val]]), PointerAssignedAuxFuns(Ptr[Loc[Val]]), contained_objects(Ptr[Loc[Val]]) assumes TypedObj(Loc, Val) introduces allocated, assigned: Ptr[Loc[Val]], int, State -> Bool isLegal, isValid, nullOrAssigned: Ptr[Loc[Val]], State -> Bool eval: Ptr[Loc[Val]], State -> Arr[Val] objectsInRange: Ptr[Loc[Val]], int, int -> Set[TypeTaggedObject] objectsUpTo: Ptr[Loc[Val]], int -> Set[TypeTaggedObject] asserts \forall p: Ptr[Loc[Val]], i,j,siz: int, st: State allocated(p, i, st) == allocated(p, i) /\ allocated(*(p+i), st); assigned(p, i, st) == allocated(p, i) /\ assigned(*(p+i), st); isLegal(p, st) == isNull(p) \/ allocated(p, st); isValid(p, st) == allocated(p, st); nullOrAssigned(p, st) == isNull(p) \/ assigned(p, st); eval(p,st) == if isValid(p) then eval(p.locs,st) else create(0); contained_objects(p, st) == if ~isValid(p) then {} else contained_objects(p.locs, st); objectsInRange(p, i, j) == if isValid(p) then objectsInRange(p.locs, p.idx + i, p.idx + j) else {}; objectsUpTo(p, siz) == objectsInRange(p, 0, siz-1); implies \forall p: Ptr[Loc[Val]], i:int, st: State assigned(p, st) => allocated(p, st); allocated(p, st) => notNull(p) /\ isLegal(p, st); contained_objects(NULL, st) == {}; size(contained_objects(p, st)) <= (maxIndex(p.locs) + 1); converts allocated: Ptr[Loc[Val]], int, State -> Bool, assigned: Ptr[Loc[Val]], int, State -> Bool, isLegal: Ptr[Loc[Val]], State -> Bool, isValid: Ptr[Loc[Val]], State -> Bool, nullOrAssigned: Ptr[Loc[Val]], State -> Bool, eval: Ptr[Loc[Val]], State -> Arr[Val], contained_objects: Ptr[Loc[Val]], State -> Set[TypeTaggedObject], objectsInRange: Ptr[Loc[Val]], int, int -> Set[TypeTaggedObject], objectsUpTo: Ptr[Loc[Val]], int -> Set[TypeTaggedObject] exempting \forall p: Ptr[Loc[Val]] eval(p,bottom), eval(p,emptyState)
[Index]
HTML generated using lcpp2html.