Bind variables for use in function-termhint.
Usage:
(hintcontext-bind bindings body)
is logically equivalent to body, and should execute as body with no overhead, but sets up variable bindings that can be used in function-termhint.
The following b* binder form is equivalent:
(b* (((hintcontext-bind bindings)) ...) ...)
The main reason to use this is to allow hints to refer to different stages of a stobj's modifications. For example:
(b* (((hintcontxt-bind ((st0 st)))) (st (update-st-foo x st)) ((hintcontext-bind ((st1 st)))) (st (update-st-bar y st)) ((hintcontext-bind ((st2 st)))) (st (update-st-baz z st)) ((hintcontext :after-updates))) ...)
If a function-termhint gives a hint for the
((st0 st) (st1 (update-st-foo x st)) (st2 (update-st-bar y (update-st-foo x st))) (st (update-st-baz z (update-st-bar y (update-st-foo x st)))))