+ if (gh_symbol_p (prop))
+ {
+ if (val != SCM_UNDEFINED)
+ {
+ SCM prev = internal_get_property (prop);
+
+ if (gh_pair_p (prev) || prev == SCM_EOL)
+ {
+ bool ok = type_check_assignment (eltprop, val, ly_symbol2scm ("backend-type?"));
+
+ if (ok)
+ {
+ prev = gh_cons (gh_cons (eltprop, val), prev);
+ internal_set_property (prop, prev);
+ }
+ }
+ else
+ {
+ // warning here.
+ }
+
+ }
+ else
+ {
+ SCM prev = internal_get_property (prop);
+
+ SCM newprops= SCM_EOL ;
+ while (gh_pair_p (prev) && ly_caar (prev) != eltprop)
+ {
+ newprops = gh_cons (ly_car (prev), newprops);
+ prev = ly_cdr (prev);
+ }
+
+ if (gh_pair_p (prev))
+ {
+ newprops = scm_reverse_x (newprops, ly_cdr (prev));
+ internal_set_property (prop, newprops);
+ }
+ }
+ }