- SCM_ASSERT_TYPE (ma, a, SCM_ARG1, __FUNCTION__, "moment");
- SCM_ASSERT_TYPE (mb, b, SCM_ARG2, __FUNCTION__, "moment");
- return (*ma / *mb).smobbed_copy ();
+ 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.")
+{
+ LY_ASSERT_SMOB (Moment, mom, 1);
+
+ Moment *ma = unsmob_moment (mom);
+
+ return scm_from_int64 (ma->grace_part_.numerator ());
+}
+
+LY_DEFINE (ly_moment_grace_denominator, "ly:moment-grace-denominator",
+ 1, 0, 0, (SCM mom),
+ "Extract denominator from grace timing.")
+{
+ LY_ASSERT_SMOB (Moment, mom, 1);
+ Moment *ma = unsmob_moment (mom);
+
+ return scm_from_int64 (ma->grace_part_.denominator ());
+}
+
+LY_DEFINE (ly_moment_main, "ly:moment-main",
+ 1, 0, 0, (SCM mom),
+ "Extract main timing as a rational number from @var{mom}.")
+{
+ LY_ASSERT_SMOB (Moment, mom, 1);
+
+ return ly_rational2scm (unsmob_moment (mom)->main_part_);