Copyright (C) 1994, Digital Equipment Corp.
by Steve Glassman, Mark Manasse and Greg Nelson
<*PRAGMA LL*>
MODULE Filter;
IMPORT VBT, FilterClass, VBTClass;
PROCEDURE Child(v: T): VBT.T RAISES {} =
BEGIN
RETURN v.ch
END Child;
PROCEDURE Replace(v: T; new: VBT.T): VBT.T =
VAR res := v.ch;
BEGIN
IF new # NIL AND new.parent # NIL THEN Crash() END;
IF new = NIL AND res = NIL THEN RETURN NIL END;
IF new # NIL THEN
IF new.st # v.st THEN VBTClass.Rescreen(new, v.st) END
END;
v.replace(res, new);
VBT.Mark(v);
VBT.NewShape(v);
RETURN res
END Replace;
EXCEPTION FatalError;
PROCEDURE Crash () =
<* FATAL FatalError *>
BEGIN
RAISE FatalError;
END Crash;
BEGIN END Filter.