+LY_DEFINE (ly_moment_mul, "ly:moment-mul",
+ 2, 0, 0, (SCM a, SCM b),
+ "Multiply two moments.")
+{
+ LY_ASSERT_SMOB (Moment, a, 1);
+ LY_ASSERT_SMOB (Moment, b, 2);
+
+ Moment *ma = unsmob<Moment> (a);
+ Moment *mb = unsmob<Moment> (b);
+ return (*ma * * mb).smobbed_copy ();
+}
+
+LY_DEFINE (ly_moment_div, "ly:moment-div",
+ 2, 0, 0, (SCM a, SCM b),
+ "Divide two moments.")
+{
+ LY_ASSERT_SMOB (Moment, a, 1);
+ LY_ASSERT_SMOB (Moment, b, 2);
+
+ Moment *ma = unsmob<Moment> (a);
+ Moment *mb = unsmob<Moment> (b);
+
+ return (*ma / * mb).smobbed_copy ();
+}
+
+LY_DEFINE (ly_moment_mod, "ly:moment-mod",
+ 2, 0, 0, (SCM a, SCM b),
+ "Modulo of two moments.")
+{
+ LY_ASSERT_SMOB (Moment, a, 1);
+ LY_ASSERT_SMOB (Moment, b, 2);
+
+ Moment *ma = unsmob<Moment> (a);
+ Moment *mb = unsmob<Moment> (b);
+ return (*ma % * mb).smobbed_copy ();
+}
+
+LY_DEFINE (ly_moment_grace, "ly:moment-grace",
+ 1, 0, 0, (SCM mom),
+ "Extract grace timing as a rational number from @var{mom}.")
+{
+ LY_ASSERT_SMOB (Moment, mom, 1);
+
+ return ly_rational2scm (unsmob<Moment> (mom)->grace_part_);
+}
+
+LY_DEFINE (ly_moment_grace_numerator, "ly:moment-grace-numerator",
+ 1, 0, 0, (SCM mom),
+ "Extract numerator from grace timing.")