#include "translator-group.hh"
#include "warn.hh"
#include "lilypond-key.hh"
+#include "profile.hh"
bool
Context::is_removable () const
{
t->init_ = true;
- scm_gc_unprotect_object (ts);
+ t->unprotect ();
Context_def *td = unsmob_context_def (t->definition_);
/* This cannot move before add_context (), because \override
}
}
-Object_key const *
-Context::get_key () const
-{
- return key_;
-}
Context::Context (Object_key const *key)
{
definition_ = SCM_EOL;
smobify_self ();
- properties_scm_ = (new Scheme_hash_table)->self_scm ();
- scm_gc_unprotect_object (properties_scm_);
+ Scheme_hash_table *tab = new Scheme_hash_table;
+ properties_scm_ = tab->unprotect ();
+
+ /*
+ UGH UGH
+ const correctness.
+ */
if (key_)
- scm_gc_unprotect_object (key_->self_scm ());
+ ((Object_key *)key)->unprotect ();
}
/* TODO: this shares code with find_create_context (). */
String this_id = "";
if (i == path.size () -1)
- {
- this_id = id;
- }
+ this_id = id;
current = current->create_context (path[i],
this_id,
{
if (!use_object_keys)
return 0;
-
+
String now_key = type + "@" + id;
int disambiguation_count = 0;
if (context_counts_.find (now_key) != context_counts_.end ())
- {
- disambiguation_count = context_counts_[now_key];
- }
+ disambiguation_count = context_counts_[now_key];
context_counts_[now_key] = disambiguation_count + 1;
- return new Lilypond_context_key (get_key (),
+ return new Lilypond_context_key (key (),
now_mom (),
type, id,
disambiguation_count);
{
if (!use_object_keys)
return 0;
-
+
int disambiguation_count = 0;
if (grob_counts_.find (name) != grob_counts_.end ())
- {
- disambiguation_count = grob_counts_[name];
- }
+ disambiguation_count = grob_counts_[name];
grob_counts_[name] = disambiguation_count + 1;
- Object_key *k = new Lilypond_grob_key (get_key (),
+ Object_key *k = new Lilypond_grob_key (key (),
now_mom (),
name,
disambiguation_count);
Context::default_child_context_name () const
{
return scm_is_pair (accepts_list_)
- ? scm_car (accepts_list_)
+ ? scm_car (accepts_list_)
: SCM_EOL;
}
Context *
Context::where_defined (SCM sym, SCM *value) const
{
+#ifndef NDEBUG
+ if (profile_property_accesses)
+ note_property_access (&context_property_lookup_table, sym);
+#endif
+
if (properties_dict ()->try_retrieve (sym, value))
- {
- return (Context *)this;
- }
+ return (Context *)this;
return (daddy_context_) ? daddy_context_->where_defined (sym, value) : 0;
}
-SCM context_property_lookup_table;
-LY_DEFINE(ly_context_property_lookup_stats, "ly:context-property-lookup-stats",
- 0,0,0, (),
- "")
-{
- return context_property_lookup_table ? context_property_lookup_table
- : scm_c_make_hash_table (1);
-}
-
-
/*
return SCM_EOL when not found.
*/
{
#ifndef NDEBUG
if (profile_property_accesses)
- {
- extern void note_property_access (SCM *table, SCM sym);
- note_property_access (&context_property_lookup_table, sym);
- }
+ note_property_access (&context_property_lookup_table, sym);
#endif
-
+
SCM val = SCM_EOL;
if (properties_dict ()->try_retrieve (sym, &val))
return val;
Moment
Context::now_mom () const
{
- return daddy_context_->now_mom ();
+ Context const *p = this;
+ while (p->daddy_context_)
+ p = p->daddy_context_;
+
+ return p->now_mom ();
}
int
Context *sc = (Context *) SCM_CELL_WORD_1 (s);
scm_puts ("#<", port);
- scm_puts (classname (sc), port);
+ scm_puts (sc->class_name (), port);
if (Context_def *d = unsmob_context_def (sc->definition_))
{
scm_puts (" ", port);
Context *me = (Context *) SCM_CELL_WORD_1 (sm);
if (me->key_)
scm_gc_mark (me->key_->self_scm ());
-
+
scm_gc_mark (me->context_list_);
scm_gc_mark (me->aliases_);
scm_gc_mark (me->definition_);
{
if (!use_object_keys)
return;
-
+
grob_counts_.clear ();
context_counts_.clear ();
for (SCM s = context_list_; scm_is_pair (s); s = scm_cdr (s))
- {
- unsmob_context (scm_car (s))->clear_key_disambiguations ();
- }
+ unsmob_context (scm_car (s))->clear_key_disambiguations ();
}
-
/*
- Ugh. Where to put this?
+ Ugh. Where to put this?
*/
Rational
measure_length (Context const *context)
{
SCM l = context->get_property ("measureLength");
- Rational length (1);
+ Rational length (1);
if (unsmob_moment (l))
length = unsmob_moment (l)->main_part_;
return length;
return m;
}
+
+
+void
+set_context_property_on_children (Context *trans, SCM sym, SCM val)
+{
+ trans->internal_set_property (sym, ly_deep_copy (val));
+ for (SCM p = trans->children_contexts (); scm_is_pair (p); p = scm_cdr (p))
+ {
+ Context *trg = unsmob_context (scm_car (p));
+ set_context_property_on_children (trg, sym, ly_deep_copy (val));
+ }
+}