+ SCM sub_sym = scm_caar (s);
+ SCM old_val = scm_cdar (s);
+
+ if (sub_sym == wanted_sym)
+ {
+ if (scm_is_pair (scm_cdr (prop_path)))
+ {
+ SCM new_val = nested_property_revert_alist (old_val, scm_cdr (prop_path));
+
+ /* nothing changed: drop newly constructed list. */
+ if (old_val == new_val)
+ return alist;
+
+ *tail = scm_acons (sub_sym, new_val, SCM_EOL);
+ tail = SCM_CDRLOC(*tail);
+ }
+ else
+ {
+ /* old value is dropped. */
+ }
+
+ *tail = scm_cdr (s);
+ return new_list;
+ }
+
+ *tail = scm_acons (sub_sym, old_val, SCM_EOL);
+ tail = SCM_CDRLOC (*tail);