- SCM current_alist = scm_car (current_context_val);
- SCM daddy = scm_cdr (current_context_val);
-
- if (!scm_is_pair (grob_property_path)
- || !scm_is_symbol (scm_car (grob_property_path)))
- {
- programming_error ("Grob property path should be list of symbols.");
- return;
- }
-
- SCM symbol = scm_car (grob_property_path);
-
- if (scm_is_pair (scm_cdr (grob_property_path)))
- {
- SCM current_sub_alist = ly_assoc_get (symbol, current_alist, SCM_EOL);
- SCM new_val = nested_property_revert_alist (current_sub_alist, scm_cdr (grob_property_path));
-
- if (scm_is_pair (current_alist)
- && scm_caar (current_alist) == symbol
- && current_alist != daddy)
- current_alist = scm_cdr (current_alist);
-
- current_alist = scm_acons (symbol, new_val, current_alist);
- scm_set_car_x (current_context_val, current_alist);
- }
- else
- {
- SCM new_alist = evict_from_alist (symbol, current_alist, daddy);
-
- if (new_alist == daddy)
- context->unset_property (context_property);
- else
- context->set_property (context_property, scm_cons (new_alist, daddy));
- }