Skip to content
  • Andy Wingo's avatar
    Attempt to mutate residualized literal pair throws exception · 6e573a08
    Andy Wingo authored
    * libguile/validate.h (SCM_VALIDATE_MUTABLE_PAIR):
    * libguile/pairs.h (scm_is_mutable_pair): New internal definitions.
    * libguile/pairs.c (scm_set_car_x, scm_set_cdr_x): Validate mutable
      pairs.
    * libguile/alist.c (scm_assq_set_x, scm_assv_set_x, scm_assoc_set_x):
    * libguile/list.c (scm_reverse_x, scm_list_set_x, scm_list_cdr_set_x):
    * libguile/srcprop.c (scm_make_srcprops):
    * libguile/srfi-1.c (scm_srfi1_append_reverse_x)
      (scm_srfi1_delete_duplicates_x):
    * libguile/symbols.c (scm_symbol_fset_x, scm_symbol_pset_x):
    * libguile/sort.c (scm_merge_list_x): Use scm_set_car_x / scm_set_cdr_x
      instead of the macros, so as to check for mutable pairs.
      (SCM_VALIDATE_MUTABLE_LIST): New internal helper macro.
      (scm_sort_x, scm_stable_sort_x, scm_sort_list_x): Use
      SCM_VALIDATE_MUTABLE_LIST.
    * libguile/vm-engine.c (VM_VALIDATE_MUTABLE_PAIR): New definition.
      (set-car!, set-cdr!): Use VM_VALIDATE_MUTABLE_PAIR.  Fix error message
      for set-cdr!.
    6e573a08