#include "item.hh"
#include "program-option.hh"
#include "profile.hh"
+#include "simple-closure.hh"
SCM
Grob::get_property_alist_chain (SCM def) const
}
//#define PROFILE_PROPERTY_ACCESSES
-
-/*
- Ugh C&P Coding.
-
- Retrieve property without triggering callback.
- */
SCM
Grob::get_property_data (SCM sym) const
{
Grob::internal_get_property (SCM sym) const
{
SCM val = get_property_data (sym);
- if (ly_is_procedure (val))
+ if (ly_is_procedure (val)
+ || is_simple_closure (val))
{
val = ((Grob*)this)->try_callback (sym, val);
}
#ifndef NDEBUG
#include "protected-scm.hh"
Protected_scm grob_property_callback_stack = SCM_EOL;
-bool debug_property_callbacks = 1;
+bool debug_property_callbacks = 0;
#endif
SCM
if (debug_property_callbacks)
grob_property_callback_stack = scm_acons (sym, proc, grob_property_callback_stack);
#endif
- SCM value = scm_call_1 (proc, self_scm ());
+
+ SCM value = SCM_EOL;
+ if (ly_is_procedure (proc))
+ value = scm_call_1 (proc, self_scm ());
+ else if (is_simple_closure (proc))
+ {
+ value = evaluate_with_simple_closure (self_scm (),
+ simple_closure_expression (proc));
+ }
#ifndef NDEBUG
if (debug_property_callbacks)
grob_property_callback_stack = scm_cdr (grob_property_callback_stack);