+#define del_property(x) internal_del_property (ly_symbol2scm (x))
+
+#ifndef NDEBUG
+/*
+ TODO: include modification callback support here, perhaps
+ through intermediate Grob::instrumented_set_property( .. __LINE__ ).
+ */
+#define set_property(x, y) instrumented_set_property (ly_symbol2scm (x), y, __FILE__, __LINE__, __FUNCTION__)
+#else
+#define set_property(x, y) internal_set_property (ly_symbol2scm (x), y)
+#endif
+
+
+
+#define LY_ASSERT_TYPE(pred, var, number) \
+ { \
+ if (!pred (var)) \
+ { \
+ scm_wrong_type_arg_msg(mangle_cxx_identifier (__FUNCTION__).c_str(), \
+ number, var, \
+ predicate_to_typename ((void*) &pred).c_str()); \
+ } \
+ }
+
+#define LY_ASSERT_SMOB(klass, var, number) LY_ASSERT_TYPE(klass::unsmob, var, number)
+
+