- scm_gc_mark (unpure_pure_container_unpure_part (pure));
- scm_gc_mark (unpure_pure_container_pure_part (pure));
- return pure;
+ scm_gc_mark (SCM_SMOB_OBJECT (smob));
+ return SCM_SMOB_OBJECT_2 (smob);
+}
+
+// Function signature has two fixed arguments so that dropping two
+// will always work: if we have fewer to start with, it will trigger
+// wrong-number-of-args in a sensible location rather than making
+// drop-right barf.
+
+SCM
+apply_unpure_pure (SCM clo, SCM arg1, SCM arg2, SCM rest)
+{
+ return scm_apply_0 (SCM_SMOB_OBJECT (clo),
+ scm_call_2 (ly_lily_module_constant ("drop-right"),
+ scm_cons2 (arg1, arg2, rest),
+ scm_from_int (2)));