Skip to content
  • Andy Wingo's avatar
    with-dynamic-state compiler and VM support · 7184c176
    Andy Wingo authored
    * libguile/dynstack.h (SCM_DYNSTACK_TYPE_DYNAMIC_STATE):
    * libguile/dynstack.c (DYNAMIC_STATE_WORDS, DYNAMIC_STATE_STATE_BOX):
      (scm_dynstack_push_dynamic_state):
      (scm_dynstack_unwind_dynamic_state): New definitions.
      (scm_dynstack_unwind_1, scm_dynstack_wind_1): Add with-dynamic-state
      cases.
    * libguile/memoize.c (push_dynamic_state, pop_dynamic_state)
      (do_push_dynamic_state, do_pop_dynamic_state): New definitions.
      (memoize, scm_init_memoize): Handle push-dynamic-state and
      pop-dynamic-state.
    * libguile/vm-engine.c (push-dynamic-state, pop-dynamic-state): New
      opcodes.
    * module/ice-9/boot-9.scm (with-dynamic-state): New definition in Scheme
      so that the push-dynamic-state and pop-dynamic-state always run in the
      VM.
    * module/language/cps/compile-bytecode.scm (compile-function):
    * module/language/cps/effects-analysis.scm:
    * module/language/cps/types.scm:
    * module/language/tree-il/effects.scm (make-effects-analyzer):
    * module/language/tree-il/peval.scm (peval):
    * module/language/tree-il/primitives.scm (*interesting-primitive-names*):
    * module/system/vm/assembler.scm: Add support for with-dynamic-state to
      the compiler.
    * test-suite/tests/fluids.test ("dynamic states"): Add basic tests.
    * doc/ref/vm.texi (Dynamic Environment Instructions): Update.
    7184c176