123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- %
- % SYMBOL-VALUES.RED - ValueCell, UnboundP, MakeUnbound and Set
- %
- % Author: Eric Benson
- % Computer Science Dept.
- % University of Utah
- % Date: 20 August 1981
- % Copyright (c) 1981 Eric Benson
- %
- on SysLisp;
- syslsp procedure UnboundP U; %. Does U not have a value?
- if IDP U then
- if Tag SymVal IDInf U eq Unbound then T else NIL
- else
- NonIDError(U, 'UnboundP);
- syslsp procedure MakeUnbound U; %. Make U an unbound ID
- if IDP U then
- SymVal IDInf U := MkItem(Unbound, IDInf U)
- else
- NonIDError(U, 'MakeUnbound);
- syslsp procedure ValueCell U; %. Safe access to SymVal entry
- begin scalar V; % This guy is called from Eval
- return if IDP U then
- << V := SymVal IDInf U;
- if Tag V eq Unbound then
- ContinuableError('99, BldMsg('"%r is an unbound ID", U), U)
- else V >>
- else
- NonIDError(U, 'ValueCell);
- end;
- % This version of SET differs from the Standard Lisp report in that Exp is
- % not declared fluid, in order to maintain compatibility between compiled
- % and interpreted code.
- syslsp procedure Set(Exp, Val); %. Assign Val to ID Exp
- if IDP Exp then
- if not (null Exp or Exp eq 'T) then
- << SymVal IDInf Exp := Val;
- Val >>
- else StdError '"T and NIL cannot be SET"
- else NonIDError(Exp, 'Set);
- off SysLisp;
- END;
|