allow a reference to state in raw Lisp
Major Section:  ACL2-BUILT-INS

The macro with-live-state is an advanced feature that very few users will need (basically, only system hackers). Indeed, it is untouchable; see remove-untouchable for how to enable calling with-live-state in the ACL2 loop.

Example Form:
(with-live-state (assign y 3))

General form:
(with-live-state form)
where form is an arbitrary form with a free reference to the variable state.

Logically, (with-live-state FORM) macroexpands to FORM. However, in raw Lisp it expands to:

(let ((state *the-live-state*))

If a form that mentions the variable state might be executed in raw Lisp -- that is, either outside the ACL2 loop or in raw mode (see set-raw-mode) -- then the surrounding the form with with-live-state as shown above can avoid potential warnings or (much less likely) errors. Note however that if state is lexically bound to a state other than the usual ``live'' state, surprising behavior may occur when evaluating a call of with-live-state in raw Lisp or raw mode (either directly by evaluation or at compile time), because with-live-state will override that lexical binding of state by a lexical binding of state to the usual ``live'' state.