From: David Kastrup Date: Sat, 4 Feb 2017 22:05:25 +0000 (+0100) Subject: Issue 5057/3: Stop SCM/int confusion for property profiling X-Git-Url: https://git.donarmstrong.com/lilypond.git?a=commitdiff_plain;h=bf14e3a7d89454c17f65b291d192d05752afad27;p=lilypond.git Issue 5057/3: Stop SCM/int confusion for property profiling --- diff --git a/lily/include/profile.hh b/lily/include/profile.hh index f0f1a61237..55dcd84646 100644 --- a/lily/include/profile.hh +++ b/lily/include/profile.hh @@ -22,10 +22,12 @@ #include "lily-guile.hh" -void note_property_access (SCM *table, SCM sym); -extern SCM context_property_lookup_table; -extern SCM grob_property_lookup_table; -extern SCM prob_property_lookup_table; +class Protected_scm; + +void note_property_access (Protected_scm *table, SCM sym); +extern Protected_scm context_property_lookup_table; +extern Protected_scm grob_property_lookup_table; +extern Protected_scm prob_property_lookup_table; extern bool profile_property_accesses; #endif /* PROFILE_HH */ diff --git a/lily/profile.cc b/lily/profile.cc index 025bea809b..a109c4bf4f 100644 --- a/lily/profile.cc +++ b/lily/profile.cc @@ -18,12 +18,11 @@ */ #include "profile.hh" +#include "protected-scm.hh" -void note_property_access (SCM *table, SCM sym); - -SCM context_property_lookup_table; -SCM grob_property_lookup_table; -SCM prob_property_lookup_table; +Protected_scm context_property_lookup_table; +Protected_scm grob_property_lookup_table; +Protected_scm prob_property_lookup_table; LY_DEFINE (ly_property_lookup_stats, "ly:property-lookup-stats", 1, 0, 0, (SCM sym), @@ -31,26 +30,26 @@ LY_DEFINE (ly_property_lookup_stats, "ly:property-lookup-stats", " @var{sym}. Choices are @code{prob}, @code{grob}, and" " @code{context}.") { - if (scm_is_eq (sym, ly_symbol2scm ("context"))) - return context_property_lookup_table ? context_property_lookup_table - : scm_c_make_hash_table (1); - if (scm_is_eq (sym, ly_symbol2scm ("prob"))) - return prob_property_lookup_table ? prob_property_lookup_table - : scm_c_make_hash_table (1); - if (scm_is_eq (sym, ly_symbol2scm ("grob"))) - return grob_property_lookup_table ? grob_property_lookup_table - : scm_c_make_hash_table (1); + if (context_property_lookup_table.is_bound () + && scm_is_eq (sym, ly_symbol2scm ("context"))) + return context_property_lookup_table; + if (prob_property_lookup_table.is_bound () + && scm_is_eq (sym, ly_symbol2scm ("prob"))) + return prob_property_lookup_table; + if (grob_property_lookup_table.is_bound () + && scm_is_eq (sym, ly_symbol2scm ("grob"))) + return grob_property_lookup_table; return scm_c_make_hash_table (1); } void -note_property_access (SCM *table, SCM sym) +note_property_access (Protected_scm *table, SCM sym) { /* Statistics: which properties are looked up? */ - if (!*table) - *table = scm_permanent_object (scm_c_make_hash_table (259)); + if (!table->is_bound ()) + *table = scm_c_make_hash_table (259); SCM hashhandle = scm_hashq_get_handle (*table, sym); if (scm_is_false (hashhandle))